主力机是 2013 年初的 15 寸 MBP:
总之是比较老的机子了。独显性能差,且运行时风扇转速高,发热严重
我用的这一代 MBP 连接 eGPU 需要运行:
教程详见这个eGPU.io 帖子
这个配置虽然把 RX 580 的数据传输性能限制到了一代雷电的水平,可以说是大打折扣。但是完全带得动 LG 4k60p 显示器(直连显卡盒子)。
使用PlaidML,在 pyenv 创建的 Python 3.8.6 虚拟环境里安装:
括号里是我个人 wiki 里的内容,直接搬过来了。
使用 CPU:
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
使用 RX580 eGPU:
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
我不是专业的机器学习从业者,如果大家对上面哪一环节有兴趣进一步了解,我会详细解释~
1
IgniteWhite OP |
2
IgniteWhite OP |
3
volvo007 2020-12-06 13:30:51 +08:00
@IgniteWhite 跟着帖子的内容我也装了,机器 13 寸的只有集显。这里请教一下,要怎么切换到显卡运算上面,接了外接显卡但还是调用的 cpu 在计算啊
|
4
volvo007 2020-12-06 13:38:58 +08:00
@IgniteWhite 唔,稍微补充一下,前面的问题解决了,再运行一次 plaidml-setup,让脚本识别到 vega 显卡就可以了。选择 Metal,后面跑的时候就自动用显卡了
于是要请教的问题就变成了——能否通过 py 代码实现选择用于计算的硬件( cpu or gpu ),每次跑模型之前都运行一次 plaidml-setup 也不是个事 |
5
volvo007 2020-12-06 15:23:11 +08:00
刚刚忙了点别的,后面在手册里找到相关设置了:
> export PLAIDML_EXPERIMENTAL=1 > export PLAIDML_DEVICE_IDS=opencl_intel_uhd_graphics_630.0 这样在 rc 文件里设置一下就行,IDS 后面跟的就是 plaidml-setup 里面出现的那些设备 ID 于是可以考虑 rc 文件里绑几个 alias,跑代码前切换一下就好了,例如我的: alias tfcpu='export PLAIDML_EXPERIMENTAL=1 && export PLAIDML_DEVICE_IDS=llvm_cpu.0' alias tfint='export PLAIDML_EXPERIMENTAL=1 && export PLAIDML_DEVICE_IDS=metal_intel(r)_iris(tm)_plus_graphics.0' alias tfgpu='export PLAIDML_EXPERIMENTAL=1 && export PLAIDML_DEVICE_IDS=metal_amd_radeon_rx_vega_64.0' 对于相同的 plaidmlbench keras mobilenet 测试命令 -------- tfcpu 就是放在 cpu 上跑, Example finished, elapsed: 2.923s (compile), 99.922s (execution) tfint 则放在集显上跑 Example finished, elapsed: 0.401s (compile), 18.213s (execution) tfgpu 激活 gpu 去跑( Vega56 刷的 Vega64 的 bios ) Example finished, elapsed: 0.413s (compile), 8.597s (execution) 效果还不错 |
6
IgniteWhite OP @volvo007 厉害啊,我还没看手册哈哈,感谢分享!我看到有人说对于 eGPU,Metal 比不上 OpenCL 快,对于独显 dGPU,哪个好还有待商榷
|
7
volvo007 2020-12-06 18:44:38 +08:00
@IgniteWhite 对比 cpu 能有很大提升就很满足了,这一套转译 CUDA 的想法还是很不错的
|
8
IgniteWhite OP @volvo007 我刚刚用 OpenCL 的 eGPU 跑了一下 vgg19,用了 7.6 秒……看来还是 Metal 快
|
9
fx777 2020-12-06 22:18:56 +08:00 1
给楼主的折腾精神,点赞。
|
10
BugenZhao 2020-12-07 03:50:36 +08:00
之前试过 plaidml,keras 的一些实现可能有 bug,训练过程中经常变成 NaN,换用 cuda 上的 tensorflow 就没有问题
|
11
IgniteWhite OP @BugenZhao 谢谢提醒
|