事業横断組織でのMLシステム開発・運用と基盤設計

 事業横断組織でのMLシステム開発・運用と基盤設計

MACHINE LEARNING Meetup KANSAI #5
2019/6/17

E60aa4f80303f3f386898546ddb3686a?s=128

Livesense Inc.

June 17, 2019
Tweet

Transcript

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

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

  3. αʔϏεɾ૊৫ɾνʔϜ

  4. None
  5. ૊৫ߏ੒ • ࣄۀ෦ • ΞϧόΠτࣄۀ෦ (ϚοϋόΠτ) • ΩϟϦΞࣄۀ෦ (స৬ձٞ, స৬υϥϑτ,

    ...) • ෆಈ࢈Ϣχοτ (Door ௞ି, IESHIL) • ... • ԣஅ૊৫ • ςΫϊϩδΧϧϚʔέςΟϯά෦ • σʔλϓϥοτϑΥʔϜάϧʔϓ ← MLؔ࿈ͷνʔϜ͸͜͜ʹॴଐ • σʔλϚʔέςΟϯάάϧʔϓ • ΠϯϑϥετϥΫνϟάϧʔϓ
  6. MLνʔϜɾMLج൫νʔϜ ࣾһ • MLΤϯδχΞ: 2໊ • MLج൫ΤϯδχΞ: 2໊ • ׬શʹ෼ۀ͍ͯ͠ΔΘ͚Ͱ͸ͳ͘ɺॏͳΔ෦෼΋͋Δ

    ֶੜΞϧόΠτ • ژ౎ΦϑΟε: 4໊ • ౦ژΦϑΟε: 1໊ • ML/Web/ΠϯϑϥͳͲͷεΩϧΛ׆͔ͯ͠։ൃΛิॿ
  7. ओͳMLγεςϜ

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

  9. ٻਓϨίϝϯυΤϯδϯͷ಺෦ • ධՁ஋ɾίϯςϯπΛ΋ͱʹ MF, FM ͳͲͷΞϧΰϦζϜΛద༻͠είΞΛࢉग़ • user-item ΍ item-item

    ͷϦετΛόονॲཧͰੜ੒֤͠αʔϏεʹఏڙ
  10. Ԡืɾ࠾༻ͷޮՌਪఆɾ༧ଌϞσϧ • ϚοϋόΠτɾస৬φϏͳͲͷٻਓͷCVR΍Ԡื୯ՁΛࢉग़ • ݕࡧ݁ՌͷॱҐ੍ޚ΍޿ࠂग़ߘͷ࠷దԽʹ׆༻

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

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

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

  14. MLج൫͕ͳ͔ͬͨ࣌୅

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

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

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

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

  19. खʹෛ͑ͳ͘ͳ͖ͬͯͨ

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

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

    δϣϒ؅ཧ΍σϓϩΠϑϩʔΛڞ௨Խ
  22. ։ൃ໘ͷݟ௚͠

  23. ։ൃ্ͷ໰୊఺ MLͷίΞ෦෼ͱͦΕҎ֎͕ີ݁߹ • MLΤϯδχΞɾMLج൫ΤϯδχΞͷ୲౰Λ෼཭͠ʹ͍͘ • ༻్ʹԠͯ͡ݴޠ΍ϥΠϒϥϦΛ࢖͍෼͚ΒΕͳ͍ ֤γεςϜͷڞ௨ॲཧΛίϐϖར༻ • ڠௐϑΟϧλϦϯάͳͲͷΞϧΰϦζϜ࣮૷ •

    લॲཧ΍DBೖग़ྗ༻ͷΫϥε → γεςϜΛػೳ͝ͱʹ෼ׂ͠࠶ߏ੒Ͱ͖ͳ͍͔ʁ
  24. ίϯϙʔωϯτͷ෼ׂ ֤εςοϓΛ୯ػೳίϯϙʔωϯτʹ੾Γग़͠ • ֤ίϯϙʔωϯτ͸ CLI Ͱ୯ಠ࣮ߦͰ͖Δ • ίϯϙʔωϯτؒͷೖग़ྗ͸͢΂ͯϑΝΠϧΛհ͢Δ ྫ: •

    I/Oίϯϙʔωϯτ: SQLϑΝΠϧΛೖྗ → σʔλΛCSVͱͯ͠ग़ྗ • લॲཧίϯϙʔωϯτ: ςΩετσʔλΛೖྗ → BoWϕΫτϧΛग़ྗ • Ϩίϝϯυίϯϙʔωϯτ: ධՁσʔλΛೖྗ → ਪનείΞΛग़ྗ
  25. ίϯϙʔωϯτͷίϯςφԽ • ֤ίϯϙʔωϯτΛ୯Ұͷ 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
  26. None
  27. Pros • ΞϧΰϦζϜ࣮૷ͳͲΛෳ਺γεςϜؒͰ࠶ར༻Ͱ͖Δ • ίϯϙʔωϯτ͝ͱʹݸผʹ։ൃɾվળ͕Ͱ͖Δ • ผͷݴޠ΍ϥΠϒϥϦΛ࢖͏͜ͱ΋༰қ • ৽نϝϯόʔ΍ΞϧόΠτͷࢀೖোน͕௿͘ͳͬͨ •

    ͋Δίϯϙʔωϯτʹ͍ͭͯΩϟονΞοϓ͢Ε͹࢓ࣄ͕Ͱ͖Δ Cons • MLΤϯδχΞ΋ؚΊશһʹίϯςφͷ஌͕ࣝ͋Δఔ౓ඞཁ
  28. ӡ༻໘ͷݟ௚͠

  29. ӡ༻্ͷ໰୊఺ Πϯϑϥͷมߋͷࣗ༝౓͕௿͍ • MLγεςϜ͕֤αʔϏεͷΠϯϑϥʹ૬৐Γ • धཁʹԠͨ͡Ϧιʔεมߋ͕ॊೈʹͰ͖ͳ͍ ͦΕͧΕͷγεςϜͷ؀ڥ͕શ͘ผ • 10Ҏ্ͷδϣϒ͕֤γεςϜઐ༻ͷVMͰ cron

    ࣮ߦ • δϣϒ؅ཧπʔϧ΍σϓϩΠϑϩʔ΋όϥόϥ → νʔϜࣗલͷΠϯϑϥͰγεςϜΛҰݩ؅ཧͰ͖ͳ͍͔ʁ
  30. Google Kubernetes Engine (GKE) ͷ࠾༻ νʔϜࣗલͷίϯϐϡʔςΟϯάج൫ΛखʹೖΕΔ • ߴෛՙͳMLॲཧͷ࣮ߦத͸ΦʔτεέʔϧͰϦιʔεΛ૿ڧ • γεςϜͷߏ੒Λ༰қʹ௥ՃɾมߋͰ͖Δ

    • ྫ: ༧ଌϞσϧͷ؆қϏϡʔϫΛ Deployment ͱཱͯͯ͠Δ ෳ਺γεςϜΛ౷Ұ͞Εͨ؀ڥͰҰݩ؅ཧͰ͖Δ • WebΞϓϦ΋όονॲཧ΋୯ҰΫϥελʹಉډ • δϣϒ؅ཧ΍σϓϩΠ΋ k8s ͷΤίγεςϜ্Ͱ࣮ݱ
  31. ิ଍: গਓ਺νʔϜͰ Kubernetes ? γεςϜͷܗଶ͕Ұ༷ɾ୯७ͳΒଞʹྑ͍બ୒ࢶ͕͋Δ • όονॲཧ͚ͩ → GCE, Fargate,

    ... • WebΞϓϦ͚ͩ → GAE, Beanstalk, ... ͔͠͠ɺࠓճ͸༷ʑͳγεςϜΛѻ͏ඞཁ͕͋ͬͨ • Ҡߦର৅ͷطଘγεςϜʹ͸όονॲཧ΋WebΞϓϦ΋ؚ·ΕΔ • ίϯςφԽ͞Εͨෳ਺ͷίϯϙʔωϯτΛ࿈ܞ͍ͤͨ͞ → ͜ΕΒΛ౷Ұతʹ؅ཧ͢Δͷʹ Kubernetes ͕ద͍ͯͨ͠
  32. ϫʔΫϑϩʔΤϯδϯͷಋೖ • δϣϒ؅ཧͦͷ΋ͷ͸ k8s ͰҰݩԽͰ͖ͨ • ίϯϙʔωϯτΛ࿈ܞͤͯ͞ϫʔΫϑϩʔԽ͍ͨ͠ → Argo Workflow

    Λಋೖ • k8s ͰίϯςφΛ௚ྻɾฒྻɾDAG࣮ߦ͢ΔϫʔΫϑϩʔΤϯδϯ • ϦτϥΠɾΤϥʔॲཧͳͲ΋؆୯ʹ࣮ݱ • ϫʔΫϑϩʔ࣮ߦΛ Web UI ͰϞχλϦϯάͰ͖Δ લճLTͰ঺հ: Argo Workflow ʹΑΔMLδϣϒ؅ཧ - Speaker Deck
  33. σϓϩΠϑϩʔͷࣗಈԽ • σϓϩΠͦͷ΋ͷ͸ k8s manifest Λ apply ͢Δ͚ͩ • ߋʹखؒΛলͨ͘ΊσϓϩΠΛࣗಈԽ͍ͨ͠

    → Cloud Build Ͱ GitOps Λ࣮ݱ • Manifest ϨϙδτϦͷϓϧϦΫϚʔδΛτϦΨʔͱ͢Δ • Cloud Build Ͱ kustomize build ~ kubectl apply ※ Argo CD ΋ݕ౼͕ͨ͠ɺࠓͷن໛ͳΒ Cloud Build Ͱे෼ͱ൑அ
  34. None
  35. Pros • νʔϜ಺Ͱͷӡ༻ͷॊೈੑɾࣗ༝౓͕޲্ • ඞཁʹԠͯ͡ϦιʔεΛ૿ڧ • PoC ࣮૷ΛαʔϏεӨڹΛݶఆͯ͠ࢼݧӡ༻ • γεςϜ͕૿͑ͯ΋؅ཧίετΛ཈͑΍͍͢

    Cons • ಉ͡Πϯϑϥʹෳ਺γεςϜ͕ಉډ → Χεέʔυো֐ͷϦεΫ • δϣϒͷႈ౳ੑͳͲ k8s ಛ༗ͷੑ࣭ʹཹҙ͢Δඞཁ
  36. MLج൫લޙͷશମൺֱ

  37. Before

  38. After

  39. Before • ਨ௚ߏ଄ = ݽཱͨ͠γεςϜΛݸผʹ։ൃɾӡ༻ • γεςϜͷ਺ʹൺྫͯ͠޻਺ɾਓ਺͕ඞཁʹͳΓ͕ͪ After • ਫฏߏ଄

    = ػೳίϯϙʔωϯτΛ࠶ར༻͠ɺΠϯϑϥϨΠϠΛڞ௨Խ • γεςϜͷ਺͕૿͑ͯ΋؅ཧ΍໾ׂ෼୲͕͠΍͍͢
  40. ·ͱΊ

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

    ਨ௚ߏ଄ → ਫฏߏ଄ ΁ͷస׵Ͱ؅ཧ΍໾ׂ෼୲͕͠΍͘͢ͳͬͨ