GPU on OpenStack - GPUインターナルクラウドのベストプラクティス - OpenStack最新情報セミナー 2017年7月
1. G P U O N O P E N S TA C K -
G P U イ ン タ ー ナル ク ラ ウ ド の ベ ス トプ ラ ク ティス
P R E S E N T E D B Y M A S A F U M I O H TA @ m a s a f u m i o h t a
2. A ‘ S TA C K E R ’ L O O K I N G
I N T O G P G P U U S E .
V O L U N T E E R F O R T H E
R A S P B E R RY P I
F O U N D AT I O N : )
M A S A F U M I O H TA
3. T H I S P R E S E N TAT I O N I S
R E N E W E D F O R
O P E N S TA C K D AY S T O K Y O
2 0 1 7 .
I T I S I N C L U D E D S O M E
F E E D B A C K S F R O M T H E
S E S S I O N AT # L C 3 C H I N A
I N B E I J I N G , 2 0 1 7
P R E S E N TAT I O N R E N E W E D
4. O R G I Z N E D B Y V T J A N D
G AT H E R
M E , N V I D I A ( A S K ) , D E L L E M C ,
N E S I C A N D S O M E
C O M PA N I E S W H O
I N T E R E S T E D G P U U S E O N
O P E N S TA C K E N V I R O N M E N T
F O R O U R C U S T O M E R S
T H I S P R O J E C T I S …
5. T E S L A M 6 0 + D E L L E M C
P O W E R E D G E
C 4 1 3 0 + O P E N S TA C K
T O E VA L U AT E G P U O N
O P E N S TA C K E N V I R O N M E N T
T H A N K S T W O H E L P I N G
O U T A N D P R O V I D I N G
T H O S E S E R V E R S + C A R D S
N O W E VA L U AT I N G . .
8. O P E N S TA C K
特 殊 利 用 の 需 要
OpenStackの特殊な利用の需要が
増えてきている
Hadoop(Sahara),HPC,などなど
ほとんどのものはまとめたのが
なく、ググって調べるしかない…
曰く「ドキュメントロスト状態」
これらのものはOpenStackの
Docsにまとめられるべき
9. ど う や って G P U は O P E N S TA C K 環 境 で 動 作 す る の か?
‘GPU ON OPENSTACK’とは何か?
10. ‘ G P U ’ ト レン ド
の お さ ら い
• 多くのGPUコアを利用する
• 一部の計算は単一MPUユニットが
小さくスピードが遅かろうとも多く
のMPUコアを使うことはいくつか
の計算処理には有効である
• サーバ各々は高パフォーマンスでコ
ンパクトにできる
• 低消費電力化はHPCエンドユー
ザにとって大事なこと
• 多くの省電力・ハイパフォーマンス
サーバを所有しやすくなる
12. G P U
O P E N S TA C K と は
• インスタントなHPC利用
• いくつかの計算をしおえたらVMその
ものを壊す。
• ちょっとしたお試しでいくつかのVM
を使ってHPCグリッド試してみる。終
わったらすぐ壊す。
• GPUインターナルクラウドとして
のGPU利用
• 主に製造業において、いくつかのシス
テムは情報管理上、パブリッククラウ
ドに外だしができない。
13. ど ん な G P U の メ カ ニズ ム が O P E N S TA C K 環 境
で う ご いて い る の か?
S E T U P : G P U O N O P E N S TA C K
14. O p e n S t a c k で G P U を 動 かす 方 法 ( 現 在 )
• PCIパススルー
• PCIデバイスをダイレクトに接続する
• ComputeNodeのハイパーバイザー依存、OpenStack依存ではない
• Xen利用でのGPUコア分割、KVMはNVIDIA/AMDともコア分割不可
• Intel GVT-g(Xen)/GVT-d(KVM)によるIntel GPUのコア分割
• コンテナ
• NVIDIA Dockerの利用
• 複数のコンテナによってGPUを利用できるが、明示的なGPUコア分割はできない
タスク次第でのGPU利用
• Kubernetes/Mesos/Docker Swarmなどとの組み合わせ管理
15. P C I パ ス ス ル ー は V M 上 で ど う 動 作 す る の か?
• PCIデバイスをダイレクトにLinuxホストを通じて接続する
• 物理ホストよりデバイスを切り離す必要あり
• (NVIDIA) Dockerと違いホスト切り離しとなるため、監視管理等は各VMに必要
• OpenStack依存のことではなく、Linuxのベアメタル環境に依存
• KVM上では一つのGPUデバイスにひとつのVM
• Docker/Xen/VSphereと違いGPUは分割もできなければ共有もできない
• これはKVMの制限であってOpenStackによるものではない
16. P C I P a s s t h ro u g h o n O p e n S t a c k
• Redhatは公式サポート
• ただ、あまり推しでない気が..
• Ubuntuはドキュメントすらまともにない…
• ググって探すしかない(さすがUbuntu..orz )
• 目下小職/NVIDIA JAPAN/DELLEMC/VTJで再度細く検証と
OpenStackコミュニティのためにドキュメントをまとめ上げる予
定(趣旨に同意いただき参画いただける企業様歓迎いたします)
17. Linux OS for KVM hypervisor
GPU Driver
App
VM
VMM/KVM
IOMMU/Vt-d
PCI Express x16
Linux/Win OS
ComputeNode
GPU Card
Nova Compute
Nova Scheduler
Nova APILinux OS
ControllerNode
図1:OpenStackどうやってGPUパススルーを実現しているのか?(KVMの場合)
Nova Conductor
pci-stub/vfio-pciGPU Driver
18. S t e p 1 : ホ ス ト の G P U の 状 態 を ま ず は 調 べ る
• lspci -nn | grep -i nvidia でGPUの状態をまずはチェック
lspci -nn | grep -i nvidia
88:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:11b4] (rev a1)
88:00.1 Audio device [0403]: NVIDIA Corporation GK104 HDMI Audio Controller [10de:0e0a] (rev a1)
• 全てのGPUユニットがパススルーされている必要がある
• GPUだけでなく、ユニットとして認識されるGPUデバイス自体も
パススルーする必要あり
• でないとVMは動いてくれない..(完全にパススルーにならない)
19. G P U ポー ト が パ ス ス ル ー さ れて い る か チ ェ ッ ク
• QuadroなどHDMIはビデオポートだけでなくオーディ
オポートももっているため注意
• lspciでチェックされたものについては全てパススルーさせる必
要がある。
20. S T E P 2 : I O M M U セ ッ トア ップ
• IOMMU(Input/Output Memory Management Unit) は物理デ
バイスを仮想化システムで使う上で必要なもの
• もちろんvt-dはオンにする必要あり (EFI/BIOSののデフォル
トはON)
• intel_iommuとvfio_iommu_type1.allow_unsafe_interruptsの
設定を/etc/default/grubに行う必要あり
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on
vfio_iommu_type1.allow_unsafe_interrupts=1”
21. S T E P 3 : p c i - s t u b と V F I O
• pci-stubは物理デバイスをLinuxホスト側が利用できないようにする
• VFIO(Virtual Function IO) は pci-stubと同様の働きをする。kernel 4.1以
降のサポート
• 未使用時はデバイスをD3ステート(低消費電力モード)に変更する
• It is not used by default デフォルトでは使われないため /etc/module を
編集して、これらと関連するコンポーネンツを追記する (kvm,kvm_intel)
pci_stub
vfio
vfio_iommu_type1
vfio_pci
kvm
kvm_intel
22. S T E P 4 - 1 : ブ ラ ッ ク リス ト ( 1 )
• ramfsでGPUデバイスを認識できないようにする
• /etc/initramfs-tools/modules to initramfs (ubuntuの場合)
echo ‘pci_stub ids=10de:11b4,10de:0e0a’ >> /etc/initramfs-tools/modules
sudo update-initramfs -u && sudo reboot
23. S T E P 4 - 2 : B l a c k l i s t ( 2 )
• ブート時にGPUデバイスを認識できないようにする。
• /etc/modprobe.d/blacklist.conf に次を追加:
blacklist nvidia
blacklist nvidia-uvm
• ドライバについてもブラックリストに入れる必要あり
blacklist nouveau
29. O p e n s t a c k : n o v a - a p i の 設 定
• ControllerNodeの/etc/nova/nova.confを編集しnova-
apiを再起動する
• pci_aliasにPCIデバイスの情報、エイリアス名を記述
pci_alias={“name”:”K4200”,"vendor_id":"10de","product_id":"11b4"}
30. O p e n S t a c k : n o v a - c o m p u t e の 設 定
• ComputeNodeにある/etc/nova/nova.confを編集し、
nova-computeを再起動する。
• pci_passthrough_whitelistにPCIデバイスの情報、エイリアス名を
記述
pci_passthrough_whitelist={“name”:”K4200","vendor_id":"10de","product_id":"11b4"}
*このケースの場合、ベンダーIDとプロダクトIDが適合したデバイスは全てVMにパススルーする。
• pci_aliasににPCIデバイスの情報、エイリアス名を同様に追記
*Neuton以降
pci_alias={“name”:”K4200”,"vendor_id":"10de","product_id":"11b4"}
31. O p e n S t a c k : n o v a - s c h e d u l e r の 設 定
• ControllerNodeの/etc/nova/nova.confを設定しnova-
schedulerを再起動する。
• PciPassthroughFilterを利用できるようにするために
PciPassthroughFilterをscheduler_default_filtersに追記する
• 同様にPciPassthroughFilterをscheduler_available_filtersに記述
する
scheduler_available_filters=nova.scheduler.filters.all_filters
scheduler_available_filters=nova.scheduler.filters.pci_passthrough_filter.PciPassthroughFilter
scheduler_default_filters=DifferentHostFilter,RetryFilter,AvailabilityZoneFilter,RamFilter,CoreFilter,Dis
kFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,
ServerGroupAffinityFilter,AggregateInstanceExtraSpecsFilter,PciPassthroughFilter
32. Linux OS for KVM hypervisor
GPU D
App
VM
VMM/KVM
Linux/W
ComputeNode
Nova Compute
Nova Scheduler
Nova API
Linux OS
ControllerNode
Nova Conductor
pci_alias
pci_passthrough_whitelist
pci_alias
scheduler_default_filters
scheduler_available_filters
図4:NovaがGPU(PCI)パススルーされているComputeNodeで動作するプロセス
P C I デバイ ス を 利 用 可 に して P C I 利 用 の リ ク エ ス ト
を 送 れ る よ う に す る
p c i p a s s t h ro u g h f i l t e r を 利 用 して G P U パ ス ス ル ー
さ れ た C o m p u t e N o d e を 選 ぶ
G P U パ ス ス ル ー し た イ ンスタ ンス を p c i _ a l i a s と
p c i _ p a s s t h ro u g h _ w h i t e l i s t に よ って 発 生 さ せ る
33. O p e n S t a c k : f l a v o r- k e y の 設 定
• flavor-keyを設定しGPUインスタンスで利用できるよう
にPCIパススルーの設定をflavorに追記する
• pci_passthrough:alias=$(pci_alias_name):$(the number of
GPUs we would like to use)
nova flavor-key $flavor_name set “pci_passthrough:alias”=“K4200:$(the number_of_gpus)”
34. G P U O N O P E N S TA C K を 使 う に あ た って 注 意 すべ
き 問 題 点
既 知 の 問 題
35. C l o u d イメー ジ の 問 題
• CloudイメージはGPUを使う上ではとても小さくqemu-imgでリサイズ
する必要がある
• CUDAドライバはperl-packages(dev packages)がインストール時に必要
• それが.debあるいは.rpmパッケージであろうとインストールが必要になる。なぜなら
CUDAパッケージ自体がバイナリパッケージでなく、ソースコードよりバイナリをビ
ルドしていて、makeをパッケージインストールの際に実行している
• NVIDIA曰くCUDAドライバの次期リリースでFIX予定とのこと
• CUDA 7.6以降でfixの予定だったのに..まだfixされてない..orz
36. V D I と しての W i n d o w s 利 用
• CUDA on Windows は思ったより早いけどカクカクしてしまう
• 多分DISKのスピード、ネットワークなどなどいろいろなものが予想される。多
分エフェメラルモードやその他爆速系のSSD/NVMeの利用やら10g以上のネット
ワーク環境が必要となるだろう
• まだ改善対応をやってみたことはないが、なぜ発生するのかを調べるべく近々検証予定。
• VMは基本メモリ/NW転送などコンテキストスイッチでの動作をするため、CUDAの重い
ワークロードはカクカクする可能性があるかもしれない。
• 詳しくはデモビデオにて…
• GPU on OpenStack上でのWindowsの動作はもっと調査が必要..時間がほしい…
37. V D I と しての W i n d o w s 利 用 ( f e e d b a c k )
• Thanks giving some feedbacks to my session at LC3 China!
• Should checked and investigate the Windows-related issues below, will
update later.
• Windows 10 on KVM issue
• http://bart.vanhauwaert.org/hints/installing-win10-on-KVM.html
• Windows 10 deployment is succeeded from my KVM but I still have failed the same
deployment from my OpenStack.I should investigate more what happened in detail.
• Nvidia Driver issue (version 337.88 or later)
• https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF#.
22Error_43:_Driver_failed_to_load.22_on_Nvidia_GPUs_passed_to_Windows_VMs
• ‘Nvidia drivers on Windows check if an hypervisor is running and fail if it detects one, which
results in an Error 43 in the Windows device manager. ‘ I haven’t found this issue on my
Windows 7 VMs so I should check more in detail
• Related links libvirt for adding the driver, should be checked.
• https://github.com/openstack/nova/blob/master/nova/virt/libvirt/config.py#L2025-L2036
• https://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L4262-L4264
41. 関 連 リ ン ク
• Attaching physical PCI devices to guests:
https://docs.openstack.org/admin-guide/compute-pci-
passthrough.html
• Container as a Service on GPU Cloud- Our Decision
Among K8s, Mesos, Docker Swarm, and OpenStack
Zun:
https://www.slideshare.net/secret/AiUdO4dLxNTkfI
• OVMF_による_PCI_パススルー
https://goo.gl/icq9mV
42. S p e c i a l T h a n k s t o :
• GPU on OpenStack project members
VirtualTech Japan
NVIDIA
DellEMC
NEC Networks & System Integration
• @zgock999 at Tokaido-LUG, Nagoya, Japan
Teach me some hints how to use GPGPU on VM!
• Matthew Treinish of IBM attended my session at LC3 china and
figure out and feedback some point!
• Our customers! give the chance to evaluate!
43. P R E S E N T B Y M A S A F U M I O H TA
T W E E T @ m a s a f u m i o h t a m a i l t o : m a s a f u m i @ p i d 0 . o rg
T H A N K S V E RY M U C H F O R C O M I N G M Y S E S S I O N !