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.8k
事業横断組織での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.
株式会社リブセンス 会社説明資料(報道関係者様向け)
livesense
PRO
0
1k
データ基盤の負債解消のためのリプレイス
livesense
PRO
0
250
26新卒_総合職採用_会社説明資料
livesense
PRO
0
4.4k
株式会社リブセンス会社紹介資料 / Invent the next common.
livesense
PRO
1
13k
26新卒_Webエンジニア職採用_会社説明資料
livesense
PRO
1
7.9k
中途セールス職_会社説明資料
livesense
PRO
0
190
EM候補者向け転職会議説明資料
livesense
PRO
0
85
コロナで失われたノベルティ作成ノウハウを復活させた話
livesense
PRO
0
200
転職会議でGPT-3を活用した企業口コミ要約機能をリリースした話
livesense
PRO
0
1.3k
Other Decks in Technology
See All in Technology
JEDAI Meetup! Databricks AI/BI概要
databricksjapan
0
280
「正しく」失敗できる チームの作り方 〜リアルな事例から紐解く失敗を恐れない組織とは〜 / A team that can fail correctly
i35_267
1
530
2.5Dモデルのすべて
yu4u
2
940
人はなぜISUCONに夢中になるのか
kakehashi
PRO
6
1.7k
AIエージェント元年
shukob
0
120
IAMポリシーのAllow/Denyについて、改めて理解する
smt7174
2
160
Visualize, Visualize, Visualize and rclone
tomoaki0705
9
68k
Developers Summit 2025 浅野卓也(13-B-7 LegalOn Technologies)
legalontechnologies
PRO
1
1.3k
Raycast AI APIを使ってちょっと便利な拡張機能を作ってみた / created-a-handy-extension-using-the-raycast-ai-api
kawamataryo
0
150
偏光画像処理ライブラリを作った話
elerac
1
120
Share my, our lessons from the road to re:Invent
naospon
0
110
EDRの検知の仕組みと検知回避について
chayakonanaika
2
850
Featured
See All Featured
Unsuck your backbone
ammeep
669
57k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Navigating Team Friction
lara
183
15k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7.1k
It's Worth the Effort
3n
184
28k
Typedesign – Prime Four
hannesfritz
40
2.5k
Writing Fast Ruby
sferik
628
61k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
What's in a price? How to price your products and services
michaelherold
244
12k
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ج൫ߏஙΛ௨ͯ͡։ൃɾӡ༻Λશମతʹݟ͢͜ͱʹ • ίϯϙʔωϯτׂͱࣗલΠϯϑϥͷҰݩԽΛߦͬͨ •
ਨߏ → ਫฏߏ ͷసͰཧׂ୲͕͘͢͠ͳͬͨ