古い記事
ランダムジャンプ
新しい記事
手持ちの MacBook でも GPU 使った Deep Learning がやりたい。

MacBook Pro (13-inch, 2017) の GPU は
"Intel Iris Plus Graphics 640 1536 MB"、
無印 MacBook (12-inch, 2017) のは
"Intel HD Graphics 615 1536 MB"。

MacBook Pro (13-inch,2017) GPU

どちらも NVIDIA ではないで CUDA とかダメ。
でも PlaimdML を使えば大丈夫とのことでやってみたら無事動きました。

以下、Python の環境づくりからスタートして、PlaimdML で GPU 設定して、 Keras でのベンチマークまでの流れ。

pyenv


% brew install pyenv

to "~/.zshrc":
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

参考:

Anaconda


pyenv install -l | grep anaconda
pyenv install anaconda3-[最新バージョン]
pyenv global anaconda3-[最新バージョン]

to "~/.zshrc":
export PATH="~/.pyenv/versions/anaconda3-[最新バージョン]/bin:$PATH"

conda create -n plaimd-test
conda activate plaimd-test
conda init zsh

参考:

PlaimdML インストール


% pip install plaidml-keras plaidbench

"plaidml-setup" で CPU, GPU を切り替える (MacBook Pro)。
% plaidml-setup

PlaidML Setup (0.7.0)

Thanks for using PlaidML!

[...]

Default Config Devices:
   llvm_cpu.0 : CPU (via LLVM)
   metal_intel(r)_iris(tm)_plus_graphics_640.0 : Intel(R) Iris(TM) Plus Graphics 640 (Metal)

Experimental Config Devices:
   llvm_cpu.0 : CPU (via LLVM)
   opencl_intel_iris(tm)_plus_graphics_640.0 : Intel Inc. Intel(R) Iris(TM) Plus Graphics 640 (OpenCL)
   metal_intel(r)_iris(tm)_plus_graphics_640.0 : Intel(R) Iris(TM) Plus Graphics 640 (Metal)

Using experimental devices can cause poor performance, crashes, and other nastiness.

Enable experimental device support? (y,n)[n]:y

Multiple devices detected (You can override by setting PLAIDML_DEVICE_IDS).
Please choose a default device:

   1 : llvm_cpu.0
   2 : opencl_intel_iris(tm)_plus_graphics_640.0
   3 : metal_intel(r)_iris(tm)_plus_graphics_640.0

Default device? (1,2,3)[1]:

PlaimdML ベンチマーク


ベンチマーク実行。
% plaidbench keras mobilenet

結果のまとめ (MacBook Pro):
Inference Latency
GPU (metal_intel(r)_iris(tm)_plus_graphics_640.0)20.49 ms
CPU (llvm_cpu.0)120.75ms
[Exprimental] GPU (opencl_intel_iris(tm)_plus_graphics_640.0)19.63 ms

GPUはCPUよりも6倍はやい。

結果のまとめ (無印MacBook):
Inference Latency
GPU (metal_intel(r)_hd_graphics_615.0)30.02 ms
CPU (llvm_cpu.0)167.97 ms
[Exprimental] GPU (opencl_intel_hd_graphics_615.0)30.78 ms

GPUはCPUよりも5〜6倍はやい。

ベンチマーク以外のタスクだとどうなのか気になるところだけど、まあそのうちに。

参考: