Más contenido relacionado La actualidad más candente (20) Similar a DLLAB Engineer Days:AIチームが履歴やリソース管理で疲弊してたので開発基盤作ってOSS化した話 (20) DLLAB Engineer Days:AIチームが履歴やリソース管理で疲弊してたので開発基盤作ってOSS化した話1. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
AIチームが
履歴やリソース管理で疲弊してたので
開発基盤作ってOSS化した話
日鉄ソリューションズ株式会社
2. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
自己紹介
2
名前:かもっち & もにたーくん
所属:日鉄ソリューションズ
システム研究開発センター
役割:AI開発アシスタント(見習い)
Twitter: @kamonohashi_kqi
3. Copyright ©2019 NS Solutions Corporation. All Rights Reserved. 3
Deep Learningへの弊社の取り組み
工場に蓄積された画像データ、センサーデータを使い
熟練工の力を学習して全工程に展開する
製造業 × Deep Learning
4. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
Deep Learningへの弊社の取り組み
4
顧客現場へのDeep Learningの適用コンサルティング
顧客からデータを受領してモデル開発
問題設計から実機導入、周辺システムの開発までワンストップで提供
20名程度のAIエンジニア
主に製造業向けの画像認識
不良検知・製品検査
TensorFlow/PyTorch
5. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
弊社開発体制
5
Storage
GPU a
GPU a
GPU b
GPU b
GPU c
GPU c
GPU d
GPU d
GPU e
GPU e
GPU f
GPU f
GPU f
GPU f
GPU g
GPU g
GPU g
GPU g
複数チームが複数の
計算リソースを共有
他多数プロジェクト
7. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
Question
7
AIの 開発環境 どうしてますか?
特にDeep Learning
8. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
本日の主題
8
効率的・効果的に
AI開発するために作った
弊社環境を紹介
9. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
アジェンダ
9
1. AI開発の何が辛いのか
2. 作成した弊社開発環境の紹介
3. DEMO
4. 技術的なTIPS集
11. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
AIの開発プロセス
11
GPU
GPU
モデル開発 学習 推論
12. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
AIの開発プロセス
12
GPU
GPU
モデル開発 学習 推論
だけじゃない
15. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
頻繁&複雑な環境設定
15
OS,ライブラリの管理
–繰り返しの度に環境設定
–使うノード全てにインストール
–都度バージョンアップ(ダウン)
–チーム間でのツール競合の対応
使うたびに環境構築の
手間が掛かって大変!
16. Copyright ©2019 NS Solutions Corporation. All Rights Reserved. 16
再現性の担保
学習環境を再構築
どの学習データを利用したか
どのソースコードを利用したか
実験条件は?
手作業でメモしたら
書き忘れも間違いも頻出!
17. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
効率的なリソース共有
17
複数チームでGPUを共有
GPUを効率的に利用したい
– GPUは高価なので余剰を作りたくない
– 利用状況を知りたい
– GPU単位で共有したい
チーム間で公平に利用したい
– 特定のチームに占有されてしまうと困る
使い終わったかどうか
分からない!
特定の一人に
リソースが占有されてしまう!
一つのGPUで十分だが
余りを共有できない!!
AI開発者 AI開発者 AI開発者
19. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
AIの開発プロセス
19
使うたびに環境構築
蓄積され続けるデータの管理
実験の履歴を欠かさず記録
計算リソースの割り当て管理
20. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
AIの開発プロセス
20
使うたびに環境構築
蓄積され続けるデータの管理
実験の履歴を欠かさず記録
雑務
雑務
雑務
計算リソースの割り当て管理
雑務
24. Copyright ©2019 NS Solutions Corporation. All Rights Reserved. 24
世界中のAI開発者へ
OSS公開中!
https://github.com/KAMONOHASHI/kamonohashi
25. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
アーキテクチャ
25
S3 NFS Gateway
Model Source
NFS Storage
System Nodes
Database
PostgreSQL
Cluster Manager
Web Application
GPU Nodes
GPU Job
Minio
User
Browser
CLI
Container
26. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
学習環境をコンテナ化
26
学習環境を容易に
環境をポータブルに
好きなフレームワークを利用可能
(TensorFlow, PyTorch, etc.)
GPU単位でのアロケーション
Ubuntu 16.04
TensorFlow CentOS 7.6
Chainer
Ubuntu 18.04
PyTorch
27. Copyright ©2019 NS Solutions Corporation. All Rights Reserved. 27
学習の入出力をすべて記録
学習環境
python, TensorFlow等
リソース
CPU/メモリ/GPU
GPU
GPU
学習結果
(AI)
大量のデータ
(画像等)
学習モデル
(pythonコード)
実行コマンド
(python train.py)
Storage
モデル開発のすべては
ストレージに自動保存
28. Copyright ©2019 NS Solutions Corporation. All Rights Reserved. 28
リソース割り当ての自動化
開発者はただジョブをKAMONOHASHIに投入するだけ。
Storage A Storage B
ジョブの投入
• 2 GPUs
• 4 CPU
• CUDA 9.0 +
TensorFlow
ジョブの投入
• 4 GPUs
• 8CPU
• CUDA 10.1 +
PyTorch
開発者A 開発者B
Container Container
30. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
UI
30
WebUI と CLI を提供
31. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
UI
31
WebUI と CLI を提供
32. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
実例と実績
32
NSSOL AI開発人材のパフォーマンスを
KAMONOHASHIで最大化した成果
参加チーム数:1,316
日本のチーム内では1位
https://www.kaggle.com/c/quickdraw-doodle-recognition/leaderboard
Kaggle Competitionで世界6位入賞
33. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
KAMONOHASHI Deep Dive
技術的なTIPS集
・学習コンテナのTIPS
・ストレージのTIPS
・運用のTIPS
33
34. Copyright ©2019 NS Solutions Corporation. All Rights Reserved. 34
学習コンテナのTIPS
学習コンテナの構築方法
35. Copyright ©2019 NS Solutions Corporation. All Rights Reserved. 35
学習コンテナの仕様
学習コンテナ
dataset
model
output
GPU Driver
GPUs
CUDA
Framework
36. Copyright ©2019 NS Solutions Corporation. All Rights Reserved. 36
学習コンテナの仕様
学習コンテナ
dataset
model
output
GPU Driver
GPUs
CUDA
Framework
• Device Plugin
• nvidia-docker2
使いたいフレームワークが
入ったコンテナを選択する
Kubernetesでデプロイ
(満杯ならキューイング)
37. Copyright ©2019 NS Solutions Corporation. All Rights Reserved. 37
学習コンテナの仕様
データ管理で登録したファイル
データセット管理で登録したファイル
gitに登録した学習コード
データの格納先を指定
推論
学習コンテナ
dataset
model
output
GPU Driver
GPUs
CUDA
Framework
38. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
学習コンテナのジレンマ
38
データセットとモデルをどうやって配置するか
コンテナが起動したら
自動で配置してほしい
既存のコンテナを
そのまま使わせてほしい
学習コンテナ
dataset
model
output
GPU Driver
GPUs
CUDA
Framework
Storage
?
?
39. Copyright ©2019 NS Solutions Corporation. All Rights Reserved. 39
データセットとモデルをどうやって配置するか
コンテナ内に
エージェント仕込む?
・既存のコンテナを使えない
・更新時にリビルド必要
gitやkqiコマンドを
コンテナのCMDに指定?
・コマンドがないコンテナが
利用不能
apt-getもCMDに指定?
・CentOSどうする?
・apt-get 遅い
NFS領域を
まるごとマウントする?
・対象データがどれか
分からない
40. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
解決方法
40
同時に複数コンテナを起動 → 自由度を保ちつつ、必要な処理を差し込む
学
習
開
始
準備コンテナ
起動
git pull
kqi dataset download
学習コンテナ
起動
input
マウント
出力
マウント
破棄
片付けコンテナ
起動
学習
output
出力
学習コンテナを監視
破棄
片付け&完了通知 破棄
42. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
ストレージのジレンマ
42
• アクセス速度を上げたい
• コンテナが落ちても
途中結果は維持したい
コンテナに
NFSをマウント
Object Storage に
REST API アクセス
• Webシステムと連携させたい
• トレーサビリティを取りたい
43. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
解決方法
43
Minioの導入
NFS Storage
S3 NFS Gateway
Minio
Web Application
GPU Node
NFSマウント
REST API
NFSマウント
45. Copyright ©2019 NS Solutions Corporation. All Rights Reserved. 45
ジョブキューで起きる問題
永遠に
はけない
ジョブキュー
A ジ ョ ブ A ジ ョ ブA ジ ョ ブ
A ジ ョ ブ A ジ ョ ブ A ジ ョ ブ
B ジ ョ ブ
Aが終わるまで
待ち続ける
46. Copyright ©2019 NS Solutions Corporation. All Rights Reserved. 46
ノード割り当て(パーティション)で解決
A ジ ョ ブ A ジ ョ ブ
A ジ ョ ブ A ジ ョ ブ
B ジ ョ ブ
A ジ ョ ブ A ジ ョ ブ
Aにアクセス権がないノードを
設定することで解決
(パーティション管理)
プロジェクトごとに
同時利用リソースの
上限設定も可能
(クォータ管理)
47. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
その他TIPS
47
今日話せなかったTIPS集
コンテナの起動時、K8sのYamlに追加しておくべきおすすめ設定
コンテナへShell接続する方法
数GBのファイルをアップロードするとWebサーバが死ぬ問題
Notebookコンテナを立てっぱなしにする人がいる問題
→展示ブースに遊びに来てください!
一番奥まったスペースにいます
49. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
今後の予定
49
ハイブリッドクラウド化
マルチクラウドも
利用履歴の可視化
これまでのGPU利用率をグラフ表示
50. Copyright ©2019 NS Solutions Corporation. All Rights Reserved. 50
世界中のAI開発者へ
OSS公開中!
https://github.com/KAMONOHASHI/kamonohashi
53. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
今日一番大事なこと
53
https://github.com/KAMONOHASHI/kamonohashi
54. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
今日一番大事なこと
54
スターください!
https://github.com/KAMONOHASHI/kamonohashi
ココ!
56. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
今日二番目に大事なこと
56
https://twitter.com/Kamonohashi_kqi
57. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
今日二番目に大事なこと
57
フォローください!
https://twitter.com/Kamonohashi_kqi
ココ!
58. Copyright ©2019 NS Solutions Corporation. All Rights Reserved. 58
ご清聴ありがとうございました
AI 開発プラットフォーム
KAMONOHASHI
Web: https://kamonohashi.ai Twitter: @kamonohashi_kqi
60. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
商標についての注記
60
– NS Solutions は、日鉄ソリューションズ株式会社の登録商標です
– KAMONOHASHI及びKAMONOHASHI(ロゴ)は、日鉄ソリューションズ株式会社の
登録商標です
– その他本文記載の会社名及び製品名はそれぞれ各社の商標又は登録商標です
62. Copyright ©2019 NS Solutions Corporation. All Rights Reserved. 62
学習コンテナのTIPS
学習コンテナへの接続
63. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
学習コンテナのジレンマ
63
コンテナに接続して対話的に操作するには
コンテナにSSHしたい
既存のコンテナを
そのまま使わせてほしい
学習コンテナ
dataset
model
output
GPU Driver
GPUs
CUDA
Framework
接続
64. Copyright ©2019 NS Solutions Corporation. All Rights Reserved. 64
コンテナに接続して対話的に操作するには
コンテナにSSHする?
コンテナ側に
SSH設定が必要
SSHをコンテナの
CMDで追加?
認証情報を設定できない
ホストからdocker exec?
ホストへのアクセス権を
与えるのはちょっと……
K8sのダッシュボードを
使う?
K8sへのアクセス権を
与えるのはちょっと……
65. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
解決方法
65
K8sのダッシュボードと同じ実装をKAMONOHASHIに追加
コンテナへのShell接続
学習中のジョブの状態をリアルタイムで確認可能
ブラウザ WebSocket WebSocket
WebSocket
サーバ
WebSocket
クライアント
中継
KAMONOHASHI
コンテナ
リクエスト: ls
レスポンス: bin boot dev etc home…
ここはKubernetesの機能
66. Copyright ©2019 NS Solutions Corporation. All Rights Reserved. 66
学習コンテナのTIPS
K8sのyml設定
67. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
K8s ymlでしておくべき設定一覧
67
設定内容 理由
GPUを使わないコンテナには環境変数に
NVIDIA_VISIBLE_DEVICES=noneを設定
これをしないとGPU使わないコンテナに全GPUが
割り当てられる
環境変数に
PYTHONUNBUFFERED=trueを設定
ログがすぐ見れるように、Python出力のバッファリングを
なくす
Limits/Requestsは一致させる どうせ総和はLimitsに合わせる必要があるんだし
QoS Classは”Guaranteed”で固定 不必要なkillを防ぐ(可変にしても常に最大になるだけ)
backoffLimitは0に 落ちるのは大体モデルのエラーかメモリ不足なので
再起動しても同じ結果になる → 現場保存を優先
共有メモリをメモリのEmptyDirで作る PyTorchの共有メモリ食いつぶし対策
68. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
ストレージまわりのその他TIPS
68
Signature Signing Processを採用
Object Storageへは直接アクセスさせてWeb Appサーバの負荷軽減
大容量ファイル送受信のパフォーマンスも改善
オブジェクト単位で期限付きの署名付きURLを発行しセキュリティ担保
ダウンロード用の
ワンタイムURLを要求
ダウンロード
S3 NFS Gateway
Minio
Web Application
69. Copyright ©2019 NS Solutions Corporation. All Rights Reserved. 69
運用のTIPS
コンテナ立てっぱなし問題
70. Copyright ©2019 NS Solutions Corporation. All Rights Reserved. 70
運用のジレンマ
使い終わったNotebookコン
テナを放置する人がいる!
タイムアウトを入れて
自動で消す?
運用でカバー?
まだ使っているコンテナを
勝手に消さないで!
71. Copyright ©2019 NS Solutions Corporation. All Rights Reserved.
解決方法
71
タイムアウトで強制削除 + リエントランシーを担保
TensorBoardやNotebookは定期削除処理を入れる
– 期限が来ると強制的に削除される
実行状態を保存しておいて、いつでも中断地点から再開可能に
Notebookは特定ノード(CPUノードとか)でしか起動しないようにする
パーティションの機能を応用
Notas del editor 次のシートから各問題を説明
Browser Logo
http://icooon-mono.com/11398-%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%81%AE%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3/
Postgres Logo Trademark Policy
Inclusion of the name(s) or logo in your software or documentation to indicate that it runs on or with PostgreSQL.
Kubernetes Branding Guidelines
https://github.com/kubernetes/kubernetes/blob/master/logo/usage_guidelines.md
https://www.linuxfoundation.jp/trademark-usage/
Git Logo by Jason Long is licensed under the Creative Commons Attribution 3.0 Unported License.
https://git-scm.com/downloads/logos
丸保存してます + コピーできます https://calligra.design/2018/09/13/c0074_12/ 学習のステータスをWebアプリに通知する
コンテナが自殺すると、K8sがエラーと完了を見分けられない
未完了の学習結果を誤って使わないようにする
Init Containerの後処理版はKubernetesに未実装なので自作
コンテナ内の標準出力もNFSに随時書き込み
障害発生時もログが消えない
いつでも後から見返せる
ノード指定できるとかの説明 ノード指定できるとかの説明 https://calligra.design/2018/09/13/c0074_12/