Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.
1. Docker社にキーノートで褒
められた話
2. kubernetesでGPUクラスタ
管理したい
SIC 大嶋
Docker社にキーノートで
褒められた話
ソロモンに褒められた!
何をしたのか
• Infrakitのメンテナ
• Infrakitのkubernetesプラグインを導入した
Infrakit?
• One of moby project
• Toolkit for Cluster infrastructure orchestration
何をしてくれるのか
• デプロイ後も面倒を見てくれるTerraform
• デーモンとして動き続けて、最初に定義した構成を維持しよう
とする
Infrakit Architecture
Default
Group 2
AWS EC2
GCP GCE
Docker
Swarm
Kubernetes
Instance
FlavorGroup
RPC
RPC
API
Group : Def...
Infrakit Architecture
Default
Group 2
AWS EC2
GCP GCE
Docker
Swarm
Kubernetes
Instance
FlavorGroup
Group : Default
Instanc...
Infrakit Architecture
Default
Group 2
AWS EC2
GCP GCE
Docker
Swarm
Kubernetes
Instance
FlavorGroup
RPC
RPC
Group : Default...
Infrakit Architecture
Default
Group 2
AWS EC2
GCP GCE
Docker
Swarm
Kubernetes
Instance
FlavorGroup
RPC
RPC
API
Group : Def...
Infrakit Architecture
Default
Group 2
AWS EC2
GCP GCE
Docker
Swarm
Kubernetes
Instance
FlavorGroup
RPC
RPC
API
Group : Def...
Infrakit Architecture
Default
Group 2
AWS EC2
GCP GCE
Docker
Swarm
Kubernetes
Instance
FlavorGroup
Group : Default
Instanc...
Infrakit Architecture
Default
Group 2
AWS EC2
GCP GCE
Docker
Swarm
Kubernetes
Instance
FlavorGroup
RPC
RPC
API
Group : Def...
Infrakit Architecture
Default
Group 2
AWS EC2
GCP GCE
Docker
Swarm
Kubernetes
Instance
FlavorGroup
RPC
RPC
API
Group : Def...
Infrakit Architecture
Default
Group 2
AWS EC2
GCP GCE
Docker
Swarm
Kubernetes
Instance
FlavorGroup
RPC
RPC
API
Group : Def...
Infrakitの特徴
• プラグインモデル
• Infrakitの設定(必要なプラグイン、その設定)とクラスタの期
待状態をファイルに記述して再現可能にする
• プラグインを変えれば簡単に別のクラウドに移行することがで
きるようにしたい
• ...
仲のいいプロジェクト
linuxkit?
• ディストリビューション・アズ・ア・コード
• dockerホストとなるサーバに必要なミドルウェア、設定を記述
できる
• isoファイルやAWS, GCPなどのクラウドのイメージ、VMWareの
VMイメージを作れる
つまり何が目的なのか
Dockerfile
-----------
-----------
-----------
DockerはInfrastructure as code!
つまり何が目的なのか
Dockerfile
-----------
-----------
-----------
Docker Daemonのバージョン
Linuxディストリビューション
Linuxカーネルバージョン
ホストのミドルウェア
ネ...
もっとインフラアズアコードにしたい
• Linuxkitでdockerホストを動かすイメージを作って
• Infrakitでクラウド/オンプレにデプロイ、クラスタの構築・運用
• クラウド間、オンプレ間の移動を簡単に
kubernetes対応とは?
• Linuxkit: kubernetesノードとして必要なコンポーネントを入れら
れるようになった
• Infrakit: kubernetesクラスタを構築、管理できるようにした
ということ
ちなみに
• DockerCon EUではDockerのInfrakitメンテナにkubernetes対応これ
からどうすすめるべきかめっちゃ聞かれました
kubernetesでGPUクラスタ
管理したい
モチベーション
• 分散学習タスクの場合にいちいちノードにログインしたくない
• 複数のタスクを並列で走らせたい
• コンテナ単位で管理できればデプロイも楽
なぜkubernetesなのか
• コンテナオーケストレータの覇者であることがほぼ確定
• スケジューラなどが拡張しやすい
• アルファ版だがGPUサポートが有る
秀逸な資料:
GPU Container as a Serviceを実現するため...
GPUマネージメントのドキュメント
まあ読めばなんとかなる
kubernetesでGPU管理の構成
Node
GPU
DLフレームワーク
Nvidiaライブラリ
Nvidiaドライバ
Nvidia dockerでも基本的には同じ
spec:
template:
metadata:
labels:
app: mxd-worker1
spec:
volumes:
- name: nvidialib
hostPath:
path: /usr/lib/nvidia-375
co...
Nvidia-dockerなら動いたのに・・・
Nvidia-dockerはどうやってるか
謎の力で必要なライブラリを
/var/lib/nvidia-docker/volumes/nvidia_driver/{バージョン}
に集めてくれる
で、それをマウントしてる
解決策
kubernetesクラスタ構築前にnv-dockerをインストールしてライブラリ
だけ集めた後
/var/lib/nvidia-docker/volumes/nvidia_driver/{バージョン}
をマウント
結果:動いた!
不満...
nvidia-container-runtime
• nvidiaが最近始めたプロジェクト
• OCIランタイムスペックに準拠したGPUを利用するためのコンテ
ナランタイム
• ホスト側のCUDAのバージョンを自動的に認識してなんとかして
くれ...
k8s+containerd+nv-runtime
アルファ版とアルファ版とアルファ版の組み合わせ
ろくなドキュメントはない
Node
GPU
CRI-containerd
nv-runtime
動くけど。。
• 不安定
• 怖すぎる
• nv-runtimeが環境変数でGPUの数の管理などを行うのでk8s側で
制御できなくなる
nv-docker, nv-runtime, k8sの関係
k8sはdocker, cri-containerdに対して
deviceオプションでGPUデバイスを、-vでライブラリを入れる
デバイスオプション
このpodにはGPU 2つ
ライブ...
nv-docker, nv-runtime, k8sの関係
nv-dockerも一緒
デバイスオプション
このコンテナにはGPU 2つ
ライブラリのマウントも自動
nv-docker, nv-runtime, k8sの関係
nv-runtimeは違う
環境変数でGPU数指定 このコンテナにはGPU 2つ
デバイス・ライブラリのマウント
nv-docker, nv-runtime, k8sの関係
k8sとnv-runtimeの組み合わせだと
このpodにはGPUはない
環境変数でGPU数指定
このコンテナにはGPU 2つ
デバイス・ライブラリのマウント
結論
• しばらくはk8s+docker1.13でnvdockerが作るディレクトリを使っ
ていこう
• もしくは丁寧に必要なライブラリの場所を洗い出そう
• ノードごとのバージョン問題はノードにラベルを貼るしか(今
のところ)解がない
• ち...
Infrakitの話とk8s+GPUの話
Infrakitの話とk8s+GPUの話
Próxima SlideShare
Cargando en…5
×

Infrakitの話とk8s+GPUの話

724 visualizaciones

Publicado el

クラウドネイティブ勉強会

Publicado en: Tecnología
  • Sé el primero en comentar

Infrakitの話とk8s+GPUの話

  1. 1. 1. Docker社にキーノートで褒 められた話 2. kubernetesでGPUクラスタ 管理したい SIC 大嶋
  2. 2. Docker社にキーノートで 褒められた話
  3. 3. ソロモンに褒められた!
  4. 4. 何をしたのか • Infrakitのメンテナ • Infrakitのkubernetesプラグインを導入した
  5. 5. Infrakit? • One of moby project • Toolkit for Cluster infrastructure orchestration
  6. 6. 何をしてくれるのか • デプロイ後も面倒を見てくれるTerraform • デーモンとして動き続けて、最初に定義した構成を維持しよう とする
  7. 7. Infrakit Architecture Default Group 2 AWS EC2 GCP GCE Docker Swarm Kubernetes Instance FlavorGroup RPC RPC API Group : Default Instance : AWS Flavor : Docker Swarm master 2 worker 4
  8. 8. Infrakit Architecture Default Group 2 AWS EC2 GCP GCE Docker Swarm Kubernetes Instance FlavorGroup Group : Default Instance : AWS Flavor : Docker Swarm master 2 worker 4
  9. 9. Infrakit Architecture Default Group 2 AWS EC2 GCP GCE Docker Swarm Kubernetes Instance FlavorGroup RPC RPC Group : Default Instance : AWS Flavor : Docker Swarm master 2 worker 4 そんなものはない! いまインスタンス どんな感じ?
  10. 10. Infrakit Architecture Default Group 2 AWS EC2 GCP GCE Docker Swarm Kubernetes Instance FlavorGroup RPC RPC API Group : Default Instance : AWS Flavor : Docker Swarm master 2 worker 4 Docker swarm, 2マスタ 4ワーカでよろしく
  11. 11. Infrakit Architecture Default Group 2 AWS EC2 GCP GCE Docker Swarm Kubernetes Instance FlavorGroup RPC RPC API Group : Default Instance : AWS Flavor : Docker Swarm master 2 worker 4
  12. 12. Infrakit Architecture Default Group 2 AWS EC2 GCP GCE Docker Swarm Kubernetes Instance FlavorGroup Group : Default Instance : AWS Flavor : Docker Swarm master 2 worker 4
  13. 13. Infrakit Architecture Default Group 2 AWS EC2 GCP GCE Docker Swarm Kubernetes Instance FlavorGroup RPC RPC API Group : Default Instance : AWS Flavor : Docker Swarm master 2 worker 4 どんな感じ?
  14. 14. Infrakit Architecture Default Group 2 AWS EC2 GCP GCE Docker Swarm Kubernetes Instance FlavorGroup RPC RPC API Group : Default Instance : AWS Flavor : Docker Swarm master 2 worker 4 あかんやん! 2マスタ 3ワーカ
  15. 15. Infrakit Architecture Default Group 2 AWS EC2 GCP GCE Docker Swarm Kubernetes Instance FlavorGroup RPC RPC API Group : Default Instance : AWS Flavor : Docker Swarm master 2 worker 4 1ワーカ追加ね
  16. 16. Infrakitの特徴 • プラグインモデル • Infrakitの設定(必要なプラグイン、その設定)とクラスタの期 待状態をファイルに記述して再現可能にする • プラグインを変えれば簡単に別のクラウドに移行することがで きるようにしたい • 将来的にはLBの設定とかも管理できるようになりたい
  17. 17. 仲のいいプロジェクト
  18. 18. linuxkit? • ディストリビューション・アズ・ア・コード • dockerホストとなるサーバに必要なミドルウェア、設定を記述 できる • isoファイルやAWS, GCPなどのクラウドのイメージ、VMWareの VMイメージを作れる
  19. 19. つまり何が目的なのか Dockerfile ----------- ----------- ----------- DockerはInfrastructure as code!
  20. 20. つまり何が目的なのか Dockerfile ----------- ----------- ----------- Docker Daemonのバージョン Linuxディストリビューション Linuxカーネルバージョン ホストのミドルウェア ネットワーク クラスタの構築 DockerはInfrastructure as code?
  21. 21. もっとインフラアズアコードにしたい • Linuxkitでdockerホストを動かすイメージを作って • Infrakitでクラウド/オンプレにデプロイ、クラスタの構築・運用 • クラウド間、オンプレ間の移動を簡単に
  22. 22. kubernetes対応とは? • Linuxkit: kubernetesノードとして必要なコンポーネントを入れら れるようになった • Infrakit: kubernetesクラスタを構築、管理できるようにした ということ
  23. 23. ちなみに • DockerCon EUではDockerのInfrakitメンテナにkubernetes対応これ からどうすすめるべきかめっちゃ聞かれました
  24. 24. kubernetesでGPUクラスタ 管理したい
  25. 25. モチベーション • 分散学習タスクの場合にいちいちノードにログインしたくない • 複数のタスクを並列で走らせたい • コンテナ単位で管理できればデプロイも楽
  26. 26. なぜkubernetesなのか • コンテナオーケストレータの覇者であることがほぼ確定 • スケジューラなどが拡張しやすい • アルファ版だがGPUサポートが有る 秀逸な資料: GPU Container as a Serviceを実現するための最新OSS徹底比較 https://www.slideshare.net/td-nttcom/gpu-container-as-a-service-oss
  27. 27. GPUマネージメントのドキュメント まあ読めばなんとかなる
  28. 28. kubernetesでGPU管理の構成 Node GPU DLフレームワーク Nvidiaライブラリ Nvidiaドライバ Nvidia dockerでも基本的には同じ
  29. 29. spec: template: metadata: labels: app: mxd-worker1 spec: volumes: - name: nvidialib hostPath: path: /usr/lib/nvidia-375 containers: - name: mxd-worker1 image: mxnet/python:gpu volumeMounts: - mountPath: /usr/local/nvidia name: nvidialib readOnly: true resources: requests: alpha.kubernetes.io/nvidia-gpu: 4 limits: alpha.kubernetes.io/nvidia-gpu: 4 これで大丈夫 ドキュメントにもそう書いてある
  30. 30. Nvidia-dockerなら動いたのに・・・
  31. 31. Nvidia-dockerはどうやってるか 謎の力で必要なライブラリを /var/lib/nvidia-docker/volumes/nvidia_driver/{バージョン} に集めてくれる で、それをマウントしてる
  32. 32. 解決策 kubernetesクラスタ構築前にnv-dockerをインストールしてライブラリ だけ集めた後 /var/lib/nvidia-docker/volumes/nvidia_driver/{バージョン} をマウント 結果:動いた! 不満点1:マウントパスに各ノードのcudaのバージョンが必要 不満点2:nvdockerが最新のdockerだと動かない 不満点3:自分でライブラリを全部指定するとvolume多すぎ
  33. 33. nvidia-container-runtime • nvidiaが最近始めたプロジェクト • OCIランタイムスペックに準拠したGPUを利用するためのコンテ ナランタイム • ホスト側のCUDAのバージョンを自動的に認識してなんとかして くれる • 最新版のdockerにも対応してる 問題点 何故かdockerのデフォルトランタイムに設定してもk8sからだと 無視された
  34. 34. k8s+containerd+nv-runtime アルファ版とアルファ版とアルファ版の組み合わせ ろくなドキュメントはない Node GPU CRI-containerd nv-runtime
  35. 35. 動くけど。。 • 不安定 • 怖すぎる • nv-runtimeが環境変数でGPUの数の管理などを行うのでk8s側で 制御できなくなる
  36. 36. nv-docker, nv-runtime, k8sの関係 k8sはdocker, cri-containerdに対して deviceオプションでGPUデバイスを、-vでライブラリを入れる デバイスオプション このpodにはGPU 2つ ライブラリのマウントはユーザの責任
  37. 37. nv-docker, nv-runtime, k8sの関係 nv-dockerも一緒 デバイスオプション このコンテナにはGPU 2つ ライブラリのマウントも自動
  38. 38. nv-docker, nv-runtime, k8sの関係 nv-runtimeは違う 環境変数でGPU数指定 このコンテナにはGPU 2つ デバイス・ライブラリのマウント
  39. 39. nv-docker, nv-runtime, k8sの関係 k8sとnv-runtimeの組み合わせだと このpodにはGPUはない 環境変数でGPU数指定 このコンテナにはGPU 2つ デバイス・ライブラリのマウント
  40. 40. 結論 • しばらくはk8s+docker1.13でnvdockerが作るディレクトリを使っ ていこう • もしくは丁寧に必要なライブラリの場所を洗い出そう • ノードごとのバージョン問題はノードにラベルを貼るしか(今 のところ)解がない • ちなみにk8sのGPU管理は雑(/devをスキャンしてnvidiaデバイ スをマウントしてDBに登録するだけ)

×