MACのGPU(非Nvidia)で機械学習・ディープラーニングを実現する!PlaidMLを解説

音楽制作で使用するPCといえば、いまでもMACという方多いと思います。
ではそのMACで自動作曲のために機械学習・ディープラーニングにも取り組んでみたい、、、、と考えたとしましょう。
現在ほとんどの機械学習・ディープラーニング環境(対応するフレームワーク)はNvidiaのGPUが一強独占の状態です。
が、現在MACはNvidiaのGPU(より正確にはCUDAというGPUコンピューティング用のプラットフォーム)が使用できないのです、、、
そのためMACでGPU を使用した機械学習・ディープラーニングの実践は難しい状況です。

そこでご紹介したいのが”PlaidML”です。

https://vertexai-plaidml.readthedocs-hosted.com/en/latest/#


PlaidMLはOSやGPUなどの環境に対してオープンな機械学習フレームワークを目指して開発されており、ディープラーニングライブラリーKerasのバックエンドとして稼働します。
そのためKerasで書いたプログラムは、ほぼそのまま実行する事ができるのです。
(残念ながらtensorflow使用のMagentaはまだ使用できませんが、、、、これから期待しましょう)

実践解説

まずはPlaidML用の仮想環境を作成しましょう。
virtual-envでもAnacondaでも良いです。
以下はanacondaでの実行です。


仮想環境作成 

conda create -n plaidml-test

これでPlaidML用の仮想環境作成完了です。

次に仮想環境を有効にします。


仮想環境有効化 

conda activate plaidml-test

有効化されました。

ではPlaidMLをインストールしますが、kerasが必要ですので(まだの方)インストール。


kerasのインストール

conda install keras


それではPlaidMLのインストールです。
pipでないとインストールできませんでしたので注意。
本来anaconda環境でpipの使用はできるだけ避けた方が良いと言われています。
が、筆者の環境では混在させている事が多いです。(pipでしかインストールできないものが多いため)
一応今までのところトラブルはありません。


PlaidMLのインストール

pip install plaidml-keras

Successfully installed …と表示されれば成功


PLaidMLの環境設定

plaidml-setup

以下の様に表示されます。

PlaidML Setup (0.5.0)

Thanks for using PlaidML!

Some Notes:
* Bugs and other issues: https://github.com/plaidml/plaidml
* Questions: https://stackoverflow.com/questions/tagged/plaidml
* Say hello: https://groups.google.com/forum/#!forum/plaidml-dev
* PlaidML is licensed under the GNU AGPLv3

Default Config Devices:
metal_intel_hd_graphics_5000.0 : Intel HD Graphics 5000 (Metal)

Experimental Config Devices: llvm_cpu.0 : CPU (LLVM)
opencl_intel_hd_graphics_5000.0 : Intel HD Graphics 5000 (OpenCL)
opencl_cpu.0 : Intel CPU (OpenCL)
metal_intel_hd_graphics_5000.0 : Intel HD Graphics 5000 (Metal)

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

Enable experimental device support? (y,n)[n]:y
全てのデバイスを使用して良いかと聞かれるので(よければ)yes


デバイスの表示と選択
ちなみに使用したMACは古いMacBook Airです。
MacBook Air Early 2014
GPU Intel HD Graphics 5000 1536 MB


CPUもGPUも全て表示されています。

1 : llvm_cpu.0
2 : opencl_intel_hd_graphics_5000.0
3 : opencl_cpu.0
4 : metal_intel_hd_graphics_5000.0
全てのデバイスを使用して良いかと聞かれるので(よければ)yes

当然GPUを選んでみましょう。
openclよりも速いと言われるmetalを選択します。
(metalとはMACのGPU用APIです)


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

Selected device:
metal_intel_hd_graphics_5000.0


4のmetal_intel_hd_graphics_5000.0を選択しました。


GPUを使用して行列計算の実行

Almost done. Multiplying some matrices…
Tile code:
function (B[X,Z], C[Z,Y]) -> (A) { A[x,y : X,Y] = +(B[x,z] * C[z,y]); }
Whew. That worked.

MACでGPUを使用した行列計算ができました!
これは機械学習・ディープラーニングができるかも!(ちょっと感動)

設定を保存します。
次回以降この設定で使用できます。


Save settings to /Users/user-name/.plaidml? (y,n)[y]:y
Success!


ベンチマークテストの実施
まずはベンチマークテスト用のモジュール、plaidbenchをインストールします。

pip install plaidml-keras plaidbench

ではベンチマークテストの実行です。
plaidbench keras mobilene

以下実行結果です
Running 1024 examples with mobilenet, batch size 1, on backend plaid
INFO:plaidml:Opening device “metal_intel_hd_graphics_5000.0”
Downloading data from https://github.com/fchollet/deep-learning-models/releases/download/v0.6/mobilenet_1_0_224_tf.h5
17227776/17225924 [==============================] – 8s 0us/step Model loaded.
Compiling network… Warming up… Running…
Example finished, elapsed: 3.652s (compile), 27.834s (execution)

keras metal_intel_hd_graphics_5000.0
Network Name : mobilenet
Inference Latency : 27.18 ms
Time / FPS : 27.18 ms / 36.79fps
Correctness: PASS, max_error: 6.074029897717992e-06, max_abs_error: 5.066394805908203e-07, fail_ratio: 0.0


注目は実行時間
27.834s (execution)
CPUだと200~400sくらいのはず。
さすがGPU(この程度のGPUでも)速いです!
Mac ProならAMDのD700x2ですからもっともっと速いはず!

または下図の様な外付けのeGPUの使用もディープラーニング用途で需要が高まるかもしれません。

これでMACでGPUを使用したKerasでの機械学習・ディープラーニングが実践できるはずです!

いかがだったでしょうか?
もちろん、Kerasのみでは、できる事は限られ、まだまだこれからという感じのPlaidMLですが、これからの進化に本当に期待してしまいます。
最初の方で申し上げた通り、tensorflowでMagentaが使用できる様になれば、一気に導入必須となります。
MACのみならず、GPUのメーカーを問わず機械学習・ディープラーニング、そしてAIによる音楽制作が実践できる日も近いかもです!

記事作成日:2019/4/22

コメントを残す

メールアドレスが公開されることはありません。