Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
クラウドの作り方(GPUサーバ編)
Search
Hikaru Ashino
February 27, 2023
Technology
3.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
クラウドの作り方(GPUサーバ編)
Hikaru Ashino
February 27, 2023
More Decks by Hikaru Ashino
See All by Hikaru Ashino
さくらのクラウド高火力プランを使って 大規模言語モデル(LLM)を動かしてみよう
picasa
1
740
A story until offering openSUSE on Sakura VPS
picasa
0
150
自宅サーバでマストドンを立てる
picasa
1
3.4k
さくらのサービスを支えるAPI開発のお話(仮) - APIStudy#6
picasa
0
110
卒業制作 サーバーの脆弱性情報管理システム
picasa
0
75
Kickstartfileジェネレータを作ってみた
picasa
0
71
Amazon Cognito + SNS + Zabbixでサーバー監視アプリを作ってみた - JAWS DAYS 2015
picasa
0
150
Amazon SNSでZabbixのアラートをプッシュ通知してみた
picasa
0
160
cobbler + koan VPS作成の自動化
picasa
0
46
Other Decks in Technology
See All in Technology
Driving AI Adoption Using In-House GPUs to Serve Qwen
po3rin
1
290
「面白い!」を信じ抜け。激動の時代を貫く、オンリーワン・エンジニアの条件
kizawa2020
2
650
DINO-EdgeQuery:Edge-First Polygon Decoding for Building Footprint Extraction from Satellite Imagery
lehupa
0
110
Point Cloud as a Foreign Language for Multi-modal Large Language Model
takmin
0
360
どんな手を使っても絶対間に合わせるスケジューラ
asari194617
0
1.5k
アクセスキー流出時の対応で再認識した攻撃側と防御側の非対称性について
kazzpapa3
1
510
AIで実装は速くなった。なのにプロダクトは速くならない。職能の壁を越えて価値のフローを設計する
nwiizo
0
110
[RSJ26] NarrativeFlow: Flow-Based Vision-Language-Action Model Using Robot Velocity Fields
keio_smilab
PRO
0
120
データエンジニアの困りごとをDevinと一緒に解消する
10xinc
2
290
PdMをやめて、 "プロダクトビルダー"という 働き方に変えました / PdM to Product Builder
shikichee
2
610
分割40%キーボードにスムーズに入門するには
hoto17296
1
220
tamachi.goを支える技術
rymiyamoto
0
130
Featured
See All Featured
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
680
Optimising Largest Contentful Paint
csswizardry
37
3.9k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
GitHub's CSS Performance
jonrohan
1033
470k
How to Talk to Developers About Accessibility
jct
2
530
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
The SEO Collaboration Effect
kristinabergwall1
1
540
YesSQL, Process and Tooling at Scale
rocio
174
15k
Transcript
Ϋϥυͷ࡞Γํ (GPUαʔόฤ) Ϋϥυࣄۀຊ෦ ΫϥυαʔϏε෦ Ἑɹޫ ͘͞ΒΠϯλʔωοτגࣜձࣾ 2023/02/27
2 • ୲ۀ • αʔϏεͷόοΫΤϯυ։ൃɺΠϯϑϥ։ൃ • ӴσʔλϓϥοτϑΥʔϜʮTellusʢςϧʔεʣʯ • ͘͞ΒͷVPSɺ͘͞ΒͷΫϥυ •
ܦྺ • 2012 - 2016 ITܥઐֶߍ4՝ఔͰֶͿ ߴઐ࢜ଔ • 2013 - 2016 MSPͱϗεςΟϯάΛߦ͏ձࣾʹΞϧόΠτೖࣾ • OpenStackɺLinux KVMΛ༻͍ͨԾڥͷߏஙӡ༻ • OSSͰߏங͞ΕͨγεςϜͷӡ༻ɺτϥϒϧγϡʔςΟϯά • 2016 - ݱ৬ ͘͞ΒΠϯλʔωοτʹ৽ଔೖࣾ • 2017 - 2019 ܳज़ܥେֶӃʹͯ2ݚڀ͢Δ ܳज़ֶम࢜ @tar_xzvff
֓ཁ 3
ຊ͓͢͠Δ͜ͱ 4 ݱࡏఏڙதͷ͘͞ΒͷΫϥυͰར༻Ͱ͖ΔGPUαʔό(ߴՐྗϓϥϯ)ͷ͓͠Λ͠·͢ɻ ͲͷΑ͏ʹΫϥυͷத͕։ൃ͞Ε͍ͯΔ͔Λ͍͚ͬͯͨͩΕ͍Ͱ͢ɻ
ຊ͓͢͠Δ͜ͱ(։ൃମ੍) • ͘͞ΒͷΫϥυͷ։ൃମ੍ 5 ίϯτϩʔϧύωϧ (ϑϩϯτΤϯυ) APIɾόοΫΤϯυ (όοΫΤϯυ) ֤छΠϯϑϥ (ج൫ϢχοτɺSRE)
ຊ͓͢͠Δ͜ͱ(։ൃମ੍) • ͘͞ΒͷΫϥυͷ։ൃମ੍ 6 ίϯτϩʔϧύωϧ (ϑϩϯτΤϯυ) APIɾόοΫΤϯυ (όοΫΤϯυ) ֤छΠϯϑϥ (ج൫ϢχοτɺSRE)
ংষ 7
GPUαʔό(ߴՐྗϓϥϯ)͕ੜ͢Δ͖͔͚ͬ • ࣌ͷࢲӴσʔλϓϥοτϑΥʔϜʮTellusʯͷ୲ • Tellusͷར༻ऀ͚ʹӴσʔλΛJupyterLabͳͲΛ༻͍ͯੳͰ͖Δ ίϯϐϡʔςΟϯάڥͷఏڙΛ͍ͯ͠·ͨ͠ɻ(Jupyter as a service) 8
https://www.tellusxdp.com/ja/about/
GPUαʔό(ߴՐྗϓϥϯ)͕ੜ͢Δ͖͔͚ͬ 9 CPU(Ծαʔό) ※͘͞ΒͷΫϥυ CPU(ཧαʔό) ※͘͞Βͷઐ༻αʔό GPU(ཧαʔό) ※͘͞Βͷઐ༻αʔό ߴՐྗγϦʔζ ڞ༗ετϨʔδ
※͘͞ΒͷΫϥυ ɾɾɾ ɾɾɾ ※࣌ఏڙ͍ͯͨ͠ߏ
GPUαʔό(ߴՐྗϓϥϯ)͕ੜ͢Δ͖͔͚ͬ • ӡ༻͍ͯ͠ΔதͰ͍͔ͭ͘՝͕͋ͬͨ • Kubernetes͕ಈ͘αʔόαʔϏεΛ·͕ͨΔ • αʔϏε͕ҟͳΔͨΊ༷͕ҟͳΔ • APIͷ༗ແɺػೳͷ༗ແͷࠩɺΠϯϑϥ༷ •
αʔϏεؒΛϩʔΧϧଓ͢Δͷ͕ࡶ • ΫϥυTerraformͰίϯτϩʔϧͰ͖ͨɺͦΕҎ֎ࣗಈ • ͳΜͱ͔ɺαʔϏεؒͷࠩΛ͍͍ײ͡ʹຒΊͳ͕Βӡ༻͍ͯͨ͠ 10
GPUαʔό(ߴՐྗϓϥϯ)͕ੜ͢Δ͖͔͚ͬ • ͱ͋Δɺ͘͞ΒͷΫϥυͷऀͱ͢ػձ͕͋ΓɺاըॻΛ ࣋ͬͯΫϥυͰGPUఏڙ͍ͨ͠Λ͢Δ • →ͥͻΓ·͠ΐ͏ʂͱ͓ฦࣄΛ͍ͨͩ͘ • Ҏલ͔Βಉ༷ͷཁ͕͋Γ૬·ͬͯɺϓϩδΣΫτ͕ൃ😊 11
ϓϩδΣΫτൃ • ݕূڥʹͯϓϩτλΠϓͷ։ൃ͕ൃ • ͘͞ΒͷΫϥυͱ͘͞Βͷઐ༻αʔό ߴՐྗͷϝϯόʔͰߏ ʢاըɺ։ൃɺӡ༻ʣ • ࢲ։ൃͱӡ༻ͷ୲ͱͯ͠ࢀՃ •
جຊతʹϦϞʔτͰΦϯϥΠϯίϛϡχέʔγϣϯ • ि࣍ͷఆྫϛʔςΟϯά • σʔληϯλʔͳͲͰͷݱ࡞ۀͷΈΦϑϥΠϯ 12
ϓϩδΣΫτൃ • ϓϥϯઃܭ(اըϝϯόʔ) • ԿΛ࡞ͬͯɺԿΛఏڙ͢Δ͔ɺԾϚγϯͷઃܭ • ՝ۚઃܭɺϓϥϯ໊ • ӡ༻ઃܭ(ӡ༻ϝϯόʔ) •
ϑΝΠϦςΟ໘(Ͳ͜Ͱಈ͔͔͢ɺNWɺిྗɺۭௐ) • ऩ༰ઃܭɺԾϚγϯͷઃܭɺηΩϡϦςΟධՁɾରࡦ • ࠷దͳঢ়ଶΛ࡞Δ • ͲͷΑ͏ͳํ๏Ͱӡ༻͢Δ͔ɺఆৗతͳϝϯςφϯεɺো࣌ͷରԠ • νϡʔχϯά • ෛՙࢼݧ • ։ൃઃܭ(։ൃϝϯόʔ) • ͲͷΑ͏ʹ࡞Δ͔ • APIίϯτϩϧʔύωϧ͔ΒͷϦΫΤετʹै͍ԾϚγϯΛىಈͤ͞Δ෦·ͰΛ࡞Δ • ԾϚγϯͷεέδϡʔϦϯά 13 ઃܭޙɺ֤୲͝ͱʹɺ࣮४උͳͲʹਐΉ
ୈ1ষ ϓϩτλΠϓͷ։ൃ 14
ϓϥϯઃܭ • αʔόᝑମͱ༻͢ΔGPU֬ఆ͍ͯͨͨ͠ΊɺͦΕΒΛར༻ • ԾϚγϯʹɺ1GPUɺCPUͱϝϞϦదͳྔΛׂ • ࢢΛؑΈͭͭɺεϖοΫΛܾఆ 15
ӡ༻ઃܭ • طଘͷཧͷGPUαʔϏε(ߴՐྗ)Ͱ࣮ͷ͋ΔɺੴङDCʹܾఆ • ϓϥϯઃܭʹج͍ͮͯऩ༰ઃܭΛ࣮ࢪ • طଘͷԾԽج൫(Linux KVM)ͰGPUׂΛߦ͍ԾϚγϯΛىಈ͢Δํ๏Λௐࠪɾݕূ • GPU
Pass-Through (ཧͷGPUΛͦͷ··ԾϚγϯʹׂ) • GPUԾԽ • GPUʹΑΔHWଆͰͷԾԽ • GPUશԾԽ GVT-g (KVMGT) • GPU४ԾԽ virtio-gpu • →ύϑΥʔϚϯεͷ؍ͱԾԽͷඞཁ͕ͳ͍͜ͱ͔ΒɺGPU Pass-Throughʹܾఆ • GPUׂϗετ্ͷGPUͷPCIeͷBus:Device.Function (BDF)Λ༻͍ͯߦ͏ 16
ӡ༻ઃܭ • ͲͷΑ͏ʹ͢Εܾఆͨ͠GPUׂํ๏ͰGPUΛׂΓͯΒΕΔ͔ௐࠪɾݕূ • ཧαʔόᝑମͷBIOSɺBMCͷઃఆ(IOMMU) • ԾϚγϯʹGPUΛͨ͢ΊɺϗετOSଆͰGPUΛ௫·ͳ͍Α͏ʹ͢Δ • υΩϡϝϯτͳͲΛࢀߟʹqemu-kvmͷదͳҾΛ୳͢ɾݕূͷ܁Γฦ͠ •
GPUׂํ๏ʹର͢ΔηΩϡϦςΟϦεΫͷධՁɾରࡦ • GPUϕϯμ͓ΑͼɺԾԽʹਫ਼௨ͨ͠εϖγϟϦετͱ͠߹͍Λߦ͍ରࡦ 17
։ൃઃܭ • ӡ༻ઃܭΛͱʹԾϚγϯʹGPUΛׂ͠ىಈ͢ΔΈΛݕ౼͢Δ • ϗετʹࡌ͞Ε͍ͯΔGPUͷྻڍ • GPUϦΫΤετ࣌ͷ෦ॲཧ • GPUͷഉଞతׂ •
ݕ౼ΛͱʹԾ࣮Λߦ͏ • 1ԾϚγϯ1GPUͷׂ͕ͳ͞ΕΔΑ͏ʹ࣮ 18
ϓϩτλΠϓ 19 ϗετ ཧαʔόᝑମ ϋΠύʔόΠβʔ -JOVY,7. ϗετ04 GPU ԾϚγϯ αʔόΛىಈͤ͞Δ
ϓϩάϥϜ
ୈ̎ষ ൛ͷ։ൃ 20
൛ͷ։ൃ • ͓٬༷ͷఏڙʹ͚ͯ൛ͷ։ൃΛਐΊΔ • ൛ͷ࣭ʹ͢ΔͨΊͷ։ൃɺ͓Αͼݕূ 21
ϓϥϯઃܭʙ࣮ಇϑΣʔζ • ϓϥΠγϯά • ϓϥϯ໊ͷݕ౼ɺܾఆ • ͓٬༷͚ͷϚχϡΞϧ(͘͞ΒͷΫϥυɹυΩϡϝϯτ)ͷ࡞ 22
ӡ༻ઃܭ • ֤छΠϯϑϥΛ൛ͱಉ͡ߏʹ͢Δ • 1ϗετ্ͰෳԾϚγϯ͕ىಈͨ͠߹ͷݕূ • ύϑΥʔϚϯενϡʔχϯά • NUMA •
ԾϚγϯͷઃܭʹج͍ͮͨઃఆɺಈ࡞ݕূ • GPUͷಈ࡞ʹ࠷దͳڥΛඋ͢ΔͨΊͷݕূɾઃఆ • ෛՙࢼݧɺϕϯνϚʔΫ • ϗετͷCPU,ϝϞϦ • ԾϚγϯͷGPU • ࢹ༰ͷݕ౼ 23
• NUMA • ෳCPUΛࡌ͢Δαʔόʹ͓͍ͯߏ͞ΕΔΞʔΩςΫνϟ • ϘτϧωοΫɺϝϞϦΞΫηεͷ࠷దԽͳͲʹͭͳ͕Δ • Nodeͱ͍͏άϧʔϓ͕͋Δ (lstopoίϚϯυͳͲͰ֬ೝ͢Δ͜ͱ͕Ͱ͖Δ) •
ԾϚγϯʹׂΓͯΔɺCPUɺϝϞϦɺGPUͷΈ߹Θ͕ͤnodeΛލ͍ͩ ߹ɺύϑΥʔϚϯεʹӨڹΛٴ΅͢͜ͱ͕͔Γߟྀͨ͠ઃܭɾ࣮Λ࣮ࢪ • ԾϚγϯىಈ࣌ʹNUMA node͕ἧ͏Α͏ʹࢦఆ͠ىಈͤ͞Δ ӡ༻ઃܭ 24 NUMA node1 NUMA node2
• NUMA(͘ͳΔঢ়ଶ) ӡ༻ઃܭ 25 ԾϚγϯ NUMA nodeΛލ͙ͨΊ ύϑΥʔϚϯεʹӨڹ
• NUMA(࠷దͳঢ়ଶ) ӡ༻ઃܭ 26 ԾϚγϯ
ӡ༻ઃܭ • NUMA nodeͷΈ߹ΘͤʹΑΔੑೳࠩ(PCIeଳҬςετ) • NUMA node͕ಉ͡Έ߹ΘͤͰ҆ఆͯ͠ಈ࡞ 27
ӡ༻ઃܭ • ԾϚγϯͷઃܭʹج͍ͮͨઃఆɺಈ࡞ݕূ • ॳཧαʔόᝑମʹࡌͨ͠ϝϞϦΛͳΔ͘ԾϚγϯʹׂ͢Δํͩͬͨ • ىಈͨ͠ͷͷqemuͷϓϩηε͕swapͯ͠͠·͏ࣄଶ͕ൃੜ • ύϑΥʔϚϯεͷ؍ͰΑ͘ͳ͍ঢ়ଶ •
ىಈͯؒ͠ແ͘qemuͷϓϩηε͕ऴྃͯ͠͠·͏ࣄଶ͕ • oom-killerʹΑͬͯqemuϓϩηε͕ڧ੍ऴ͍ྃͯͨ͜͠ͱ͕ൃ֮…😇 • ϗετͰಈ࡞͢Δ֤छαʔϏεΛ֬ೝ҆͠શʹಈ࡞͢ΔϝϞϦ༰ྔΛܭࢉ͠ɺͦͷεϖοΫͰఏ ڙ͢Δ͜ͱʹ • Ұ෦γεςϜܥͷσʔϞϯ͕ϝϞϦϦʔΫ͍ͯͨ͠ΓɺͦͷରࡦͳͲ࣮ࢪ • ҆ఆͨ͠ঢ়ଶͰԾϚγϯΛಈ͔ͨ͢ΊʹɺεϖοΫͷΈ߹ΘͤݕূΛࢼߦࡨޡ • γεςϜશମʹϝϞϦͷۭ͖༰ྔ͕͋ͬͨͱͯ͠ɺNUMA node͋ͨΓͷϝϞϦͷۭ͖͕ͳ͍ͱ oom-killerͰVM͕ࢭΊΒΕͯ͠·͏ֶͼ͕ಘΒΕͨ 28
ӡ༻ઃܭ • GPUͷಈ࡞ʹ࠷దͳڥΛඋ͢ΔͨΊͷݕূɾઃఆ • ΤΞϑϩʔ͕ਖ਼ৗͰɺదͳԹͰ͋Δ͜ͱ • ϑΝϯͷճస੍ޚɺϑΝϯͷҐஔΛม͑ΔͳͲͷରԠ • ϑΝϯGPUʹࡌ͞Ε͓ͯΒͣɺυϥΠϠʔͷΑ͏ͳ෩ѹͷϑΝϯΛᝑମʹऔΓ͚Δ •
GPU͕ྫྷ٫͞Εͳ͍ͱɺGPU෦ϓϩηοαͷಈ࡞प͕Լ͢Δ • ҰํͰϑΝϯΛશ։ʹͯ͠ແବ͕ੜ͡ΔͨΊɺίετͱੑೳʹ͓͍ͯόϥϯε͕औΕͨঢ়ଶΛ ୳͠ɺݟ͚ͭΔ • αʔόᝑମͷIPMIͱGPU͔Β֤छϝτϦΫεΛPrometheusͰऩूɺGrafanaͰμογϡϘʔυΛ࡞ ͠ՄࢹԽ • ͍͔ͭ͘ͷϑΝϯͷϞʔυΛࢼ͢͏·͍͔ͣ͘αʔόͷཧళʹ͍߹Θͤͨ • BMCͷόʔδϣϯ͕ݹ͘Ξοϓσʔτͨ͠ͱ͜Ζظ͢Δ݁Ռ͕ಘΒΕ࠷దͳঢ়ଶ͕Ͱ͖ͨ • ݕূதϑΝϯΛશ։ʹͨ͠ͱ͜ΖɺGPUαʔόͷᝑମͷഎ໘ଆʹ͋ΔଞͷαʔόͷԹ্͕ঢ͠ ͯ͠·͏ࣄ͕ൃੜͨ͠ɺͦΕΒߟྀͯ͠ڥΛඋ 29
ӡ༻ઃܭ • GPUͷಈ࡞ʹ࠷దͳڥΛඋ͢ΔͨΊͷݕূɾઃఆ 30 ϗετ ཧαʔόᝑମ ϋΠύʔόΠβʔ -JOVY,7. ϗετ04 GPU
GPU GPU GPU ԾϚγϯ ԾϚγϯ ɾɹɾɹ ɾɾ GPUʹෛՙΛ͔͚Δɺgpu_exporterΛ࣮ߦ GPUʹෛՙΛ͔͚Δ ˍ gpu_exporterΛ࣮ߦ ipmi_exporter ipmi_exporter(αʔόᝑମͷϝτϦΫεΛऔಘɺফඅిྗɺԹɺϑΝϯճస) gpu_exporter(GPUͷ֤छϝτϦΫεɺಈ࡞पɺফඅిྗɺԹɺϝϞϦͳͲΛऔಘ)
ӡ༻ઃܭ 31
ӡ༻ઃܭ • ෛՙࢼݧɺϕϯνϚʔΫ • ফඅిྗ͕େ͖͘ͳΔɺԹ͕ߴ͘ͳΔέʔεΛ࡞͠Ұఆظ࣮ؒࢪ • ຊ൪ڥͱಉ͡ঢ়ଶϥοΫɺαʔόᝑମΛἧ͑ͯෛՙΛ͔͚Δ • جຊతʹઌ΄ͲͱΔ͜ͱಉ͡ɺҧ͍ԾϚγϯͷ͕ଟ͘ͳΔ •
TerraformͰෛՙࢼݧɺϕϯνϚʔΫ༻ͷԾϚγϯΛେྔʹల։ • ४උ͕ͬͨΒxargsίϚϯυͰҰ੪ʹԾϚγϯͱϗετʹෛՙΛ͔͚Δ • ͯ͢ͷϗετɺԾϚγϯɺGPUͷঢ়ଶΛ֬ೝ͢ΔͨΊͷμογϡϘʔυΛ࡞͠ݟकΔ • ԾϚγϯ • gpu_burn࣮ࡍͷϫʔΫϩʔυͳͲͰෛՙ • ϕϯνϚʔΫҰൠతͳGPUϕϯνϚʔΫͳͲΛ༻͍Δ • ϗετͷCPUɺϝϞϦ • ઐ༻ͷπʔϧΛ༻͍ͯෛՙ 32
ӡ༻ઃܭ 33
ӡ༻ઃܭ 34
ӡ༻ઃܭ • ࢹ༰ͷݕ౼ • طଘͷϗεταʔόʹର͢ΔࢹʹՃ͑GPUͷࢹΛ͢Δඞཁ͕͋Δ • ϗετ͔ΒGPUʹΞΫηεͰ͖ͳ͍ͨΊࢹͰ͖ΔൣғͰߦ͏ • ϗεταʔόଆ •
GPUࡌεϩοτͷϦϯΫεϐʔυ • lspciͳͲͷใΛνΣοΫ • GPUࣗମͷࢹɺނোݕɾϔϧενΣοΫޙड़͢ΔʮαʔϏε VMʯͱ͍͏ΈΛ༻͍ͯߦ͏͜ͱʹܾఆ 35
։ൃઃܭ • ԾϚγϯʹGPUΛׂ͠ىಈ͢ΔΈΛ࣮͠ɺຊ൪ڥʹөͰ͖Δঢ়ଶʹ͢Δ • ൛Λߟྀͨ͠ઃܭɺ࣮ • αʔόΛىಈ͢ΔϓϩάϥϜ • NUMAΛߟྀͨ͠ԾϚγϯʹର͢ΔCPU,MEM,GPUͷׂ •
ཁٻ͞ΕͨGPUʹԠׂͯ͡ɺׂෆՄͷ߹ͷΤϥʔॲཧ • ࡌ͞Ε͍ͯΔGPUͷঢ়ଶཧ(ະׂɺׂதɺނো) • ঢ়ଶΛAPIʹ௨͢Δػೳ • GPUͷނোݕɺϔϧενΣοΫͷΈͷݕ౼ • API • GPUϗετͷࡏݿཧ • GPUϓϥϯͷՃɺGPUαʔόͷεέδϡʔϦϯά • GPUͷଐੑใͷཧͷݕ౼(GPUܕ൪ɺGPUϝϞϦɺݸମΛࣝผ͢Δɺetc…) 36
։ൃઃܭ • GPUͷނোݕɺϔϧενΣοΫͷΈͷݕ౼ • ϗετ͔ΒGPUʹΞΫηεͰ͖ͳ͍ͨΊɺಛผͳԾϚγϯʮαʔϏεVMʯΛ༻͍ ͯߦ͏͜ͱʹܾఆ • ҎԼͷΑ͏ͳΈΛ։ൃ࣮͠ɺࣗಈνΣοΫͷΈΛཱ֬ • 1.ԾϚγϯఀࢭޙʹGPU͕ղ์͞ΕΔ
• 2.ղ์͞ΕͨGPU༻ࡁΈͱͯ͠ϚʔΫ͞ΕɺఆظతʹͦͷGPUΛΞλον͞Εͨ ʮαʔϏεVMʯ͕ىಈ • 3.GPUͷஅπʔϧΛ༻͍ͯਖ਼ৗʹಈ࡞͢Δ͜ͱΛ֬ೝ • 4.ਖ਼ৗͳ߹ɺະׂͱͯ͠GPUͷঢ়ଶΛมߋ͢Δ • 5.ҟৗͳ߹ɺׂ͞Εͳ͍Α͏ʹނোͱͯ͠ϚʔΫ͞ΕΔɺϗεταʔόʹ௨Λߦ ͍ࢹπʔϧͳͲ͕ͦΕΛͱʹΞϥʔτΛൃใ͢Δ 37 ͜ͷΈͷ࣮ͷҰͰɺ࣮ࡍʹࣾʹ͋ͬͨյΕͨGPUΛ༻͍ͯҟৗܥͷςετ࣮ࢪ
։ൃઃܭ 38 αʔϏεVM࣮ߦ࣌ͷ༷ࢠ
൛ 39 ϗετ ཧαʔόᝑମ ϋΠύʔόΠβʔ -JOVY,7. ϗετ04 GPU GPU GPU
GPU ԾϚγϯ ԾϚγϯ ɾɹɾɹɾ ɾɾɾ αʔόΛىಈͤ͞Δ ϓϩάϥϜ αʔϏεVM
• ։ൃத൫ʙ • ίϯτϩʔϧύωϧͳͲཧܥΠϯλϑΣʔεͷ։ൃ • ࣾϕʔλ൛ͱͯ͠ఏڙ • ࣮ࡍʹ͑Δ͔ධՁ • ϑΟʔυόοΫͳͲΛ͍ͨͩ͘
40
• ಈ࡞ࢼݧ • ίϯτϩʔϧύωϧ͔ΒGPUαʔόΛ࡞ • ਖ਼ৗʹಈ࡞͢Δ͜ͱ • ҟৗ͕ى͖ͨ࣌ʹҙਤͨ͠௨Γͷಈ࡞Λ͢Δ͜ͱ • αʔϏεϝχϡʔʹGPUϓϥϯՃ
41
ϦϦʔε 42
• 202110݄7ʹఏڙ։࢝🎉 43
·ͱΊ 44
• ۤ࿑ͨ͠ • ԾϚγϯͷઃܭʹ͓͍ͯ҆ఆ͢ΔεϖοΫΛܾΊΔ • ͋ΒΏΔΈ߹ΘͤΛߟ͑ݕূ͢Δͷ͕େมͩͬͨ • ՝͕ൃੜͨ͠߹ͷΓ͚ • ϨΠϠʔ͕བྷΈ߹͏ࣄ͋Δఔצ͕ͳ͍ͱɺΓ͚͕͍͠
• ϋΠύʔόΠβʔ/ϗετOS(Kernel)/GPU/αʔόᝑମ/etc… • Γ্͚ͨͰɺҟͳΔ͍߹ΘͤઌʹΤεΧϨʔγϣϯΛߦ͏ • ਂ۷Γ͕ͨࣝ͠ඞཁʹͳΔ • PCI-Expressʹର͢ΔཧղɺϋΠύʔόΠβʔɾԾϚγϯɺOSͷϝϞϦཧ 45
• ײ • ॳΊͯ৮ΕΔྖҬ͕৽ͩͬͨ • PCI-Expressͷ༷(ॻ੶Λߪೖͯ͠ษڧ) • ࣗͰσόΠεΛ࡞ͬͯΈ͍ͨͱࢥ͍ɺFPGAͳͲʹڵຯΛ࣋ͬͨ • ͞·͟·ͳϨΠϠʔʹରٕͯ͠ज़Λ࣋ͬͯରԠ͢Δͷ͕ྑ͍ܦݧʹͳͬͨ
• ݁ߏେม͕ͩͬͨɺ͖ͳ͜ͱΛࣄͱͯ͠Ͱ͖ͯຬ • TellusͰར༻͞ΕΔΑ͏ʹͳΓخ͍͠ • GPUΛ͏ͨΊͷڥߏஙͷϋʔυϧ͕ߴ͍ͷͰͦ͜Λղܾ͢ΔΑ͏ͳ ͷΛఏڙ͍ͨ͠ 46
• ࠷ޙʹ • jsonyamlͰΠϯϑϥɾΫϥυΛ͏͜ͱ͕Ͱ͖Δ࣌ • Πϯϑϥ͕நԽ͞Εɺ͍͘͢ͳΔ • Γ͍ͨ͜ͱʹूதͰ͖Δ͜ͱྑ͍͜ͱ • ҰํͰΫϥυͷઌͷੈք͞·͟·ͳٕज़Ͱߏ͞Ε͍ͯΔ
• ࠓճ͝հͨ͠༰΄ΜͷҰ෦ • ͘͞ΒΠϯλʔωοτͷٕज़ελοΫΛ·ͱΊͯΈͨ(Qiitaهࣄ) • https://qiita.com/jh1vxw/items/f460f33e00614c9d2510 47 ΫϥυΛ࡞Δଆʹ͝ڵຯ͕͋Γ·ͨ͠Βɺ͘͞ΒΠϯλʔωοτͰ͓·͓ͪͯ͠Γ·͢ʂ