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.6k
事業横断組織での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.
株式会社リブセンス会社紹介資料 / Invent the next common.
livesense
PRO
1
2.3k
26新卒_Webエンジニア職採用_会社説明資料
livesense
PRO
1
200
中途セールス職_会社説明資料
livesense
PRO
0
62
EM候補者向け転職会議説明資料
livesense
PRO
0
32
コロナで失われたノベルティ作成ノウハウを復活させた話
livesense
PRO
0
120
株式会社リブセンス 会社説明資料(報道関係者様向け)
livesense
PRO
0
500
転職会議でGPT-3を活用した企業口コミ要約機能をリリースした話
livesense
PRO
0
1.1k
株式会社リブセンス マッハバイト_プレイブック
livesense
PRO
0
510
Tech Award 2021 選出方法
livesense
PRO
0
1.1k
Other Decks in Technology
See All in Technology
[I/O Extended Android 2024] What`s new in Android 2024
kyeongwan
0
220
ゆめみのアクセシビリティの現在地と今後
ryokatsuse
3
290
コンテナ・K8s研修 - 後半 Kubernetes 基礎&ハンズオン【MIXI 24新卒技術研修】
mixi_engineers
PRO
1
120
Luupの開発組織におけるインシデントマネジメントの変遷 ver.RoadtoSRENEXT2024
grimoh
1
270
Matterport を使ってクラスメソッド各拠点のバーチャルオフィスツアーを作成してみた
wakatsuki
0
160
VPoEの視点から見た、ヘンリーがサーバーサイドKotlinを使う理由 / Why Server-side Kotlin 2024
cho0o0
1
420
ペパボのオブザーバビリティ研修2024 説明資料
kesompochy
0
1.1k
AIアシスタントの活用で品質の向上と開発ワークフローのスピードアップ
nagix
1
210
エンジニアリングマネージャーはどう学んでいくのか #devsumi / How Do Engineering Managers Continue to Learn and Grow?
expajp
4
1.3k
コンテナ・K8s研修 - 前半 コンテナ基礎・ハンズオン【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
170
クラウド利用者の「責任」をどう果たす?AWSセキュリティ対策のススメ #AWSSummit
hiashisan
0
280
Amazon FSx for NetApp ONTAPのパフォーマンスチューニング要素をまとめてみた #cm_odyssey #devio2024
non97
0
220
Featured
See All Featured
Building Adaptive Systems
keathley
34
2k
Scaling GitHub
holman
458
140k
The Brand Is Dead. Long Live the Brand.
mthomps
52
36k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
20
7.2k
In The Pink: A Labor of Love
frogandcode
139
22k
Navigating Team Friction
lara
181
13k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
325
21k
Building Your Own Lightsaber
phodgson
101
5.9k
What's in a price? How to price your products and services
michaelherold
239
11k
RailsConf 2023
tenderlove
16
720
A better future with KSS
kneath
231
17k
KATA
mclloyd
20
13k
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ج൫ߏஙΛ௨ͯ͡։ൃɾӡ༻Λશମతʹݟ͢͜ͱʹ • ίϯϙʔωϯτׂͱࣗલΠϯϑϥͷҰݩԽΛߦͬͨ •
ਨߏ → ਫฏߏ ͷసͰཧׂ୲͕͘͢͠ͳͬͨ