{"id":221445,"date":"2020-12-01T21:57:55","date_gmt":"2020-12-01T13:57:55","guid":{"rendered":"http:\/\/4563.org\/?p=221445"},"modified":"2020-12-01T21:57:55","modified_gmt":"2020-12-01T13:57:55","slug":"13-%e5%b9%b4-mbp%ef%bc%8c%e5%a4%96%e6%8e%a5-rx580-%e6%98%be%e5%8d%a1%ef%bc%8c%e8%bf%90%e8%a1%8c-keras-tensorflow-plaidml","status":"publish","type":"post","link":"http:\/\/4563.org\/?p=221445","title":{"rendered":"13 \u5e74 MBP\uff0c\u5916\u63a5 RX580 \u663e\u5361\uff0c\u8fd0\u884c Keras (TensorFlow) + PlaidML"},"content":{"rendered":"<div>\n<div>\n<div>\n<h1>                  13 \u5e74 MBP\uff0c\u5916\u63a5 RX580 \u663e\u5361\uff0c\u8fd0\u884c Keras (TensorFlow) + PlaidML               <\/h1>\n<p> <\/p>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : IgniteWhite <\/span>  <span><i><\/i> 2<\/span> <\/div>\n<div> <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div isfirst=\"1\"> <\/p>\n<h2>MacBook Pro \u914d\u7f6e<\/h2>\n<p>\u4e3b\u529b\u673a\u662f 2013 \u5e74\u521d\u7684 15 \u5bf8 MBP\uff1a<\/p>\n<ul>\n<li>2.7 GHz Intel Core i7<\/li>\n<li>\u4e00\u4ee3\u96f7\u7535\u63a5\u53e3<\/li>\n<li>Intel HD4000 \u96c6\u663e<\/li>\n<li>GT 650m \u72ec\u663e<\/li>\n<li>macOS Mojave 10.14.6<\/li>\n<\/ul>\n<p>\u603b\u4e4b\u662f\u6bd4\u8f83\u8001\u7684\u673a\u5b50\u4e86\u3002\u72ec\u663e\u6027\u80fd\u5dee\uff0c\u4e14\u8fd0\u884c\u65f6\u98ce\u6247\u8f6c\u901f\u9ad8\uff0c\u53d1\u70ed\u4e25\u91cd<\/p>\n<h2>eGPU \u914d\u7f6e<\/h2>\n<ul>\n<li>\u84dd\u5b9d\u77f3 RX 580 8GB<\/li>\n<li>Razer Core X \u663e\u5361\u76d2\u5b50<\/li>\n<li>USB C \u8f6c \u96f7\u7535 1\/2 \u4ee3\u8f6c\u6362\u5668<\/li>\n<li>\u96f7\u7535 1\/2 \u4ee3\u5ef6\u957f\u7ebf<\/li>\n<\/ul>\n<p>\u6211\u7528\u7684\u8fd9\u4e00\u4ee3 MBP \u8fde\u63a5 eGPU \u9700\u8981\u8fd0\u884c\uff1a<\/p>\n<ol>\n<li>purge-wrangler.sh\uff0c\u7528\u6765\u8ba9\u8001\u673a\u5b50\u8fd0\u884c eGPU<\/li>\n<li>purge-nvda.sh\uff0c\u7981\u7528\u72ec\u663e\u5fc5\u8981\u811a\u672c\u4e4b\u4e00<\/li>\n<li>Ubuntu GNU grub.cfg \u9b54\u6539\u7684 boot \u6587\u4ef6\uff0c\u7981\u7528\u72ec\u663e\u5fc5\u8981\u6b65\u9aa4\u4e4b\u4e00<\/li>\n<\/ol>\n<p>\u6559\u7a0b\u8be6\u89c1\u8fd9\u4e2aeGPU.io \u5e16\u5b50<\/p>\n<p>\u8fd9\u4e2a\u914d\u7f6e\u867d\u7136\u628a RX 580 \u7684\u6570\u636e\u4f20\u8f93\u6027\u80fd\u9650\u5236\u5230\u4e86\u4e00\u4ee3\u96f7\u7535\u7684\u6c34\u5e73\uff0c\u53ef\u4ee5\u8bf4\u662f<strong>\u5927\u6253\u6298\u6263<\/strong>\u3002<strong>\u4f46\u662f<\/strong>\u5b8c\u5168\u5e26\u5f97\u52a8 LG 4k60p \u663e\u793a\u5668\uff08\u76f4\u8fde\u663e\u5361\u76d2\u5b50\uff09\u3002<\/p>\n<h2>PlaidML<\/h2>\n<p>\u4f7f\u7528PlaidML\uff0c\u5728 pyenv \u521b\u5efa\u7684 Python 3.8.6 \u865a\u62df\u73af\u5883\u91cc\u5b89\u88c5\uff1a<\/p>\n<ul>\n<li>ipykernel<\/li>\n<li>h5py&lt;3.0.0 (need to enter &#8220;h5py&lt;3.0.0&#8221;) actually 2.10.0. This version is required by tensorflow.<\/li>\n<li>plaidml-keras (only available on PyPI, keras is also included in this package)<\/li>\n<li>plaidbench (only available on PyPI)<\/li>\n<li>tensorflow (just install plaidml-keras is not enough, I have to install this. I installed it after those packages)<\/li>\n<\/ul>\n<p>\u62ec\u53f7\u91cc\u662f\u6211\u4e2a\u4eba wiki \u91cc\u7684\u5185\u5bb9\uff0c\u76f4\u63a5\u642c\u8fc7\u6765\u4e86\u3002<\/p>\n<h2>VGG-19 \u6d4b\u8bd5\u7ed3\u679c<\/h2>\n<p>\u4f7f\u7528 CPU\uff1a<\/p>\n<pre><code>2020-12-05 15:00:42.457154: I tensorflow\/compiler\/xla\/service\/service.cc:168] XLA service 0x7fde5c7c9110 initialized for platform Host (this does not guarantee that XLA will be used). Devices: 2020-12-05 15:00:42.457188: I tensorflow\/compiler\/xla\/service\/service.cc:176]   StreamExecutor device (0): Host, Default Version Running initial batch (compiling tile program) Timing inference... Ran in 35.34518790245056 seconds <\/code><\/pre>\n<p>\u4f7f\u7528 RX580 eGPU\uff1a<\/p>\n<pre><code>Using plaidml.keras.backend backend. INFO:plaidml:Opening device \"metal_amd_radeon_rx_580.0\" Running initial batch (compiling tile program) Timing inference... Ran in 2.5728609561920166 seconds <\/code><\/pre>\n<p>\u6211\u4e0d\u662f\u4e13\u4e1a\u7684\u673a\u5668\u5b66\u4e60\u4ece\u4e1a\u8005\uff0c\u5982\u679c\u5927\u5bb6\u5bf9\u4e0a\u9762\u54ea\u4e00\u73af\u8282\u6709\u5174\u8da3\u8fdb\u4e00\u6b65\u4e86\u89e3\uff0c\u6211\u4f1a\u8be6\u7ec6\u89e3\u91ca\uff5e<\/p>\n<\/p><\/div>\n<div> <b>\u5927\u4f6c\u6709\u8a71\u8aaa<\/b> (<span>11<\/span>)        <\/div>\n<div> <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<ul>\n<li data-pid=\"4469437\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : IgniteWhite <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u5b9e\u9645\u4f7f\u7528\u4e2d\uff0c\u6211\u7528\u4e00\u4e2a\u6811\u8393\u6d3e 4B \u88c5\u4e86 Manjaro ARM \u4f5c\u4e3a\u8f85\u52a9\u7cfb\u7edf\u8fd0\u884c JupyterLab\uff0c\u901a\u8fc7\u4e00\u4e2a\u53eb remote_ikernel \u7684\u5305\uff0c\u5c40\u57df\u7f51\u8bbf\u95ee MBP \u7684 Keras IPython kernel \u3002\u8fd9\u4e2a\u8fdc\u7a0b kernel \u662f\u901a\u8fc7 SSH \u8fde\u63a5\u7684\uff0c\u6240\u4ee5\u80fd\u8fde\u63a5\u5404\u79cd\u673a\u5b50\uff0c\u5305\u62ec\u4e13\u95e8\u8dd1\u673a\u5668\u5b66\u4e60\u7684\u4e91\u670d\u52a1\u3002<\/p>\n<p>\u6811\u8393\u6d3e\u88c5\u4e86\u70ed\u7ba1\u52a0\u98ce\u6247\u6563\u70ed\uff0c\u5916\u63a5\u4e09\u661f SSD \u505a boot+root \u3002\u5b83\u5c31\u653e\u5728\u6211\u7684\u663e\u5361\u76d2\u5b50\u4e0a\uff1a<br \/><img decoding=\"async\" src=\"http:\/\/4563.org\/wp-content\/uploads\/2020\/12\/20201209_5fd088c65eb63.jpg\" rel=\"noreferrer\" alt=\"13 \u5e74 MBP\uff0c\u5916\u63a5 RX580 \u663e\u5361\uff0c\u8fd0\u884c Keras (TensorFlow) + PlaidML\"> <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"4469438\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : IgniteWhite <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u5bf9\u4e86\u8865\u5145\u4e00\u4e2a\u7ec6\u8282\uff1a\u8fd9\u91cc PlaidML \u80fd\u5728 Metal \u6216\u8005 OpenCL \u4e0a\u8dd1\uff0c\u6211\u7528\u7684\u662f Metal \u3002<br \/>\u53e6\u4e00\u4e9b\u8dd1\u5206\u7ed3\u679c\u53c2\u89c1 @YUX \u7684\u5e16\u5b50\uff1a \/t\/660085                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"4469439\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : volvo007 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @IgniteWhite \u8ddf\u7740\u5e16\u5b50\u7684\u5185\u5bb9\u6211\u4e5f\u88c5\u4e86\uff0c\u673a\u5668 13 \u5bf8\u7684\u53ea\u6709\u96c6\u663e\u3002\u8fd9\u91cc\u8bf7\u6559\u4e00\u4e0b\uff0c\u8981\u600e\u4e48\u5207\u6362\u5230\u663e\u5361\u8fd0\u7b97\u4e0a\u9762\uff0c\u63a5\u4e86\u5916\u63a5\u663e\u5361\u4f46\u8fd8\u662f\u8c03\u7528\u7684 cpu \u5728\u8ba1\u7b97\u554a                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"4469440\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : volvo007 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @IgniteWhite \u5514\uff0c\u7a0d\u5fae\u8865\u5145\u4e00\u4e0b\uff0c\u524d\u9762\u7684\u95ee\u9898\u89e3\u51b3\u4e86\uff0c\u518d\u8fd0\u884c\u4e00\u6b21 plaidml-setup\uff0c\u8ba9\u811a\u672c\u8bc6\u522b\u5230 vega \u663e\u5361\u5c31\u53ef\u4ee5\u4e86\u3002\u9009\u62e9 Metal\uff0c\u540e\u9762\u8dd1\u7684\u65f6\u5019\u5c31\u81ea\u52a8\u7528\u663e\u5361\u4e86<\/p>\n<p>\u4e8e\u662f\u8981\u8bf7\u6559\u7684\u95ee\u9898\u5c31\u53d8\u6210\u4e86\u2014\u2014\u80fd\u5426\u901a\u8fc7 py \u4ee3\u7801\u5b9e\u73b0\u9009\u62e9\u7528\u4e8e\u8ba1\u7b97\u7684\u786c\u4ef6\uff08 cpu or gpu \uff09\uff0c\u6bcf\u6b21\u8dd1\u6a21\u578b\u4e4b\u524d\u90fd\u8fd0\u884c\u4e00\u6b21 plaidml-setup \u4e5f\u4e0d\u662f\u4e2a\u4e8b                                                            <\/p><\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"4469441\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : volvo007 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u521a\u521a\u5fd9\u4e86\u70b9\u522b\u7684\uff0c\u540e\u9762\u5728\u624b\u518c\u91cc\u627e\u5230\u76f8\u5173\u8bbe\u7f6e\u4e86\uff1a<br \/>&gt; export PLAIDML_EXPERIMENTAL=1<br \/>&gt; export PLAIDML_DEVICE_IDS=opencl_intel_uhd_graphics_630.0<\/p>\n<p>\u8fd9\u6837\u5728 rc \u6587\u4ef6\u91cc\u8bbe\u7f6e\u4e00\u4e0b\u5c31\u884c\uff0cIDS \u540e\u9762\u8ddf\u7684\u5c31\u662f plaidml-setup \u91cc\u9762\u51fa\u73b0\u7684\u90a3\u4e9b\u8bbe\u5907 ID<\/p>\n<p>\u4e8e\u662f\u53ef\u4ee5\u8003\u8651 rc \u6587\u4ef6\u91cc\u7ed1\u51e0\u4e2a alias\uff0c\u8dd1\u4ee3\u7801\u524d\u5207\u6362\u4e00\u4e0b\u5c31\u597d\u4e86\uff0c\u4f8b\u5982\u6211\u7684\uff1a<\/p>\n<p>alias tfcpu=&#8217;export PLAIDML_EXPERIMENTAL=1 &amp;&amp; export PLAIDML_DEVICE_IDS=llvm_cpu.0&#8242; <\/p>\n<p>alias tfint=&#8217;export PLAIDML_EXPERIMENTAL=1 &amp;&amp; export PLAIDML_DEVICE_IDS=metal_intel(r)_iris(tm)_plus_graphics.0&#8242; <\/p>\n<p>alias tfgpu=&#8217;export PLAIDML_EXPERIMENTAL=1 &amp;&amp; export PLAIDML_DEVICE_IDS=metal_amd_radeon_rx_vega_64.0&#8242; <\/p>\n<p>\u5bf9\u4e8e\u76f8\u540c\u7684 plaidmlbench keras mobilenet \u6d4b\u8bd5\u547d\u4ee4<\/p>\n<p>&#8212;&#8212;&#8211;<br \/>tfcpu \u5c31\u662f\u653e\u5728 cpu \u4e0a\u8dd1\uff0c<br \/>Example finished, elapsed: 2.923s (compile), 99.922s (execution)<\/p>\n<p>tfint \u5219\u653e\u5728\u96c6\u663e\u4e0a\u8dd1<br \/>Example finished, elapsed: 0.401s (compile), 18.213s (execution)<\/p>\n<p>tfgpu \u6fc0\u6d3b gpu \u53bb\u8dd1\uff08 Vega56 \u5237\u7684 Vega64 \u7684 bios \uff09<br \/>Example finished, elapsed: 0.413s (compile), 8.597s (execution)<\/p>\n<p>\u6548\u679c\u8fd8\u4e0d\u9519                                                            <\/p><\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"4469442\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : IgniteWhite <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @volvo007 \u5389\u5bb3\u554a\uff0c\u6211\u8fd8\u6ca1\u770b\u624b\u518c\u54c8\u54c8\uff0c\u611f\u8c22\u5206\u4eab\uff01\u6211\u770b\u5230\u6709\u4eba\u8bf4\u5bf9\u4e8e eGPU\uff0cMetal \u6bd4\u4e0d\u4e0a OpenCL \u5feb\uff0c\u5bf9\u4e8e\u72ec\u663e dGPU\uff0c\u54ea\u4e2a\u597d\u8fd8\u6709\u5f85\u5546\u69b7                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"4469443\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : volvo007 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @IgniteWhite \u5bf9\u6bd4 cpu \u80fd\u6709\u5f88\u5927\u63d0\u5347\u5c31\u5f88\u6ee1\u8db3\u4e86\uff0c\u8fd9\u4e00\u5957\u8f6c\u8bd1 CUDA \u7684\u60f3\u6cd5\u8fd8\u662f\u5f88\u4e0d\u9519\u7684                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"4469444\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : IgniteWhite <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @volvo007 \u6211\u521a\u521a\u7528 OpenCL \u7684 eGPU \u8dd1\u4e86\u4e00\u4e0b vgg19\uff0c\u7528\u4e86 7.6 \u79d2\u2026\u2026\u770b\u6765\u8fd8\u662f Metal \u5feb                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"4469445\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : fx777 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u7ed9\u4e3b\u7684\u6298\u817e\u7cbe\u795e\uff0c\u70b9\u8d5e\u3002                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"4469446\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : BugenZhao <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u4e4b\u524d\u8bd5\u8fc7 plaidml\uff0ckeras \u7684\u4e00\u4e9b\u5b9e\u73b0\u53ef\u80fd\u6709 bug\uff0c\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u7ecf\u5e38\u53d8\u6210 NaN\uff0c\u6362\u7528 cuda \u4e0a\u7684 tensorflow \u5c31\u6ca1\u6709\u95ee\u9898                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"4469447\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : IgniteWhite <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @BugenZhao \u8c22\u8c22\u63d0\u9192                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li>\n","protected":false},"excerpt":{"rendered":"<p>13 \u5e74 MBP\uff0c\u5916\u63a5 RX580&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[],"tags":[],"_links":{"self":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts\/221445"}],"collection":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=221445"}],"version-history":[{"count":0,"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts\/221445\/revisions"}],"wp:attachment":[{"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=221445"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=221445"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=221445"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}