リブセンスでのMLシステム開発・運用と 研究・開発アシスタントの取り組み

リブセンスでのMLシステム開発・運用と 研究・開発アシスタントの取り組み

2019/08/02
これからの開発チームのあり方を考える @ Sansan Innovation Lab

E60aa4f80303f3f386898546ddb3686a?s=128

Livesense Inc.

August 02, 2019
Tweet

Transcript

  1. ϦϒηϯεͰͷMLγεςϜ։ൃɾӡ༻ͱ ݚڀɾ։ൃΞγελϯτͷऔΓ૊Έ Shotaro Tanaka / @yubessy / Ϧϒηϯε ͜Ε͔Βͷ։ൃνʔϜͷ͋ΓํΛߟ͑Δ @

    Sansan Innovation Lab
  2. ࣗݾ঺հ ాத ঵ଠ࿠ / @yubessy • גࣜձࣾϦϒηϯε • ςΫϊϩδΧϧϚʔέςΟϯά෦ σʔλϓϥοτϑΥʔϜάϧʔϓ

    • ࢓ࣄ • Ҏલ: σʔλ෼ੳج൫ (Livesense Analytics) ͷ։ൃɾӡ༻ • ݱࡏ: ػցֶशج൫ (Livesense Brain) ͷ։ൃɾӡ༻ • ژ౎ΦϑΟεۈ຿ • ݚڀɾ։ൃΞγελϯτͷϝϯλʔ
  3. ࿩͢͜ͱ • ػցֶशγεςϜͱͦͷ࣮ߦج൫ͷ։ൃɾӡ༻Λ͍ͯ͠ΔνʔϜ • ژ౎ΦϑΟεத৺ʹݚڀɾ։ൃΞγελϯτͱֶͯ͠ੜΞϧόΠτΛ࠾༻ • ͳͥΞγελϯτͷ࿮૊Έ͕͋Δͷ͔ɾͲΜͳ࢓ࣄΛ͍ͯ͠Δ͔ • ۀ຿্ͲΜͳোน͕ଘࡏ͢Δ͔ɾͦΕΛͲ͏ࠀ෰͍ͯ͠Δ͔

  4. Ϧϒηϯεͷ؀ڥ

  5. ӡӦαʔϏε

  6. ૊৫ߏ੒ • ࣄۀ෦ • ΞϧόΠτࣄۀ෦ (ϚοϋόΠτ) • స৬ձٞࣄۀ෦ (స৬ձٞ) •

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

    ΞϧόΠτ = ݚڀɾ։ൃΞγελϯτ • ژ౎ΦϑΟε: 4໊ • ౦ژΦϑΟε: 1໊
  8. αʔϏεͱMLγεςϜ MLɾMLج൫νʔϜ͕֤αʔϏεʹ༷ʑͳMLγεςϜΛఏڙ • ϨίϝϯυΤϯδϯ → αΠτɾΞϓϦͳͲͰͷٻਓਪનʹར༻ • Ԡื཰ɾ࠾༻཰ͳͲͷਪఆɾ༧ଌϞσϧ → ޿ࠂग़ߘͳͲʹར༻

    • όϯσΟοτπʔϧ → A/Bςετͷޮ཰Խʹར༻ ෳ਺ͷMLγεςϜΛগਓ਺ͷνʔϜͰ։ൃɾӡ༻Ͱ͖ΔΑ͏޻෉ • MLγεςϜΛߏ੒ཁૉ͝ͱʹ෼ղ͠ૄ݁߹Խ • ڞ௨ͷΠϯϑϥͰෳ਺γεςϜΛӡ༻ ৄࡉ͸ ࣄۀԣஅ૊৫ͰͷMLγεςϜ։ൃɾӡ༻ͱج൫ઃܭ Ͱ
  9. MLγεςϜͷߏ੒ MLγεςϜͷߏ੒ཁૉΛ෼ׂ͠ʮίϯϙʔωϯτʯͱݺΜͰ͍Δ • ਪનΞϧΰϦζϜ, લॲཧ, ݁ՌϏϡʔϫ ͳͲ͕֤ʑ୯Ұίϯϙʔωϯτ • ̍ίϯϙʔωϯτ =

    ̍ϨϙδτϦ = ̍ίϯςφΠϝʔδ ͷߏ੒Ͱ౷Ұ ֤ίϯϙʔωϯτຖʹ ࣮૷ ʙ ςετ ʙ ϦϦʔε ͷαΠΫϧ͕׬݁ • ίϯϙʔωϯτຖʹαϯϓϧσʔλ΍ࣗಈςετΛ੔උ • ίϯϙʔωϯτͷಈ࡞ݕূʹඞཁͳͷ͸ docker run ͚ͩ ٕज़໘͸ Argo Workflow ʹΑΔػցֶशϫʔΫϑϩʔ؅ཧ ΋ࢀর
  10. ݚڀɾ։ൃΞγελϯτ

  11. ֓ཁ ݚڀɾ։ൃΞγελϯτʢژ౎ΦϑΟεʣืूཁ߲ • ػցֶशɾσʔλΤϯδχΞϦϯά͓ΑͼͦΕʹ෇ਵ͢Δݚڀɾ։ൃ • ਺िؒʙ਺ϲ݄୯ҐͷϛχϓϩδΣΫτܗࣜ • جૅతͳΤϯδχΞϦϯάεΩϧ +α Ͱ׆͔ͤΔٕज़͕͋Δ͜ͱ

    • ʢ౰વͳ͕Βʣֶۀ༏ઌ ≠ ৽ଔ࠾༻ • ͋͘·Ͱۀ຿Λ௨ͯ͡νʔϜɾαʔϏεʹߩݙ͢Δͷ͕໨త • ࠾༻໨తͰͷֶੜͷғ͍ࠐΈ͸͠ͳ͍ʢ΋ͪΖΜೖࣾͯ͘͠ΕͨΒخ͍͠ʣ
  12. ۀ຿಺༰ ʮ੒Ռ͕ग़Δ͔Θ͔Βͳ͍͕ɺ௅ઓ͢ΔՁ஋͕͋Δʯ͜ͱ • ΍ͬͯΈ͍͕ͨ๩ͯ͘͠खΛ෇͚ΒΕ͍ͯͳ͍ٕज़ݕূɾσʔλ෼ੳ • MLγεςϜͷิॿπʔϧʢσʔλ֬ೝɾϝτϦΫεऩूʣͷ։ൃ ۀ຿ܗଶ্ෆ޲͖ͳ࢓ࣄ͸ආ͚Δ • ظݶ͕͋Δɾۓٸੑ͕ߴ͍ •

    ࣦഊ࣌ͷϦεΫ͕େ͖͍ • ਂ͍υϝΠϯ஌ࣝɾଞ෦ॺͱͷີͳ࿈ܞΛཁ͢Δ
  13. ྫ: Julia ͷฒྻܭࢉػೳͷݕূɾಋೖ • ࣾ಺Ͱ͸ Julia ͰϨίϝϯυΞϧΰϦζϜΛ࣮૷͍ͯ͠Δ • ϓϩηεɾεϨουฒྻػೳʹΑΔߴ଎ԽΛݕূ࣮͠ࡍʹಋೖ

  14. ྫ: Ϋνίϛͷ൑ผϞσϧͷݕূ • ΫνίϛαΠτͷҙຯෆ໌ͳ౤ߘͳͲΛࣗಈ൑ఆ͢ΔϞσϧΛ࡞ͬͯΈΔ • ಛ௃ྔɾΞϧΰϦζϜͷௐ੔Ͱ࠶ݱ཰ɾద߹཰ΛͲͷఔ౓্͛ΒΕΔ͔ݕূ

  15. ྫ: Ϩίϝϯυͷ݁ՌϏϡʔΞͷվળ • Ϩίϝϯυͷ݁ՌΛ֬ೝ͢Δ؆୯ͳ Web ΞϓϦΛ։ൃ • ΞϧΰϦζϜʹΑΔϥϯΩϯάมԽͷൺֱػೳͳͲΛ౥ࡌ

  16. Ξγελϯτۀ຿ʹ͓͚Δ੍໿ ࣌ؒ ͷ੍໿ • ීஈ͔Βतۀɾݚڀ౎߹ͷग़ୀࣾ࣌ࠁมߋ΍தൈ͚͕ൃੜ • ࣌ظʹΑͬͯࢼݧ΍࿦จࣥචʹΑΔ௕ظෆࡏ͕ൃੜ ۀ຿ൣғ ͷ੍໿ •

    εΩϧ͕ݚڀدΓͰҰൠతͳ Web ։ൃʹෆ׳Εͳ͜ͱ΋ • ݖݶ্ϝϯλʔʹ͔͠Ͱ͖ͳ͍࡞ۀ͕Ұఆൃੜ → ͦΕͧΕͷ੍໿ʹͲ͏ରԠ͍ͯ͠Δ͔Λ঺հ
  17. ࣌ؒͷ੍໿

  18. ࣌ؒͷ੍໿ ීஈ͔Βतۀɾݚڀ౎߹ͷग़ୀࣾ࣌ࠁมߋ΍தൈ͚͕ൃੜ • ࢖͑Δ͕࣌ؒগͳ͍ͷͰࢦࣔ଴͕ͪൃੜ͢Δͱޮ཰͕མͪΔ • ࣾһͱಉ࣌ؒ࣠͡Ͱಉظతʹ࢓ࣄΛਐΊΔͷ͕೉͍͠ ࣌ظʹΑͬͯࢼݧ΍࿦จࣥචʹΑΔ௕ظෆࡏ͕ൃੜ • ෆࡏதͷঢ়گมԽʹϓϩδΣΫτ͕ࠨӈ͞ΕΔͱ੒Ռ͕ແବʹͳΔ͓ͦΕ •

    ظ͕ۭؒ͘ͱϝϯλʔ΋ԿΛ΍͍͔ͬͯͨ๨Ε͕ͪ → ϓϩδΣΫτ؅ཧΛ޻෉֤ͯࣗ͠ͷϖʔεͰਐΊΒΕΔΑ͏ʹ
  19. ϛχϓϩδΣΫτܗࣜͰͷ࣮ࢪ ݸผλεΫͰ͸ͳ͘ϓϩδΣΫτͱͯ͠എܠɾΰʔϧΛ໌จԽ • ͜Ε͕Ͱ͖ΔͱνʔϜ΍αʔϏεʹͱͬͯԿ͕خ͍͠ͷ͔ • ͲΜͳΞ΢τϓοτ͕Ͱ͖Ε͹੒ޭͳͷ͔ ஞҰࡉ͔͍ࢦࣔΛ͠ͳͯ͘΋͋Δఔ౓֤ࣗͷ൑அͰਐΊΒΕΔΑ͏ʹ • ̎ʙ̏೔ఔ౓͸ࢦࣔ଴͕ͪൃੜ͠ͳ͍͜ͱΛ໨҆ʹ •

    िʹ̍ճϖʔεͰৼΓฦΓΛ࣮ࢪ
  20. # ϓϩδΣΫτ: Julia + Docker ͷฒྻԽػߏͷݕূɾಋೖ ## എܠ Data Platform

    άϧʔϓͰ͸֤αʔϏεͰར༻͢ΔϨίϝϯυΞϧΰϦζϜΛ Julia Ͱ࣮૷͠ Docker ίϯςφͱͯ͠ӡ༻͍ͯ͠·͢ɻ https://github.com/livesense-inc/brain.recommender Matrix Factorization ͷΑ͏ͳΞϧΰϦζϜ͸ɺֶश΍༧ଌͷҰ෦ͷॲཧΛฒྻԽ͢Δ͜ͱ͕ՄೳͰ͢ɻ ͜ͷ͏ͪ಺ੵ΍L2ϊϧϜʹΑΔϕΫτϧ୳ࡧʹ͍ͭͯ͸ faiss ౳Λར༻Ͱ͖·͕͢ɺϥΠϒϥϦ͕ͳ͍Α͏ͳέʔεͰ͸ࣗ෼ͰॲཧΛ࣮૷͢Δඞཁ͕͋Γ·͢ɻ Julia ʹ͸༷ʑͳฒྻԽػߏ͕༻ҙ͞Ε͍ͯΔͨΊɺͦΕΒΛ࢖ͬͯΞϧΰϦζϜΛߴ଎ԽͰ͖Ε͹ɺ։ൃɾӡ༻ͷޮ཰Λ޲্Ͱ͖·͢ɻ ͦ͜Ͱࠓճ͸ Julia ͷฒྻԽػߏͷௐࠪͱɺͦΕΛ༻͍ͨߴ଎Խͷ࣮૷Λߦͬͯ΋Β͍·͢ɻ ## ΰʔϧ - Julia + Docker Ͱར༻ՄೳͳฒྻԽػߏΛௐࠪ͠Ϩϙʔτʹ·ͱΊΔ - brain.recommender ͷ prediction ΛฒྻԽʹΑΓߴ଎Խ͢Δ ## ؀ڥ - Julia όʔδϣϯ: 1.0.2 - ίϯςφͷϕʔεΠϝʔδ: julia:1.0.2 (https://hub.docker.com/r/library/julia/) ...
  21. Ξ΢τϓοτΛஈ֊తʹ ϓϩδΣΫτதʹෳ਺ճͷνΣοΫϙΠϯτΛઃ͚Δ • ։ൃܥϓϩδΣΫτͰ͸ϦϦʔεΛԿஈ֊͔ʹ෼͚Δ • ෼ੳɾݕূܥϓϩδΣΫτͰ͸ෳ਺ճϨϙʔτΛ࡞੒ ϓϩδΣΫτ͕தஅͯ͠΋ͦͷ࣌఺·Ͱͷ੒Ռ͕׆͖ΔΑ͏ʹ͢Δ • ͍͖ͳΓػೳ࣮૷ʹೖΔͷͰ͸ͳٕ͘ज़ݕূ͔Β࢝ΊΔ •

    ݕূٕͨ͠ज़ͷಋೖ·ͰͰ͖ͳͯ͘΋஌ݟ͕࢒ΔΑ͏ʹ
  22. ## εςοϓ ### 1 - ฒྻԽػߏͷಈ࡞ݕূ ҎԼͷ Julia ެࣜυΩϡϝϯτʹهࡌ͞ΕͨฒྻԽػߏ͕ɺDocker ίϯςφ಺Ͱಈ࡞͢Δ͔֬ೝ͍ͯͩ͘͠͞ɻ

    https://docs.julialang.org/en/v1/manual/parallel-computing/index.html#Multi-Threading-(Experimental)-1 ࠓճͷݕূର৅͸ϚϧνεϨου·ͨ͸ϚϧνϓϩηεʹΑΔฒྻԽͰ͢ (άϦʔϯεϨου, ΫϥελίϯϐϡʔςΟϯά͸ର৅֎Ͱ͢)ɻ ### 2 - ฒྻԽػߏͷύϑΥʔϚϯεݕূ 1Ͱݕূͨ͠ॲཧͷ͏ͪಛʹ SharedArrays, SparseArrays ͷ read/write ʹ͍ͭͯɺҎԼͷΑ͏ʹύϑΥʔϚϯεݕূΛߦ͍ͬͯͩ͘͞ɻ ... ·ͨ2ͰͷฒྻԽର৅ͷؔ਺ͷॻ͖ํͱͯ͠ɺ࣍ͷΑ͏ͳҧ͍ʹΑΓ݁Ռʹ͕ࠩग़Δ͔Λௐ΂͍ͯͩ͘͞ (ฒྻॲཧͰ࠷దԽϚΫϩ͕ޮ͔͘Λௐ΂ΔͨΊ)ɻ ... ### 3 - brain.recommender ͷฒྻԽ 1, 2 ͷݕূ݁ՌΛ΋ͱʹ brain.recommender ͷ࣍ͷॲཧΛฒྻԽ͍ͯͩ͘͠͞ɻ prediction ͰͷϢʔβɾΞΠςϜຖͷείΞܭࢉ: ...
  23. ۀ຿ൣғͷ੍໿

  24. ۀ຿ൣғͷ੍໿ εΩϧ͕ݚڀدΓͰҰൠతͳ Web ։ൃʹෆ׳Εͳ͜ͱ΋ • ෳࡶͳ Git ͷϒϥϯνӡ༻ʹ׳Ε͍ͯͳ͍ • Python,

    Jupyter ͸ݚڀͳͲͰ࢖͏͕ Web ΞϓϦ։ൃ͸ະܦݧ ݖݶ্ϝϯλʔʹ͔͠Ͱ͖ͳ͍࡞ۀ͕Ұఆൃੜ • ຊ൪؀ڥͰͷಈ࡞֬ೝ΍ϦϦʔε͸Ͱ͖ͳ͍ • ։ൃऀͱӡ༻ऀ͕ҟͳΔͱ໰୊ൃੜ࣌ͷରԠʹखؒऔΔ → γεςϜߏ੒ɾϦϦʔεϑϩʔͷ޻෉ͰোนΛখ͘͢͞Δ
  25. ࠶ܝ: MLγεςϜͷߏ੒ MLγεςϜͷߏ੒ཁૉΛ෼ׂ͠ʮίϯϙʔωϯτʯͱݺΜͰ͍Δ • ਪનΞϧΰϦζϜ, લॲཧ, ݁ՌϏϡʔϫ ͳͲ͕֤ʑ୯Ұίϯϙʔωϯτ • ̍ίϯϙʔωϯτ

    = ̍ϨϙδτϦ = ̍ίϯςφΠϝʔδ ͷߏ੒Ͱ౷Ұ ֤ίϯϙʔωϯτຖʹ ࣮૷ ʙ ςετ ʙ ϦϦʔε ͷαΠΫϧ͕׬݁ • ίϯϙʔωϯτຖʹαϯϓϧσʔλ΍ࣗಈςετΛ੔උ • ίϯϙʔωϯτͷಈ࡞ݕূʹඞཁͳͷ͸ docker run ͚ͩ
  26. ίϯϙʔωϯτ୯ҐͰͷվળ ̍ϓϩδΣΫτͰ̍ίϯϙʔωϯτΛվળ → ඞཁεΩϧΛݶఆ • ֤ࣗͷಘҙ෼໺΍ڵຯʹԠͯ͡ϓϩδΣΫτΛ೚ͤΔ • ະܦݧͷٕज़Ͱ΋ΩϟονΞοϓίετΛͳΔ΂͘খ͘͞ ̍ϨϙδτϦ͋ͨΓͷ։ൃਓ਺ΛݮΒͯ͠޻ఔΛ୯७Խ •

    Git flow ͷΑ͏ͳ൥ࡶͳϒϥϯνӡ༻͸ඞཁͳ͍ • ίϯϑϦΫτ͕ൃੜ͠ʹ͘͘ɺൃੜͯ͠΋ղܾ͕༰қʹ
  27. ֤ϨϙδτϦ΁ͷϓϧϦΫ਺ • Ξγελϯτ / ओͳίϯϙʔωϯτ ຖͷϓϧϦΫͷ਺ • ਓʹΑͬͯѻ͏ίϯϙʔωϯτ͕ࣗવʹ෼͔Ε͍ͯΔ

  28. ϦϦʔεͷলྗԽɾ҆શԽ ϦϦʔεϑϩʔΛ̎ஈ֊ʹ෼͚ɺϝϯλʔ͸ίϯϙʔωϯτར༻ͷ൑அͷΈ 1. Ξγελϯτ͕ίϯϙʔωϯτʹػೳ௥Ճ 2. ϝϯλʔ͕γεςϜͰར༻͢ΔίϯϙʔωϯτόʔδϣϯΛ੾Γସ͑ ϦϦʔεલޙͰ༷ʑͳ҆શࡦΛߨ͍ͯ͡Δ • ։ൃ؀ڥͰ͸Ξγελϯτ͕γεςϜͷಈ࡞֬ೝ·Ͱߦ͑Δ •

    ඞཁʹԠͯ͡ΧφϦΞϦϦʔεɾA/BςετͰӨڹΛہॴԽ • ສҰͷ੾Γ໭͠΋όʔδϣϯΛ໭͚ͩ͢ → ໰୊ରԠͷ༨༟͕ੜ·ΕΔ
  29. ϦϦʔεϑϩʔ

  30. ·ͱΊͱFAQ

  31. ·ͱΊ • MLγεςϜͷ։ൃɾӡ༻νʔϜͰݚڀɾ։ൃΞγελϯτΛ࠾༻ • ֶੜΞϧόΠτͷۀ຿ʹ͸͍͔ͭ͘ͷ੍໿͕͋Δ • ࣌ؒͷ੍໿ • ۀ຿ൣғͷ੍໿ •

    ੍໿Λ͏·͘ѻ͏޻෉Λͯ͠νʔϜͷੜ࢈ੑΛ޲্ • ࣌ؒͷ੍໿ → ϓϩδΣΫτ؅ཧΛ޻෉ • ۀ຿ൣғͷ੍໿ → γεςϜߏ੒ɾϦϦʔεϑϩʔΛ޻෉
  32. FAQ • ΞγελϯτͷͨΊʹؤுͬͯ࢓૊ΈΛ࡞ΓࠐΉʁ • ΞγελϯτʹݶΒͣ৽نࢀೖোนΛԼ͛Δ͜ͱʹҙຯ͕͋Δ • Ξγελϯτ͕͍ͳ͘ͳͬͨΒͲ͏ͳΔʁ • ৽ػೳ։ൃ΍ٕज़తνϟϨϯδʹऔΓ૊ΊΔػձ͕ݮΔ •

    ϝϯλʔͱͯ͠Ұ൪େมͳ͜ͱ͸ʁ • ίϯςΩετεΠον • ϝϯλʔͷ࢓ࣄͬͯͲ͏ʁ • ૉ௚ʹָ͍͠