July Tech Festa 2018 で発表した内容です。
Singularity と NVIDIA GPU Cloud で作るハイブリッド機械学習環境の構築July Tech Festa 2018 July 29, 2018Ryo NAKAMARU, SUPINF Inc. / Rescale, Inc.
View Slide
中丸 良 @pottava• CTO at SUPINF• DevOps Engineer at RescaleProfile!2• リモートワーカー• 夜はちゃんと温度が下がり、四季が感じられる地方、最高ですよみなさん
SUPINF Inc.!3• クラウド / コンテナ 中心の コンサルティング / 環境構築 / 受託開発 / 運用• オンプレ × DGX-1 × Kubernetes 機械学習環境なども• スピンフ、と読みます
Rescale, Inc.!4• クラウド HPC プラットフォームを SaaS で提供• スケーラブルなシミュレーションや機械学習をとても手軽に• Singularity でのジョブ実行もサポート
DISCLAIMERSingularity や HPC の部分はかなりの 大規模前提 です!5
今日お話しすること!6• 機械学習環境構築時に見られる課題• コンテナの導入で目指すこと• Singularity と HPC 周辺技術の応用• ハイブリッド環境構築の現実 @ SUPINF• オンプレミス + SaaS での解決策 @ Rescale
お伝えしたいこと!7• 環境を作り維持する仕事も、コードを書けないと厳しい!• API を使い慣れておきましょう• Docker / Kubernetes だけではない、視野を広げよう• 今後の機械学習は、より HPC の領域に近づく• ハードウェアを正しく意識 する / しない• 長期運用を考えてオンプレ / IaaS / SaaS でバランスを
機械学習環境構築時に見られる課題!8機械学習 & 学習環境のおさらい
機械学習!9学習データからよいモデルを作る 過程
機械学習!10学習推論モデルを使い入力から結果を予測 する
!11機械学習で求められること
機械学習環境構築時に見られる課題!12学習環境を構築する難しさオンプレに
学習環境構築の難しさ!13• 豊富な選択肢 / 関連技術の早すぎる進展• HPC 的ノウハウが要求される学習の高速化• 既存認証基盤やストレージと新しい技術の統合• まだデファクト / ベストプラクティスがない
!14豊富な選択肢 / 関連技術の早すぎる進展メンテナンスし続けるのなかなかに辛いです・・
!15HPC 的ノウハウが要求される学習の高速化GPU は行列計算を高速に行えるから深層学習に向いてるんでしょ?それで十分じゃないの?そうだね、GPU 速いよね。でも最近はIntel の AVX 命令 を活用したりMPI でマルチノードの分散学習を採用するフレームワークもでてきてるんだ。
!16
!17
コンテナの導入で目指すこと!18コンテナのおさらい
コンテナを使うと!19
!20従来の環境こういう管理が
!21コンテナ環境こうなる
!22コンテナ環境こうなる
!23コンテナ環境
!24コンテナ環境$%&
!25Docker の動き• Docker デーモン に対して要求• containerd が名前空間などで隔離したコンテナをプロセスとして起動• 実行ユーザーは実行時の指定がなければDocker イメージの定義次第
!26Docker の動き• コンテナ同士は基本お互い隔離された環境‣ 通信できない‣ プロセス体系は固有‣ 環境変数なども固有• GPU を占有させる仕組みなど
コンテナの導入で目指すこと!27Singularity とは何か
万能ではない Docker!28あたりまえだけど ..
Docker の悩ましさ!29• 現状は依然、デフォルト root レスでは動作しない• 実行ユーザーの扱いがとても難しい‣ Dockerfile?コンテナ起動時、動的にユーザー ID を指定?- 共有ストレージへ適切に 読み書きする難しさ• リソース利用上の制限‣ privileged やそれに相当する権限が必要になるケースがある‣ MPI を使った マルチノードでの実行 が容易ではない
Better Docker への欲求!30もっと計算を速くしたい勢 運用を改善したい勢IB使いたいノードまたぎたいもっとMPIかんたんにroot 渡すの無理です既存の スケジューラ使いたい
そこで!31
!32Singularity• http://singularity.lbl.gov• Singularity = Docker のいいところ(特に 再現性)+ HPC サポート‣ 基本思想は一緒: Build, Ship, and Run any app, Anywhere‣ 高性能ハードウェアや既存のジョブスケジューラがそのまま使える!• アプリケーションの実行に 特権ユーザーは不要!‣ singularity run したユーザ のプロセスとしてコンテナが動作する
!33Singularity の動き• Singularity バイナリ に引数を渡して実行• その Singularity プロセスがexecv でコンテナのプロセスに置き換えられる• 実行ユーザーはSingularity バイナリを実行したユーザーのまま!
!34Singularity のよさ%実行するのもかんたん!ほとんどDocker と同じ
!35Singularity のよさ$MPI もネイティブにサポート• ChainerMN や uber/horovod なども動く(はず)• InfiniBand などもコンテナから問題なく使えます
国内採用事例!36And more ..
コンテナの導入で目指すこと!37何が変わるのか
より効率的な実行環境の管理へ!38• サーバーではなく、イメージを実行環境として管理‣ Dockerfile を CI でバージョン管理‣ Docker レジストリには や SaaS を検討• サーバーそのものはこれまで通り構成管理‣ GPU ドライバ、Docker engine、NFS サーバー程度- ex. シンプルな Ansible Playbook が維持しやすい
!39実行環境の管理GPU を使うなら、CUDA をベースイメージ に
!40実行環境の管理Python を入れて
!41実行環境の管理GPU 対応版のフレームワークをインストール
!42実行環境の管理CI サーバを使ってテスト & ビルド & プッシュ!ex. GitLab CI ex. HarborCI サーバ Docker レジストリ
!43実行環境の管理フレームワーク × バージョンごとに Dockerfile を準備
!44実行環境の管理フレームワーク × バージョンごとに Dockerfile を準備これはこれで十分管理は大変そう・・
!45実行環境の管理フレームワーク × バージョンごとに Dockerfile を準備これはこれで十分管理は大変そう・・大丈夫、私たちには NGC がある
NGC とは?!46・NVIDIA 公式の Docker レジストリ・Docker イメージは毎月更新される・CUDA やライブラリはもちろん同梱・なんと無料しかも GPU 最適化 されているなど、自社で作るよりずっと高品質!!ありがたい!
!47社内 Proxy の設定をする程度で OKNGC を併用したイメージ管理
!48Jupyter Notebook まで入れて管理してもこの手軽感NGC を併用したイメージ管理
より広い選択肢から選べるジョブスケジューラ!49• Web 界隈の OSS が利用できるように‣ ジョブスケジューラに特化したもの ではない が・・‣ Kubernetes(kubeflow など含む)への期待• 既存の HPC ジョブスケジューラもコンテナ対応進行中!‣ GPU / MPI 対応の容易な Singularity との併用も‣ 既存の資産・仕組みをあまり変えずに導入できる
Kubernetes でハイブリッド環境の例!50
Kubernetes!51 計算ノードTesla V100社内 DCTITAN V社内 DC• Docker との相性抜群• NVIDIA さんもサポートを宣言• 複数 GPU アーキテクチャでも OKControl plane(管理ノード)Kubernetes クラスタ
Kubernetes!52ジョブを定義したYAML を Apply 計算ノードTesla V100社内 DCTITAN V社内 DC• 例えば高性能な Tesla で計算したい! YAML に書いた定義を渡すと・・Control plane(管理ノード)
Kubernetes!53ジョブを定義したYAML を Apply 計算ノードTesla V100社内 DCTITAN V社内 DC• 空きがあり、条件に合うノードに配置• nvidia-docker v1 / v2 すでに対応済→ コンテナへ適切に GPU 割り当てControl plane(管理ノード)
Kubernetes!54 計算ノードTesla V100社内 DCTITAN V社内 DCTesla P100AWS…• クラウドの VM もクラスタに‣ 専用線 / Federated Cluster / GKE on-orem• Federated という方法もあったりControl plane(管理ノード)
Kubernetes!55ジョブを定義したYAML を Apply 計算ノードTesla V100社内 DCTITAN V社内 DCTesla P100AWS…• “クラウドで動かしたい” or / and• “Tesla P100 で動かしたい”Control plane(管理ノード)
Kubernetes だと難しいこともある!56
大規模計算向きではない docker & k8s!57• 仮想ネットワークの利用‣ サーバー間通信は DNS ベース‣ MPI を使おうとすると足が引っ張られてしまう• (クラスタではなく)サーバーの “切り売り” 思想‣ CPU やメモリの上限値は “最高性能のサーバー” に依存‣ クラスタ全体では 10,000 コアあっても、指定はできない
ジョブスケジューラの違い!58Web (Docker) 界隈・Singularity 対応なし・基本ホストリソースの 切り売りscheduler GPUGPUGPU… GPUGPUGPU…確保!scheduler GPUGPUGPU… GPUGPUGPU…確保!HPC 業界・ノードをまたいで リソースを確保できる・ノード間通信するための設定もしてくれる
ハイブリッド環境構築の現実!59SUPINF での構築事例から
少なからず必要なインテグレーション!60• Kubernetes 中心‣ Rancher 経由で認証認可や Docker レジストリと連携‣ ジョブ投入時にマニフェストを 動的に生成• インフラそのものは別途構成管理‣ GPU ドライバや nvidia-docker などは Ansible で‣ ノードの伸縮縮退は k8s / Rancher の API を適切に
機械学習環境の CI / CD!61• パイプライン 1 : ジョブ投入プロセスのバージョン管理‣ k8s マニフェストを動的に作る作り込み部分‣ API やインフラそのもののテストも• パイプライン 2 : Docker イメージ‣ NGC をラップする Dockerfile のバージョン管理‣ 脆弱性 / 秘密情報 / 社内レギュレーションのチェック
アーキテクチャ概観!62学習クラスタ管理者…ノードのセットアップ
アーキテクチャ概観!63学習クラスタ管理者…API計算クラスタに追加
Docker イメージの CI / CDアーキテクチャ概観!64学習クラスタ…管理者Dockerfile
アーキテクチャ概観!65…共有ストレージにファイルアップ研究者
アーキテクチャ概観!66研究者学習クラスタ…ジョブ投入リクエストユーザ向け UI &マニフェスト動的生成
アーキテクチャ概観!67…計算開始
オンプレミス + SaaS での解決策!68Rescale の目指す未来
IaaS につきまとう重いインテグレーション!69• アカウント連携‣ ID そのもの‣ ファイルの共有(セキュリティ / パフォーマンス / ログ)• 計算クラスターのチューニング‣ オンプレ同様の保守‣ 設定を最適化したクラスタのライフサイクル管理• 利用量の測定・予算管理(組織 / ユーザー単位)
共有ストレージ!70安く・速く・安全 に頼んだよ!クラウドの計算クラスタ??オンプレ?認証含め なかなか悩ましい
クラスタのチューニング!71オンプレ並みに 鬼速く してね!!• CPU コア数、GPU 数、メモリなどのリソース制御• プレースメントグループ(AWS)• ネットワーク / EBS 最適化(AWS)• InfiniBand(Azure)• and a lot more ..
クラスタのライフサイクル管理!72これ・・まだ 正常に 計算してる?クラスタ A 起動後 5 時間 クラスタ B 起動後 240 時間 クラスタ C 起動後 150 時間管理者
利用量の計測・予算管理!73クラスタ B、どこの誰 管理なの .. ?クラスタ A 起動後 5 時間 クラスタ B 起動後 240 時間 クラスタ C 起動後 150 時間管理者
そこで(Rescale のような)SaaS を使うと ..!74
!75Rescale の場合Singularity 含む ソフト と ハード を選ぶだけで環境完成!
!76安全高速なファイル転送API / CLI を使った自動化も容易
!77必要最低限のクラスタ起動一時的な、完全に隔離された環境を生成
!78管理者機能アクセス制御、プロジェクト別の予算設定、..
オンプレミス + SaaS での解決策!79エンドユーザフレドリーな環境へ
エンドユーザには研究に専念してほしい!80
極力 Jupyter notebook だけの世界に!81• ソフトウェアの選択‣ 使いたいのはソフトウェアであって Docker ではない‣ NGC ? docker login ? pull ? プロキシ設定 ? うーん ..• Jupyter notebook!That’s all I want!‣ 研究者に必要なのはブラウザと共有フォルダ のみ• 分散学習させる時も、確認項目は予算と計算速度のバランスだけ
Rescale で検証中の例!82WebUI からぽちっと
Rescale で検証中の例!83Jupyter notebook を自動でラップ、ローカルに起動
Rescale で検証中の例!84依存含め Docker イメージor Singularity に変換して
Rescale で検証中の例!85クラウド / 高性能 DC で高速に並列計算
ご静聴ありがとうございました参考文献:• Rescale エンタープライズ・ビッグコンピュート・プラットフォーム https://www.rescale.com/jp/• ディープ ラーニング コンテナー - NVIDIA GPU Cloud (NGC) https://www.nvidia.com/ja-jp/gpu-cloud/deep-learning-containers/• Containers for Science, Reproducibility and Mobility SINGULARITY P2 https://www.intel.com/content/dam/www/public/us/en/documents/presentation/hpc-containers-singularity-advanced.pdf• Singularityで分散深層学習(産総研佐藤さん) https://www.slideshare.net/htsst/singularity-85959573