SlideShare a Scribd company logo
Chainerのテスト環境と
DockerでのCUDAの利利⽤用
(株)Preferred Infrastructure
海野  裕也 (@unnonouno)
⾃自⼰己紹介
海野  裕也
l  -2008 東⼤大情報理理⼯工修⼠士
l  ⾃自然⾔言語処理理
l  2008-2011 ⽇日本アイ・ビー・エム(株)東京基礎研
l  テキストマイニング、⾃自然⾔言語処理理の研究開発
l  2011- (株)プリファードインフラストラクチャー
l  ⾃自然⾔言語処理理、情報検索索、機械学習、テキストマイニングなど
の研究開発
l  研究開発系案件、コンサルティング
l  JubatusやChainerの開発
l  最近は対話処理理
NLP若若⼿手の会共同委員⻑⾧長(2014-)
「オンライン機械学習」(2015, 講談社)2
Chainerキートップ
3
4
初期のChainerが主に依存しているライブラリ
l  OS
l  Ubuntu14.04, CentOS 7
l  Python
l  2.7, 3.4
l  CUDA
l  6.5, 7.0
l  cuDNN
l  v2
5	
2x2x2=8通りの環境
そんなにテストいるの・・・?
l  protobufがPy3で動かない
l  依存してたライブラリがある⽇日突然消えた
l  CUDA 6.5だけ最適化のバグを踏む(キャスト周
り)
l  新しいcuDNNがABIを壊す
l  NumPyのバージョンが上がると挙動が変わる
l  pipやsetuptoolsのバージョンがそれぞれ10個
位ある
l  Python 3.5.0だけGC時のバグを踏む
6
悲痛な叫び
7
⾃自動テストをしよう
8
既存のCIサービスはGPUに⾮非対応
9
よし、Jenkinsを使おう!
10
Jenkinsとは?
l  最もメジャーなオープンソースの継続的インテ
グレーションツール
l  リポジトリを監視して、特定の条件でジョブを
⾃自動実⾏行行してくれる
l  テストを実⾏行行するようにすれば、⾃自動テスト環
境ができる
11
テストと仮想環境
l  8台のマシンを⽤用意せずに、複数の環境を1台の
マシン上でテストしたい
12
Dockerとは?
l  コンテナ型仮想化技術
l  詳細を語れるほど詳しくないのでググって下さい
l  起動が超早い(重要)
l  Dockerfileに環境のセットアップ⽅方法を書いて
おくとキャッシュが効く
l  Dockerfile内に環境のセットアップを書いておく
13
こんな感じ
14
Chainerの⾃自動テスト環境
15	
Githubを監視	
Dockerコンテナ
上でテスト実行
ところで・・・
CUDAのプログラムって
Dockerで動くんですか?
結論論:動きます!
16
Dockerfileの準備
l  .runファイルをダウンロードして解凍
l  中のドライバとCUDAをインストール
RUN ./installers/NVIDIA-Linux-
x86_64-352.39.run -s -N --no-kernel-module
&& ./installers/cuda-linux64-
rel-7.5.18-19867135.run --noprompt
17
問題1: GPUが⾒見見えない
l  ふつうに起動するとGPUがゲストから⾒見見えない
l  --deviceオプションを渡すと⾒見見えるようになる
$ docker run --device /dev/nvidia0 --
device /dev/nvidiactl --device /dev/nvidia-
uvm chainer nvidia-smi
18
問題2: 古いCUDAが動かない
l  ホストとゲストで別バージョンを⼊入れると動かない
l  同じバージョンのドライバを使わないとダメ
l  ホストもゲストもCUDA7.5付属のドライバだけ⼊入れて、
ゲスト側はライブラリだけ別のバージョンを⼊入れる
RUN ./installers/NVIDIA-Linux-
x86_64-352.39.run -s -N --no-kernel-module
RUN ./installers/cuda-linux64-
rel-7.0.28-19326674.run -noprompt
19
問題3: nvidia-uvmが消失する
l  起動直後には  /dev/nvidia-uvm がない
l  経験的に、sampleのdeviceQueryを実⾏行行すると
⽣生成されることが知られている
l  /dev/nvidia-uvmがなかったらdeviceQueryを実
⾏行行するようにスクリプトを書いておく(あとで
もっといい⽅方法があるよ)
20
問題4: ドライババージョンが合わない
l  nvidia-352.63が公開されて、バージョンが上
がっちゃった
l  ホストドライバが新しくなって、バージョンの
不不⼀一致問題が再燃  \(^o^)/
l  ドライバのバージョンを戻せば・・・いいの
か・・・?
21
nvidia-dockerをつかう
l  さすがにしんどいので探したら、NVIDIAがCUDA⽤用の
Dockerラッパーを作っていた
l  https://github.com/NVIDIA/nvidia-docker
22
nvidia-dockerは何をしてくれるのか・・・?
l 今説明したことを全部⾃自動で解決し
てくれるdockerコマンドのラッパー
l 今までの苦労は・・・
23
nvidia-dockerでのドライバ問題
l  ホスト側のドライバ関連ファイルをVolumeで全部ゲス
トから⾒見見えるようにしている(!)
l  ホストの環境に依存せずに使える
24
nvidia-dockerでのnvidia-uvm問題
l  /dev/nvidia-uvmがなかったら、nvidia-
modprobeを実⾏行行している(deviceQueryいらん
かった)
25	
nvidia-docker/tools/src/nvidia/nvidia.go
nvidia-dockerでのCUDA, cuDNNのバージョン
l  CUDA 6.5, 7.0, 7.5
l  cuDNN v2, v3, v4
l  ⾃自分で⽤用意しなくていいのね・・・
26
まとめ
nvidia-docker使いましょう
27
テスト環境のソース類
l  https://github.com/pfnet/chainer-test
l  run_xxx.pyを実⾏行行すると、Dockerfileを⽣生成し
て、docker buildとnvidia-docker runを実⾏行行
l  -iを渡すと、bashが起動してデバッグできる
28
ところで、作ってる間に増えてきた・・・
l  OS
l  Ubuntu 14.04, CentOS 7
l  Python
l  2.7, 3.4, 3.5
l  CUDA
l  6.5, 7.0, 7.5
l  cuDNN
l  v2, v3, v4
l  numpy
l  1.9, 1.10
29	
2x3x3x3x2=108通り
⽬目がシパシパする
30
え、まだ増えるの・・・
l  OS
l  Ubuntu 14.04, CentOS 7, Ubuntu 16.04
l  Python
l  2.7, 3.4, 3.5
l  CUDA
l  6.5, 7.0, 7.5, 8.0
l  cuDNN
l  v2, v3, v4
l  numpy
l  1.9, 1.10, 1.11
l  protobuf
l  2.7, 3.0
31
ご清聴ありがとうございました

More Related Content

Chainerのテスト環境とDockerでのCUDAの利用