Upgrade to Pro — share decks privately, control downloads, hide ads and more …

クラウドの作り方(GPUサーバ編)

Avatar for Hikaru Ashino Hikaru Ashino
February 27, 2023

 クラウドの作り方(GPUサーバ編)

Avatar for Hikaru Ashino

Hikaru Ashino

February 27, 2023
Tweet

More Decks by Hikaru Ashino

Other Decks in Technology

Transcript

  1. 2 • ୲౰ۀ຿ • αʔϏεͷόοΫΤϯυ։ൃɺΠϯϑϥ։ൃ • Ӵ੕σʔλϓϥοτϑΥʔϜʮTellusʢςϧʔεʣʯ • ͘͞ΒͷVPSɺ͘͞ΒͷΫϥ΢υ •

    ܦྺ • 2012 - 2016 ITܥઐ໳ֶߍ4೥՝ఔͰֶͿ ߴ౓ઐ໳࢜ଔ • 2013 - 2016 MSPͱϗεςΟϯάΛߦ͏ձࣾʹΞϧόΠτೖࣾ • OpenStackɺLinux KVMΛ༻͍ͨԾ૝؀ڥͷߏஙӡ༻ • OSSͰߏங͞ΕͨγεςϜͷӡ༻ɺτϥϒϧγϡʔςΟϯά • 2016 - ݱ৬ ͘͞ΒΠϯλʔωοτʹ৽ଔೖࣾ • 2017 - 2019 ܳज़ܥେֶӃʹͯ2೥ݚڀ͢Δ ܳज़ֶम࢜ @tar_xzvff
  2. GPUαʔό(ߴՐྗϓϥϯ)͕஀ੜ͢Δ͖͔͚ͬ • ӡ༻͍ͯ͠ΔதͰ͍͔ͭ͘՝୊͕͋ͬͨ • Kubernetes͕ಈ͘αʔό͸αʔϏεΛ·͕ͨΔ • αʔϏε͕ҟͳΔͨΊ࢓༷͕ҟͳΔ • APIͷ༗ແɺػೳͷ༗ແͷࠩɺΠϯϑϥ࢓༷ •

    αʔϏεؒΛϩʔΧϧ઀ଓ͢Δͷ͕൥ࡶ • Ϋϥ΢υ͸TerraformͰίϯτϩʔϧͰ͖ͨɺͦΕҎ֎͸൒ࣗಈ • ͳΜͱ͔ɺαʔϏεؒͷࠩΛ͍͍ײ͡ʹຒΊͳ͕Βӡ༻͍ͯͨ͠ 10
  3. ϓϩδΣΫτൃ଍ • ݕূ؀ڥʹͯϓϩτλΠϓͷ։ൃ͕ൃ଍ • ͘͞ΒͷΫϥ΢υͱ͘͞Βͷઐ༻αʔό ߴՐྗͷϝϯόʔͰߏ੒ ʢاըɺ։ൃɺӡ༻ʣ • ࢲ΋։ൃͱӡ༻ͷ୲౰ͱͯ͠ࢀՃ •

    جຊతʹϦϞʔτͰΦϯϥΠϯίϛϡχέʔγϣϯ • ि࣍ͷఆྫϛʔςΟϯά • σʔληϯλʔͳͲͰͷݱ஍࡞ۀͷΈΦϑϥΠϯ 12
  4. ϓϩδΣΫτൃ଍ • ϓϥϯઃܭ(اըϝϯόʔ) • ԿΛ࡞ͬͯɺԿΛఏڙ͢Δ͔ɺԾ૝Ϛγϯͷઃܭ • ՝ۚઃܭɺϓϥϯ໊ • ӡ༻ઃܭ(ӡ༻ϝϯόʔ) •

    ϑΝΠϦςΟ໘(Ͳ͜Ͱಈ͔͔͢ɺNWɺిྗɺۭௐ) • ऩ༰ઃܭɺԾ૝ϚγϯͷઃܭɺηΩϡϦςΟධՁɾରࡦ • ࠷దͳঢ়ଶΛ࡞Δ • ͲͷΑ͏ͳํ๏Ͱӡ༻͢Δ͔ɺఆৗతͳϝϯςφϯε΍ɺো֐࣌ͷରԠ • νϡʔχϯά • ෛՙࢼݧ • ։ൃઃܭ(։ൃϝϯόʔ) • ͲͷΑ͏ʹ࡞Δ͔ • API΍ίϯτϩϧʔύωϧ͔ΒͷϦΫΤετʹै͍Ծ૝ϚγϯΛىಈͤ͞Δ෦෼·ͰΛ࡞Δ • Ծ૝ϚγϯͷεέδϡʔϦϯά 13 ઃܭޙɺ֤୲౰͝ͱʹɺ࣮૷΍४උͳͲʹਐΉ
  5. ӡ༻ઃܭ • طଘͷ෺ཧͷ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
  6. ӡ༻ઃܭ • ֤छΠϯϑϥΛ੡඼൛ͱಉ͡ߏ੒ʹ͢Δ • 1ϗετ্Ͱෳ਺Ծ૝Ϛγϯ͕ىಈͨ͠৔߹ͷݕূ • ύϑΥʔϚϯενϡʔχϯά • NUMA •

    Ծ૝Ϛγϯͷઃܭʹج͍ͮͨઃఆɺಈ࡞ݕূ • GPUͷಈ࡞ʹ࠷దͳ؀ڥΛ੔උ͢ΔͨΊͷݕূɾઃఆ • ෛՙࢼݧɺϕϯνϚʔΫ • ϗετͷCPU,ϝϞϦ • Ծ૝ϚγϯͷGPU • ؂ࢹ಺༰ͷݕ౼ 23
  7. • NUMA • ෳ਺CPUΛ౥ࡌ͢Δαʔόʹ͓͍ͯߏ੒͞ΕΔΞʔΩςΫνϟ • ϘτϧωοΫɺϝϞϦΞΫηεͷ࠷దԽͳͲʹͭͳ͕Δ • Nodeͱ͍͏άϧʔϓ͕͋Δ (lstopoίϚϯυͳͲͰ֬ೝ͢Δ͜ͱ͕Ͱ͖Δ) •

    Ծ૝ϚγϯʹׂΓ౰ͯΔɺCPUɺϝϞϦɺGPUͷ૊Έ߹Θ͕ͤnodeΛލ͍ͩ৔ ߹ɺύϑΥʔϚϯεʹӨڹΛٴ΅͢͜ͱ͕෼͔Γߟྀͨ͠ઃܭɾ࣮૷Λ࣮ࢪ • Ծ૝Ϛγϯىಈ࣌ʹNUMA node͕ἧ͏Α͏ʹࢦఆ͠ىಈͤ͞Δ ӡ༻ઃܭ 24 NUMA node1 NUMA node2
  8. ӡ༻ઃܭ • Ծ૝Ϛγϯͷઃܭʹج͍ͮͨઃఆɺಈ࡞ݕূ • ౰ॳ͸෺ཧαʔόᝑମʹ౥ࡌͨ͠ϝϞϦΛͳΔ΂͘Ծ૝Ϛγϯʹׂ౰͢Δํ਑ͩͬͨ • ىಈͨ͠΋ͷͷqemuͷϓϩηε͕swapͯ͠͠·͏ࣄଶ͕ൃੜ • ύϑΥʔϚϯεͷ؍఺ͰΑ͘ͳ͍ঢ়ଶ •

    ىಈͯؒ͠΋ແ͘qemuͷϓϩηε͕ऴྃͯ͠͠·͏ࣄଶ͕ • oom-killerʹΑͬͯqemuϓϩηε͕ڧ੍ऴ͍ྃͯͨ͜͠ͱ͕ൃ֮…😇 • ϗετͰಈ࡞͢Δ֤छαʔϏεΛ֬ೝ҆͠શʹಈ࡞͢ΔϝϞϦ༰ྔΛܭࢉ͠ɺͦͷεϖοΫͰఏ ڙ͢Δ͜ͱʹ • Ұ෦γεςϜܥͷσʔϞϯ͕ϝϞϦϦʔΫ͍ͯͨ͠ΓɺͦͷରࡦͳͲ΋࣮ࢪ • ҆ఆͨ͠ঢ়ଶͰԾ૝ϚγϯΛಈ͔ͨ͢ΊʹɺεϖοΫͷ૊Έ߹ΘͤݕূΛࢼߦࡨޡ • γεςϜશମʹϝϞϦͷۭ͖༰ྔ͕͋ͬͨͱͯ͠΋ɺNUMA node͋ͨΓͷϝϞϦͷۭ͖͕ͳ͍ͱ oom-killerͰVM͕ࢭΊΒΕͯ͠·͏ֶͼ͕ಘΒΕͨ 28
  9. ӡ༻ઃܭ • GPUͷಈ࡞ʹ࠷దͳ؀ڥΛ੔උ͢ΔͨΊͷݕূɾઃఆ • ΤΞϑϩʔ͕ਖ਼ৗͰɺద੾ͳԹ౓Ͱ͋Δ͜ͱ • ϑΝϯͷճస਺੍ޚɺϑΝϯͷҐஔΛม͑ΔͳͲͷରԠ • ϑΝϯ͸GPUʹ͸౥ࡌ͞Ε͓ͯΒͣɺυϥΠϠʔͷΑ͏ͳ෩ѹͷϑΝϯΛᝑମʹऔΓ෇͚Δ •

    GPU͕ྫྷ٫͞Εͳ͍ͱɺGPU಺෦ϓϩηοαͷಈ࡞प೾਺͕௿Լ͢Δ • ҰํͰϑΝϯΛશ։ʹͯ͠΋ແବ͕ੜ͡ΔͨΊɺίετͱੑೳʹ͓͍ͯόϥϯε͕औΕͨঢ়ଶΛ ୳͠ɺݟ͚ͭΔ • αʔόᝑମͷIPMIͱGPU͔Β֤छϝτϦΫεΛPrometheusͰऩूɺGrafanaͰμογϡϘʔυΛ࡞ ੒͠ՄࢹԽ • ͍͔ͭ͘ͷϑΝϯͷϞʔυΛࢼ͢΋͏·͍͔ͣ͘αʔόͷ୅ཧళʹ໰͍߹Θͤͨ • BMCͷόʔδϣϯ͕ݹ͘Ξοϓσʔτͨ͠ͱ͜Ζظ଴͢Δ݁Ռ͕ಘΒΕ࠷దͳঢ়ଶ͕Ͱ͖ͨ • ݕূதϑΝϯΛશ։ʹͨ͠ͱ͜ΖɺGPUαʔόͷᝑମͷഎ໘ଆʹ͋ΔଞͷαʔόͷԹ౓্͕ঢ͠ ͯ͠·͏ࣄ৅͕ൃੜͨ͠ɺͦΕΒ΋ߟྀͯ͠؀ڥΛ੔උ 29
  10. ӡ༻ઃܭ • GPUͷಈ࡞ʹ࠷దͳ؀ڥΛ੔උ͢ΔͨΊͷݕূɾઃఆ 30 ϗετ ෺ཧαʔόᝑମ ϋΠύʔόΠβʔ -JOVY,7. ϗετ04 GPU

    GPU GPU GPU Ծ૝Ϛγϯ Ծ૝Ϛγϯ ɾɹɾɹ ɾɾ GPUʹෛՙΛ͔͚Δɺgpu_exporterΛ࣮ߦ GPUʹෛՙΛ͔͚Δ ˍ gpu_exporterΛ࣮ߦ ipmi_exporter ipmi_exporter(αʔόᝑମͷϝτϦΫεΛऔಘɺফඅిྗɺԹ౓ɺϑΝϯճస਺౳) gpu_exporter(GPUͷ֤छϝτϦΫεɺಈ࡞प೾਺ɺফඅిྗɺԹ౓ɺϝϞϦͳͲΛऔಘ)
  11. ӡ༻ઃܭ • ෛՙࢼݧɺϕϯνϚʔΫ • ফඅిྗ͕େ͖͘ͳΔɺԹ౓͕ߴ͘ͳΔέʔεΛ࡞੒͠Ұఆظ࣮ؒࢪ • ຊ൪؀ڥͱಉ͡ঢ়ଶϥοΫɺαʔόᝑମ਺Λἧ͑ͯෛՙΛ͔͚Δ • جຊతʹ͸ઌ΄Ͳͱ΍Δ͜ͱ͸ಉ͡ɺҧ͍͸Ծ૝Ϛγϯͷ਺͕ଟ͘ͳΔ •

    TerraformͰෛՙࢼݧɺϕϯνϚʔΫ༻ͷԾ૝ϚγϯΛେྔʹల։ • ४උ͕੔ͬͨΒxargsίϚϯυͰҰ੪ʹԾ૝ϚγϯͱϗετʹෛՙΛ͔͚Δ • ͢΂ͯͷϗετɺԾ૝ϚγϯɺGPUͷঢ়ଶΛ֬ೝ͢ΔͨΊͷμογϡϘʔυΛ࡞੒͠ݟकΔ • Ծ૝Ϛγϯ • gpu_burn΍࣮ࡍͷϫʔΫϩʔυͳͲͰෛՙ • ϕϯνϚʔΫ͸ҰൠతͳGPUϕϯνϚʔΫͳͲΛ༻͍Δ • ϗετͷCPUɺϝϞϦ • ઐ༻ͷπʔϧΛ༻͍ͯෛՙ 32
  12. ӡ༻ઃܭ • ؂ࢹ಺༰ͷݕ౼ • طଘͷϗεταʔόʹର͢Δ؂ࢹʹՃ͑GPUͷ؂ࢹΛ͢Δඞཁ͕͋Δ • ϗετ͔ΒGPUʹΞΫηεͰ͖ͳ͍ͨΊ؂ࢹͰ͖ΔൣғͰߦ͏ • ϗεταʔόଆ •

    GPU౥ࡌεϩοτͷϦϯΫεϐʔυ • lspciͳͲͷ৘ใΛνΣοΫ • GPUࣗମͷ؂ࢹɺނোݕ஌ɾϔϧενΣοΫ͸ޙड़͢ΔʮαʔϏε VMʯͱ͍͏࢓૊ΈΛ༻͍ͯߦ͏͜ͱʹܾఆ 35
  13. ։ൃઃܭ • Ծ૝ϚγϯʹGPUΛׂ౰͠ىಈ͢Δ࢓૊ΈΛ࣮૷͠ɺຊ൪؀ڥʹ൓өͰ͖Δঢ়ଶʹ͢Δ • ੡඼൛Λߟྀͨ͠ઃܭɺ࣮૷ • αʔόΛىಈ͢ΔϓϩάϥϜ • NUMAΛߟྀͨ͠Ծ૝Ϛγϯʹର͢ΔCPU,MEM,GPUͷׂ౰ •

    ཁٻ͞ΕͨGPU਺ʹԠׂͯ͡౰ɺׂ౰ෆՄͷ৔߹ͷΤϥʔॲཧ • ౥ࡌ͞Ε͍ͯΔGPUͷঢ়ଶ؅ཧ(ະׂ౰ɺׂ౰தɺނো) • ঢ়ଶΛAPIʹ௨஌͢Δػೳ • GPUͷނোݕ஌ɺϔϧενΣοΫͷ࢓૊Έͷݕ౼ • API • GPUϗετͷࡏݿ؅ཧ • GPUϓϥϯͷ௥ՃɺGPUαʔόͷεέδϡʔϦϯά • GPUͷଐੑ৘ใͷ؅ཧͷݕ౼(GPUܕ൪ɺGPUϝϞϦɺݸମΛࣝผ͢Δ஋ɺetc…) 36
  14. ։ൃઃܭ • GPUͷނোݕ஌ɺϔϧενΣοΫͷ࢓૊Έͷݕ౼ • ϗετ͔Β͸GPUʹΞΫηεͰ͖ͳ͍ͨΊɺಛผͳԾ૝ϚγϯʮαʔϏεVMʯΛ༻͍ ͯߦ͏͜ͱʹܾఆ • ҎԼͷΑ͏ͳ࢓૊ΈΛ։ൃ࣮૷͠ɺࣗಈνΣοΫͷ࢓૊ΈΛཱ֬ • 1.Ծ૝ϚγϯఀࢭޙʹGPU͕ղ์͞ΕΔ

    • 2.ղ์͞ΕͨGPU͸࢖༻ࡁΈͱͯ͠ϚʔΫ͞ΕɺఆظతʹͦͷGPUΛΞλον͞Εͨ ʮαʔϏεVMʯ͕ىಈ • 3.GPUͷ਍அπʔϧ౳Λ༻͍ͯਖ਼ৗʹಈ࡞͢Δ͜ͱΛ֬ೝ • 4.ਖ਼ৗͳ৔߹ɺະׂ౰ͱͯ͠GPUͷঢ়ଶΛมߋ͢Δ • 5.ҟৗͳ৔߹ɺׂ౰͞Εͳ͍Α͏ʹނোͱͯ͠ϚʔΫ͞ΕΔɺϗεταʔόʹ௨஌Λߦ ͍؂ࢹπʔϧͳͲ͕ͦΕΛ΋ͱʹΞϥʔτΛൃใ͢Δ 37 ͜ͷ࢓૊Έͷ࣮૷ͷҰ؀Ͱɺ࣮ࡍʹࣾ಺ʹ͋ͬͨյΕͨGPUΛ༻͍ͯҟৗܥͷςετ΋࣮ࢪ
  15. ੡඼൛ 39 ϗετ ෺ཧαʔόᝑମ ϋΠύʔόΠβʔ -JOVY,7. ϗετ04 GPU GPU GPU

    GPU Ծ૝Ϛγϯ Ծ૝Ϛγϯ ɾɹɾɹɾ ɾɾɾ αʔόΛىಈͤ͞Δ ϓϩάϥϜ αʔϏεVM
  16. • ۤ࿑ͨ͠఺ • Ծ૝Ϛγϯͷઃܭʹ͓͍ͯ҆ఆ͢ΔεϖοΫΛܾΊΔ • ͋ΒΏΔ૊Έ߹ΘͤΛߟ͑ݕূ͢Δͷ͕େมͩͬͨ • ՝୊͕ൃੜͨ͠৔߹ͷ੾Γ෼͚ • ϨΠϠʔ͕བྷΈ߹͏ࣄ৅͸͋Δఔ౓צ͕ͳ͍ͱɺ੾Γ෼͚͕೉͍͠

    • ϋΠύʔόΠβʔ/ϗετOS(Kernel)/GPU/αʔόᝑମ/etc… • ੾Γ෼্͚ͨͰɺҟͳΔ໰͍߹ΘͤઌʹΤεΧϨʔγϣϯΛߦ͏ • ਂ۷Γͨ͠஌͕ࣝඞཁʹͳΔ • PCI-Expressʹର͢ΔཧղɺϋΠύʔόΠβʔɾԾ૝ϚγϯɺOSͷϝϞϦ؅ཧ 45
  17. • ײ૝ • ॳΊͯ৮ΕΔྖҬ͕৽઱ͩͬͨ • PCI-Expressͷ࢓༷(ॻ੶Λߪೖͯ͠ษڧ) • ࣗ෼ͰσόΠεΛ࡞ͬͯΈ͍ͨͱࢥ͍ɺFPGAͳͲʹڵຯΛ࣋ͬͨ • ͞·͟·ͳϨΠϠʔʹରٕͯ͠ज़Λ࣋ͬͯରԠ͢Δͷ͕ྑ͍ܦݧʹͳͬͨ

    • ݁ߏେม͕ͩͬͨɺ޷͖ͳ͜ͱΛ࢓ࣄͱͯ͠Ͱ͖ͯຬ଍ • TellusͰ΋ར༻͞ΕΔΑ͏ʹͳΓخ͍͠ • GPUΛ࢖͏ͨΊͷ؀ڥߏஙͷϋʔυϧ͕ߴ͍ͷͰͦ͜Λղܾ͢ΔΑ͏ͳ΋ ͷΛఏڙ͍ͨ͠ 46
  18. • ࠷ޙʹ • json΍yamlͰΠϯϑϥɾΫϥ΢υΛ࢖͏͜ͱ͕Ͱ͖Δ࣌୅ • Πϯϑϥ͕ந৅Խ͞Εɺ࢖͍΍͘͢ͳΔ • ΍Γ͍ͨ͜ͱʹूதͰ͖Δ͜ͱ͸ྑ͍͜ͱ • ҰํͰΫϥ΢υͷઌͷੈք͸͞·͟·ͳٕज़Ͱߏ੒͞Ε͍ͯΔ

    • ࠓճ͝঺հͨ͠಺༰͸΄ΜͷҰ෦ • ͘͞ΒΠϯλʔωοτͷٕज़ελοΫΛ·ͱΊͯΈͨ(Qiitaهࣄ) • https://qiita.com/jh1vxw/items/f460f33e00614c9d2510 47 Ϋϥ΢υΛ࡞Δଆʹ͝ڵຯ͕͋Γ·ͨ͠Βɺ͘͞ΒΠϯλʔωοτͰ͓·͓ͪͯ͠Γ·͢ʂ