KubeVirt 20
1

∼KubeVirtにおけるGPUの活用∼
日本仮想化技術株式会社


遠山洋平
1
前提知識
•
K
u
b
e
V
i
r
t
を利用するには、少なくとも
K
u
b
e
r
n
e
t
e
s
の(
C
L
I
など
の)操作に慣れている必要があります


•
P
o
d
は
K
u
b
e
r
n
e
t
e
s
アプリケーションの基本的な実行単位であ
り、作成する
K
u
b
e
r
n
e
t
e
s
オブジェクトモデルの中で最小の単位
であるという原則の理解が必要です
2
K
u
b
e
V
i
r
t
について
•
K
u
b
e
V
i
r
t
1
0
1
として公開しています。そちらをご覧ください


•
h
t
t
p
s
:
/
/
w
w
w
.
s
l
i
d
e
s
h
a
r
e
.
n
e
t
/
V
i
r
t
u
a
l
T
e
c
h
-
J
P
/
k
u
b
e
v
i
r
t
-
1
0
1


• 弊社ブログでも色々公開しています


•
h
t
t
p
s
:
/
/
t
e
c
h
.
v
i
r
t
u
a
l
t
e
c
h
.
j
p
/
a
r
c
h
i
v
e
/
c
a
t
e
g
o
r
y
/
K
u
b
e
V
i
r
t
3
K
u
b
e
V
i
r
t
の概要
4
K
u
b
e
V
i
r
t
プロジェクトの始まり
•
K
u
b
e
r
n
e
t
e
s
を仮想マシンとコンテナのオーケストレータにする
のを目的


•
2
0
1
6
年に
R
e
d
H
a
t
がプロジェクトをスタート


•
2
0
1
7
年
1
月にオープンソース化


•
2
0
1
9
年に
C
N
C
F
S
a
n
d
b
o
x
として受け入れられた


•
A
p
a
c
h
e
2
.
0
ライセンスで開発
5
K
u
b
e
V
i
r
t
の利点
• コンテナ化が難しいワークロード移行パスを提供


• 技術的な理由(古い
O
S
/
カーネルが必要
/
アプリの改造不可)


• ビジネス上の理由(市場投入までの時間、変換のコスト)


• その他の
K
u
b
e
V
i
r
t
のメリット


• (筆者的には)
V
M
で分離度を高めることでアプリケーションの
セキュリティを向上させるメリットもあると考える
6
今回のテーマ
•
N
V
I
D
I
A
G
P
U
T
e
s
l
a
を
K
u
b
e
V
i
r
t
で使ってみます


• 以下が必要です


•
N
V
I
D
I
A
T
e
s
l
a
G
P
U


•
K
u
b
e
r
n
e
t
e
s


•
K
u
b
e
V
i
r
t


•
N
V
I
D
I
A
k
u
b
e
v
i
r
t
-
g
p
u
-
d
e
v
i
c
e
-
p
l
u
g
i
n
7
動作確認した構成
•
C
e
n
t
O
S
7
.
9
.
2
0
0
9
(
3
.
1
0
.
0
-
1
1
6
0
.
2
5
.
1
.
e
l
7
.
x
8
6
_
6
4
)


•
N
V
I
D
I
A
T
e
s
l
a
P
1
0
0
および
T
e
s
l
a
T
4


• パススルーモード


•
K
u
b
e
r
n
e
t
e
s
1
.
2
1
.
1


•
D
o
c
k
e
r
2
0
.
1
0
.
6
-
3


•
K
u
b
e
V
i
r
t
0
.
4
0
.
0
8
G
P
U
を使う場合の


事前準備
9
事前に行うこと
• サーバーの
B
I
O
S
で
V
T
-
x
,
V
T
-
d
などを有効化


•
N
V
I
D
I
A
k
u
b
e
v
i
r
t
-
g
p
u
-
d
e
v
i
c
e
-
p
l
u
g
i
n
の
Q
u
i
c
k
s
t
a
r
t
に書かれ
ている設定を行う


1
.
G
R
U
B
_
C
M
D
L
I
N
E
_
L
I
N
U
X
への追記


•
i
n
t
e
l
_
i
o
m
m
u
=
o
n
m
o
d
p
r
o
b
e
.
b
l
a
c
k
l
i
s
t
=
n
o
u
v
e
a
u


2
.
V
F
I
O
-
P
C
I
モジュール読み込みと対象デバイスの指定
1
0
ハマったこと
• 「
v
f
i
o
-
p
c
i
」モジュールがうまく動かない
O
S


• サーバーの
B
I
O
S
が古くて新しい
G
P
U
カードの認識が怪しい


• 標準カーネルだとうまく認識されなくてサードパーティの
5
.
4
系
カーネルで動作した
O
S


• 意外と古い
C
e
n
t
O
S
7
.
9
ベースとかの方がまともに動く
1
1
K
u
b
e
V
i
r
t
で
G
P
U
を使う


ステップ
1
2
導入までの流れ
1
.
K
u
b
e
r
n
e
t
e
s
クラスターを構築


• ランタイムをインストール


•
k
u
b
e
a
d
m
i
n
i
t


•
C
N
I
を導入(
e
x
.
C
a
l
i
c
o
,
M
u
l
t
u
s
C
N
I
e
t
c
.
.
.
)


2
.
K
u
b
e
V
i
r
t
をインストール


3
.
N
V
I
D
I
A
k
u
b
e
v
i
r
t
-
g
p
u
-
d
e
v
i
c
e
-
p
l
u
g
i
n
を導入


4
.
G
P
U
を
K
u
b
e
r
n
e
t
e
s
カスタムリソースで登録
1
3
K
u
b
e
V
i
r
t
のインストール
•
0
.
4
0
.
0
を導入する例


1
.
$
k
u
b
e
c
t
l
a
p
p
l
y
-
f
h
t
t
p
s
:
/
/
g
i
t
h
u
b
.
c
o
m
/
k
u
b
e
v
i
r
t
/
k
u
b
e
v
i
r
t
/
r
e
l
e
a
s
e
s
/
d
o
w
n
l
o
a
d
/
v
0
.
4
0
.
0
/
k
u
b
e
v
i
r
t
-
o
p
e
r
a
t
o
r
.
y
a
m
l


2
.
$
k
u
b
e
c
t
l
a
p
p
l
y
-
f
h
t
t
p
s
:
/
/
g
i
t
h
u
b
.
c
o
m
/
k
u
b
e
v
i
r
t
/
k
u
b
e
v
i
r
t
/
r
e
l
e
a
s
e
s
/
d
o
w
n
l
o
a
d
/
v
0
.
4
0
.
0
/
k
u
b
e
v
i
r
t
-
c
r
.
y
a
m
l


3
.
$
c
u
r
l
-
L
-
o
v
i
r
t
c
t
l
h
t
t
p
s
:
/
/
g
i
t
h
u
b
.
c
o
m
/
k
u
b
e
v
i
r
t
/
k
u
b
e
v
i
r
t
/
r
e
l
e
a
s
e
s
/
d
o
w
n
l
o
a
d
/
v
0
.
4
0
.
0
/
v
i
r
t
c
t
l
-
v
0
.
4
0
.
0
-
l
i
n
u
x
-
a
m
d
6
4


4
.
$
c
h
m
o
d
+
x
v
i
r
t
c
t
l


5
.
$
s
u
d
o
c
p
v
i
r
t
c
t
l
/
u
s
r
/
l
o
c
a
l
/
b
i
n
1
4
N
V
I
D
I
A
k
u
b
e
v
i
r
t
-
g
p
u
-
d
e
v
i
c
e
-
p
l
u
g
i
n
を導入
• ソースを取得


•
$
g
i
t
c
l
o
n
e
h
t
t
p
s
:
/
/
g
i
t
h
u
b
.
c
o
m
/
N
V
I
D
I
A
/
k
u
b
e
v
i
r
t
-
g
p
u
-
d
e
v
i
c
e
-
p
l
u
g
i
n
.
g
i
t


• マニフェストファイルを使って展開


•
$
c
d
k
u
b
e
v
i
r
t
-
g
p
u
-
d
e
v
i
c
e
-
p
l
u
g
i
n
/
m
a
n
i
f
e
s
t
s
/


•
$
k
u
b
e
c
t
l
c
r
e
a
t
e
-
f
n
v
i
d
i
a
-
k
u
b
e
v
i
r
t
-
g
p
u
-
d
e
v
i
c
e
-
p
l
u
g
i
n
.
y
a
m
l
1
5
G
P
U
を
K
u
b
e
r
n
e
t
e
s
カスタムリソースで登録
• こんなファイルを使って
K
u
b
e
V
i
r
t
に
G
P
U
情報を登録


•
k
u
b
e
c
t
l
a
p
p
l
y
-
f
k
u
b
e
v
i
r
t
c
r
.
y
a
m
l
1
6
G
P
U
が
K
u
b
e
r
n
e
t
e
s
に認識されたことを確認
•
k
u
b
e
c
t
l
d
e
s
c
r
i
b
e
n
o
d
e
を実行


•
G
P
U
が認識されていることを確認


• 出力されない場合


•
N
V
I
D
I
A
k
u
b
e
v
i
r
t
-
g
p
u
-
d
e
v
i
c
e
-
p
l
u
g
i
n
デプロイ直後はプロセスが実
行されるまで認識されないので、ちょっと待つ


•
B
I
O
S
、カーネル、
I
O
M
M
U
周りの設定を今一度確認


• ところで設定変更後に
g
r
u
b
2
-
m
k
c
o
n
f
i
g
を実行した?
1
7
K
u
b
e
V
i
r
t
で
G
P
U
の利用
1
8
G
P
U
割り当てた
V
M
の作成
•
Y
A
M
L
を書いて
k
u
b
e
c
t
l
c
r
e
a
t
e
する


• サンプル
Y
A
M
L
を使ってみよう


1
.
w
g
e
t
h
t
t
p
s
:
/
/
g
i
t
h
u
b
.
c
o
m
/
N
V
I
D
I
A
/
k
u
b
e
v
i
r
t
-
g
p
u
-
d
e
v
i
c
e
-
p
l
u
g
i
n
/
b
l
o
b
/
m
a
s
t
e
r
/
e
x
a
m
p
l
e
s
/
v
m
i
-
g
p
u
.
y
a
m
l


2
.
c
a
t
v
m
i
-
g
p
u
.
y
a
m
l


3
.
k
u
b
e
c
t
l
c
r
e
a
t
e
-
f
v
m
i
-
g
p
u
.
y
a
m
l


• 次スライドでちょっと説明
1
9
サンプルファイルのココを変更
• 割り当てたい
G
P
U
を指定


•
O
S
イメージを指定
2
0
C
D
I
イメージを使った
V
M
作成も可能
• 「
K
u
b
e
V
i
r
t
1
0
1
」で説明した
C
o
n
t
a
i
n
e
r
i
z
e
d
D
a
t
a
I
m
p
o
r
t
e
r
(
C
D
I
)
で作成したイメージボリュームを使用


• ボリュームを用いて、
G
P
U
を割り当てた
V
M
を作成可能


• パススルー
.
.
.
実装
G
P
U
の数だけ


•
v
G
P
U
.
.
.
N
V
I
D
I
A
G
R
I
D
の構成による
2
1
複数の
G
P
U
を
V
M
に割り当てる
•
V
M
I
を作成するための
Y
A
M
L
にデバイスを列挙


• デバイスに識別する「
n
a
m
e
」を複数指定


•
V
M
に複数
G
P
U
が割当て
2
2
U
b
u
n
t
u
2
0
.
0
4
での利用例
•
V
M
内で次のソフトウェアをインストールすれば
G
P
U
を使って色々
できます


•
C
U
D
A


•
c
u
D
N
N


•
T
e
n
s
o
r
f
l
o
w
2
3
詳細は「Tensorflow GPUサポート」で検索
W
i
n
d
o
w
s
での利用例
•
V
M
内で次のソフトウェアをインストールすれば
G
P
U
を使って色々
できます


•
C
U
D
A


•
c
u
D
N
N


•
V
i
s
u
a
l
S
t
u
d
i
o
2
0
1
9


•
P
y
t
h
o
n
3


•
T
e
n
s
o
r
f
l
o
w
2
4
今後
•
D
o
c
k
e
r
がそろそろアレなので、
C
R
I
-
O
とか
c
o
n
t
a
i
n
e
r
d
との組み
合わせも取り組む予定


•
U
b
u
n
t
u
ベースも試す予定


•
v
G
P
U
もいつかやりたい


•
M
u
l
t
u
s
C
N
I
との連携について取り上げる予定
2
5
2
6
参考スライド
スライド作成にあたり、参考にした文献などのまとめ
2
7
2
8
• GitHub https://github.com/kubevirt
• KubeVirt Intro: Virtual Machine Management on
Kubernete
s

• Stephen Gordon - @xsgordon Chandrakanth Jakkid
i

• Fast Packet Processing with KubeVir
t

• Petr Horáček @Red Hat / David Vossel @Red Ha
t

• Virtualized GPU workloads on KubeVir
t

• David Vossel @Red Ha
t

• Vishesh Tanksale @NVIDI
A

• Using KubeVirt in Telco
s

• Abhinivesh Jain
2
9
• RUNNING VIRTUAL MACHINES ON KUBERNETE
S

• Roman Mohr & Fabian Deutsch @Red Ha
t

• THE FOUL SIDE OF OPEN SOURCE NETWORKIN
G

• Thomas D. Nadeau @Red Ha
t

• Convergence of VM and containers orchestration
using KubeVir
t

• Chunfu Wen @Red Hat
3
0

KubeVirt 201 How to Using the GPU