Slide 1

Slide 1 text

Singularity と NVIDIA GPU Cloud で作る ハイブリッド機械学習環境の構築 July Tech Festa 2018 July 29, 2018 Ryo NAKAMARU, SUPINF Inc. / Rescale, Inc.

Slide 2

Slide 2 text

中丸 良 @pottava • CTO at SUPINF • DevOps Engineer at Rescale Profile !2 • リモートワーカー • 夜はちゃんと温度が下がり、四季が感じられる地方、最高ですよみなさん

Slide 3

Slide 3 text

SUPINF Inc. !3 • クラウド / コンテナ 中心の コンサルティング / 環境構築 / 受託開発 / 運用 • オンプレ × DGX-1 × Kubernetes 機械学習環境なども • スピンフ、と読みます

Slide 4

Slide 4 text

Rescale, Inc. !4 • クラウド HPC プラットフォームを SaaS で提供 • スケーラブルなシミュレーションや機械学習をとても手軽に • Singularity でのジョブ実行もサポート

Slide 5

Slide 5 text

DISCLAIMER Singularity や HPC の部分はかなりの 大規模前提 です !5

Slide 6

Slide 6 text

今日お話しすること !6 • 機械学習環境構築時に見られる課題 • コンテナの導入で目指すこと • Singularity と HPC 周辺技術の応用 • ハイブリッド環境構築の現実 @ SUPINF • オンプレミス + SaaS での解決策 @ Rescale

Slide 7

Slide 7 text

お伝えしたいこと !7 • 環境を作り維持する仕事も、コードを書けないと厳しい! • API を使い慣れておきましょう • Docker / Kubernetes だけではない、視野を広げよう • 今後の機械学習は、より HPC の領域に近づく • ハードウェアを正しく意識 する / しない • 長期運用を考えてオンプレ / IaaS / SaaS でバランスを

Slide 8

Slide 8 text

機械学習環境構築時に見られる課題 !8 機械学習 & 学習環境のおさらい

Slide 9

Slide 9 text

機械学習 !9 学習 データから よいモデルを 作る 過程

Slide 10

Slide 10 text

機械学習 !10 学習 推論 モデルを使い 入力から結果を 予測 する

Slide 11

Slide 11 text

!11 機械学習で求められること

Slide 12

Slide 12 text

機械学習環境構築時に見られる課題 !12 学習環境を構築する難しさ オンプレに

Slide 13

Slide 13 text

学習環境構築の難しさ !13 • 豊富な選択肢 / 関連技術の早すぎる進展 • HPC 的ノウハウが要求される学習の高速化 • 既存認証基盤やストレージと新しい技術の統合 • まだデファクト / ベストプラクティスがない

Slide 14

Slide 14 text

!14 豊富な選択肢 / 関連技術の早すぎる進展 メンテナンスし続けるの なかなかに辛いです・・

Slide 15

Slide 15 text

!15 HPC 的ノウハウが要求される学習の高速化 GPU は行列計算を高速に行えるから深層学習に 向いてるんでしょ?それで十分じゃないの? そうだね、GPU 速いよね。でも最近は Intel の AVX 命令 を活用したり MPI でマルチノードの分散学習を 採用するフレームワークもでてきてるんだ。

Slide 16

Slide 16 text

!16

Slide 17

Slide 17 text

!17

Slide 18

Slide 18 text

コンテナの導入で目指すこと !18 コンテナのおさらい

Slide 19

Slide 19 text

コンテナを使うと !19

Slide 20

Slide 20 text

!20 従来の環境 こういう管理が

Slide 21

Slide 21 text

!21 コンテナ環境 こうなる

Slide 22

Slide 22 text

!22 コンテナ環境 こうなる

Slide 23

Slide 23 text

!23 コンテナ環境

Slide 24

Slide 24 text

!24 コンテナ環境 $ % &

Slide 25

Slide 25 text

!25 Docker の動き • Docker デーモン に対して要求 • containerd が名前空間などで 隔離したコンテナを プロセスとして起動 • 実行ユーザーは 実行時の指定がなければ Docker イメージの定義次第

Slide 26

Slide 26 text

!26 Docker の動き • コンテナ同士は基本 お互い隔離された環境 ‣ 通信できない ‣ プロセス体系は固有 ‣ 環境変数なども固有 • GPU を占有させる仕組みなど

Slide 27

Slide 27 text

コンテナの導入で目指すこと !27 Singularity とは何か

Slide 28

Slide 28 text

万能ではない Docker !28 あたりまえ だけど ..

Slide 29

Slide 29 text

Docker の悩ましさ !29 • 現状は依然、デフォルト root レスでは動作しない • 実行ユーザーの扱いがとても難しい ‣ Dockerfile?コンテナ起動時、動的にユーザー ID を指定? - 共有ストレージへ適切に 読み書きする難しさ • リソース利用上の制限 ‣ privileged やそれに相当する権限が必要になるケースがある ‣ MPI を使った マルチノードでの実行 が容易ではない

Slide 30

Slide 30 text

Better Docker への欲求 !30 もっと計算を速くしたい勢 運用を改善したい勢 IB 使いたい ノード またぎたい もっと MPI かんたんに root 渡すの 無理です 既存の  スケジューラ 使いたい

Slide 31

Slide 31 text

そこで !31

Slide 32

Slide 32 text

!32 Singularity • http://singularity.lbl.gov • Singularity = Docker のいいところ(特に 再現性)+ HPC サポート ‣ 基本思想は一緒: Build, Ship, and Run any app, Anywhere ‣ 高性能ハードウェアや既存のジョブスケジューラがそのまま使える! • アプリケーションの実行に 特権ユーザーは不要! ‣ singularity run したユーザ のプロセスとしてコンテナが動作する

Slide 33

Slide 33 text

!33 Singularity の動き • Singularity バイナリ に 引数を渡して実行 • その Singularity プロセスが execv でコンテナのプロセスに 置き換えられる • 実行ユーザーは Singularity バイナリを 実行したユーザーのまま!

Slide 34

Slide 34 text

!34 Singularity のよさ % 実行するのもかんたん! ほとんど Docker と同じ

Slide 35

Slide 35 text

!35 Singularity のよさ $ MPI もネイティブにサポート • ChainerMN や uber/horovod なども動く(はず) • InfiniBand などもコンテナから問題なく使えます

Slide 36

Slide 36 text

国内採用事例 !36 And more ..

Slide 37

Slide 37 text

コンテナの導入で目指すこと !37 何が変わるのか

Slide 38

Slide 38 text

より効率的な実行環境の管理へ !38 • サーバーではなく、イメージを実行環境として管理 ‣ Dockerfile を CI でバージョン管理 ‣ Docker レジストリには や SaaS を検討 • サーバーそのものはこれまで通り構成管理 ‣ GPU ドライバ、Docker engine、NFS サーバー程度 - ex. シンプルな Ansible Playbook が維持しやすい

Slide 39

Slide 39 text

!39 実行環境の管理 GPU を使うなら、CUDA をベースイメージ に

Slide 40

Slide 40 text

!40 実行環境の管理 Python を入れて

Slide 41

Slide 41 text

!41 実行環境の管理 GPU 対応版のフレームワークをインストール

Slide 42

Slide 42 text

!42 実行環境の管理 CI サーバを使ってテスト & ビルド & プッシュ! ex. GitLab CI ex. Harbor CI サーバ Docker レジストリ

Slide 43

Slide 43 text

!43 実行環境の管理 フレームワーク × バージョンごとに Dockerfile を準備

Slide 44

Slide 44 text

!44 実行環境の管理 フレームワーク × バージョンごとに Dockerfile を準備 これはこれで 十分管理は大変そう・・

Slide 45

Slide 45 text

!45 実行環境の管理 フレームワーク × バージョンごとに Dockerfile を準備 これはこれで 十分管理は大変そう・・ 大丈夫、私たちには NGC がある

Slide 46

Slide 46 text

NGC とは? !46 ・NVIDIA 公式の Docker レジストリ ・Docker イメージは毎月更新される ・CUDA やライブラリはもちろん同梱 ・なんと無料 しかも GPU 最適化 されているなど、 自社で作るよりずっと高品質!! ありがたい!

Slide 47

Slide 47 text

!47 社内 Proxy の設定をする程度で OK NGC を併用したイメージ管理

Slide 48

Slide 48 text

!48 Jupyter Notebook まで入れて管理してもこの手軽感 NGC を併用したイメージ管理

Slide 49

Slide 49 text

より広い選択肢から選べるジョブスケジューラ !49 • Web 界隈の OSS が利用できるように ‣ ジョブスケジューラに特化したもの ではない が・・ ‣ Kubernetes(kubeflow など含む)への期待 • 既存の HPC ジョブスケジューラもコンテナ対応進行中! ‣ GPU / MPI 対応の容易な Singularity との併用も ‣ 既存の資産・仕組みをあまり変えずに導入できる

Slide 50

Slide 50 text

Kubernetes でハイブリッド環境の例 !50

Slide 51

Slide 51 text

  Kubernetes !51     計算ノード Tesla V100 社内 DC TITAN V 社内 DC • Docker との相性抜群 • NVIDIA さんもサポートを宣言 • 複数 GPU アーキテクチャでも OK Control plane(管理ノード) Kubernetes クラスタ

Slide 52

Slide 52 text

  Kubernetes !52 ジョブを定義した YAML を Apply     計算ノード Tesla V100 社内 DC TITAN V 社内 DC • 例えば高性能な Tesla で計算したい!  YAML に書いた定義を渡すと・・ Control plane(管理ノード)

Slide 53

Slide 53 text

  Kubernetes !53 ジョブを定義した YAML を Apply     計算ノード Tesla V100 社内 DC TITAN V 社内 DC • 空きがあり、条件に合うノードに配置 • nvidia-docker v1 / v2 すでに対応済 → コンテナへ適切に GPU 割り当て Control plane(管理ノード)

Slide 54

Slide 54 text

  Kubernetes !54       計算ノード Tesla V100 社内 DC TITAN V 社内 DC Tesla P100 AWS … • クラウドの VM もクラスタに ‣ 専用線 / Federated Cluster / GKE on-orem • Federated という方法もあったり Control plane(管理ノード)

Slide 55

Slide 55 text

  Kubernetes !55 ジョブを定義した YAML を Apply       計算ノード Tesla V100 社内 DC TITAN V 社内 DC Tesla P100 AWS … • “クラウドで動かしたい” or / and • “Tesla P100 で動かしたい” Control plane(管理ノード)

Slide 56

Slide 56 text

Kubernetes だと難しいこともある !56

Slide 57

Slide 57 text

大規模計算向きではない docker & k8s !57 • 仮想ネットワークの利用 ‣ サーバー間通信は DNS ベース ‣ MPI を使おうとすると足が引っ張られてしまう • (クラスタではなく)サーバーの “切り売り” 思想 ‣ CPU やメモリの上限値は “最高性能のサーバー” に依存 ‣ クラスタ全体では 10,000 コアあっても、指定はできない

Slide 58

Slide 58 text

ジョブスケジューラの違い !58 Web (Docker) 界隈 ・Singularity 対応なし ・基本ホストリソースの 切り売り scheduler   GPU GPU GPU …   GPU GPU GPU … 確保! scheduler   GPU GPU GPU …   GPU GPU GPU … 確保! HPC 業界 ・ノードをまたいで リソースを確保できる ・ノード間通信するための設定もしてくれる

Slide 59

Slide 59 text

ハイブリッド環境構築の現実 !59 SUPINF での構築事例から

Slide 60

Slide 60 text

少なからず必要なインテグレーション !60 • Kubernetes 中心 ‣ Rancher 経由で認証認可や Docker レジストリと連携 ‣ ジョブ投入時にマニフェストを 動的に生成 • インフラそのものは別途構成管理 ‣ GPU ドライバや nvidia-docker などは Ansible で ‣ ノードの伸縮縮退は k8s / Rancher の API を適切に

Slide 61

Slide 61 text

機械学習環境の CI / CD !61 • パイプライン 1 : ジョブ投入プロセスのバージョン管理 ‣ k8s マニフェストを動的に作る作り込み部分 ‣ API やインフラそのもののテストも • パイプライン 2 : Docker イメージ ‣ NGC をラップする Dockerfile のバージョン管理 ‣ 脆弱性 / 秘密情報 / 社内レギュレーションのチェック

Slide 62

Slide 62 text

アーキテクチャ概観 !62 学習クラスタ 管理者 … ノードのセットアップ

Slide 63

Slide 63 text

アーキテクチャ概観 !63 学習クラスタ 管理者 … API 計算クラスタに追加

Slide 64

Slide 64 text

Docker イメージの CI / CD アーキテクチャ概観 !64 学習クラスタ … 管理者 Dockerfile

Slide 65

Slide 65 text

アーキテクチャ概観 !65 … 共有ストレージにファイルアップ 研究者

Slide 66

Slide 66 text

アーキテクチャ概観 !66 研究者 学習クラスタ … ジョブ投入リクエスト ユーザ向け UI & マニフェスト動的生成

Slide 67

Slide 67 text

アーキテクチャ概観 !67 … 計算開始

Slide 68

Slide 68 text

オンプレミス + SaaS での解決策 !68 Rescale の目指す未来

Slide 69

Slide 69 text

IaaS につきまとう重いインテグレーション !69 • アカウント連携 ‣ ID そのもの ‣ ファイルの共有(セキュリティ / パフォーマンス / ログ) • 計算クラスターのチューニング ‣ オンプレ同様の保守 ‣ 設定を最適化したクラスタのライフサイクル管理 • 利用量の測定・予算管理(組織 / ユーザー単位)

Slide 70

Slide 70 text

共有ストレージ !70 安く・速く・安全 に頼んだよ! クラウドの計算クラスタ ? ? オンプレ ? 認証含め なかなか悩ましい

Slide 71

Slide 71 text

クラスタのチューニング !71 オンプレ並みに 鬼速く してね!! • CPU コア数、GPU 数、メモリなどのリソース制御 • プレースメントグループ(AWS) • ネットワーク / EBS 最適化(AWS) • InfiniBand(Azure) • and a lot more ..

Slide 72

Slide 72 text

クラスタのライフサイクル管理 !72 これ・・まだ 正常に 計算してる? クラスタ A 起動後 5 時間 クラスタ B 起動後 240 時間 クラスタ C 起動後 150 時間 管理者

Slide 73

Slide 73 text

利用量の計測・予算管理 !73 クラスタ B、どこの誰 管理なの .. ? クラスタ A 起動後 5 時間 クラスタ B 起動後 240 時間 クラスタ C 起動後 150 時間 管理者

Slide 74

Slide 74 text

そこで(Rescale のような)SaaS を使うと .. !74

Slide 75

Slide 75 text

!75 Rescale の場合 Singularity 含む ソフト と ハード を選ぶだけで環境完成!

Slide 76

Slide 76 text

!76 安全高速なファイル転送 API / CLI を使った自動化も容易

Slide 77

Slide 77 text

!77 必要最低限のクラスタ起動 一時的な、完全に隔離された環境を生成

Slide 78

Slide 78 text

!78 管理者機能 アクセス制御、プロジェクト別の予算設定、..

Slide 79

Slide 79 text

オンプレミス + SaaS での解決策 !79 エンドユーザフレドリーな環境へ

Slide 80

Slide 80 text

エンドユーザには研究に専念してほしい !80

Slide 81

Slide 81 text

極力 Jupyter notebook だけの世界に !81 • ソフトウェアの選択 ‣ 使いたいのはソフトウェアであって Docker ではない ‣ NGC ? docker login ? pull ? プロキシ設定 ? うーん .. • Jupyter notebook!That’s all I want! ‣ 研究者に必要なのはブラウザと共有フォルダ のみ • 分散学習させる時も、確認項目は予算と計算速度のバランスだけ

Slide 82

Slide 82 text

Rescale で検証中の例 !82 WebUI から ぽちっと

Slide 83

Slide 83 text

Rescale で検証中の例 !83 Jupyter notebook を自動で ラップ、ローカルに起動

Slide 84

Slide 84 text

Rescale で検証中の例 !84 依存含め Docker イメージ or Singularity に変換して

Slide 85

Slide 85 text

Rescale で検証中の例 !85 クラウド / 高性能 DC で 高速に並列計算

Slide 86

Slide 86 text

ご静聴ありがとうございました 参考文献: • 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