SlideShare a Scribd company logo
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 : Default
Instance : AWS
Flavor : Docker Swarm
master 2
worker 4
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
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
そんなものはない!
いまインスタンス
どんな感じ?
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ワーカでよろしく
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
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
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
どんな感じ?
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ワーカ
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ワーカ追加ね
Infrakitの特徴
• プラグインモデル
• Infrakitの設定(必要なプラグイン、その設定)とクラスタの期
待状態をファイルに記述して再現可能にする
• プラグインを変えれば簡単に別のクラウドに移行することがで
きるようにしたい
• 将来的にはLBの設定とかも管理できるようになりたい
仲のいいプロジェクト
linuxkit?
• ディストリビューション・アズ・ア・コード
• dockerホストとなるサーバに必要なミドルウェア、設定を記述
できる
• isoファイルやAWS, GCPなどのクラウドのイメージ、VMWareの
VMイメージを作れる
つまり何が目的なのか
Dockerfile
-----------
-----------
-----------
DockerはInfrastructure as code!
つまり何が目的なのか
Dockerfile
-----------
-----------
-----------
Docker Daemonのバージョン
Linuxディストリビューション
Linuxカーネルバージョン
ホストのミドルウェア
ネットワーク クラスタの構築
DockerはInfrastructure as code?
もっとインフラアズアコードにしたい
• Linuxkitでdockerホストを動かすイメージを作って
• Infrakitでクラウド/オンプレにデプロイ、クラスタの構築・運用
• クラウド間、オンプレ間の移動を簡単に
kubernetes対応とは?
• Linuxkit: kubernetesノードとして必要なコンポーネントを入れら
れるようになった
• Infrakit: kubernetesクラスタを構築、管理できるようにした
ということ
ちなみに
• DockerCon EUではDockerのInfrakitメンテナにkubernetes対応これ
からどうすすめるべきかめっちゃ聞かれました
kubernetesでGPUクラスタ
管理したい
モチベーション
• 分散学習タスクの場合にいちいちノードにログインしたくない
• 複数のタスクを並列で走らせたい
• コンテナ単位で管理できればデプロイも楽
なぜkubernetesなのか
• コンテナオーケストレータの覇者であることがほぼ確定
• スケジューラなどが拡張しやすい
• アルファ版だがGPUサポートが有る
秀逸な資料:
GPU Container as a Serviceを実現するための最新OSS徹底比較
https://www.slideshare.net/td-nttcom/gpu-container-as-a-service-oss
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
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
これで大丈夫
ドキュメントにもそう書いてある
Infrakitの話とk8s+GPUの話
Infrakitの話とk8s+GPUの話
Nvidia-dockerなら動いたのに・・・
Nvidia-dockerはどうやってるか
謎の力で必要なライブラリを
/var/lib/nvidia-docker/volumes/nvidia_driver/{バージョン}
に集めてくれる
で、それをマウントしてる
解決策
kubernetesクラスタ構築前にnv-dockerをインストールしてライブラリ
だけ集めた後
/var/lib/nvidia-docker/volumes/nvidia_driver/{バージョン}
をマウント
結果:動いた!
不満点1:マウントパスに各ノードのcudaのバージョンが必要
不満点2:nvdockerが最新のdockerだと動かない
不満点3:自分でライブラリを全部指定するとvolume多すぎ
nvidia-container-runtime
• nvidiaが最近始めたプロジェクト
• OCIランタイムスペックに準拠したGPUを利用するためのコンテ
ナランタイム
• ホスト側のCUDAのバージョンを自動的に認識してなんとかして
くれる
• 最新版のdockerにも対応してる
問題点
何故かdockerのデフォルトランタイムに設定してもk8sからだと
無視された
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が作るディレクトリを使っ
ていこう
• もしくは丁寧に必要なライブラリの場所を洗い出そう
• ノードごとのバージョン問題はノードにラベルを貼るしか(今
のところ)解がない
• ちなみにk8sのGPU管理は雑(/devをスキャンしてnvidiaデバイ
スをマウントしてDBに登録するだけ)

More Related Content

PPTX
Infrakit Docker_Tokyo_meetup
PPTX
KubernetesでGPUクラスタを管理したい
PDF
runC概要と使い方
PDF
新しいOpenShiftのしくみを調べてみた
PPTX
Kubernetes超入門 with java
PDF
最近のKubernetesとDocker Machine/Swarmの話
PDF
Cloudn PaaSチームのChatOps実践
PDF
Prometheus at Preferred Networks
Infrakit Docker_Tokyo_meetup
KubernetesでGPUクラスタを管理したい
runC概要と使い方
新しいOpenShiftのしくみを調べてみた
Kubernetes超入門 with java
最近のKubernetesとDocker Machine/Swarmの話
Cloudn PaaSチームのChatOps実践
Prometheus at Preferred Networks

What's hot (20)

PDF
Lattice深掘り話
PDF
Kubernetes雑にまとめてみた 2019年12月版
PDF
Cloud Foundry構成概要 111018
PPTX
Introduction of skippbox
PPTX
俺とKubernetes
PDF
DockerとKubernetesが作る未来
PDF
知って欲しいPaaSの話
PDF
Dockerの利用事例
PPTX
Docker & Kubernetes基礎
PPTX
Kubernetes introduction
PPTX
コンテナ運用基盤 with OpenShift
 
PDF
”30分”ぐらいでわかる「Kubernetes」について
PDF
DevStackで始めるCloud FoundryとBOSH
PDF
Cloud Foundry Container-to-Container Networking
PDF
Prometheus monitoring from outside of Kubernetes
 〜どうして我々はKubernetes上のPromet...
PDF
Dockerホスティング「Arukas」について(「さくらインターネット」のDockerホスティング「Arukas」と「Docker Machine」ドラ...
PDF
OpenShift 3で、DockerのPaaSを作る話
PPTX
DockerでJupyter使おうぜ
PDF
KubernetesとOpenShiftの話
PPTX
Kubernetes ときどき Serverless -- cndjp第1回勉強会
Lattice深掘り話
Kubernetes雑にまとめてみた 2019年12月版
Cloud Foundry構成概要 111018
Introduction of skippbox
俺とKubernetes
DockerとKubernetesが作る未来
知って欲しいPaaSの話
Dockerの利用事例
Docker & Kubernetes基礎
Kubernetes introduction
コンテナ運用基盤 with OpenShift
 
”30分”ぐらいでわかる「Kubernetes」について
DevStackで始めるCloud FoundryとBOSH
Cloud Foundry Container-to-Container Networking
Prometheus monitoring from outside of Kubernetes
 〜どうして我々はKubernetes上のPromet...
Dockerホスティング「Arukas」について(「さくらインターネット」のDockerホスティング「Arukas」と「Docker Machine」ドラ...
OpenShift 3で、DockerのPaaSを作る話
DockerでJupyter使おうぜ
KubernetesとOpenShiftの話
Kubernetes ときどき Serverless -- cndjp第1回勉強会
Ad

Similar to Infrakitの話とk8s+GPUの話 (20)

PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
PPTX
K8s meetup containerized_cloud_foundry
PDF
20191120 beyondstudy#21 kitaoka
PDF
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
PDF
AKSとTerraformでKubernetesクラスター作成
PPTX
Java on Kubernetes on Azure
PPTX
Kubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみた
PDF
半日でわかる コンテナー技術 (応用編)
PDF
Kubernetesのワーカーノードを自動修復するために必要だったこと
PDF
【K.M】Kubernetes.pdf
PDF
CyberAgentのインフラについて メディア事業編 #catechchallenge
PDF
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PDF
捕鯨!詳解docker
PDF
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション④
PPTX
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
PPTX
AKS (k8s) Hands on Lab Contents
PDF
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
PDF
Tech Dojo 02/09 IBM Japan CSM
PDF
インフラエンジニアのためのRancherを使ったDocker運用入門
PDF
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
K8s meetup containerized_cloud_foundry
20191120 beyondstudy#21 kitaoka
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
AKSとTerraformでKubernetesクラスター作成
Java on Kubernetes on Azure
Kubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみた
半日でわかる コンテナー技術 (応用編)
Kubernetesのワーカーノードを自動修復するために必要だったこと
【K.M】Kubernetes.pdf
CyberAgentのインフラについて メディア事業編 #catechchallenge
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
捕鯨!詳解docker
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション④
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
AKS (k8s) Hands on Lab Contents
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
Tech Dojo 02/09 IBM Japan CSM
インフラエンジニアのためのRancherを使ったDocker運用入門
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"
Ad

More from Yuji Oshima (8)

PDF
MLCT#12 使われる機能目指して 測ったり試したり
PDF
KubeFlow MeetUp #1 Katibよもやま話
PDF
KubeFlowでどこまでいける?
PDF
2018 07-23
PDF
2018 07-19dist
PDF
PDF
Docker1.12イングレスロードバランサ
PDF
近頃のDockerネットワーク
MLCT#12 使われる機能目指して 測ったり試したり
KubeFlow MeetUp #1 Katibよもやま話
KubeFlowでどこまでいける?
2018 07-23
2018 07-19dist
Docker1.12イングレスロードバランサ
近頃のDockerネットワーク

Infrakitの話とk8s+GPUの話

Editor's Notes

  • #8: This is little more details about implementation. Each of plug-ins are running as go process and Infrakit discovers them through Unix socket. And plug-ins communicate each other with rpc.
  • #9: Now, I will talk about the flow of using Infrakit. First, you send a configuration of cluster to Infrakit and it will be sent to group plug-in. In this example, Using default group plug-in, aws instance plug-in and docker swarm flavor plug-in. And you define the desired state of your cluster. Now, it is 2 masters and 4 workers for docker swarm.
  • #10: Then the group plugin check the state of your cluster through flavor and instance plug-in. now, there are no instance.
  • #11: The group plugin send the required number of instances to instance and flaver plug-ins with rpc. It need to deploy 2 masters and 4 workers now.
  • #12: And then, Instance plug-in gather information that will be needed to deploy instance from flavor plug-in and deploy instances by cloud provider’s API.
  • #13: Now, some failure occurred in your cluster. One of your worker died unexpectedly.
  • #14: Group plug-in has been polling the state of your cluster. How many instances are running? Are all nodes healthy?
  • #15: So the Group plug-in can notice a node has gone down because the instance plug-in report number of only healthy nodes. In this case, instance plugin reports 2 master and only 3 workers are running.
  • #16: Then, the group plug-in will request to instance and flavor plug-ins to maintain your desired state. This is the basic behavior of provisioning and auto-healing of Infrakit.