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
高速化・並列化・標準化で スケールするML予測システムの開発
Search
Daiki Ikeshima
July 08, 2021
Technology
5
3.2k
高速化・並列化・標準化で スケールするML予測システムの開発
Daiki Ikeshima
July 08, 2021
Tweet
Share
More Decks by Daiki Ikeshima
See All by Daiki Ikeshima
MLOpsの「あるある」課題の解決と、そのためのライブラリgokart
mski_iksm
1
1.4k
gokartのキャッシュ競合防止のロック機能
mski_iksm
0
2.3k
macのunicode正規化.pdf
mski_iksm
0
33k
実臨床・Webサービス領域での機械学習研究 開発の標準化
mski_iksm
8
26k
pythonでメタプログラミング(メタクラス編)
mski_iksm
1
490
パイプラインツールgokartのタスク競合を解消した話
mski_iksm
0
210
Other Decks in Technology
See All in Technology
品質視点から考える組織デザイン/Organizational Design from Quality
mii3king
0
210
企業の生成AIガバナンスにおけるエージェントとセキュリティ
lycorptech_jp
PRO
2
190
Practical Agentic AI in Software Engineering
uzyn
0
110
Agile PBL at New Grads Trainings
kawaguti
PRO
1
440
20250913_JAWS_sysad_kobe
takuyay0ne
2
230
自作JSエンジンに推しプロポーザルを実装したい!
sajikix
1
180
大「個人開発サービス」時代に僕たちはどう生きるか
sotarok
20
10k
ハードウェアとソフトウェアをつなぐ全てを内製している企業の E2E テストの作り方 / How to create E2E tests for a company that builds everything connecting hardware and software in-house
bitkey
PRO
1
150
Firestore → Spanner 移行 を成功させた段階的移行プロセス
athug
1
490
S3アクセス制御の設計ポイント
tommy0124
3
200
人工衛星のファームウェアをRustで書く理由
koba789
15
8.1k
いま注目のAIエージェントを作ってみよう
supermarimobros
0
330
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Documentation Writing (for coders)
carmenintech
74
5k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Side Projects
sachag
455
43k
Making the Leap to Tech Lead
cromwellryan
135
9.5k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Site-Speed That Sticks
csswizardry
10
820
The Pragmatic Product Professional
lauravandoore
36
6.9k
Done Done
chrislema
185
16k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
Into the Great Unknown - MozCon
thekraken
40
2k
Building an army of robots
kneath
306
46k
Transcript
ߴԽɾฒྻԽɾඪ४ԽͰ εέʔϧ͢ΔML༧ଌγεςϜͷ։ൃ ʲSansan×Unipos×M3ʳMLOpsษڧձ ΤϜεϦʔגࣜձࣾɹౢେथ
MLར༻Ҋ݅ͰΑ͋͘Δ̏՝ XXʹڵຯͷ͋Δਓʹ Ξϓϩʔν͍ͨ͠ MLΤϯδχΞ
MLར༻Ҋ݅ͰΑ͋͘Δ̏՝ XXʹڵຯͷ͋Δਓʹ Ξϓϩʔν͍ͨ͠ Ϟσϧ MLΤϯδχΞ
MLར༻Ҋ݅ͰΑ͋͘Δ̏՝ XXʹڵຯͷ͋Δਓʹ Ξϓϩʔν͍ͨ͠ YYΛങͬͯ͘Εͦ͏ ͳਓΛΓ͍ͨ Ϟσϧ MLΤϯδχΞ
MLར༻Ҋ݅ͰΑ͋͘Δ̏՝ XXʹڵຯͷ͋Δਓʹ Ξϓϩʔν͍ͨ͠ YYΛങͬͯ͘Εͦ͏ ͳਓΛΓ͍ͨ ͜ͷલͱಉ͡ײ͡Ͱ Ϟσϧ ଐਓԽ MLΤϯδχΞ
MLར༻Ҋ݅ͰΑ͋͘Δ̏՝ XXʹڵຯͷ͋Δਓʹ Ξϓϩʔν͍ͨ͠ YYΛങͬͯ͘Εͦ͏ ͳਓΛΓ͍ͨ ͜ͷલͱಉ͡ײ͡Ͱ Ϟσϧ ଐਓԽ MLΤϯδχΞ
MLར༻Ҋ݅ͰΑ͋͘Δ̏՝ XXʹڵຯͷ͋Δਓʹ Ξϓϩʔν͍ͨ͠ YYΛങͬͯ͘Εͦ͏ ͳਓΛΓ͍ͨ ୀձͦ͠͏ͳਓʹ ࢪࡦΛଧ͍ͪͨ ZZʹߠఆҙݟͷਓΛ Γ͍ͨ ͜ͷલͱಉ͡ײ͡Ͱ
Ϟσϧ ଐਓԽ ฒߦͯ͠ΔҊ݅ MLΤϯδχΞ
MLར༻Ҋ݅ͰΑ͋͘Δ̏՝ XXʹڵຯͷ͋Δਓʹ Ξϓϩʔν͍ͨ͠ YYΛങͬͯ͘Εͦ͏ ͳਓΛΓ͍ͨ ୀձͦ͠͏ͳਓʹ ࢪࡦΛଧ͍ͪͨ ZZʹߠఆҙݟͷਓΛ Γ͍ͨ ͜ͷલͱಉ͡ײ͡Ͱ
ͳΔૣͰʂ ࠓिதʹʂ Ϟσϧ ଐਓԽ ฒߦͯ͠ΔҊ݅ λΠτͳక MLΤϯδχΞ
MLར༻Ҋ݅ͰΑ͋͘Δ̏՝ XXʹڵຯͷ͋Δਓʹ Ξϓϩʔν͍ͨ͠ YYΛങͬͯ͘Εͦ͏ ͳਓΛΓ͍ͨ ୀձͦ͠͏ͳਓʹ ࢪࡦΛଧ͍ͪͨ ZZʹߠఆҙݟͷਓΛ Γ͍ͨ ͜ͷલͱಉ͡ײ͡Ͱ
ͳΔૣͰʂ ࠓिதʹʂ Ϟσϧ ྲྀ༻ ྲྀ༻ ଐਓԽ ฒߦͯ͠ΔҊ݅ λΠτͳక MLΤϯδχΞ
MLར༻Ҋ݅ͰΑ͋͘Δ̏՝ XXʹڵຯͷ͋Δਓʹ Ξϓϩʔν͍ͨ͠ YYΛങͬͯ͘Εͦ͏ ͳਓΛΓ͍ͨ ୀձͦ͠͏ͳਓʹ ࢪࡦΛଧ͍ͪͨ ZZʹߠఆҙݟͷਓΛ Γ͍ͨ ͜ͷલͱಉ͡ײ͡Ͱ
ͳΔૣͰʂ ࠓिதʹʂ Ϟσϧ ྲྀ༻ ྲྀ༻ όά ʁ ʁ ଐਓԽ ฒߦͯ͠ΔҊ݅ λΠτͳక MLΤϯδχΞ
̏՝ʹରԠ͢ΔͨΊʹ։ൃ͞ΕͨMLγεςϜ: Yule XXʹڵຯͷ͋Δਓʹ Ξϓϩʔν͍ͨ͠ YYΛങͬͯ͘Εͦ͏ ͳਓΛΓ͍ͨ ୀձͦ͠͏ͳਓʹ ࢪࡦΛଧ͍ͪͨ ZZʹߠఆҙݟͷਓΛ Γ͍ͨ
͜ͷલͱಉ͡ײ͡Ͱ ͳΔૣͰʂ ࠓिதʹʂ ଐਓԽ ฒߦͯ͠ΔҊ݅ λΠτͳక Yule AutoMLͳ ਪଌγεςϜ ଐਓԽ λΠτͳక ฒߦͯ͠ΔҊ݅ ඪ४Խ ฒྻԽ ߴԽ
Yule: ଟϞσϧΛΞϯαϯϒϧͯ͠ਪ·ͰҰؾʹ࣮ߦ 12 ಛநग़ GBDT Neural Network ϚϧνλεΫֶश సҠֶश ֶशࡁ
Ϟσϧ Ξϯαϯϒϧ ਪ ڭࢣσʔλ
ߴԽɾฒྻԽɾඪ४ԽͰMLҊ݅3՝Λࠀ 13 ਪ σʔλऩू ಛ࡞ Ϟσϧ࡞ ֶश࣮ߦ ֶशࢹ ֶशධՁ վળΠςϨʔγϣϯ
Λߴʹճ͢ ։ൃऀҎ֎Ͱ ࣮ߦͰ͖ΔΑ͏ʹ ଟͷҊ݅Λ ฒߦͯ͠ରԠͰ͖Δ Ҋ݅̍ Ҋ݅̎ Ҋ݅̏ ඪ४Խ ฒྻԽ ߴԽ
ᶃ KubernetesΛ༻͍ͯλεΫΛࢄॲཧ ᶄ ઃఆϑΝΠϧΛ࡞͢Δ͚ͩͰֶशɾਪΛ࣮ߦͰ͖Δ ᶅ TensorBoardʹΑΔֶशࢹ ᶆ gokartΛͬͯதؒσʔλΛΩϟογϡ͢Δ ᶇ νʔϜڞ௨ͷμϯϩʔυϥΠϒϥϦͰσʔλಡΈࠐΈ
14 ·ͱΊ: ߴԽɾฒྻԽɾඪ४ԽͰMLҊ݅3՝Λࠀ ඪ४Խ ฒྻԽ ߴԽ ඪ४Խ ߴԽ ߴԽ
15 ಛ࡞ʙֶशʙਪΛKubernetes্Ͱ࣮ࢪ ֶश ਪ CVͷFold͝ͱʹϊʔυࢄ ਪରϢʔβΛׂͯ͠ϊʔυࢄ ᶃ KubernetesΛ༻͍ͯࢄॲཧ ฒྻԽ ߴԽ
16 • ཁ݅ʹ߹ΘͤͯϊʔυϓʔϧΛ͍͚Δ • GKEͷϓϦΤϯϓςΟϒϧϊʔυΛͬͯྉۚΛઅ —> ΨϯΨϯࢄͰ͖Δ • ෳͷֶशਪΛಉ࣌ฒߦʹճͤΔ •
࣮ݧΠςϨʔγϣϯ͕ߴԽ͠ɺੑೳվળʹूதͰ͖Δ ֶश ਪ CPU༏ઌϊʔυ ϝϞϦ༏ઌϊʔυ ฒྻԽ ߴԽ ᶃ KubernetesΛ༻͍ͯࢄॲཧ
17 ᶄ ઃఆϑΝΠϧΛ࡞͢Δ͚ͩͰֶशɾਪΛ࣮ߦͰ͖Δ • ڭࢣσʔλͷύε • ಛબํ๏ • Ϟσϧͷछྨɾύϥϝλ •
ίʔυͷίϛοτϋογϡɹ ઃఆϑΝΠϧ Yule Kubernetes GCR BigQuery GCS docker Πϝʔδ ಛ σʔλ ڭࢣ σʔλ • ࣮ݧઃఆΛઃఆϑΝΠϧʹهड़͢Δ͚ͩͰ • ઃఆʹԊͬͯdockerΠϝʔδ/σʔλΛGCR, BQ, GCSͳͲ͔Βऔಘ • KubernetesʹࢄσϓϩΠ ίʔυ hash: ff34 tag: ff34 push build & push ඪ४Խ
18 • ڭࢣσʔλͷύε • ಛબํ๏ • Ϟσϧͷछྨɾύϥϝλ • ίʔυͷίϛοτϋογϡɹ ઃఆϑΝΠϧ
Yule Kubernetes • ઃఆϑΝΠϧΛॻ͚ͩ͘ͰֶशΛ࣮ߦͰ͖ΔΑ͏ʹͳͬͨ • ։ൃͱ࣮ߦ͕͠ίʔυΛҙֶࣝͤͣशΛճͤΔ • ➔ίΞ։ൃऀҎ֎Ͱ࣮ߦՄೳʹ • ࣮ݧઃఆͱίʔυΛඥ͚ • ࠷৽͚ͩͰͳ͘աڈͷίʔυࢀরͰ͖Δ • ➔࠶ݱੑΛ୲อ ᶄ ઃఆϑΝΠϧΛ࡞͢Δ͚ͩͰֶशɾਪΛ࣮ߦͰ͖Δ ඪ४Խ
ᶅ TensorBoardʹΑΔֶशࢹ 19 KubernetesͳͲϦϞʔτڥͰࢄֶͯ͠श͢ΔͱܦաΛѲͮ͠Β͍ ੑೳվળͷΠςϨʔγϣϯ͕ૣ͘ͳͬͨ TensorBoardͰֶशۂઢͳͲֶशϝτϦΫεΛ ϦΞϧλΠϜࢹ ɹˠ ֶशվળͷώϯτΛಘΒΕΔ ߴԽ
gokartͱ • pythonύΠϓϥΠϯϥΠϒϥϦ • ॲཧΛTaskͱݺΕΔΫϥε୯ҐͰґଘؔͱͱʹهड़͢Δ • ґଘؔΛղܾ͠ͳ͕ΒॲཧΛ͢͢ΊΔ • ్தܦաΩϟογϡ͞Ε͍ͯΔͨΊɺಉ͡ॲཧ̎ճলུͰ͖Δ ᶆ
gokartΛͬͯதؒσʔλΛΩϟογϡ͢Δ 20 Ҋ݅ؒͰڞ௨ͯ͠͏ಛྔσʔλ͍·Θ͍ͨ͠ AIνʔϜͰgokartΛ։ൃ͠׆༻ ॲཧ̍ ॲཧ̎ ॲཧ̏ σʔλ̍ σʔλ̎ Ϟσϧ ֶश̍ ߴԽ
gokartͱ • pythonύΠϓϥΠϯϥΠϒϥϦ • ॲཧΛTaskͱݺΕΔΫϥε୯ҐͰґଘؔͱͱʹهड़͢Δ • ґଘؔΛղܾ͠ͳ͕ΒॲཧΛ͢͢ΊΔ • ్தܦաΩϟογϡ͞Ε͍ͯΔͨΊɺಉ͡ॲཧ̎ճলུͰ͖Δ ᶆ
gokartΛͬͯதؒσʔλΛΩϟογϡ͢Δ 21 Ҋ݅ؒͰڞ௨ͯ͠͏ಛྔσʔλ͍·Θ͍ͨ͠ AIνʔϜͰgokartΛ։ൃ͠׆༻ ॲཧ̍ ॲཧ̎ ॲཧ̏ σʔλ̍ σʔλ̎ Ϟσϧ ֶश̍ Ϟσϧ ֶश̎ ߴԽ
ᶆ gokartΛͬͯதؒσʔλΛΩϟογϡ͢Δ 22 • ಛྔͷੜϓϩηε͕ίʔυԽ͞Ε͍ͯΔ • ಛྔσʔλ͕Ωϟογϡ • ➔ Ҋ݅ʹΑΒ͍ͣճͤΔ
• ➔ ઃఆΛม͑ͨ࠶࣮ݧͰ࠶ར༻ʹΑΔ࣌ؒॖ • ϓϩηε్͕தͰམ్ͪͯதͷΩϟογϡ͔Β࠶։ • ➔ ҆৺ͯ͠GKEͷϓϦΤϯϓςΟϒϧϊʔυΛ͑Δ • Ωϟογϡ࠶ར༻ʹΑ࣮ͬͯߦ࣌ؒΛॖͰ͖ͨ • ϓϦΤϯϓςΟϒϧͷ׆༻ͰGKEͷྉۚͷઅ͕Ͱ͖ͨ ߴԽ ॲཧ̍ ॲཧ̎ ॲཧ̏ σʔλ̍ σʔλ̎ Ϟσϧ ֶश̍ Ϟσϧ ֶश̎
BigQuery Ϣʔβ σʔλ هࣄӾཡ σʔλ ΫϦοΫ σʔλ ᶇ νʔϜڞ௨ͷμϯϩʔυϥΠϒϥϦͰσʔλಡΈࠐΈ 23
• YuleҎ֎ͷMLϓϩμΫτͰ͍ͬͯΔσʔλࣅ͍ͯΔ • BQ͔Βσʔλऔಘ͢ΔͨΊʹͦΕͧΕSQLΛॻ͔ͳ͍ͱ͍͚ͳ͍ ඪ४Խ Yule ML1 ML2 ML3 SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL SQL
BigQuery Ϣʔβ σʔλ هࣄӾཡ σʔλ ΫϦοΫ σʔλ ᶇ νʔϜڞ௨ͷμϯϩʔυϥΠϒϥϦͰσʔλಡΈࠐΈ 24
• μϯϩʔυ༻ͷڞ௨ϥΠϒϥϦΛ༻ • طଘͷμϯϩʔυϝιου͕͍·ΘͤΔ ➔ SQLΛϓϩμΫτ͝ͱʹॻ͔ͳͯ͘ࡁΉ • gokartͰඪ४Խ͞Ε͓ͯΓಡΈॻ͖͍͢͠ • ➔ ୭Ͱ؆୯ʹ͑Δ ඪ४Խ Yule ML1 ML2 ML3 mushroom μϯϩʔυ༻ ϥΠϒϥϦ SQL ϝιουΛར༻
ᶃ KubernetesΛ༻͍ͯλεΫΛࢄॲཧ ᶄ ઃఆϑΝΠϧΛ࡞͢Δ͚ͩͰֶशɾਪΛ࣮ߦͰ͖Δ ᶅ TensorBoardʹΑΔֶशࢹ ᶆ gokartΛͬͯதؒσʔλΛΩϟογϡ͢Δ ᶇ νʔϜڞ௨ͷμϯϩʔυϥΠϒϥϦͰσʔλಡΈࠐΈ
25 ·ͱΊ: ߴԽɾฒྻԽɾඪ४ԽͰMLҊ݅3՝Λࠀ ඪ४Խ ฒྻԽ ߴԽ ඪ४Խ ߴԽ ߴԽ
26 ΤϜεϦʔͰMLγεςϜΛ։ൃɾվળͯ͘͠ΕΔਓΛืूதͰ͢ https://jobs.m3.com/engineer/ ̏՝Λղܾ͢Δ͜ͱͰεέʔϧ͢ΔγεςϜ͕Ͱ͖ͨ • ߴԽɿվળΠςϨʔγϣϯΛߴʹճͤͨ • ฒྻԽɿଟͷҊ݅Λಉ࣌ਐߦͰ͜ͳͤͨ • ඪ४Խɿ։ൃ/࣮ߦΛͨ͜͠ͱͰɺ৽نϝϯόʔͰ͙͢ʹ࣮ߦͰ͖ͨ
·ͱΊ: ߴԽɾฒྻԽɾඪ४ԽͰMLҊ݅3՝Λࠀ