Slide 1

Slide 1 text

ࣄۀԣஅ૊৫Ͱͷ MLγεςϜ։ൃɾӡ༻ͱج൫ઃܭ Shotaro Tanaka / @yubessy / Ϧϒηϯε (ژ౎ΦϑΟε) MACHINE LEARNING Meetup KANSAI #5

Slide 2

Slide 2 text

࿩͢͜ͱ • ෳ਺ͷWebαʔϏεΛӡӦ͍ͯ͠Δاۀ • MLγεςϜͷ։ൃɾӡ༻νʔϜ͸ԣஅ૊৫ͱͯ͠αʔϏε͔Βಠཱ • ֤αʔϏεʹϨίϝϯυ΍ޮՌ༧ଌϞσϧͳͲෳ਺ͷMLγεςϜΛఏڙ ͱ͍͏؀ڥͰɺMLγεςϜΛ։ൃɾӡ༻͢ΔͨΊʹͲΜͳ޻෉Λ͍ͯ͠Δ͔ ͋Δ͍͸ɺͦͷͨΊͷMLج൫ΛͲ͏ઃܭ͍ͯ͠Δ͔

Slide 3

Slide 3 text

αʔϏεɾ૊৫ɾνʔϜ

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

૊৫ߏ੒ • ࣄۀ෦ • ΞϧόΠτࣄۀ෦ (ϚοϋόΠτ) • ΩϟϦΞࣄۀ෦ (స৬ձٞ, స৬υϥϑτ, ...) • ෆಈ࢈Ϣχοτ (Door ௞ି, IESHIL) • ... • ԣஅ૊৫ • ςΫϊϩδΧϧϚʔέςΟϯά෦ • σʔλϓϥοτϑΥʔϜάϧʔϓ ← MLؔ࿈ͷνʔϜ͸͜͜ʹॴଐ • σʔλϚʔέςΟϯάάϧʔϓ • ΠϯϑϥετϥΫνϟάϧʔϓ

Slide 6

Slide 6 text

MLνʔϜɾMLج൫νʔϜ ࣾһ • MLΤϯδχΞ: 2໊ • MLج൫ΤϯδχΞ: 2໊ • ׬શʹ෼ۀ͍ͯ͠ΔΘ͚Ͱ͸ͳ͘ɺॏͳΔ෦෼΋͋Δ ֶੜΞϧόΠτ • ژ౎ΦϑΟε: 4໊ • ౦ژΦϑΟε: 1໊ • ML/Web/ΠϯϑϥͳͲͷεΩϧΛ׆͔ͯ͠։ൃΛิॿ

Slide 7

Slide 7 text

ओͳMLγεςϜ

Slide 8

Slide 8 text

ٻਓϨίϝϯυΤϯδϯ • ϚοϋόΠτɾస৬φϏͳͲͷϢʔβʹٻਓΛਪન • ϝʔϧɾWebαΠτɾωΠςΟϒΞϓϦͳͲ༷ʑͳ৔ॴͰಋೖ

Slide 9

Slide 9 text

ٻਓϨίϝϯυΤϯδϯͷ಺෦ • ධՁ஋ɾίϯςϯπΛ΋ͱʹ MF, FM ͳͲͷΞϧΰϦζϜΛద༻͠είΞΛࢉग़ • user-item ΍ item-item ͷϦετΛόονॲཧͰੜ੒֤͠αʔϏεʹఏڙ

Slide 10

Slide 10 text

Ԡืɾ࠾༻ͷޮՌਪఆɾ༧ଌϞσϧ • ϚοϋόΠτɾస৬φϏͳͲͷٻਓͷCVR΍Ԡื୯ՁΛࢉग़ • ݕࡧ݁ՌͷॱҐ੍ޚ΍޿ࠂग़ߘͷ࠷దԽʹ׆༻

Slide 11

Slide 11 text

Ԡืɾ࠾༻ͷޮՌਪఆɾ༧ଌϞσϧͷ಺෦ • ϩάΛ༻͍ͯϕΠζਪఆɾϩδεςΟοΫճؼ౳Ͱ༧ଌɾਪఆ • σΟϨΫλʔ޲͚ʹ؆қతͳϏϡʔϫΛWebΞϓϦͱͯ͠։ൃ

Slide 12

Slide 12 text

A/BςετɾόϯσΟοτπʔϧ • A/Bςετͷύλʔϯ഑৴ൺ཰ΛόϯσΟοτΞϧΰϦζϜͰࣗಈௐ੔ • WebαΠτɾωΠςΟϒΞϓϦͷ࠷దԽΛޮ཰Խ

Slide 13

Slide 13 text

A/BςετɾόϯσΟοτπʔϧͷ಺෦ • ؅ཧը໘͔ΒύλʔϯΛొ࿥͠ɺWeb APIͰϥϯμϜʹ഑৴ • CVϩάΛ෼ੳج൫Ͱूܭ͠ɺύλʔϯ഑৴ൺ཰Λࣗಈߋ৽

Slide 14

Slide 14 text

MLج൫͕ͳ͔ͬͨ࣌୅

Slide 15

Slide 15 text

࠷ॳظͷߏ੒ • 2014ࠒʹ࠷ॳͷγεςϜ (ϨίϝϯυΤϯδϯ) Λ։ൃ • σʔλऔಘ͔Βσʔλอଘ·ͰΛҰؾ௨؏Ͱߦ͏δϣϒ

Slide 16

Slide 16 text

ෳࡶԽ͢Δ࣮૷ • ධՁσʔλͷΈΛ࢖͏ΞϧΰϦζϜΛ௥Ճ • ϑΟϧλϦϯά΍ϦετͷϚʔδΛߦͬͯϨίϝϯυϦετΛੜ੒

Slide 17

Slide 17 text

ࣅͨΑ͏ͳγεςϜͷ૿Ճ • ಉαʔϏεͰA/BςετͷͨΊϨϙδτϦΛෳ੡ͯ͠ΞϧΰϦζϜ͚ͩมߋ • ผαʔϏε΁ͷԣల։ͷࡍʹΞϧΰϦζϜΛίϐʔͯ͠ར༻

Slide 18

Slide 18 text

ଟछଟ༷ͳ࣮ߦ؀ڥ • ֤γεςϜ͕αʔϏεͷ؀ڥʹ૬৐Γ͠ɺσϓϩΠϑϩʔ΋ҧ͏ • ΦϯϓϨͷϦιʔεʹݶΓ͕͋ΓɺVM͝ͱʹεϖοΫ͕ඍົʹҧ͏

Slide 19

Slide 19 text

खʹෛ͑ͳ͘ͳ͖ͬͯͨ

Slide 20

Slide 20 text

͜ͷ··Ͱ͸͍ͣΕ։ൃ΋ӡ༻΋ഁ୼͢Δ → ͦ͏ͳΔલʹMLج൫Λߏங͢Δ͜ͱʹ MLج൫ Livesense Brain ※ͱΓ͋͑ͣ࠷ॳʹ໊લ͚ܾͩΊͨ

Slide 21

Slide 21 text

MLج൫ԽͷͶΒ͍ ։ൃ໘ͷݟ௚͠ • γεςϜ಺ͷϞδϡʔϧؒͷີ݁߹Λͳ͘͢ • γεςϜؒͰڞ௨ԽͰ͖Δ෦෼͸ڞ௨Խ ӡ༻໘ͷݟ௚͠ • νʔϜ͕ࣗલӡ༻Ͱ͖ΔΠϯϑϥ΁ू໿ • δϣϒ؅ཧ΍σϓϩΠϑϩʔΛڞ௨Խ

Slide 22

Slide 22 text

։ൃ໘ͷݟ௚͠

Slide 23

Slide 23 text

։ൃ্ͷ໰୊఺ MLͷίΞ෦෼ͱͦΕҎ֎͕ີ݁߹ • MLΤϯδχΞɾMLج൫ΤϯδχΞͷ୲౰Λ෼཭͠ʹ͍͘ • ༻్ʹԠͯ͡ݴޠ΍ϥΠϒϥϦΛ࢖͍෼͚ΒΕͳ͍ ֤γεςϜͷڞ௨ॲཧΛίϐϖར༻ • ڠௐϑΟϧλϦϯάͳͲͷΞϧΰϦζϜ࣮૷ • લॲཧ΍DBೖग़ྗ༻ͷΫϥε → γεςϜΛػೳ͝ͱʹ෼ׂ͠࠶ߏ੒Ͱ͖ͳ͍͔ʁ

Slide 24

Slide 24 text

ίϯϙʔωϯτͷ෼ׂ ֤εςοϓΛ୯ػೳίϯϙʔωϯτʹ੾Γग़͠ • ֤ίϯϙʔωϯτ͸ CLI Ͱ୯ಠ࣮ߦͰ͖Δ • ίϯϙʔωϯτؒͷೖग़ྗ͸͢΂ͯϑΝΠϧΛհ͢Δ ྫ: • I/Oίϯϙʔωϯτ: SQLϑΝΠϧΛೖྗ → σʔλΛCSVͱͯ͠ग़ྗ • લॲཧίϯϙʔωϯτ: ςΩετσʔλΛೖྗ → BoWϕΫτϧΛग़ྗ • Ϩίϝϯυίϯϙʔωϯτ: ධՁσʔλΛೖྗ → ਪનείΞΛग़ྗ

Slide 25

Slide 25 text

ίϯϙʔωϯτͷίϯςφԽ • ֤ίϯϙʔωϯτΛ୯Ұͷ 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

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

Pros • ΞϧΰϦζϜ࣮૷ͳͲΛෳ਺γεςϜؒͰ࠶ར༻Ͱ͖Δ • ίϯϙʔωϯτ͝ͱʹݸผʹ։ൃɾվળ͕Ͱ͖Δ • ผͷݴޠ΍ϥΠϒϥϦΛ࢖͏͜ͱ΋༰қ • ৽نϝϯόʔ΍ΞϧόΠτͷࢀೖোน͕௿͘ͳͬͨ • ͋Δίϯϙʔωϯτʹ͍ͭͯΩϟονΞοϓ͢Ε͹࢓ࣄ͕Ͱ͖Δ Cons • MLΤϯδχΞ΋ؚΊશһʹίϯςφͷ஌͕ࣝ͋Δఔ౓ඞཁ

Slide 28

Slide 28 text

ӡ༻໘ͷݟ௚͠

Slide 29

Slide 29 text

ӡ༻্ͷ໰୊఺ Πϯϑϥͷมߋͷࣗ༝౓͕௿͍ • MLγεςϜ͕֤αʔϏεͷΠϯϑϥʹ૬৐Γ • धཁʹԠͨ͡Ϧιʔεมߋ͕ॊೈʹͰ͖ͳ͍ ͦΕͧΕͷγεςϜͷ؀ڥ͕શ͘ผ • 10Ҏ্ͷδϣϒ͕֤γεςϜઐ༻ͷVMͰ cron ࣮ߦ • δϣϒ؅ཧπʔϧ΍σϓϩΠϑϩʔ΋όϥόϥ → νʔϜࣗલͷΠϯϑϥͰγεςϜΛҰݩ؅ཧͰ͖ͳ͍͔ʁ

Slide 30

Slide 30 text

Google Kubernetes Engine (GKE) ͷ࠾༻ νʔϜࣗલͷίϯϐϡʔςΟϯάج൫ΛखʹೖΕΔ • ߴෛՙͳMLॲཧͷ࣮ߦத͸ΦʔτεέʔϧͰϦιʔεΛ૿ڧ • γεςϜͷߏ੒Λ༰қʹ௥ՃɾมߋͰ͖Δ • ྫ: ༧ଌϞσϧͷ؆қϏϡʔϫΛ Deployment ͱཱͯͯ͠Δ ෳ਺γεςϜΛ౷Ұ͞Εͨ؀ڥͰҰݩ؅ཧͰ͖Δ • WebΞϓϦ΋όονॲཧ΋୯ҰΫϥελʹಉډ • δϣϒ؅ཧ΍σϓϩΠ΋ k8s ͷΤίγεςϜ্Ͱ࣮ݱ

Slide 31

Slide 31 text

ิ଍: গਓ਺νʔϜͰ Kubernetes ? γεςϜͷܗଶ͕Ұ༷ɾ୯७ͳΒଞʹྑ͍બ୒ࢶ͕͋Δ • όονॲཧ͚ͩ → GCE, Fargate, ... • WebΞϓϦ͚ͩ → GAE, Beanstalk, ... ͔͠͠ɺࠓճ͸༷ʑͳγεςϜΛѻ͏ඞཁ͕͋ͬͨ • Ҡߦର৅ͷطଘγεςϜʹ͸όονॲཧ΋WebΞϓϦ΋ؚ·ΕΔ • ίϯςφԽ͞Εͨෳ਺ͷίϯϙʔωϯτΛ࿈ܞ͍ͤͨ͞ → ͜ΕΒΛ౷Ұతʹ؅ཧ͢Δͷʹ Kubernetes ͕ద͍ͯͨ͠

Slide 32

Slide 32 text

ϫʔΫϑϩʔΤϯδϯͷಋೖ • δϣϒ؅ཧͦͷ΋ͷ͸ k8s ͰҰݩԽͰ͖ͨ • ίϯϙʔωϯτΛ࿈ܞͤͯ͞ϫʔΫϑϩʔԽ͍ͨ͠ → Argo Workflow Λಋೖ • k8s ͰίϯςφΛ௚ྻɾฒྻɾDAG࣮ߦ͢ΔϫʔΫϑϩʔΤϯδϯ • ϦτϥΠɾΤϥʔॲཧͳͲ΋؆୯ʹ࣮ݱ • ϫʔΫϑϩʔ࣮ߦΛ Web UI ͰϞχλϦϯάͰ͖Δ લճLTͰ঺հ: Argo Workflow ʹΑΔMLδϣϒ؅ཧ - Speaker Deck

Slide 33

Slide 33 text

σϓϩΠϑϩʔͷࣗಈԽ • σϓϩΠͦͷ΋ͷ͸ k8s manifest Λ apply ͢Δ͚ͩ • ߋʹखؒΛলͨ͘ΊσϓϩΠΛࣗಈԽ͍ͨ͠ → Cloud Build Ͱ GitOps Λ࣮ݱ • Manifest ϨϙδτϦͷϓϧϦΫϚʔδΛτϦΨʔͱ͢Δ • Cloud Build Ͱ kustomize build ~ kubectl apply ※ Argo CD ΋ݕ౼͕ͨ͠ɺࠓͷن໛ͳΒ Cloud Build Ͱे෼ͱ൑அ

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

Pros • νʔϜ಺Ͱͷӡ༻ͷॊೈੑɾࣗ༝౓͕޲্ • ඞཁʹԠͯ͡ϦιʔεΛ૿ڧ • PoC ࣮૷ΛαʔϏεӨڹΛݶఆͯ͠ࢼݧӡ༻ • γεςϜ͕૿͑ͯ΋؅ཧίετΛ཈͑΍͍͢ Cons • ಉ͡Πϯϑϥʹෳ਺γεςϜ͕ಉډ → Χεέʔυো֐ͷϦεΫ • δϣϒͷႈ౳ੑͳͲ k8s ಛ༗ͷੑ࣭ʹཹҙ͢Δඞཁ

Slide 36

Slide 36 text

MLج൫લޙͷશମൺֱ

Slide 37

Slide 37 text

Before

Slide 38

Slide 38 text

After

Slide 39

Slide 39 text

Before • ਨ௚ߏ଄ = ݽཱͨ͠γεςϜΛݸผʹ։ൃɾӡ༻ • γεςϜͷ਺ʹൺྫͯ͠޻਺ɾਓ਺͕ඞཁʹͳΓ͕ͪ After • ਫฏߏ଄ = ػೳίϯϙʔωϯτΛ࠶ར༻͠ɺΠϯϑϥϨΠϠΛڞ௨Խ • γεςϜͷ਺͕૿͑ͯ΋؅ཧ΍໾ׂ෼୲͕͠΍͍͢

Slide 40

Slide 40 text

·ͱΊ

Slide 41

Slide 41 text

·ͱΊ • গਓ਺ͷԣஅνʔϜͰෳ਺ͷMLγεςϜΛ։ൃɾӡ༻ • MLج൫Ҏલ͸֤γεςϜ͕ݽཱͨ͠ঢ়ଶͰଟ͘ͷ໰୊Λ๊͍͑ͯͨ • MLج൫ߏஙΛ௨ͯ͡։ൃɾӡ༻Λશମతʹݟ௚͢͜ͱʹ • ίϯϙʔωϯτ෼ׂͱࣗલΠϯϑϥ΁ͷҰݩԽΛߦͬͨ • ਨ௚ߏ଄ → ਫฏߏ଄ ΁ͷస׵Ͱ؅ཧ΍໾ׂ෼୲͕͠΍͘͢ͳͬͨ