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

298
-1

Published on

2016/03/19にChainer meetup #2で、Chainerのテスト環境をDockerで整備した話を話しました

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
298
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

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

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

×