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

高速化・並列化・標準化で スケールするML予測システムの開発

高速化・並列化・標準化で スケールするML予測システムの開発

0c2ae3d2aa77423465e1e533ff0d030a?s=128

Daiki Ikeshima

July 08, 2021
Tweet

Transcript

  1. ߴ଎ԽɾฒྻԽɾඪ४ԽͰ εέʔϧ͢ΔML༧ଌγεςϜͷ։ൃ ʲSansan×Unipos×M3ʳMLOpsษڧձ ΤϜεϦʔגࣜձࣾɹ஑ౢେथ

  2. MLར༻Ҋ݅ͰΑ͋͘Δ̏՝୊ XXʹڵຯͷ͋Δਓʹ Ξϓϩʔν͍ͨ͠ MLΤϯδχΞ

  3. MLར༻Ҋ݅ͰΑ͋͘Δ̏՝୊ XXʹڵຯͷ͋Δਓʹ Ξϓϩʔν͍ͨ͠ Ϟσϧ MLΤϯδχΞ

  4. MLར༻Ҋ݅ͰΑ͋͘Δ̏՝୊ XXʹڵຯͷ͋Δਓʹ Ξϓϩʔν͍ͨ͠ YYΛങͬͯ͘Εͦ͏ ͳਓΛ஌Γ͍ͨ Ϟσϧ MLΤϯδχΞ

  5. MLར༻Ҋ݅ͰΑ͋͘Δ̏՝୊ XXʹڵຯͷ͋Δਓʹ Ξϓϩʔν͍ͨ͠ YYΛങͬͯ͘Εͦ͏ ͳਓΛ஌Γ͍ͨ ͜ͷલͱಉ͡ײ͡Ͱ Ϟσϧ ଐਓԽ MLΤϯδχΞ

  6. MLར༻Ҋ݅ͰΑ͋͘Δ̏՝୊ XXʹڵຯͷ͋Δਓʹ Ξϓϩʔν͍ͨ͠ YYΛങͬͯ͘Εͦ͏ ͳਓΛ஌Γ͍ͨ ͜ͷલͱಉ͡ײ͡Ͱ Ϟσϧ ଐਓԽ MLΤϯδχΞ

  7. MLར༻Ҋ݅ͰΑ͋͘Δ̏՝୊ XXʹڵຯͷ͋Δਓʹ Ξϓϩʔν͍ͨ͠ YYΛങͬͯ͘Εͦ͏ ͳਓΛ஌Γ͍ͨ ୀձͦ͠͏ͳਓʹ
 ࢪࡦΛଧ͍ͪͨ ZZʹߠఆҙݟͷਓΛ ஌Γ͍ͨ ͜ͷલͱಉ͡ײ͡Ͱ

    Ϟσϧ ଐਓԽ ฒߦͯ͠૸ΔҊ݅ MLΤϯδχΞ
  8. MLར༻Ҋ݅ͰΑ͋͘Δ̏՝୊ XXʹڵຯͷ͋Δਓʹ Ξϓϩʔν͍ͨ͠ YYΛങͬͯ͘Εͦ͏ ͳਓΛ஌Γ͍ͨ ୀձͦ͠͏ͳਓʹ
 ࢪࡦΛଧ͍ͪͨ ZZʹߠఆҙݟͷਓΛ ஌Γ͍ͨ ͜ͷલͱಉ͡ײ͡Ͱ

    ͳΔૣͰʂ ࠓिதʹʂ Ϟσϧ ଐਓԽ ฒߦͯ͠૸ΔҊ݅ λΠτͳక੾ MLΤϯδχΞ
  9. MLར༻Ҋ݅ͰΑ͋͘Δ̏՝୊ XXʹڵຯͷ͋Δਓʹ Ξϓϩʔν͍ͨ͠ YYΛങͬͯ͘Εͦ͏ ͳਓΛ஌Γ͍ͨ ୀձͦ͠͏ͳਓʹ
 ࢪࡦΛଧ͍ͪͨ ZZʹߠఆҙݟͷਓΛ ஌Γ͍ͨ ͜ͷલͱಉ͡ײ͡Ͱ

    ͳΔૣͰʂ ࠓिதʹʂ Ϟσϧ ྲྀ༻ ྲྀ༻ ଐਓԽ ฒߦͯ͠૸ΔҊ݅ λΠτͳక੾ MLΤϯδχΞ
  10. MLར༻Ҋ݅ͰΑ͋͘Δ̏՝୊ XXʹڵຯͷ͋Δਓʹ Ξϓϩʔν͍ͨ͠ YYΛങͬͯ͘Εͦ͏ ͳਓΛ஌Γ͍ͨ ୀձͦ͠͏ͳਓʹ
 ࢪࡦΛଧ͍ͪͨ ZZʹߠఆҙݟͷਓΛ ஌Γ͍ͨ ͜ͷલͱಉ͡ײ͡Ͱ

    ͳΔૣͰʂ ࠓिதʹʂ Ϟσϧ ྲྀ༻ ྲྀ༻ όά ʁ ʁ ଐਓԽ ฒߦͯ͠૸ΔҊ݅ λΠτͳక੾ MLΤϯδχΞ
  11. ̏՝୊ʹରԠ͢ΔͨΊʹ։ൃ͞ΕͨMLγεςϜ: Yule XXʹڵຯͷ͋Δਓʹ Ξϓϩʔν͍ͨ͠ YYΛങͬͯ͘Εͦ͏ ͳਓΛ஌Γ͍ͨ ୀձͦ͠͏ͳਓʹ
 ࢪࡦΛଧ͍ͪͨ ZZʹߠఆҙݟͷਓΛ ஌Γ͍ͨ

    ͜ͷલͱಉ͡ײ͡Ͱ ͳΔૣͰʂ ࠓिதʹʂ ଐਓԽ ฒߦͯ͠૸ΔҊ݅ λΠτͳక੾ Yule AutoMLͳ
 ਪଌγεςϜ ଐਓԽ λΠτͳక੾ ฒߦͯ͠૸ΔҊ݅ ඪ४Խ ฒྻԽ ߴ଎Խ
  12. Yule: ଟ਺ϞσϧΛΞϯαϯϒϧͯ͠ਪ࿦·ͰҰؾʹ࣮ߦ 12 ಛ௃நग़ GBDT Neural Network ϚϧνλεΫֶश సҠֶश ֶशࡁ

    Ϟσϧ Ξϯαϯϒϧ ਪ࿦ ڭࢣσʔλ
  13. ߴ଎ԽɾฒྻԽɾඪ४ԽͰMLҊ݅3՝୊Λࠀ෰ 13 ਪ࿦ σʔλऩू ಛ௃࡞੒ Ϟσϧ࡞੒ ֶश࣮ߦ ֶश؂ࢹ ֶशධՁ վળΠςϨʔγϣϯ


    Λߴ଎ʹճ͢ ։ൃऀҎ֎Ͱ΋
 ࣮ߦͰ͖ΔΑ͏ʹ ଟ਺ͷҊ݅Λ
 ฒߦͯ͠ରԠͰ͖Δ Ҋ݅̍ Ҋ݅̎ Ҋ݅̏ ඪ४Խ ฒྻԽ ߴ଎Խ
  14. ᶃ KubernetesΛ༻͍ͯλεΫΛ෼ࢄॲཧ ᶄ ઃఆϑΝΠϧΛ࡞੒͢Δ͚ͩͰֶशɾਪ࿦Λ࣮ߦͰ͖Δ ᶅ TensorBoardʹΑΔֶश؂ࢹ ᶆ gokartΛ࢖ͬͯதؒσʔλΛΩϟογϡ͢Δ ᶇ νʔϜ಺ڞ௨ͷμ΢ϯϩʔυϥΠϒϥϦͰσʔλಡΈࠐΈ

    14 ·ͱΊ: ߴ଎ԽɾฒྻԽɾඪ४ԽͰMLҊ݅3՝୊Λࠀ෰ ඪ४Խ ฒྻԽ ߴ଎Խ ඪ४Խ ߴ଎Խ ߴ଎Խ
  15. 15 ಛ௃࡞੒ʙֶशʙਪ࿦ΛKubernetes্Ͱ࣮ࢪ ֶश ਪ࿦ CVͷFold͝ͱʹϊʔυ෼ࢄ ਪ࿦ର৅ϢʔβΛ෼ׂͯ͠ϊʔυ෼ࢄ ᶃ KubernetesΛ༻͍ͯ෼ࢄॲཧ ฒྻԽ ߴ଎Խ

  16. 16 • ཁ݅ʹ߹ΘͤͯϊʔυϓʔϧΛ࢖͍෼͚Δ • GKEͷϓϦΤϯϓςΟϒϧϊʔυΛ࢖ͬͯྉۚΛઅ໿ —> ΨϯΨϯ෼ࢄͰ͖Δ • ෳ਺ͷֶश΍ਪ࿦Λಉ࣌ฒߦʹճͤΔ •

    ࣮ݧΠςϨʔγϣϯ͕ߴ଎Խ͠ɺੑೳվળʹूதͰ͖Δ ֶश ਪ࿦ CPU༏ઌϊʔυ ϝϞϦ༏ઌϊʔυ ฒྻԽ ߴ଎Խ ᶃ KubernetesΛ༻͍ͯ෼ࢄॲཧ
  17. 17 ᶄ ઃఆϑΝΠϧΛ࡞੒͢Δ͚ͩͰֶशɾਪ࿦Λ࣮ߦͰ͖Δ • ڭࢣσʔλͷύε • ಛ௃બ୒ํ๏ • Ϟσϧͷछྨɾύϥϝλ •

    ίʔυͷίϛοτϋογϡɹ౳ ઃఆϑΝΠϧ Yule Kubernetes GCR BigQuery GCS docker
 Πϝʔδ ಛ௃
 σʔλ ڭࢣ
 σʔλ • ࣮ݧઃఆΛઃఆϑΝΠϧʹهड़͢Δ͚ͩͰ • ઃఆʹԊͬͯdockerΠϝʔδ/σʔλΛGCR, BQ, GCSͳͲ͔Βऔಘ • Kubernetesʹ෼ࢄσϓϩΠ ίʔυ hash: ff34 tag: ff34 push build & push ඪ४Խ
  18. 18 • ڭࢣσʔλͷύε • ಛ௃બ୒ํ๏ • Ϟσϧͷछྨɾύϥϝλ • ίʔυͷίϛοτϋογϡɹ౳ ઃఆϑΝΠϧ

    Yule Kubernetes • ઃఆϑΝΠϧΛॻ͚ͩ͘ͰֶशΛ࣮ߦͰ͖ΔΑ͏ʹͳͬͨ • ։ൃͱ࣮ߦ͕෼཭͠ίʔυΛҙֶࣝͤͣशΛճͤΔ • ➔ίΞ։ൃऀҎ֎Ͱ΋࣮ߦՄೳʹ • ࣮ݧઃఆͱίʔυΛඥ෇͚ • ࠷৽͚ͩͰͳ͘աڈͷίʔυ΋ࢀরͰ͖Δ • ➔࠶ݱੑΛ୲อ ᶄ ઃఆϑΝΠϧΛ࡞੒͢Δ͚ͩͰֶशɾਪ࿦Λ࣮ߦͰ͖Δ ඪ४Խ
  19. ᶅ TensorBoardʹΑΔֶश؂ࢹ 19 KubernetesͳͲϦϞʔτ؀ڥͰ෼ࢄֶͯ͠श͢ΔͱܦաΛ೺Ѳͮ͠Β͍ ੑೳվળͷΠςϨʔγϣϯ͕ૣ͘ͳͬͨ TensorBoardͰֶशۂઢͳͲֶशϝτϦΫεΛ ϦΞϧλΠϜ؂ࢹ ɹˠ ֶशվળͷώϯτΛಘΒΕΔ ߴ଎Խ

  20. gokartͱ͸ • python੡ύΠϓϥΠϯϥΠϒϥϦ • ॲཧΛTaskͱݺ͹ΕΔΫϥε୯ҐͰґଘؔ܎ͱͱ΋ʹهड़͢Δ • ґଘؔ܎Λղܾ͠ͳ͕ΒॲཧΛ͢͢ΊΔ • ్தܦա͸Ωϟογϡ͞Ε͍ͯΔͨΊɺಉ͡ॲཧ͸̎ճ໨͸লུͰ͖Δ ᶆ

    gokartΛ࢖ͬͯதؒσʔλΛΩϟογϡ͢Δ 20 Ҋ݅ؒͰڞ௨ͯ͠࢖͏ಛ௃ྔσʔλ͸࢖͍·Θ͍ͨ͠ AIνʔϜͰ͸gokartΛ։ൃ͠׆༻ ॲཧ̍ ॲཧ̎ ॲཧ̏ σʔλ̍ σʔλ̎ Ϟσϧ
 ֶश̍ ߴ଎Խ
  21. gokartͱ͸ • python੡ύΠϓϥΠϯϥΠϒϥϦ • ॲཧΛTaskͱݺ͹ΕΔΫϥε୯ҐͰґଘؔ܎ͱͱ΋ʹهड़͢Δ • ґଘؔ܎Λղܾ͠ͳ͕ΒॲཧΛ͢͢ΊΔ • ్தܦա͸Ωϟογϡ͞Ε͍ͯΔͨΊɺಉ͡ॲཧ͸̎ճ໨͸লུͰ͖Δ ᶆ

    gokartΛ࢖ͬͯதؒσʔλΛΩϟογϡ͢Δ 21 Ҋ݅ؒͰڞ௨ͯ͠࢖͏ಛ௃ྔσʔλ͸࢖͍·Θ͍ͨ͠ AIνʔϜͰ͸gokartΛ։ൃ͠׆༻ ॲཧ̍ ॲཧ̎ ॲཧ̏ σʔλ̍ σʔλ̎ Ϟσϧ
 ֶश̍ Ϟσϧ
 ֶश̎ ߴ଎Խ
  22. ᶆ gokartΛ࢖ͬͯதؒσʔλΛΩϟογϡ͢Δ 22 • ಛ௃ྔͷੜ੒ϓϩηε͕ίʔυԽ͞Ε͍ͯΔ • ಛ௃ྔσʔλ͕Ωϟογϡ • ➔ Ҋ݅ʹΑΒͣ࢖͍ճͤΔ

    • ➔ ઃఆΛม͑ͨ࠶࣮ݧͰ΋࠶ར༻ʹΑΔ࣌ؒ୹ॖ • ϓϩηε్͕தͰམͪͯ΋్தͷΩϟογϡ͔Β࠶։ • ➔ ҆৺ͯ͠GKEͷϓϦΤϯϓςΟϒϧϊʔυΛ࢖͑Δ • Ωϟογϡ࠶ར༻ʹΑ࣮ͬͯߦ࣌ؒΛ୹ॖͰ͖ͨ • ϓϦΤϯϓςΟϒϧͷ׆༻ͰGKEͷྉۚͷઅ໿͕Ͱ͖ͨ ߴ଎Խ ॲཧ̍ ॲཧ̎ ॲཧ̏ σʔλ̍ σʔλ̎ Ϟσϧ
 ֶश̍ Ϟσϧ
 ֶश̎
  23. BigQuery Ϣʔβ
 σʔλ هࣄӾཡ
 σʔλ ΫϦοΫ
 σʔλ ᶇ νʔϜ಺ڞ௨ͷμ΢ϯϩʔυϥΠϒϥϦͰσʔλಡΈࠐΈ 23

    • YuleҎ֎ͷMLϓϩμΫτͰ΋࢖͍ͬͯΔσʔλ͸ࣅ͍ͯΔ • BQ͔Βσʔλऔಘ͢ΔͨΊʹͦΕͧΕSQLΛॻ͔ͳ͍ͱ͍͚ͳ͍ ඪ४Խ Yule ML1 ML2 ML3 SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL
  24. BigQuery Ϣʔβ
 σʔλ هࣄӾཡ
 σʔλ ΫϦοΫ
 σʔλ ᶇ νʔϜ಺ڞ௨ͷμ΢ϯϩʔυϥΠϒϥϦͰσʔλಡΈࠐΈ 24

    • μ΢ϯϩʔυ༻ͷڞ௨ϥΠϒϥϦΛ࢖༻ • طଘͷμ΢ϯϩʔυϝιου͕࢖͍·ΘͤΔ ➔ SQLΛϓϩμΫτ͝ͱʹॻ͔ͳͯ͘ࡁΉ • gokartͰඪ४Խ͞Ε͓ͯΓಡΈॻ͖͠΍͍͢ • ➔ ୭Ͱ΋؆୯ʹ࢖͑Δ ඪ४Խ Yule ML1 ML2 ML3 mushroom μ΢ϯϩʔυ༻
 ϥΠϒϥϦ SQL ϝιουΛར༻
  25. ᶃ KubernetesΛ༻͍ͯλεΫΛ෼ࢄॲཧ ᶄ ઃఆϑΝΠϧΛ࡞੒͢Δ͚ͩͰֶशɾਪ࿦Λ࣮ߦͰ͖Δ ᶅ TensorBoardʹΑΔֶश؂ࢹ ᶆ gokartΛ࢖ͬͯதؒσʔλΛΩϟογϡ͢Δ ᶇ νʔϜ಺ڞ௨ͷμ΢ϯϩʔυϥΠϒϥϦͰσʔλಡΈࠐΈ

    25 ·ͱΊ: ߴ଎ԽɾฒྻԽɾඪ४ԽͰMLҊ݅3՝୊Λࠀ෰ ඪ४Խ ฒྻԽ ߴ଎Խ ඪ४Խ ߴ଎Խ ߴ଎Խ
  26. 26 ΤϜεϦʔͰ͸MLγεςϜΛ։ൃɾվળͯ͘͠ΕΔਓΛืूதͰ͢ https://jobs.m3.com/engineer/ ̏՝୊Λղܾ͢Δ͜ͱͰεέʔϧ͢ΔγεςϜ͕Ͱ͖ͨ • ߴ଎ԽɿվળΠςϨʔγϣϯΛߴ଎ʹճͤͨ • ฒྻԽɿଟ਺ͷҊ݅Λಉ࣌ਐߦͰ͜ͳͤͨ • ඪ४Խɿ։ൃ/࣮ߦΛ෼཭ͨ͜͠ͱͰɺ৽نϝϯόʔͰ΋͙͢ʹ࣮ߦͰ͖ͨ

    ·ͱΊ: ߴ଎ԽɾฒྻԽɾඪ४ԽͰMLҊ݅3՝୊Λࠀ෰