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

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

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

Daiki Ikeshima

July 08, 2021
Tweet

More Decks by Daiki Ikeshima

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  7. MLར༻Ҋ݅ͰΑ͋͘Δ̏՝୊
    XXʹڵຯͷ͋Δਓʹ
    Ξϓϩʔν͍ͨ͠
    YYΛങͬͯ͘Εͦ͏
    ͳਓΛ஌Γ͍ͨ
    ୀձͦ͠͏ͳਓʹ

    ࢪࡦΛଧ͍ͪͨ
    ZZʹߠఆҙݟͷਓΛ
    ஌Γ͍ͨ
    ͜ͷલͱಉ͡ײ͡Ͱ
    Ϟσϧ
    ଐਓԽ
    ฒߦͯ͠૸ΔҊ݅
    MLΤϯδχΞ

    View Slide

  8. MLར༻Ҋ݅ͰΑ͋͘Δ̏՝୊
    XXʹڵຯͷ͋Δਓʹ
    Ξϓϩʔν͍ͨ͠
    YYΛങͬͯ͘Εͦ͏
    ͳਓΛ஌Γ͍ͨ
    ୀձͦ͠͏ͳਓʹ

    ࢪࡦΛଧ͍ͪͨ
    ZZʹߠఆҙݟͷਓΛ
    ஌Γ͍ͨ
    ͜ͷલͱಉ͡ײ͡Ͱ ͳΔૣͰʂ ࠓिதʹʂ
    Ϟσϧ
    ଐਓԽ
    ฒߦͯ͠૸ΔҊ݅
    λΠτͳక੾
    MLΤϯδχΞ

    View Slide

  9. MLར༻Ҋ݅ͰΑ͋͘Δ̏՝୊
    XXʹڵຯͷ͋Δਓʹ
    Ξϓϩʔν͍ͨ͠
    YYΛങͬͯ͘Εͦ͏
    ͳਓΛ஌Γ͍ͨ
    ୀձͦ͠͏ͳਓʹ

    ࢪࡦΛଧ͍ͪͨ
    ZZʹߠఆҙݟͷਓΛ
    ஌Γ͍ͨ
    ͜ͷલͱಉ͡ײ͡Ͱ ͳΔૣͰʂ ࠓिதʹʂ
    Ϟσϧ
    ྲྀ༻ ྲྀ༻
    ଐਓԽ
    ฒߦͯ͠૸ΔҊ݅
    λΠτͳక੾
    MLΤϯδχΞ

    View Slide

  10. MLར༻Ҋ݅ͰΑ͋͘Δ̏՝୊
    XXʹڵຯͷ͋Δਓʹ
    Ξϓϩʔν͍ͨ͠
    YYΛങͬͯ͘Εͦ͏
    ͳਓΛ஌Γ͍ͨ
    ୀձͦ͠͏ͳਓʹ

    ࢪࡦΛଧ͍ͪͨ
    ZZʹߠఆҙݟͷਓΛ
    ஌Γ͍ͨ
    ͜ͷલͱಉ͡ײ͡Ͱ ͳΔૣͰʂ ࠓिதʹʂ
    Ϟσϧ
    ྲྀ༻ ྲྀ༻
    όά
    ʁ ʁ
    ଐਓԽ
    ฒߦͯ͠૸ΔҊ݅
    λΠτͳక੾
    MLΤϯδχΞ

    View Slide

  11. ̏՝୊ʹରԠ͢ΔͨΊʹ։ൃ͞ΕͨMLγεςϜ: Yule
    XXʹڵຯͷ͋Δਓʹ
    Ξϓϩʔν͍ͨ͠
    YYΛങͬͯ͘Εͦ͏
    ͳਓΛ஌Γ͍ͨ
    ୀձͦ͠͏ͳਓʹ

    ࢪࡦΛଧ͍ͪͨ
    ZZʹߠఆҙݟͷਓΛ
    ஌Γ͍ͨ
    ͜ͷલͱಉ͡ײ͡Ͱ ͳΔૣͰʂ ࠓिதʹʂ
    ଐਓԽ
    ฒߦͯ͠૸ΔҊ݅
    λΠτͳక੾
    Yule
    AutoMLͳ

    ਪଌγεςϜ
    ଐਓԽ λΠτͳక੾
    ฒߦͯ͠૸ΔҊ݅
    ඪ४Խ
    ฒྻԽ ߴ଎Խ

    View Slide

  12. Yule: ଟ਺ϞσϧΛΞϯαϯϒϧͯ͠ਪ࿦·ͰҰؾʹ࣮ߦ
    12
    ಛ௃நग़
    GBDT Neural Network ϚϧνλεΫֶश సҠֶश
    ֶशࡁ
    Ϟσϧ
    Ξϯαϯϒϧ ਪ࿦
    ڭࢣσʔλ

    View Slide

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

    Λߴ଎ʹճ͢
    ։ൃऀҎ֎Ͱ΋

    ࣮ߦͰ͖ΔΑ͏ʹ
    ଟ਺ͷҊ݅Λ

    ฒߦͯ͠ରԠͰ͖Δ
    Ҋ݅̍
    Ҋ݅̎ Ҋ݅̏
    ඪ४Խ
    ฒྻԽ
    ߴ଎Խ

    View Slide

  14. ᶃ KubernetesΛ༻͍ͯλεΫΛ෼ࢄॲཧ
    ᶄ ઃఆϑΝΠϧΛ࡞੒͢Δ͚ͩͰֶशɾਪ࿦Λ࣮ߦͰ͖Δ
    ᶅ TensorBoardʹΑΔֶश؂ࢹ
    ᶆ gokartΛ࢖ͬͯதؒσʔλΛΩϟογϡ͢Δ
    ᶇ νʔϜ಺ڞ௨ͷμ΢ϯϩʔυϥΠϒϥϦͰσʔλಡΈࠐΈ
    14
    ·ͱΊ: ߴ଎ԽɾฒྻԽɾඪ४ԽͰMLҊ݅3՝୊Λࠀ෰
    ඪ४Խ
    ฒྻԽ
    ߴ଎Խ
    ඪ४Խ
    ߴ଎Խ
    ߴ଎Խ

    View Slide

  15. 15
    ಛ௃࡞੒ʙֶशʙਪ࿦ΛKubernetes্Ͱ࣮ࢪ
    ֶश ਪ࿦
    CVͷFold͝ͱʹϊʔυ෼ࢄ ਪ࿦ର৅ϢʔβΛ෼ׂͯ͠ϊʔυ෼ࢄ
    ᶃ KubernetesΛ༻͍ͯ෼ࢄॲཧ ฒྻԽ ߴ଎Խ

    View Slide

  16. 16
    • ཁ݅ʹ߹ΘͤͯϊʔυϓʔϧΛ࢖͍෼͚Δ
    • GKEͷϓϦΤϯϓςΟϒϧϊʔυΛ࢖ͬͯྉۚΛઅ໿ —> ΨϯΨϯ෼ࢄͰ͖Δ
    • ෳ਺ͷֶश΍ਪ࿦Λಉ࣌ฒߦʹճͤΔ
    • ࣮ݧΠςϨʔγϣϯ͕ߴ଎Խ͠ɺੑೳվળʹूதͰ͖Δ
    ֶश ਪ࿦
    CPU༏ઌϊʔυ ϝϞϦ༏ઌϊʔυ
    ฒྻԽ ߴ଎Խ
    ᶃ KubernetesΛ༻͍ͯ෼ࢄॲཧ

    View Slide

  17. 17
    ᶄ ઃఆϑΝΠϧΛ࡞੒͢Δ͚ͩͰֶशɾਪ࿦Λ࣮ߦͰ͖Δ
    • ڭࢣσʔλͷύε
    • ಛ௃બ୒ํ๏
    • Ϟσϧͷछྨɾύϥϝλ
    • ίʔυͷίϛοτϋογϡɹ౳
    ઃఆϑΝΠϧ
    Yule
    Kubernetes
    GCR BigQuery GCS
    docker

    Πϝʔδ
    ಛ௃

    σʔλ
    ڭࢣ

    σʔλ
    • ࣮ݧઃఆΛઃఆϑΝΠϧʹهड़͢Δ͚ͩͰ
    • ઃఆʹԊͬͯdockerΠϝʔδ/σʔλΛGCR, BQ, GCSͳͲ͔Βऔಘ
    • Kubernetesʹ෼ࢄσϓϩΠ
    ίʔυ
    hash: ff34 tag: ff34
    push
    build &
    push
    ඪ४Խ

    View Slide

  18. 18
    • ڭࢣσʔλͷύε
    • ಛ௃બ୒ํ๏
    • Ϟσϧͷछྨɾύϥϝλ
    • ίʔυͷίϛοτϋογϡɹ౳
    ઃఆϑΝΠϧ
    Yule
    Kubernetes
    • ઃఆϑΝΠϧΛॻ͚ͩ͘ͰֶशΛ࣮ߦͰ͖ΔΑ͏ʹͳͬͨ
    • ։ൃͱ࣮ߦ͕෼཭͠ίʔυΛҙֶࣝͤͣशΛճͤΔ
    • ➔ίΞ։ൃऀҎ֎Ͱ΋࣮ߦՄೳʹ
    • ࣮ݧઃఆͱίʔυΛඥ෇͚
    • ࠷৽͚ͩͰͳ͘աڈͷίʔυ΋ࢀরͰ͖Δ
    • ➔࠶ݱੑΛ୲อ
    ᶄ ઃఆϑΝΠϧΛ࡞੒͢Δ͚ͩͰֶशɾਪ࿦Λ࣮ߦͰ͖Δ ඪ४Խ

    View Slide

  19. ᶅ TensorBoardʹΑΔֶश؂ࢹ
    19
    KubernetesͳͲϦϞʔτ؀ڥͰ෼ࢄֶͯ͠श͢ΔͱܦաΛ೺Ѳͮ͠Β͍
    ੑೳվળͷΠςϨʔγϣϯ͕ૣ͘ͳͬͨ
    TensorBoardͰֶशۂઢͳͲֶशϝτϦΫεΛ
    ϦΞϧλΠϜ؂ࢹ
    ɹˠ ֶशվળͷώϯτΛಘΒΕΔ
    ߴ଎Խ

    View Slide

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

    ֶश̍
    ߴ଎Խ

    View Slide

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

    ֶश̍
    Ϟσϧ

    ֶश̎
    ߴ଎Խ

    View Slide

  22. ᶆ gokartΛ࢖ͬͯதؒσʔλΛΩϟογϡ͢Δ
    22
    • ಛ௃ྔͷੜ੒ϓϩηε͕ίʔυԽ͞Ε͍ͯΔ
    • ಛ௃ྔσʔλ͕Ωϟογϡ
    • ➔ Ҋ݅ʹΑΒͣ࢖͍ճͤΔ
    • ➔ ઃఆΛม͑ͨ࠶࣮ݧͰ΋࠶ར༻ʹΑΔ࣌ؒ୹ॖ
    • ϓϩηε్͕தͰམͪͯ΋్தͷΩϟογϡ͔Β࠶։
    • ➔ ҆৺ͯ͠GKEͷϓϦΤϯϓςΟϒϧϊʔυΛ࢖͑Δ
    • Ωϟογϡ࠶ར༻ʹΑ࣮ͬͯߦ࣌ؒΛ୹ॖͰ͖ͨ
    • ϓϦΤϯϓςΟϒϧͷ׆༻ͰGKEͷྉۚͷઅ໿͕Ͱ͖ͨ
    ߴ଎Խ
    ॲཧ̍ ॲཧ̎
    ॲཧ̏
    σʔλ̍ σʔλ̎
    Ϟσϧ

    ֶश̍
    Ϟσϧ

    ֶश̎

    View Slide

  23. BigQuery
    Ϣʔβ

    σʔλ
    هࣄӾཡ

    σʔλ
    ΫϦοΫ

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

    View Slide

  24. BigQuery
    Ϣʔβ

    σʔλ
    هࣄӾཡ

    σʔλ
    ΫϦοΫ

    σʔλ
    ᶇ νʔϜ಺ڞ௨ͷμ΢ϯϩʔυϥΠϒϥϦͰσʔλಡΈࠐΈ
    24
    • μ΢ϯϩʔυ༻ͷڞ௨ϥΠϒϥϦΛ࢖༻
    • طଘͷμ΢ϯϩʔυϝιου͕࢖͍·ΘͤΔ ➔ SQLΛϓϩμΫτ͝ͱʹॻ͔ͳͯ͘ࡁΉ
    • gokartͰඪ४Խ͞Ε͓ͯΓಡΈॻ͖͠΍͍͢
    • ➔ ୭Ͱ΋؆୯ʹ࢖͑Δ
    ඪ४Խ
    Yule ML1 ML2 ML3
    mushroom
    μ΢ϯϩʔυ༻

    ϥΠϒϥϦ
    SQL ϝιουΛར༻

    View Slide

  25. ᶃ KubernetesΛ༻͍ͯλεΫΛ෼ࢄॲཧ
    ᶄ ઃఆϑΝΠϧΛ࡞੒͢Δ͚ͩͰֶशɾਪ࿦Λ࣮ߦͰ͖Δ
    ᶅ TensorBoardʹΑΔֶश؂ࢹ
    ᶆ gokartΛ࢖ͬͯதؒσʔλΛΩϟογϡ͢Δ
    ᶇ νʔϜ಺ڞ௨ͷμ΢ϯϩʔυϥΠϒϥϦͰσʔλಡΈࠐΈ
    25
    ·ͱΊ: ߴ଎ԽɾฒྻԽɾඪ४ԽͰMLҊ݅3՝୊Λࠀ෰
    ඪ४Խ
    ฒྻԽ
    ߴ଎Խ
    ඪ४Խ
    ߴ଎Խ
    ߴ଎Խ

    View Slide

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

    View Slide