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
Livesense Inc.
PRO
June 17, 2019
Technology
0
3.9k
事業横断組織でのMLシステム開発・運用と基盤設計
MACHINE LEARNING Meetup KANSAI #5
2019/6/17
Livesense Inc.
PRO
June 17, 2019
Tweet
Share
More Decks by Livesense Inc.
See All by Livesense Inc.
27新卒_Webエンジニア職採用_会社説明資料
livesense
PRO
0
93
株式会社リブセンス・転職会議 採用候補者様向け資料
livesense
PRO
0
15
株式会社リブセンス 会社説明資料(報道関係者様向け)
livesense
PRO
0
1.4k
データ基盤の負債解消のためのリプレイス
livesense
PRO
0
390
26新卒_総合職採用_会社説明資料
livesense
PRO
0
8.8k
株式会社リブセンス会社紹介資料 / Invent the next common.
livesense
PRO
1
27k
26新卒_Webエンジニア職採用_会社説明資料
livesense
PRO
1
12k
中途セールス職_会社説明資料
livesense
PRO
0
250
EM候補者向け転職会議説明資料
livesense
PRO
0
120
Other Decks in Technology
See All in Technology
KubeCon + CloudNativeCon Japan 2025 Recap
ren510dev
1
300
How Community Opened Global Doors
hiroramos4
PRO
1
130
プロダクトエンジニアリング組織への歩み、その現在地 / Our journey to becoming a product engineering organization
hiro_torii
0
140
Tech-Verse 2025 Keynote
lycorptech_jp
PRO
0
1.3k
整頓のジレンマとの戦い〜Tidy First?で振り返る事業とキャリアの歩み〜/Fighting the tidiness dilemma〜Business and Career Milestones Reflected on in Tidy First?〜
bitkey
0
220
AIとともに進化するエンジニアリング / Engineering-Evolving-with-AI_final.pdf
lycorptech_jp
PRO
0
140
CursorによるPMO業務の代替 / Automating PMO Tasks with Cursor
motoyoshi_kakaku
2
780
WordPressから ヘッドレスCMSへ! Storyblokへの移行プロセス
nyata
0
330
「Chatwork」の認証基盤の移行とログ活用によるプロダクト改善
kubell_hr
1
240
急成長を支える基盤作り〜地道な改善からコツコツと〜 #cre_meetup
stefafafan
0
150
高速なプロダクト開発を実現、創業期から掲げるエンタープライズアーキテクチャ
kawauso
1
160
生成AI時代の開発組織・技術・プロセス 〜 ログラスの挑戦と考察 〜
itohiro73
1
370
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
223
9.7k
Docker and Python
trallard
44
3.5k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.4k
Optimizing for Happiness
mojombo
379
70k
Being A Developer After 40
akosma
90
590k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Building Adaptive Systems
keathley
43
2.6k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
Stop Working from a Prison Cell
hatefulcrawdad
270
20k
Git: the NoSQL Database
bkeepers
PRO
430
65k
Practical Orchestrator
shlominoach
188
11k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
46
9.6k
Transcript
ࣄۀԣஅ৫Ͱͷ MLγεςϜ։ൃɾӡ༻ͱج൫ઃܭ Shotaro Tanaka / @yubessy / Ϧϒηϯε (ژΦϑΟε) MACHINE
LEARNING Meetup KANSAI #5
͢͜ͱ • ෳͷWebαʔϏεΛӡӦ͍ͯ͠Δاۀ • MLγεςϜͷ։ൃɾӡ༻νʔϜԣஅ৫ͱͯ͠αʔϏε͔Βಠཱ • ֤αʔϏεʹϨίϝϯυޮՌ༧ଌϞσϧͳͲෳͷMLγεςϜΛఏڙ ͱ͍͏ڥͰɺMLγεςϜΛ։ൃɾӡ༻͢ΔͨΊʹͲΜͳΛ͍ͯ͠Δ͔ ͋Δ͍ɺͦͷͨΊͷMLج൫ΛͲ͏ઃܭ͍ͯ͠Δ͔
αʔϏεɾ৫ɾνʔϜ
None
৫ߏ • ࣄۀ෦ • ΞϧόΠτࣄۀ෦ (ϚοϋόΠτ) • ΩϟϦΞࣄۀ෦ (స৬ձٞ, స৬υϥϑτ,
...) • ෆಈ࢈Ϣχοτ (Door ି, IESHIL) • ... • ԣஅ৫ • ςΫϊϩδΧϧϚʔέςΟϯά෦ • σʔλϓϥοτϑΥʔϜάϧʔϓ ← MLؔ࿈ͷνʔϜ͜͜ʹॴଐ • σʔλϚʔέςΟϯάάϧʔϓ • ΠϯϑϥετϥΫνϟάϧʔϓ
MLνʔϜɾMLج൫νʔϜ ࣾһ • MLΤϯδχΞ: 2໊ • MLج൫ΤϯδχΞ: 2໊ • શʹۀ͍ͯ͠ΔΘ͚Ͱͳ͘ɺॏͳΔ෦͋Δ
ֶੜΞϧόΠτ • ژΦϑΟε: 4໊ • ౦ژΦϑΟε: 1໊ • ML/Web/ΠϯϑϥͳͲͷεΩϧΛ׆͔ͯ͠։ൃΛิॿ
ओͳMLγεςϜ
ٻਓϨίϝϯυΤϯδϯ • ϚοϋόΠτɾస৬φϏͳͲͷϢʔβʹٻਓΛਪન • ϝʔϧɾWebαΠτɾωΠςΟϒΞϓϦͳͲ༷ʑͳॴͰಋೖ
ٻਓϨίϝϯυΤϯδϯͷ෦ • ධՁɾίϯςϯπΛͱʹ MF, FM ͳͲͷΞϧΰϦζϜΛద༻͠είΞΛࢉग़ • user-item item-item
ͷϦετΛόονॲཧͰੜ֤͠αʔϏεʹఏڙ
Ԡืɾ࠾༻ͷޮՌਪఆɾ༧ଌϞσϧ • ϚοϋόΠτɾస৬φϏͳͲͷٻਓͷCVRԠื୯ՁΛࢉग़ • ݕࡧ݁ՌͷॱҐ੍ޚࠂग़ߘͷ࠷దԽʹ׆༻
Ԡืɾ࠾༻ͷޮՌਪఆɾ༧ଌϞσϧͷ෦ • ϩάΛ༻͍ͯϕΠζਪఆɾϩδεςΟοΫճؼͰ༧ଌɾਪఆ • σΟϨΫλʔ͚ʹ؆қతͳϏϡʔϫΛWebΞϓϦͱͯ͠։ൃ
A/BςετɾόϯσΟοτπʔϧ • A/Bςετͷύλʔϯ৴ൺΛόϯσΟοτΞϧΰϦζϜͰࣗಈௐ • WebαΠτɾωΠςΟϒΞϓϦͷ࠷దԽΛޮԽ
A/BςετɾόϯσΟοτπʔϧͷ෦ • ཧը໘͔ΒύλʔϯΛొ͠ɺWeb APIͰϥϯμϜʹ৴ • CVϩάΛੳج൫Ͱूܭ͠ɺύλʔϯ৴ൺΛࣗಈߋ৽
MLج൫͕ͳ͔ͬͨ࣌
࠷ॳظͷߏ • 2014ࠒʹ࠷ॳͷγεςϜ (ϨίϝϯυΤϯδϯ) Λ։ൃ • σʔλऔಘ͔Βσʔλอଘ·ͰΛҰؾ௨؏Ͱߦ͏δϣϒ
ෳࡶԽ͢Δ࣮ • ධՁσʔλͷΈΛ͏ΞϧΰϦζϜΛՃ • ϑΟϧλϦϯάϦετͷϚʔδΛߦͬͯϨίϝϯυϦετΛੜ
ࣅͨΑ͏ͳγεςϜͷ૿Ճ • ಉαʔϏεͰA/BςετͷͨΊϨϙδτϦΛෳͯ͠ΞϧΰϦζϜ͚ͩมߋ • ผαʔϏεͷԣల։ͷࡍʹΞϧΰϦζϜΛίϐʔͯ͠ར༻
ଟछଟ༷ͳ࣮ߦڥ • ֤γεςϜ͕αʔϏεͷڥʹ૬Γ͠ɺσϓϩΠϑϩʔҧ͏ • ΦϯϓϨͷϦιʔεʹݶΓ͕͋ΓɺVM͝ͱʹεϖοΫ͕ඍົʹҧ͏
खʹෛ͑ͳ͘ͳ͖ͬͯͨ
͜ͷ··Ͱ͍ͣΕ։ൃӡ༻ഁ͢Δ → ͦ͏ͳΔલʹMLج൫Λߏங͢Δ͜ͱʹ MLج൫ Livesense Brain ※ͱΓ͋͑ͣ࠷ॳʹ໊લ͚ܾͩΊͨ
MLج൫ԽͷͶΒ͍ ։ൃ໘ͷݟ͠ • γεςϜͷϞδϡʔϧؒͷີ݁߹Λͳ͘͢ • γεςϜؒͰڞ௨ԽͰ͖Δ෦ڞ௨Խ ӡ༻໘ͷݟ͠ • νʔϜ͕ࣗલӡ༻Ͱ͖ΔΠϯϑϥू •
δϣϒཧσϓϩΠϑϩʔΛڞ௨Խ
։ൃ໘ͷݟ͠
։ൃ্ͷ MLͷίΞ෦ͱͦΕҎ֎͕ີ݁߹ • MLΤϯδχΞɾMLج൫ΤϯδχΞͷ୲Λ͠ʹ͍͘ • ༻్ʹԠͯ͡ݴޠϥΠϒϥϦΛ͍͚ΒΕͳ͍ ֤γεςϜͷڞ௨ॲཧΛίϐϖར༻ • ڠௐϑΟϧλϦϯάͳͲͷΞϧΰϦζϜ࣮ •
લॲཧDBೖग़ྗ༻ͷΫϥε → γεςϜΛػೳ͝ͱʹׂ͠࠶ߏͰ͖ͳ͍͔ʁ
ίϯϙʔωϯτͷׂ ֤εςοϓΛ୯ػೳίϯϙʔωϯτʹΓग़͠ • ֤ίϯϙʔωϯτ CLI Ͱ୯ಠ࣮ߦͰ͖Δ • ίϯϙʔωϯτؒͷೖग़ྗͯ͢ϑΝΠϧΛհ͢Δ ྫ: •
I/Oίϯϙʔωϯτ: SQLϑΝΠϧΛೖྗ → σʔλΛCSVͱͯ͠ग़ྗ • લॲཧίϯϙʔωϯτ: ςΩετσʔλΛೖྗ → BoWϕΫτϧΛग़ྗ • Ϩίϝϯυίϯϙʔωϯτ: ධՁσʔλΛೖྗ → ਪનείΞΛग़ྗ
ίϯϙʔωϯτͷίϯςφԽ • ֤ίϯϙʔωϯτΛ୯Ұͷ Docker Πϝʔδʹ͢Δ • γεςϜ͝ͱͷࠩ΄΅ઃఆϑΝΠϧɾSQL͚ͩͰදݱ • ୯७ͳόονॲཧͳΒ docker
run ͷஞ࣮࣍ߦ͚ͩͰॻ͚Δ • ࣮ࡍʹ͜ΕͰຊ൪Քಇ͍ͯ͠ΔγεςϜ͋Δ # load dataset docker run -v $(pwd):/workdir sqlkit select ratings.sql /workdir/ratings.csv docker run -v $(pwd):/workdir sqlkit select content.sql /workdir/content.csv # preprocess docker run -v $(pwd):/workdir nlpkit vectorize /workdir/content.csv /workdir/features.csv # run recommender docker run -v $(pwd):/workdir recommender predict config.yaml /workdir
None
Pros • ΞϧΰϦζϜ࣮ͳͲΛෳγεςϜؒͰ࠶ར༻Ͱ͖Δ • ίϯϙʔωϯτ͝ͱʹݸผʹ։ൃɾվળ͕Ͱ͖Δ • ผͷݴޠϥΠϒϥϦΛ͏͜ͱ༰қ • ৽نϝϯόʔΞϧόΠτͷࢀೖোน͕͘ͳͬͨ •
͋Δίϯϙʔωϯτʹ͍ͭͯΩϟονΞοϓ͢Εࣄ͕Ͱ͖Δ Cons • MLΤϯδχΞؚΊશһʹίϯςφͷ͕ࣝ͋Δఔඞཁ
ӡ༻໘ͷݟ͠
ӡ༻্ͷ Πϯϑϥͷมߋͷࣗ༝͕͍ • MLγεςϜ͕֤αʔϏεͷΠϯϑϥʹ૬Γ • धཁʹԠͨ͡Ϧιʔεมߋ͕ॊೈʹͰ͖ͳ͍ ͦΕͧΕͷγεςϜͷڥ͕શ͘ผ • 10Ҏ্ͷδϣϒ͕֤γεςϜઐ༻ͷVMͰ cron
࣮ߦ • δϣϒཧπʔϧσϓϩΠϑϩʔόϥόϥ → νʔϜࣗલͷΠϯϑϥͰγεςϜΛҰݩཧͰ͖ͳ͍͔ʁ
Google Kubernetes Engine (GKE) ͷ࠾༻ νʔϜࣗલͷίϯϐϡʔςΟϯάج൫ΛखʹೖΕΔ • ߴෛՙͳMLॲཧͷ࣮ߦதΦʔτεέʔϧͰϦιʔεΛ૿ڧ • γεςϜͷߏΛ༰қʹՃɾมߋͰ͖Δ
• ྫ: ༧ଌϞσϧͷ؆қϏϡʔϫΛ Deployment ͱཱͯͯ͠Δ ෳγεςϜΛ౷Ұ͞ΕͨڥͰҰݩཧͰ͖Δ • WebΞϓϦόονॲཧ୯ҰΫϥελʹಉډ • δϣϒཧσϓϩΠ k8s ͷΤίγεςϜ্Ͱ࣮ݱ
ิ: গਓνʔϜͰ Kubernetes ? γεςϜͷܗଶ͕Ұ༷ɾ୯७ͳΒଞʹྑ͍બࢶ͕͋Δ • όονॲཧ͚ͩ → GCE, Fargate,
... • WebΞϓϦ͚ͩ → GAE, Beanstalk, ... ͔͠͠ɺࠓճ༷ʑͳγεςϜΛѻ͏ඞཁ͕͋ͬͨ • ҠߦରͷطଘγεςϜʹόονॲཧWebΞϓϦؚ·ΕΔ • ίϯςφԽ͞ΕͨෳͷίϯϙʔωϯτΛ࿈ܞ͍ͤͨ͞ → ͜ΕΒΛ౷Ұతʹཧ͢Δͷʹ Kubernetes ͕ద͍ͯͨ͠
ϫʔΫϑϩʔΤϯδϯͷಋೖ • δϣϒཧͦͷͷ k8s ͰҰݩԽͰ͖ͨ • ίϯϙʔωϯτΛ࿈ܞͤͯ͞ϫʔΫϑϩʔԽ͍ͨ͠ → Argo Workflow
Λಋೖ • k8s ͰίϯςφΛྻɾฒྻɾDAG࣮ߦ͢ΔϫʔΫϑϩʔΤϯδϯ • ϦτϥΠɾΤϥʔॲཧͳͲ؆୯ʹ࣮ݱ • ϫʔΫϑϩʔ࣮ߦΛ Web UI ͰϞχλϦϯάͰ͖Δ લճLTͰհ: Argo Workflow ʹΑΔMLδϣϒཧ - Speaker Deck
σϓϩΠϑϩʔͷࣗಈԽ • σϓϩΠͦͷͷ k8s manifest Λ apply ͢Δ͚ͩ • ߋʹखؒΛলͨ͘ΊσϓϩΠΛࣗಈԽ͍ͨ͠
→ Cloud Build Ͱ GitOps Λ࣮ݱ • Manifest ϨϙδτϦͷϓϧϦΫϚʔδΛτϦΨʔͱ͢Δ • Cloud Build Ͱ kustomize build ~ kubectl apply ※ Argo CD ݕ౼͕ͨ͠ɺࠓͷنͳΒ Cloud Build Ͱेͱஅ
None
Pros • νʔϜͰͷӡ༻ͷॊೈੑɾࣗ༝্͕ • ඞཁʹԠͯ͡ϦιʔεΛ૿ڧ • PoC ࣮ΛαʔϏεӨڹΛݶఆͯ͠ࢼݧӡ༻ • γεςϜ͕૿͑ͯཧίετΛ͍͑͢
Cons • ಉ͡ΠϯϑϥʹෳγεςϜ͕ಉډ → ΧεέʔυোͷϦεΫ • δϣϒͷႈੑͳͲ k8s ಛ༗ͷੑ࣭ʹཹҙ͢Δඞཁ
MLج൫લޙͷશମൺֱ
Before
After
Before • ਨߏ = ݽཱͨ͠γεςϜΛݸผʹ։ൃɾӡ༻ • γεςϜͷʹൺྫͯ͠ɾਓ͕ඞཁʹͳΓ͕ͪ After • ਫฏߏ
= ػೳίϯϙʔωϯτΛ࠶ར༻͠ɺΠϯϑϥϨΠϠΛڞ௨Խ • γεςϜͷ͕૿͑ͯཧׂ୲͕͍͢͠
·ͱΊ
·ͱΊ • গਓͷԣஅνʔϜͰෳͷMLγεςϜΛ։ൃɾӡ༻ • MLج൫Ҏલ֤γεςϜ͕ݽཱͨ͠ঢ়ଶͰଟ͘ͷΛ๊͍͑ͯͨ • MLج൫ߏஙΛ௨ͯ͡։ൃɾӡ༻Λશମతʹݟ͢͜ͱʹ • ίϯϙʔωϯτׂͱࣗલΠϯϑϥͷҰݩԽΛߦͬͨ •
ਨߏ → ਫฏߏ ͷసͰཧׂ୲͕͘͢͠ͳͬͨ