SlideShare a Scribd company logo
Copyright © NTT Communications Corporation.
Transform your business, transcend expectations with our technologically advanced solutions.
GPU Container as a Service を
実現するための最新OSS徹底比較
張 暁晶・角田佳史
松本赳明・原田 和明
Copyright © NTT Communications Corporation.
1
自己紹介
角田 佳史
Yoshifumi Sumida
y.sumida@ntt.com
技術開発部
ソフトウェアエンジニア
興味:IaaS、コンテナ
張 暁晶
Xiaojing Zhang
xiaojing.zhang@ntt.com
技術開発部
ソフトウェアエンジニア
興味:ソフトウェア工学、
ヘテロジニアスなクラウド
Copyright © NTT Communications Corporation.
2
Agenda
1. 背景&目的
2. GPU環境の望ましい要件
3. コンテナ技術関連の各種OSSツール比較
4. OpenStack連携によるマルチテナントの実現
5. GPU Container as a Service つくってみた
Copyright © NTT Communications Corporation.
3
Agenda
1. 背景&目的
2. GPU環境の望ましい要件
3. コンテナ技術関連の各種OSSツール比較
4. OpenStack連携によるマルチテナントの実現
5. GPU Container as a Service つくってみた
Copyright © NTT Communications Corporation.
● AI、機械学習、ビッグデータ解析
○ 高速な計算資源としてGPUが幅広く活用されている
● NTTコミュニケーションズでも注目
○ AI エンジン“COTOHA”、三井化学様における品質予測事例、など
http://www.ntt.com/business/services/application/ai/cotoha.html
http://www.ntt.com/about-us/press-releases/news/article/2016/20160915.html
○ GPUを用いた学習・検証に対する社内ニーズの高まり
4
背景
Copyright © NTT Communications Corporation.
● 高速な並列データ処理が可能なGPUの需要がある
○ 学習や解析などのワークロードは非常に高負荷
● 一方でGPUの調達における予算や時間がネックになることも...
○ クラウドサービスを利用する事により解決出来る
○ 主要クラウドプロバイダは既にGPUインスタンスの提供を開始
■ Azure、AWS、GCP、Bluemix (Bare)
5
GPU利用のトレンド
Copyright © NTT Communications Corporation.
Node 4
Node 3
Node 2
Node 1
6
目的
社内向けに検証環境として
GPU as a Service を提供する
GPU
GPU
GPU
GPUリソースの指定
GPUリソースの管理と
スケジューリング
GPU
GPU as a
Service
Copyright © NTT Communications Corporation.
● クラウド基盤は OpenStack を利用
● VMインスタンスとしてGPUリソースを提供
○ VMにGPUを認識させるため、PCI Passthrough を利用
○ GPUリソースとして、3種類の NVIDIA製 GPU を利用
● 主に機械学習やディープラーニングなどに利用されている
7
社内プライベートクラウドでのGPU提供の現状
Copyright © NTT Communications Corporation.
8
VMでのGPU提供の問題
1. 機械学習用の環境構築のユーザ負担が大きい
○ VM毎に適切なGPUデバイスドライバをインストールする必要がある
○ デバイスドライバ/CUDA/アプリ間でバージョン整合性を保つ必要がある
2. 特に処理が無い時でもGPUリソースが無駄に占有される
○ 社内向けの検証環境で提供可能なGPU数が少ないため
3. プロバイダ側でGPUデバイスを監視出来ない
○ GPUデバイスを VM へ Passthrough しているため
Copyright © NTT Communications Corporation.
1. ユーザの環境構築が容易
2. GPUリソースを使用後に迅速に解放出来る
3. GPUリソースの使用状況を監視出来る
9
コンテナ技術による問題解決
GPU as a Service 実現のため コンテナ技術 を活用
Copyright © NTT Communications Corporation.
10
コンテナ技術とは
INFRASTRUCTURE INFRASTRUCTURE
HOST OSHOST OS
HYPERVISOR CONTAINER ENGINE
GUEST OS
APP
BIN/LIBS BIN/LIBS
APPS APPS
ハイパーバイザ型仮想化 コンテナ型仮想化
● VMと比較して軽量
● リソースを迅速に解放可能
● ホスト所有のデバイスを利用
VM
CONTAINER
BIN/LIBS
GUEST OS
APP
BIN/LIBS
Copyright © NTT Communications Corporation.
11
Agenda
1. 背景&目的
2. GPU環境の望ましい要件
3. コンテナ技術関連の各種OSSツール比較
4. OpenStack連携によるマルチテナントの実現
5. GPU Container as a Service つくってみた
Copyright © NTT Communications Corporation.
● As a Service として利用できる
○ 即時に利用可能・マルチテナント対応
● GPU環境のデプロイが容易である
○ GPU数など幾つかの事項を指定するのみで良い
○ コンテナ技術でデファクトスタンダードのDockerが利用できる
12
GPU as a Service の要件 ~ユーザ側~
GPU
node
User
GaaS
GPU数を指定 Dockerコンテナ作成
Copyright © NTT Communications Corporation.
13
● GPU搭載サーバをクラスタとして管理できる
○ PoC上のGPUクラスタは以下の NVIDIA製 GPU を利用している
● Tesla K2, Tesla K10, Tesla P100
● コンテナ間で GPU の分離ができる
GPU as a Service の要件 ~プロバイダ側~ 1/2
GPU
複数GPUの割り当て
GPU
GPUの分離
GPU
GPU
Copyright © NTT Communications Corporation.
● 効率的にGPUリソースを扱う事が出来る
○ コンテナのライフサイクルをタスクの種別毎に分類
14
GPU as a Service の要件 ~プロバイダ側~ 2/2
Temporary Batch task
● タスクを一度だけ実行, e.g. training task
● タスク終了後にコンテナ停止, GPUを解放
Long running Service task
● ウェブサービス, e.g. Jupyter Notebook
● コンテナの停止までGPUは解放されない
User
タスクの種類を指定
Copyright © NTT Communications Corporation.
15
Agenda
1. 背景&目的
2. GPU環境の望ましい要件
3. コンテナ技術関連の各種OSSツール比較
4. OpenStack連携によるマルチテナントの実現
5. GPU Container as a Service つくってみた
Copyright © NTT Communications Corporation.
16
前提知識
GPUコンテナを実現するための要素技術
Docker Nvidia Docker
Copyright © NTT Communications Corporation.
● Docker 社による コンテナ管理プラットフォーム
○ 簡単なコマンドでアプリケーション環境をデプロイ出来る
$ docker run image_name -p 80:80
● コンテナ毎に個々のデバイスを分離出来る
● ユーザが自身で用意したイメージを利用出来る
○ アプリの実行に必要なライブラリ等を纏めたもの
17
Docker
Copyright © NTT Communications Corporation.
18
Nvidia Docker
● DockerからGPUを扱う事を容易にする為のツール
○ コンテナへGPUリソースを割り当てる事が出来る
$ NV_GPU=0,1 nvidia-docker run nvidia/cuda nvidia-smi
● Deep Learning 用のイメージが公式で提供されている
○ nvidia/cuda など
○ CUDA Toolkit (SDK) を包含
Copyright © NTT Communications Corporation.
Host
ContainerVM
19
Docker / Nvidia Docker の利点 1/2
自動マウント
コンテナ化
Nvidia Driver
Applic
ations
CUDA Toolkit (SDK)
Container
Applicati
ons
CUDA
Toolkit
(SDK)
nvidia-kernel-module
Nvidia
Driver
Nvidia Driver
イメージ化
Applic
ations
Appli
catio
ns
Dockerイメー
ジおよび
NvidiaDocker
の自動マウント
機能により
バージョン不整
合を解決
Host
Nvidia Driverなし
バージョンが整
合してないとア
プリが正常動作
しない
Nvidia
Driver
Applicati
ons
CUDA
Toolkit
(SDK)
Copyright © NTT Communications Corporation.
Host
ContainerVM
20
Docker / Nvidia Docker の利点 2/2
コンテナ化
Nvidia Driver
Applic
ations
CUDA Toolkit (SDK)
Container
Applicati
ons
CUDA
Toolkit
(SDK)
nvidia-kernel-module
Nvidia
Driver
Nvidia Driver
Applic
ations
Appli
catio
ns
Host
Nvidia Driverなし
Nvidia
Driver
GPU
GPU GPU
Applicati
ons
CUDA
Toolkit
(SDK)
ホストにNVIDIA
Driverがないた
め監視が難しい
通常通り
NVIDIA
Management
Library (NVML)
を利用してGPU
を監視可
Copyright © NTT Communications Corporation.
• サービス提供の為に COE (Container Orchestration Engine) が必要
– GPU サーバ群をクラスタとして管理・提供する必要がある
– 効率的にGPUリソースを提供す必要がある
21
コンテナ関連OSSツールの比較
GPU as a Service の適切な実現手段となる
様々なコンテナ関連OSSツールの調査・検証を実施
OpenStack
Zun
Docker Swarm /
Swarm Mode
Apache Mesos Kubernetes
Copyright © NTT Communications Corporation.
22
コンテナ関連OSSツールの検証項目
検証項目を以下のように設定
GPUクラスタ
管理
GPUの指定
複数割り当て
GPUの分離
Docker
サポート
バッチタスク
実行可能か
OpenStackZun
DockerSwarm
/ SwarmMode
mesos
Kubernetes
Copyright © NTT Communications Corporation.
23
コンテナ関連OSSツールの検証項目
検証項目を以下のように設定
GPUクラスタ
管理
GPUの指定
複数割り当て
GPUの分離
Docker
サポート
バッチタスク
実行可能か
OpenStackZun
DockerSwarm
/ SwarmMode
mesos
Kubernetes
・ユーザが自身でGPU数を指定可能
・複数GPUをコンテナへ割り当て可能
Copyright © NTT Communications Corporation.
24
コンテナ関連OSSツールの検証項目
検証項目を以下のように設定
GPUクラスタ
管理
GPUの指定
複数割り当て
GPUの分離
Docker
サポート
バッチタスク
実行可能か
OpenStackZun
DockerSwarm
/ SwarmMode
mesos
Kubernetes
・各コンテナへ異なるGPUを割り当て可能
・ビジーなGPUは他コンテナへ割り当て不可
Copyright © NTT Communications Corporation.
25
コンテナ関連OSSツールの検証項目
検証項目を以下のように設定
GPUクラスタ
管理
GPUの指定
複数割り当て
GPUの分離
Docker
サポート
バッチタスク
実行可能か
OpenStackZun
DockerSwarm
/ SwarmMode
mesos
Kubernetes
・コンテナ内部のプロセスが停止時に
 自動的にコンテナが停止する
Copyright © NTT Communications Corporation.
• OpenStack 上でコンテナを管理するためのツール
• OpenStack内部で基本的なコンテナの制御 (i.e. CRUD) のみ提供
26
OpenStack Zun
Zun の
マスコットキャラクタ
Copyright © NTT Communications Corporation.
● GPUリソースがサポートされていない
○ Docker に “CpuShares” and “Memory” パラメータのみ渡す事が可能
○ GPU対応の話題がコミュニティ側で挙がっていない
27
OpenStack Zun
OpenStack Zun は Dockerサポート 以外の
要件を満たしていない
Copyright © NTT Communications Corporation.
28
OpenStack Zun の検証結果
GPUクラスタ
管理
GPUの指定
複数割り当て
GPUの分離
Docker
サポート
バッチタスク
実行可能か
OpenStackZun
✗ ✗ ✗ ✔ ✗
DockerSwarm
/ SwarmMode
mesos
Kubernetes
Copyright © NTT Communications Corporation.
Docker Swarm / swarm mode
29
● Docker ネイティブなクラスタ管理ツール
● Dockerが展開されたマシン複数台から簡単にクラスタを構築出来る
● Docker v1.12 以上でDockerに標準で組み込まれている
Internal Distributed State Store
Manager
(follower)
Manager
(leader)
Manager
(follower)
Worker Worker Worker Worker Worker Worker
Copyright © NTT Communications Corporation.
30
Docker Swarm / swarm mode
● Docker Swarm は GPU をサポートしていない
○ 現在もGPU対応が Docker Project において進められている
■ https://github.com/docker/docker/issues/23917
● Nvidia Docker も同様にサポートされていない
○ GPUコンテナに必要なライブラリ群をマウント出来ない
Docker Swarm / swarm mode は
“GPUクラスタ管理” を満たしていない
Copyright © NTT Communications Corporation.
31
Docker Swarm / Swarm Mode の検証結果
GPUクラスタ
管理
GPUの指定
複数割り当て
GPUの分離
Docker
サポート
バッチタスク
実行可能か
OpenStackZun
✗ ✗ ✗ ✔ ✗
DockerSwarm
/ SwarmMode ✗ ✗ ✗ ✔ ✗
mesos
Kubernetes
Copyright © NTT Communications Corporation.
32
Mesos
● Apacheソフトウェア財団によるクラスタ管理ツール
● 効率的かつ動的なリソースの分配や共有が可能
● 分散アプリケーションやフレームワークを Mesos Master が制御
○ e.g. Marathon, Chronos, Hadoop...
Copyright © NTT Communications Corporation.
33
● Mesos の GPU サポート状況
○ Mesos v1.0.0 以上で Nvidia GPU に対応している
○ CPU や Memoryと同様に GPU も管理する事が出来る
Mesos
Copyright © NTT Communications Corporation.
34
Mesos
Task Type Frameworks GPU + Mesos GPU + Docker
Batch
Chronos ✗ N/A
Metronome ✗ N/A
Service
Aurona ✔ ✗
Marathon ✔ ✗
Mesos フレームワークは二種類のコンテナを扱う事が可能
- Mesos コンテナ・Docker コンテナ
Copyright © NTT Communications Corporation.
35
Apache Mesos の検証結果
GPUクラスタ
管理
GPUの指定
複数割り当て
GPUの分離
Docker
サポート
バッチタスク
実行可能か
OpenStackZun
✗ ✗ ✗ ✔ ✗
DockerSwarm
/ SwarmMode ✗ ✗ ✗ ✔ ✗
mesos
✔ ✔ ✔ ✗ ✔
Kubernetes
Copyright © NTT Communications Corporation.
36
Kubernetes
● Google による Container Orchestration Engine (COE)
● コンテナのクラスタリング・オートスケーリング等の様々な機能を提供
● コミュニティも活発で頻繁に議論や機能の開発が行われている
Copyright © NTT Communications Corporation.
● コンテナは Pod と呼ばれる単位で管理される
○ Podは単一もしくは複数のコンテナで構成される
○ Pod単位で CRUD 等の様々な処理が行われる
タスク種別毎の Pod 管理方法
37
Kubernetes
Node A
Pod A Pod B Service Task : Pod, ReplicaSet
Deployment など
Batch Task : Job など
Copyright © NTT Communications Corporation.
● コンテナの CRUD 管理 は マニフェストファイル で行う
○ Pod 及び Pod 内のコンテナの情報を定義する
■ Podの管理方法 (Kind)
■ コンテナ・コンテナイメージ名など
○ yaml・jsonの各種形式で定義可能
○ CLI (kubectl) や WebUI から利用可能
38
Kubernetes
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
conatiners:
- name: nginx
image: nginx
ports:
- containerPort: 80
User
Master
Node
Pod
Minion
NodeManifest
Copyright © NTT Communications Corporation.
● KubernetesのGPUサポート状況
○ v1.3.x から試験的にGPUスケジューリングが導入された
■ GPU as a Service の要件を満たしていない
● 複数GPUが割り当て出来ない
● GPUの分離が出来ない
○ v1.6 以上で Alpha 版として GPUスケジューリングをサポート
■ GPUスケジューリングの機能が改善された
● v1.3.x ~ v1.5.x までの問題が解決されている
■ 自動的にノード上のGPU数を検出できる
39
Kubernetes
v1.6系を利用
Copyright © NTT Communications Corporation.
● 複数GPUを単一のコンテナに割り当て可能
40
Kubernetes
コンテナ内の情報
マニフェスト内でGPU数を指定する
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.39 Driver Version: 375.39 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla K10.G2.8GB Off |0000:00:05.0 Off | 0 |
| N/A 39C P8 17W / 117W | 0MiB / 3527MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla K10.G2.8GB Off |0000:00:06.0 Off | 0 |
| N/A 41C P8 18W / 117W | 0MiB / 3527MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
resources:
limits:
alpha.Kubernetes.io/nvidia-gpu: 2
requests:
alpha.Kubernetes.io/nviida-gpu: 2
command: [“/bin/bash”, “-c”]
args: [“nvidia-smi” && tail -f /dev/null]
Copyright © NTT Communications Corporation.
● コンテナ間でGPUの分離が可能
41
Kubernetes
Copyright © NTT Communications Corporation.
● バッチタスクに対応
42
Kubernetes
apiVersion: batch/v1
kind: Job
...
limits:
alpha.Kubernetes.io/nvidia-gpu: 2
requests:
alpha.Kubernetes.io/nviida-gpu: 2
 ...
 command: [“/bin/bash”, “-c”]
args: [“nvidia-smi”]
...
タスクの種類をマニフェスト内で定義 Podの情報 (起動時)
$ kubectl get pods -a -o wide
NAME READY STATUS RESTARTS AGE
nbody-swsdj 0/1 Completed 0 2m
$ kubectl get jobs
NAME DESIRED SUCCESSFUL AGE
nbody 1 1 2m
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nbody-swsdj 1/1 Running 0 5s
$ kubectl get jobs
NAME DESIRED SUCCESSFUL AGE
nbody 1 0 7s
Podの情報 (終了時)
Copyright © NTT Communications Corporation.
43
検証結果
GPUクラスタ
管理
GPUの指定
複数割り当て
GPUの分離
Docker
サポート
バッチタスク
実行可能か
OpenStackZun
✗ ✗ ✗ ✔ ✗
DockerSwarm
/ SwarmMode ✗ ✗ ✗ ✔ ✗
mesos
✔ ✔ ✔ ✗ ✔
Kubernetes
✔ ✔ ✔ ✔ ✔
Copyright © NTT Communications Corporation.
44
Agenda
1. 背景&目的
2. GPU環境の望ましい要件
3. コンテナ技術関連の各種OSSツール比較
4. OpenStack連携によるマルチテナントの実現
5. GPU Container as a Service つくってみた
Copyright © NTT Communications Corporation.
Kubernetes でのマルチテナント実現手法は 2種類 ある
 方法1.OpenStack のテナントごとにk8sをデプロイする
- 1-1 OpenStack Magnumでデプロイ
- 1-2 OpenStack Heatでデプロイ
 方法2.Kubernetes の認証・認可に OpenStack Keystone を用いる
45
Kubernetes を用いたマルチテナントの実現
OpenStack
Tenant A
k8s
Tenant B
k8s
OpenStack
Tenant A
Tenant B
Kubernetes
NamespaceA
NamespaceB
方法1 方法2
Copyright © NTT Communications Corporation.
● OpenStack 上で COE のクラスタ環境を簡単に構築してくれるコンポーネント
○ Kubernetes や Mesos などに対応している
● OpenStack 環境内に Kubernetes クラスタの構築が可能
○ OpenStack Cinder や Octavia (LBaaS) 等と連携出来る
○ 後から 容易に Minion Node 数を増減出来る
46
方法1-1 Magnum
Tenant A
Magnum
API
Tenant B
Copyright © NTT Communications Corporation.
47
• GPU 対応の k8s 1.6 はサポートされていない
– 現在の Magnum の k8s 対応状況
Minion Node 構築用のOSイメージにより異なる
• [Fedora Atomic]: k8s 1.5.3 [CoreOS]: k8s 1.5.2
• 公式サポートのイメージに Nvidia Driver が含まれていない
– GPU対応には 独自 OS イメージの作成が必要になる
• 独自設定で k8s 1.6 が利用出来るかを検証を行った
– ユーザ側で書き換える事が出来ない内部の設定ファイルを変更
• 現在の Magnum では構築出来ない
• k8s 1.6 と Magnum が認証連携出来ない
方法1-1 Magnum
Copyright © NTT Communications Corporation.
• OpenStack 上で オーケストレーション を行うコンポーネント
– Heat Template に基づいて VM や NW などを構築出来る
– k8s が公式メンテナンスしている Heat Template がある
• k8s 1.6 向けのテンプレートが存在するが ...
• ユーザ自身が柔軟なクラスタ環境を構築出来る
– ユーザ側で Heat Template を直接編集出来る
• Heat Template を編集する事で Nvidia Driver のインストール自動化も可能
• k8s 1.6 を構築可能か検証を行った
– 現在の OpenStack Heat では構築出来ない
• 必要な各種ファイルの設定や配置が適切でない
48
方法1-1 Heat
Copyright © NTT Communications Corporation.
方法2 Keystone 連携
● 認証処理について
○ Kubernetes のユーザ認証を Keystone へ委譲出来る
○ OpenStackの既存ユーザを用いた認証が可能
● 認可処理について
○ OpenStack のテナント と Namespace の対応付けの設定が必要
■ Kubernetes は Namespace と呼ばれるテナント分離の仕組みがある
■ Kubernetes の 認可の仕組み (RBACやABAC) を利用する
○ Keystone のみで認可を実現することは現状出来ない
■ https://github.com/Kubernetes/Kubernetes/pull/25624
49
Copyright © NTT Communications Corporation.
マルチテナント実現手法の比較
● k8s 1.6 対応 の Heat 及び Keystone の2手法を以下の観点で比較し、
検証環境における適切なマルチテナント実現方法を選択する
○ GPUリソースの分離
○ プロバイダ視点でのGPU監視
○ コンテナ配備先の分離
○ ネットワークの分離
○ OpenStack 上のVMとの通信
50
Copyright © NTT Communications Corporation.
GPUリソース
の分離
プロバイダ視点
GPUの監視
コンテナ
配備先の分離
ネットワークの
分離
OpenStack
VMとの通信
方法1
OpenStackの
テナントごとに
k8sを展開
テナント単位 困難 テナント単位
テナント単位
(VXLAN,
GRE…)
Tenant
Network 内
方法2
k8s
認証/認可に
Keystone
全テナント
共有
可能 全テナント
共有
全テナント
共有
(Flat +
Iptables)
Floating IP
経由
51
マルチテナント実現手法の比較
● GPUリソースをなるべく全体で共有したい
● GPUリソースをプロバイダ側で監視したい
● 厳密にNW等が分離されている必要がない
➡ 方法2を選択
今回の検証環境の要件
Copyright © NTT Communications Corporation.
52
Agenda
1. 背景&目的
2. GPU環境の望ましい要件
3. コンテナ技術関連の各種OSSツール比較
4. OpenStack連携によるマルチテナントの実現
5. GPU Container as a Service つくってみた
Copyright © NTT Communications Corporation.
複数台のGPU搭載サーバで Kubernetes のクラスタを組んでいる
53
検証環境の概念図
Minion Node1
Deploy/Manage Pods
ユーザ
GPU x 8
(Tesla P100)
Minion Node2
GPU x 4
(Tesla GRID K2)
Minion Node3
GPU x 2
(Tesla K10)
Minion Node4
GPU x 2
(Tesla K10)
OpenStack Env
Keystone
Keystone 連携による
マルチテナントの実現Master
Node
Copyright © NTT Communications Corporation.
54
Demo
Kubernetes 上で Digits (GPU) を実行してみた
Copyright © NTT Communications Corporation.
● 各ノード上でのGPUコンテナの有効化
1. Nvidia Driver のインストール
■ http://www.nvidia.co.jp/Download/index.aspx?lang=jp
2. Nvidia docker のインストール
■ https://github.com/NVIDIA/nvidia-docker
3. Kubernetes 環境の構築
■ kubelet の起動時に以下のパラメータを付与する
■ --feature-gates=Accelerators=true
55
GPUクラスタの構築と管理 〜構築〜 1/3 
Copyright © NTT Communications Corporation.
● ユーザが指定のGPUを選択可能にする
○ 該当ノードにラベル (GPU名) を設定する
■ PoC環境では, GPUの種類に応じて`p100`,`k2` , `k10` を指定可能
$ kubectl label nodes <nodeName> gputype=p100
○ ユーザはマニフェストで需要に見合ったGPUラベル名を指定
nodeSelector.gputype: p100
56
GPUクラスタの構築と管理 〜構築〜 2/3
Pod
Minion Node 1
LABEL: p100
Tesla P100
Minion Node 2
LABEL: k2
Tesla K2
Minion Node 3
LABEL: k10
Tesla K10
•••
p100
Deploy
Copyright © NTT Communications Corporation.
● Kubernetes と Keystone の連携
○ Kubernetes 側での設定
■ kube-apiserver へのパラメータ付与
--experimental-keystone-url
--experimental-keystone-cafile
○ OpenStack 側での設定
■ Keystone Endpoint の HTTPS 化
● リバースプロキシ等を活用する
○ 上記ののちに認可設定を Kubernetes で行う
■ Keystone に存在する既存ユーザへ Role の適用
57
GPUクラスタの構築と管理 〜構築〜 3/3
Copyright © NTT Communications Corporation.
● GPUリソースの監視
○ Kubernetes における GPU監視方法
■ Kubernetes に標準で実装されているGPUリソース監視機能
■ NVIDIAによって提供されている NVdia Management Library (NVML)
58
GPUクラスタの構築と運用 〜運用〜 1/3
Copyright © NTT Communications Corporation.
● k8sではGPU数を監視できる機能が標準で備わっている
● 以下のコマンドで使用状況を見ることが可能
○ $ kubectl describe node
59
GPUクラスタの構築と運用 〜運用〜 2/3
・利用可能なGPU数を正確に取得
 する事ができない
・どのコンテナがGPUを利用中
 かは分からない
Copyright © NTT Communications Corporation.
● NVIDIAは NVdia Management Library (NVML) を提供している
○ 様々なGPUメトリクスを取得する事が可能
60
GPUクラスタの構築と運用 〜運用〜 3/3
e.g.
nvml.util.gpu : GPU 利用率 (%)
nvml.mem.used : GPUの使用中メモリ量
nvml.temp : GPUの温度
Copyright © NTT Communications Corporation.
61
GPUクラスタの構築と運用 〜運用〜 3/3
Copyright © NTT Communications Corporation.
62
まとめ
1. 背景&目的
2. GPU環境の望ましい要件
3. コンテナ技術関連の各種OSSツール比較
4. OpenStack連携によるマルチテナントの実現
5. GPU Container as a Service つくってみた
Copyright © NTT Communications Corporation.
63
Special Thanks to...
• 横山智大
• 松下正樹
• 小倉真人
• Ankit Purohit
• 奥村昌和
• 逸見彰一郎
Copyright © NTT Communications Corporation.
64
ご清聴ありがとうございました

More Related Content

PDF
GPU Container as a Serviceを実現するための最新OSS徹底比較 - OpenStack最新情報セミナー 2017年7月
PDF
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
PPTX
Rootlessコンテナ
PDF
containerdの概要と最近の機能
PPTX
分散ストレージ技術Cephの最新情報
PDF
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
PDF
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
PDF
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
GPU Container as a Serviceを実現するための最新OSS徹底比較 - OpenStack最新情報セミナー 2017年7月
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
Rootlessコンテナ
containerdの概要と最近の機能
分散ストレージ技術Cephの最新情報
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか

What's hot (20)

PDF
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
PPTX
イベント・ソーシングを知る
PDF
超実践 Cloud Spanner 設計講座
PPTX
A critique of ansi sql isolation levels 解説公開用
PDF
コンテナ時代のOpenStack
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
PPTX
Amazon EKS への道 ~ EKS 再入門 ~
PDF
KubernetesでRedisを使うときの選択肢
PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
PDF
DockerとPodmanの比較
PDF
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
PPTX
Slurmのジョブスケジューリングと実装
PDF
Linux KVM のコードを追いかけてみよう
PDF
シリコンバレーの「何が」凄いのか
PDF
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
PDF
Maven基礎
PPTX
CRX: Container Runtime Executive 
PPTX
root権限無しでKubernetesを動かす
PPTX
【DL輪読会】DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Dri...
PPTX
OpenStackを使用したGPU仮想化IaaS環境 事例紹介
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
イベント・ソーシングを知る
超実践 Cloud Spanner 設計講座
A critique of ansi sql isolation levels 解説公開用
コンテナ時代のOpenStack
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Amazon EKS への道 ~ EKS 再入門 ~
KubernetesでRedisを使うときの選択肢
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
DockerとPodmanの比較
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
Slurmのジョブスケジューリングと実装
Linux KVM のコードを追いかけてみよう
シリコンバレーの「何が」凄いのか
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Maven基礎
CRX: Container Runtime Executive 
root権限無しでKubernetesを動かす
【DL輪読会】DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Dri...
OpenStackを使用したGPU仮想化IaaS環境 事例紹介
Ad

Similar to GPU Container as a Service を実現するための最新OSS徹底比較 (20)

PDF
EnrootとPyxisで快適コンテナ生活
PDF
Singularity Containers for Enterprise Use
PDF
コンテナ導入概要資料2018
PPTX
MEC (Mobile Edge Computing) + GPUコンピューティングについて
PPTX
Cloud Foundry as Containerized Services - Cloud Foundry Days Tokyo 2016
PPTX
Dockerエンタープライズ利用について
PPTX
Mesos consulで構築するマイクロサービスインフラ
PPTX
OpenStack Summit Vancouverにおけるコンテナ関連トピック
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
PDF
Docker for Windows & Web Apps for Containers 実践活用技法
PDF
インフラエンジニアのためのRancherを使ったDocker運用入門
PPTX
【Cloud Week 2015@Hokkaido University】Dockerとインフラ運用自働化とIoT
PDF
Using Kubernetes on Google Container Engine
PDF
NVIDIA_AI_Enterprise_for_Red_Hat_OpenShift.pdf
PDF
Docker国内外本番環境サービス事例のご紹介
PDF
Dockerの利用事例
PDF
Dockerの仕組みとIIJ社内での利用例
PDF
Osc fukuoka xAI Meetup
PDF
Open Source x AI
PDF
オトナのDocker入門
EnrootとPyxisで快適コンテナ生活
Singularity Containers for Enterprise Use
コンテナ導入概要資料2018
MEC (Mobile Edge Computing) + GPUコンピューティングについて
Cloud Foundry as Containerized Services - Cloud Foundry Days Tokyo 2016
Dockerエンタープライズ利用について
Mesos consulで構築するマイクロサービスインフラ
OpenStack Summit Vancouverにおけるコンテナ関連トピック
コンテナ未経験新人が学ぶコンテナ技術入門
Docker for Windows & Web Apps for Containers 実践活用技法
インフラエンジニアのためのRancherを使ったDocker運用入門
【Cloud Week 2015@Hokkaido University】Dockerとインフラ運用自働化とIoT
Using Kubernetes on Google Container Engine
NVIDIA_AI_Enterprise_for_Red_Hat_OpenShift.pdf
Docker国内外本番環境サービス事例のご紹介
Dockerの利用事例
Dockerの仕組みとIIJ社内での利用例
Osc fukuoka xAI Meetup
Open Source x AI
オトナのDocker入門
Ad

More from NTT Communications Technology Development (20)

PDF
クラウドを最大限活用するinfrastructure as codeを考えよう
PPTX
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
PDF
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
PPTX
マルチクラウドでContinuous Deliveryを実現するSpinnakerについて
PDF
SpinnakerとKayentaで 高速・安全なデプロイ!
PDF
100Gbps OpenStack For Providing High-Performance NFV
PDF
Can we boost more HPC performance? Integrate IBM POWER servers with GPUs to O...
PDF
AWS re:Invent2017で見た AWSの強さとは
PDF
分散トレーシング技術について(Open tracingやjaeger)
PDF
Mexico ops meetup発表資料 20170905
PDF
NTT Tech Conference #2 - closing -
PPTX
イケてない開発チームがイケてる開発を始めようとする軌跡
PDF
SpinnakerとOpenStackの構築
PDF
Troveコミュニティ動向
PPTX
Web rtc for iot, edge computing use cases
PDF
OpenStack Ops Mid-Cycle Meetup & Project Team Gathering出張報告
PDF
NTT Tech Conference #1 Opening Keynote
PDF
NTT Tech Conference #1 Closing Keynote
PDF
OpsからみたOpenStack Summit
クラウドを最大限活用するinfrastructure as codeを考えよう
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
マルチクラウドでContinuous Deliveryを実現するSpinnakerについて
SpinnakerとKayentaで 高速・安全なデプロイ!
100Gbps OpenStack For Providing High-Performance NFV
Can we boost more HPC performance? Integrate IBM POWER servers with GPUs to O...
AWS re:Invent2017で見た AWSの強さとは
分散トレーシング技術について(Open tracingやjaeger)
Mexico ops meetup発表資料 20170905
NTT Tech Conference #2 - closing -
イケてない開発チームがイケてる開発を始めようとする軌跡
SpinnakerとOpenStackの構築
Troveコミュニティ動向
Web rtc for iot, edge computing use cases
OpenStack Ops Mid-Cycle Meetup & Project Team Gathering出張報告
NTT Tech Conference #1 Opening Keynote
NTT Tech Conference #1 Closing Keynote
OpsからみたOpenStack Summit

GPU Container as a Service を実現するための最新OSS徹底比較

  • 1. Copyright © NTT Communications Corporation. Transform your business, transcend expectations with our technologically advanced solutions. GPU Container as a Service を 実現するための最新OSS徹底比較 張 暁晶・角田佳史 松本赳明・原田 和明
  • 2. Copyright © NTT Communications Corporation. 1 自己紹介 角田 佳史 Yoshifumi Sumida y.sumida@ntt.com 技術開発部 ソフトウェアエンジニア 興味:IaaS、コンテナ 張 暁晶 Xiaojing Zhang xiaojing.zhang@ntt.com 技術開発部 ソフトウェアエンジニア 興味:ソフトウェア工学、 ヘテロジニアスなクラウド
  • 3. Copyright © NTT Communications Corporation. 2 Agenda 1. 背景&目的 2. GPU環境の望ましい要件 3. コンテナ技術関連の各種OSSツール比較 4. OpenStack連携によるマルチテナントの実現 5. GPU Container as a Service つくってみた
  • 4. Copyright © NTT Communications Corporation. 3 Agenda 1. 背景&目的 2. GPU環境の望ましい要件 3. コンテナ技術関連の各種OSSツール比較 4. OpenStack連携によるマルチテナントの実現 5. GPU Container as a Service つくってみた
  • 5. Copyright © NTT Communications Corporation. ● AI、機械学習、ビッグデータ解析 ○ 高速な計算資源としてGPUが幅広く活用されている ● NTTコミュニケーションズでも注目 ○ AI エンジン“COTOHA”、三井化学様における品質予測事例、など http://www.ntt.com/business/services/application/ai/cotoha.html http://www.ntt.com/about-us/press-releases/news/article/2016/20160915.html ○ GPUを用いた学習・検証に対する社内ニーズの高まり 4 背景
  • 6. Copyright © NTT Communications Corporation. ● 高速な並列データ処理が可能なGPUの需要がある ○ 学習や解析などのワークロードは非常に高負荷 ● 一方でGPUの調達における予算や時間がネックになることも... ○ クラウドサービスを利用する事により解決出来る ○ 主要クラウドプロバイダは既にGPUインスタンスの提供を開始 ■ Azure、AWS、GCP、Bluemix (Bare) 5 GPU利用のトレンド
  • 7. Copyright © NTT Communications Corporation. Node 4 Node 3 Node 2 Node 1 6 目的 社内向けに検証環境として GPU as a Service を提供する GPU GPU GPU GPUリソースの指定 GPUリソースの管理と スケジューリング GPU GPU as a Service
  • 8. Copyright © NTT Communications Corporation. ● クラウド基盤は OpenStack を利用 ● VMインスタンスとしてGPUリソースを提供 ○ VMにGPUを認識させるため、PCI Passthrough を利用 ○ GPUリソースとして、3種類の NVIDIA製 GPU を利用 ● 主に機械学習やディープラーニングなどに利用されている 7 社内プライベートクラウドでのGPU提供の現状
  • 9. Copyright © NTT Communications Corporation. 8 VMでのGPU提供の問題 1. 機械学習用の環境構築のユーザ負担が大きい ○ VM毎に適切なGPUデバイスドライバをインストールする必要がある ○ デバイスドライバ/CUDA/アプリ間でバージョン整合性を保つ必要がある 2. 特に処理が無い時でもGPUリソースが無駄に占有される ○ 社内向けの検証環境で提供可能なGPU数が少ないため 3. プロバイダ側でGPUデバイスを監視出来ない ○ GPUデバイスを VM へ Passthrough しているため
  • 10. Copyright © NTT Communications Corporation. 1. ユーザの環境構築が容易 2. GPUリソースを使用後に迅速に解放出来る 3. GPUリソースの使用状況を監視出来る 9 コンテナ技術による問題解決 GPU as a Service 実現のため コンテナ技術 を活用
  • 11. Copyright © NTT Communications Corporation. 10 コンテナ技術とは INFRASTRUCTURE INFRASTRUCTURE HOST OSHOST OS HYPERVISOR CONTAINER ENGINE GUEST OS APP BIN/LIBS BIN/LIBS APPS APPS ハイパーバイザ型仮想化 コンテナ型仮想化 ● VMと比較して軽量 ● リソースを迅速に解放可能 ● ホスト所有のデバイスを利用 VM CONTAINER BIN/LIBS GUEST OS APP BIN/LIBS
  • 12. Copyright © NTT Communications Corporation. 11 Agenda 1. 背景&目的 2. GPU環境の望ましい要件 3. コンテナ技術関連の各種OSSツール比較 4. OpenStack連携によるマルチテナントの実現 5. GPU Container as a Service つくってみた
  • 13. Copyright © NTT Communications Corporation. ● As a Service として利用できる ○ 即時に利用可能・マルチテナント対応 ● GPU環境のデプロイが容易である ○ GPU数など幾つかの事項を指定するのみで良い ○ コンテナ技術でデファクトスタンダードのDockerが利用できる 12 GPU as a Service の要件 ~ユーザ側~ GPU node User GaaS GPU数を指定 Dockerコンテナ作成
  • 14. Copyright © NTT Communications Corporation. 13 ● GPU搭載サーバをクラスタとして管理できる ○ PoC上のGPUクラスタは以下の NVIDIA製 GPU を利用している ● Tesla K2, Tesla K10, Tesla P100 ● コンテナ間で GPU の分離ができる GPU as a Service の要件 ~プロバイダ側~ 1/2 GPU 複数GPUの割り当て GPU GPUの分離 GPU GPU
  • 15. Copyright © NTT Communications Corporation. ● 効率的にGPUリソースを扱う事が出来る ○ コンテナのライフサイクルをタスクの種別毎に分類 14 GPU as a Service の要件 ~プロバイダ側~ 2/2 Temporary Batch task ● タスクを一度だけ実行, e.g. training task ● タスク終了後にコンテナ停止, GPUを解放 Long running Service task ● ウェブサービス, e.g. Jupyter Notebook ● コンテナの停止までGPUは解放されない User タスクの種類を指定
  • 16. Copyright © NTT Communications Corporation. 15 Agenda 1. 背景&目的 2. GPU環境の望ましい要件 3. コンテナ技術関連の各種OSSツール比較 4. OpenStack連携によるマルチテナントの実現 5. GPU Container as a Service つくってみた
  • 17. Copyright © NTT Communications Corporation. 16 前提知識 GPUコンテナを実現するための要素技術 Docker Nvidia Docker
  • 18. Copyright © NTT Communications Corporation. ● Docker 社による コンテナ管理プラットフォーム ○ 簡単なコマンドでアプリケーション環境をデプロイ出来る $ docker run image_name -p 80:80 ● コンテナ毎に個々のデバイスを分離出来る ● ユーザが自身で用意したイメージを利用出来る ○ アプリの実行に必要なライブラリ等を纏めたもの 17 Docker
  • 19. Copyright © NTT Communications Corporation. 18 Nvidia Docker ● DockerからGPUを扱う事を容易にする為のツール ○ コンテナへGPUリソースを割り当てる事が出来る $ NV_GPU=0,1 nvidia-docker run nvidia/cuda nvidia-smi ● Deep Learning 用のイメージが公式で提供されている ○ nvidia/cuda など ○ CUDA Toolkit (SDK) を包含
  • 20. Copyright © NTT Communications Corporation. Host ContainerVM 19 Docker / Nvidia Docker の利点 1/2 自動マウント コンテナ化 Nvidia Driver Applic ations CUDA Toolkit (SDK) Container Applicati ons CUDA Toolkit (SDK) nvidia-kernel-module Nvidia Driver Nvidia Driver イメージ化 Applic ations Appli catio ns Dockerイメー ジおよび NvidiaDocker の自動マウント 機能により バージョン不整 合を解決 Host Nvidia Driverなし バージョンが整 合してないとア プリが正常動作 しない Nvidia Driver Applicati ons CUDA Toolkit (SDK)
  • 21. Copyright © NTT Communications Corporation. Host ContainerVM 20 Docker / Nvidia Docker の利点 2/2 コンテナ化 Nvidia Driver Applic ations CUDA Toolkit (SDK) Container Applicati ons CUDA Toolkit (SDK) nvidia-kernel-module Nvidia Driver Nvidia Driver Applic ations Appli catio ns Host Nvidia Driverなし Nvidia Driver GPU GPU GPU Applicati ons CUDA Toolkit (SDK) ホストにNVIDIA Driverがないた め監視が難しい 通常通り NVIDIA Management Library (NVML) を利用してGPU を監視可
  • 22. Copyright © NTT Communications Corporation. • サービス提供の為に COE (Container Orchestration Engine) が必要 – GPU サーバ群をクラスタとして管理・提供する必要がある – 効率的にGPUリソースを提供す必要がある 21 コンテナ関連OSSツールの比較 GPU as a Service の適切な実現手段となる 様々なコンテナ関連OSSツールの調査・検証を実施 OpenStack Zun Docker Swarm / Swarm Mode Apache Mesos Kubernetes
  • 23. Copyright © NTT Communications Corporation. 22 コンテナ関連OSSツールの検証項目 検証項目を以下のように設定 GPUクラスタ 管理 GPUの指定 複数割り当て GPUの分離 Docker サポート バッチタスク 実行可能か OpenStackZun DockerSwarm / SwarmMode mesos Kubernetes
  • 24. Copyright © NTT Communications Corporation. 23 コンテナ関連OSSツールの検証項目 検証項目を以下のように設定 GPUクラスタ 管理 GPUの指定 複数割り当て GPUの分離 Docker サポート バッチタスク 実行可能か OpenStackZun DockerSwarm / SwarmMode mesos Kubernetes ・ユーザが自身でGPU数を指定可能 ・複数GPUをコンテナへ割り当て可能
  • 25. Copyright © NTT Communications Corporation. 24 コンテナ関連OSSツールの検証項目 検証項目を以下のように設定 GPUクラスタ 管理 GPUの指定 複数割り当て GPUの分離 Docker サポート バッチタスク 実行可能か OpenStackZun DockerSwarm / SwarmMode mesos Kubernetes ・各コンテナへ異なるGPUを割り当て可能 ・ビジーなGPUは他コンテナへ割り当て不可
  • 26. Copyright © NTT Communications Corporation. 25 コンテナ関連OSSツールの検証項目 検証項目を以下のように設定 GPUクラスタ 管理 GPUの指定 複数割り当て GPUの分離 Docker サポート バッチタスク 実行可能か OpenStackZun DockerSwarm / SwarmMode mesos Kubernetes ・コンテナ内部のプロセスが停止時に  自動的にコンテナが停止する
  • 27. Copyright © NTT Communications Corporation. • OpenStack 上でコンテナを管理するためのツール • OpenStack内部で基本的なコンテナの制御 (i.e. CRUD) のみ提供 26 OpenStack Zun Zun の マスコットキャラクタ
  • 28. Copyright © NTT Communications Corporation. ● GPUリソースがサポートされていない ○ Docker に “CpuShares” and “Memory” パラメータのみ渡す事が可能 ○ GPU対応の話題がコミュニティ側で挙がっていない 27 OpenStack Zun OpenStack Zun は Dockerサポート 以外の 要件を満たしていない
  • 29. Copyright © NTT Communications Corporation. 28 OpenStack Zun の検証結果 GPUクラスタ 管理 GPUの指定 複数割り当て GPUの分離 Docker サポート バッチタスク 実行可能か OpenStackZun ✗ ✗ ✗ ✔ ✗ DockerSwarm / SwarmMode mesos Kubernetes
  • 30. Copyright © NTT Communications Corporation. Docker Swarm / swarm mode 29 ● Docker ネイティブなクラスタ管理ツール ● Dockerが展開されたマシン複数台から簡単にクラスタを構築出来る ● Docker v1.12 以上でDockerに標準で組み込まれている Internal Distributed State Store Manager (follower) Manager (leader) Manager (follower) Worker Worker Worker Worker Worker Worker
  • 31. Copyright © NTT Communications Corporation. 30 Docker Swarm / swarm mode ● Docker Swarm は GPU をサポートしていない ○ 現在もGPU対応が Docker Project において進められている ■ https://github.com/docker/docker/issues/23917 ● Nvidia Docker も同様にサポートされていない ○ GPUコンテナに必要なライブラリ群をマウント出来ない Docker Swarm / swarm mode は “GPUクラスタ管理” を満たしていない
  • 32. Copyright © NTT Communications Corporation. 31 Docker Swarm / Swarm Mode の検証結果 GPUクラスタ 管理 GPUの指定 複数割り当て GPUの分離 Docker サポート バッチタスク 実行可能か OpenStackZun ✗ ✗ ✗ ✔ ✗ DockerSwarm / SwarmMode ✗ ✗ ✗ ✔ ✗ mesos Kubernetes
  • 33. Copyright © NTT Communications Corporation. 32 Mesos ● Apacheソフトウェア財団によるクラスタ管理ツール ● 効率的かつ動的なリソースの分配や共有が可能 ● 分散アプリケーションやフレームワークを Mesos Master が制御 ○ e.g. Marathon, Chronos, Hadoop...
  • 34. Copyright © NTT Communications Corporation. 33 ● Mesos の GPU サポート状況 ○ Mesos v1.0.0 以上で Nvidia GPU に対応している ○ CPU や Memoryと同様に GPU も管理する事が出来る Mesos
  • 35. Copyright © NTT Communications Corporation. 34 Mesos Task Type Frameworks GPU + Mesos GPU + Docker Batch Chronos ✗ N/A Metronome ✗ N/A Service Aurona ✔ ✗ Marathon ✔ ✗ Mesos フレームワークは二種類のコンテナを扱う事が可能 - Mesos コンテナ・Docker コンテナ
  • 36. Copyright © NTT Communications Corporation. 35 Apache Mesos の検証結果 GPUクラスタ 管理 GPUの指定 複数割り当て GPUの分離 Docker サポート バッチタスク 実行可能か OpenStackZun ✗ ✗ ✗ ✔ ✗ DockerSwarm / SwarmMode ✗ ✗ ✗ ✔ ✗ mesos ✔ ✔ ✔ ✗ ✔ Kubernetes
  • 37. Copyright © NTT Communications Corporation. 36 Kubernetes ● Google による Container Orchestration Engine (COE) ● コンテナのクラスタリング・オートスケーリング等の様々な機能を提供 ● コミュニティも活発で頻繁に議論や機能の開発が行われている
  • 38. Copyright © NTT Communications Corporation. ● コンテナは Pod と呼ばれる単位で管理される ○ Podは単一もしくは複数のコンテナで構成される ○ Pod単位で CRUD 等の様々な処理が行われる タスク種別毎の Pod 管理方法 37 Kubernetes Node A Pod A Pod B Service Task : Pod, ReplicaSet Deployment など Batch Task : Job など
  • 39. Copyright © NTT Communications Corporation. ● コンテナの CRUD 管理 は マニフェストファイル で行う ○ Pod 及び Pod 内のコンテナの情報を定義する ■ Podの管理方法 (Kind) ■ コンテナ・コンテナイメージ名など ○ yaml・jsonの各種形式で定義可能 ○ CLI (kubectl) や WebUI から利用可能 38 Kubernetes apiVersion: v1 kind: Pod metadata: name: nginx spec: conatiners: - name: nginx image: nginx ports: - containerPort: 80 User Master Node Pod Minion NodeManifest
  • 40. Copyright © NTT Communications Corporation. ● KubernetesのGPUサポート状況 ○ v1.3.x から試験的にGPUスケジューリングが導入された ■ GPU as a Service の要件を満たしていない ● 複数GPUが割り当て出来ない ● GPUの分離が出来ない ○ v1.6 以上で Alpha 版として GPUスケジューリングをサポート ■ GPUスケジューリングの機能が改善された ● v1.3.x ~ v1.5.x までの問題が解決されている ■ 自動的にノード上のGPU数を検出できる 39 Kubernetes v1.6系を利用
  • 41. Copyright © NTT Communications Corporation. ● 複数GPUを単一のコンテナに割り当て可能 40 Kubernetes コンテナ内の情報 マニフェスト内でGPU数を指定する +-----------------------------------------------------------------------------+ | NVIDIA-SMI 375.39 Driver Version: 375.39 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla K10.G2.8GB Off |0000:00:05.0 Off | 0 | | N/A 39C P8 17W / 117W | 0MiB / 3527MiB | 0% Default | +-------------------------------+----------------------+----------------------+ | 1 Tesla K10.G2.8GB Off |0000:00:06.0 Off | 0 | | N/A 41C P8 18W / 117W | 0MiB / 3527MiB | 0% Default | +-------------------------------+----------------------+----------------------+ resources: limits: alpha.Kubernetes.io/nvidia-gpu: 2 requests: alpha.Kubernetes.io/nviida-gpu: 2 command: [“/bin/bash”, “-c”] args: [“nvidia-smi” && tail -f /dev/null]
  • 42. Copyright © NTT Communications Corporation. ● コンテナ間でGPUの分離が可能 41 Kubernetes
  • 43. Copyright © NTT Communications Corporation. ● バッチタスクに対応 42 Kubernetes apiVersion: batch/v1 kind: Job ... limits: alpha.Kubernetes.io/nvidia-gpu: 2 requests: alpha.Kubernetes.io/nviida-gpu: 2  ...  command: [“/bin/bash”, “-c”] args: [“nvidia-smi”] ... タスクの種類をマニフェスト内で定義 Podの情報 (起動時) $ kubectl get pods -a -o wide NAME READY STATUS RESTARTS AGE nbody-swsdj 0/1 Completed 0 2m $ kubectl get jobs NAME DESIRED SUCCESSFUL AGE nbody 1 1 2m $ kubectl get pods NAME READY STATUS RESTARTS AGE nbody-swsdj 1/1 Running 0 5s $ kubectl get jobs NAME DESIRED SUCCESSFUL AGE nbody 1 0 7s Podの情報 (終了時)
  • 44. Copyright © NTT Communications Corporation. 43 検証結果 GPUクラスタ 管理 GPUの指定 複数割り当て GPUの分離 Docker サポート バッチタスク 実行可能か OpenStackZun ✗ ✗ ✗ ✔ ✗ DockerSwarm / SwarmMode ✗ ✗ ✗ ✔ ✗ mesos ✔ ✔ ✔ ✗ ✔ Kubernetes ✔ ✔ ✔ ✔ ✔
  • 45. Copyright © NTT Communications Corporation. 44 Agenda 1. 背景&目的 2. GPU環境の望ましい要件 3. コンテナ技術関連の各種OSSツール比較 4. OpenStack連携によるマルチテナントの実現 5. GPU Container as a Service つくってみた
  • 46. Copyright © NTT Communications Corporation. Kubernetes でのマルチテナント実現手法は 2種類 ある  方法1.OpenStack のテナントごとにk8sをデプロイする - 1-1 OpenStack Magnumでデプロイ - 1-2 OpenStack Heatでデプロイ  方法2.Kubernetes の認証・認可に OpenStack Keystone を用いる 45 Kubernetes を用いたマルチテナントの実現 OpenStack Tenant A k8s Tenant B k8s OpenStack Tenant A Tenant B Kubernetes NamespaceA NamespaceB 方法1 方法2
  • 47. Copyright © NTT Communications Corporation. ● OpenStack 上で COE のクラスタ環境を簡単に構築してくれるコンポーネント ○ Kubernetes や Mesos などに対応している ● OpenStack 環境内に Kubernetes クラスタの構築が可能 ○ OpenStack Cinder や Octavia (LBaaS) 等と連携出来る ○ 後から 容易に Minion Node 数を増減出来る 46 方法1-1 Magnum Tenant A Magnum API Tenant B
  • 48. Copyright © NTT Communications Corporation. 47 • GPU 対応の k8s 1.6 はサポートされていない – 現在の Magnum の k8s 対応状況 Minion Node 構築用のOSイメージにより異なる • [Fedora Atomic]: k8s 1.5.3 [CoreOS]: k8s 1.5.2 • 公式サポートのイメージに Nvidia Driver が含まれていない – GPU対応には 独自 OS イメージの作成が必要になる • 独自設定で k8s 1.6 が利用出来るかを検証を行った – ユーザ側で書き換える事が出来ない内部の設定ファイルを変更 • 現在の Magnum では構築出来ない • k8s 1.6 と Magnum が認証連携出来ない 方法1-1 Magnum
  • 49. Copyright © NTT Communications Corporation. • OpenStack 上で オーケストレーション を行うコンポーネント – Heat Template に基づいて VM や NW などを構築出来る – k8s が公式メンテナンスしている Heat Template がある • k8s 1.6 向けのテンプレートが存在するが ... • ユーザ自身が柔軟なクラスタ環境を構築出来る – ユーザ側で Heat Template を直接編集出来る • Heat Template を編集する事で Nvidia Driver のインストール自動化も可能 • k8s 1.6 を構築可能か検証を行った – 現在の OpenStack Heat では構築出来ない • 必要な各種ファイルの設定や配置が適切でない 48 方法1-1 Heat
  • 50. Copyright © NTT Communications Corporation. 方法2 Keystone 連携 ● 認証処理について ○ Kubernetes のユーザ認証を Keystone へ委譲出来る ○ OpenStackの既存ユーザを用いた認証が可能 ● 認可処理について ○ OpenStack のテナント と Namespace の対応付けの設定が必要 ■ Kubernetes は Namespace と呼ばれるテナント分離の仕組みがある ■ Kubernetes の 認可の仕組み (RBACやABAC) を利用する ○ Keystone のみで認可を実現することは現状出来ない ■ https://github.com/Kubernetes/Kubernetes/pull/25624 49
  • 51. Copyright © NTT Communications Corporation. マルチテナント実現手法の比較 ● k8s 1.6 対応 の Heat 及び Keystone の2手法を以下の観点で比較し、 検証環境における適切なマルチテナント実現方法を選択する ○ GPUリソースの分離 ○ プロバイダ視点でのGPU監視 ○ コンテナ配備先の分離 ○ ネットワークの分離 ○ OpenStack 上のVMとの通信 50
  • 52. Copyright © NTT Communications Corporation. GPUリソース の分離 プロバイダ視点 GPUの監視 コンテナ 配備先の分離 ネットワークの 分離 OpenStack VMとの通信 方法1 OpenStackの テナントごとに k8sを展開 テナント単位 困難 テナント単位 テナント単位 (VXLAN, GRE…) Tenant Network 内 方法2 k8s 認証/認可に Keystone 全テナント 共有 可能 全テナント 共有 全テナント 共有 (Flat + Iptables) Floating IP 経由 51 マルチテナント実現手法の比較 ● GPUリソースをなるべく全体で共有したい ● GPUリソースをプロバイダ側で監視したい ● 厳密にNW等が分離されている必要がない ➡ 方法2を選択 今回の検証環境の要件
  • 53. Copyright © NTT Communications Corporation. 52 Agenda 1. 背景&目的 2. GPU環境の望ましい要件 3. コンテナ技術関連の各種OSSツール比較 4. OpenStack連携によるマルチテナントの実現 5. GPU Container as a Service つくってみた
  • 54. Copyright © NTT Communications Corporation. 複数台のGPU搭載サーバで Kubernetes のクラスタを組んでいる 53 検証環境の概念図 Minion Node1 Deploy/Manage Pods ユーザ GPU x 8 (Tesla P100) Minion Node2 GPU x 4 (Tesla GRID K2) Minion Node3 GPU x 2 (Tesla K10) Minion Node4 GPU x 2 (Tesla K10) OpenStack Env Keystone Keystone 連携による マルチテナントの実現Master Node
  • 55. Copyright © NTT Communications Corporation. 54 Demo Kubernetes 上で Digits (GPU) を実行してみた
  • 56. Copyright © NTT Communications Corporation. ● 各ノード上でのGPUコンテナの有効化 1. Nvidia Driver のインストール ■ http://www.nvidia.co.jp/Download/index.aspx?lang=jp 2. Nvidia docker のインストール ■ https://github.com/NVIDIA/nvidia-docker 3. Kubernetes 環境の構築 ■ kubelet の起動時に以下のパラメータを付与する ■ --feature-gates=Accelerators=true 55 GPUクラスタの構築と管理 〜構築〜 1/3 
  • 57. Copyright © NTT Communications Corporation. ● ユーザが指定のGPUを選択可能にする ○ 該当ノードにラベル (GPU名) を設定する ■ PoC環境では, GPUの種類に応じて`p100`,`k2` , `k10` を指定可能 $ kubectl label nodes <nodeName> gputype=p100 ○ ユーザはマニフェストで需要に見合ったGPUラベル名を指定 nodeSelector.gputype: p100 56 GPUクラスタの構築と管理 〜構築〜 2/3 Pod Minion Node 1 LABEL: p100 Tesla P100 Minion Node 2 LABEL: k2 Tesla K2 Minion Node 3 LABEL: k10 Tesla K10 ••• p100 Deploy
  • 58. Copyright © NTT Communications Corporation. ● Kubernetes と Keystone の連携 ○ Kubernetes 側での設定 ■ kube-apiserver へのパラメータ付与 --experimental-keystone-url --experimental-keystone-cafile ○ OpenStack 側での設定 ■ Keystone Endpoint の HTTPS 化 ● リバースプロキシ等を活用する ○ 上記ののちに認可設定を Kubernetes で行う ■ Keystone に存在する既存ユーザへ Role の適用 57 GPUクラスタの構築と管理 〜構築〜 3/3
  • 59. Copyright © NTT Communications Corporation. ● GPUリソースの監視 ○ Kubernetes における GPU監視方法 ■ Kubernetes に標準で実装されているGPUリソース監視機能 ■ NVIDIAによって提供されている NVdia Management Library (NVML) 58 GPUクラスタの構築と運用 〜運用〜 1/3
  • 60. Copyright © NTT Communications Corporation. ● k8sではGPU数を監視できる機能が標準で備わっている ● 以下のコマンドで使用状況を見ることが可能 ○ $ kubectl describe node 59 GPUクラスタの構築と運用 〜運用〜 2/3 ・利用可能なGPU数を正確に取得  する事ができない ・どのコンテナがGPUを利用中  かは分からない
  • 61. Copyright © NTT Communications Corporation. ● NVIDIAは NVdia Management Library (NVML) を提供している ○ 様々なGPUメトリクスを取得する事が可能 60 GPUクラスタの構築と運用 〜運用〜 3/3 e.g. nvml.util.gpu : GPU 利用率 (%) nvml.mem.used : GPUの使用中メモリ量 nvml.temp : GPUの温度
  • 62. Copyright © NTT Communications Corporation. 61 GPUクラスタの構築と運用 〜運用〜 3/3
  • 63. Copyright © NTT Communications Corporation. 62 まとめ 1. 背景&目的 2. GPU環境の望ましい要件 3. コンテナ技術関連の各種OSSツール比較 4. OpenStack連携によるマルチテナントの実現 5. GPU Container as a Service つくってみた
  • 64. Copyright © NTT Communications Corporation. 63 Special Thanks to... • 横山智大 • 松下正樹 • 小倉真人 • Ankit Purohit • 奥村昌和 • 逸見彰一郎
  • 65. Copyright © NTT Communications Corporation. 64 ご清聴ありがとうございました