修行の場

知人が言っていました。これは修行だと。

Mini PC + eGPUで機械学習の環境を構築

ハードウェア

総額12万円くらいだけど、かなり省スペースでいい感じです。

環境構築

  • Ubuntu 18.04をインストール(カーネルバージョン: 4.15.0-43)
  • NVIDIAのドライバをインストール(415.27)
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt install nvidia-driver-415
  • xorg.confを書き換えて、eGPUの利用を許可する
cd /usr/share/X11/xorg.conf.d

# 10-nvidia.confのsectionの中に
# Option "AllowExternalGpus" "true"
# を追加
  • SWAP領域を18GBに増やす (Optional) (背景:16GBしか積んでいないので、一部のDetectionやクラスタリングがメモリ足りずに落ちる。)
  • Cudaのインストール (Cuda10、公式手順に従う) (Optional)
  • Pytorchのインストール(適当にいれず、公式の手順に従う)(Optional)
  • CuDNNのインストール。(Cuda10用を選択。公式の手順に従う。)

  • tensorflowおよびKeras。

    • 現在は下記手順でnightlyビルドを使うといいと思います。2019/1の時点ではcuda10対応のcudnnがcondaになく、cuda10対応のtensorflowもリリースされていないからです。 
conda install tf-nightly-gpu
pip install keras
import tensorflow as tf
from keras.backend.tensorflow_backend import set_session
config = tf.ConfigProto()
config.gpu_options.allow_growth = True  # dynamically grow the memory used on the GPU
config.log_device_placement = True  # to log device placement (on which device the operation ran)
                                    # (nothing gets printed in Jupyter, only if you run it standalone)
sess = tf.Session(config=config)
set_session(sess)  # set this TensorFlow session as the default session for Keras
  • 実際にデータエラーはFailed to get convolution algorithm. This is probably because cuDNN failed to initialize

注意点

上記環境ではWaylandでeGPUに繋いだディスプレイが認識されませんでした。 X11環境では、マルチディスプレイで1台はNUCのHDMI端子、eGPUに一台HDMI端子、一台DVI端子で繋いでいます。 カーネルのバージョンによっては、thunderbolt3に対応していないとのことです。 2019/1月時点ではthunderbolt3に対応したものでした。 CuDNN, Cuda, Tensorflow, Kerasはバージョンの相性が悪いとGPU利用時にエラーが出ることが多いので、 Condaでインストールしたものとシステムにインストールしたものがごっちゃにならないようにするなど、 特に気をつける必要がありそうです。(他の状況でも気をつけるべきですが。)

反省点

  • kerasのmnist_cnnのサンプルを使ってGPUメモリが足りないのが要因でなかいのがわかったのは良かったが、次に環境依存なら、「想定される要因 + エラーメッセージ」で検索すれば、keras or tensorflowのissuesにより少ない手数でたどり着けたはず。
  • SWAP領域が不足して問題が起こっているのは瞬時にわかっていいはずなのに、調査に手数を費やした。