$30 off During Our Annual Pro Sale. View Details »

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

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

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

Livesense Inc.
PRO

August 02, 2019
Tweet

More Decks by Livesense Inc.

Other Decks in Technology

Transcript

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

    View Slide

  2. ࣗݾ঺հ
    ాத ঵ଠ࿠ / @yubessy
    • גࣜձࣾϦϒηϯε
    • ςΫϊϩδΧϧϚʔέςΟϯά෦ σʔλϓϥοτϑΥʔϜάϧʔϓ
    • ࢓ࣄ
    • Ҏલ: σʔλ෼ੳج൫ (Livesense Analytics) ͷ։ൃɾӡ༻
    • ݱࡏ: ػցֶशج൫ (Livesense Brain) ͷ։ൃɾӡ༻
    • ژ౎ΦϑΟεۈ຿
    • ݚڀɾ։ൃΞγελϯτͷϝϯλʔ

    View Slide

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

    View Slide

  4. Ϧϒηϯεͷ؀ڥ

    View Slide

  5. ӡӦαʔϏε

    View Slide

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

    View Slide

  7. MLνʔϜɾMLج൫νʔϜ
    ࣾһ
    • MLΤϯδχΞ: 2໊
    • MLج൫ΤϯδχΞ: 2໊
    • ׬શʹ෼ۀ͍ͯ͠ΔΘ͚Ͱ͸ͳ͘ɺॏͳΔ෦෼΋͋Δ
    ΞϧόΠτ = ݚڀɾ։ൃΞγελϯτ
    • ژ౎ΦϑΟε: 4໊
    • ౦ژΦϑΟε: 1໊

    View Slide

  8. αʔϏεͱMLγεςϜ
    MLɾMLج൫νʔϜ͕֤αʔϏεʹ༷ʑͳMLγεςϜΛఏڙ
    • ϨίϝϯυΤϯδϯ → αΠτɾΞϓϦͳͲͰͷٻਓਪનʹར༻
    • Ԡื཰ɾ࠾༻཰ͳͲͷਪఆɾ༧ଌϞσϧ → ޿ࠂग़ߘͳͲʹར༻
    • όϯσΟοτπʔϧ → A/Bςετͷޮ཰Խʹར༻
    ෳ਺ͷMLγεςϜΛগਓ਺ͷνʔϜͰ։ൃɾӡ༻Ͱ͖ΔΑ͏޻෉
    • MLγεςϜΛߏ੒ཁૉ͝ͱʹ෼ղ͠ૄ݁߹Խ
    • ڞ௨ͷΠϯϑϥͰෳ਺γεςϜΛӡ༻
    ৄࡉ͸ ࣄۀԣஅ૊৫ͰͷMLγεςϜ։ൃɾӡ༻ͱج൫ઃܭ Ͱ

    View Slide

  9. MLγεςϜͷߏ੒
    MLγεςϜͷߏ੒ཁૉΛ෼ׂ͠ʮίϯϙʔωϯτʯͱݺΜͰ͍Δ
    • ਪનΞϧΰϦζϜ, લॲཧ, ݁ՌϏϡʔϫ ͳͲ͕֤ʑ୯Ұίϯϙʔωϯτ
    • ̍ίϯϙʔωϯτ = ̍ϨϙδτϦ = ̍ίϯςφΠϝʔδ ͷߏ੒Ͱ౷Ұ
    ֤ίϯϙʔωϯτຖʹ ࣮૷ ʙ ςετ ʙ ϦϦʔε ͷαΠΫϧ͕׬݁
    • ίϯϙʔωϯτຖʹαϯϓϧσʔλ΍ࣗಈςετΛ੔උ
    • ίϯϙʔωϯτͷಈ࡞ݕূʹඞཁͳͷ͸ docker run ͚ͩ
    ٕज़໘͸ Argo Workflow ʹΑΔػցֶशϫʔΫϑϩʔ؅ཧ ΋ࢀর

    View Slide

  10. ݚڀɾ։ൃΞγελϯτ

    View Slide

  11. ֓ཁ
    ݚڀɾ։ൃΞγελϯτʢژ౎ΦϑΟεʣืूཁ߲
    • ػցֶशɾσʔλΤϯδχΞϦϯά͓ΑͼͦΕʹ෇ਵ͢Δݚڀɾ։ൃ
    • ਺िؒʙ਺ϲ݄୯ҐͷϛχϓϩδΣΫτܗࣜ
    • جૅతͳΤϯδχΞϦϯάεΩϧ +α Ͱ׆͔ͤΔٕज़͕͋Δ͜ͱ
    • ʢ౰વͳ͕Βʣֶۀ༏ઌ
    ≠ ৽ଔ࠾༻
    • ͋͘·Ͱۀ຿Λ௨ͯ͡νʔϜɾαʔϏεʹߩݙ͢Δͷ͕໨త
    • ࠾༻໨తͰͷֶੜͷғ͍ࠐΈ͸͠ͳ͍ʢ΋ͪΖΜೖࣾͯ͘͠ΕͨΒخ͍͠ʣ

    View Slide

  12. ۀ຿಺༰
    ʮ੒Ռ͕ग़Δ͔Θ͔Βͳ͍͕ɺ௅ઓ͢ΔՁ஋͕͋Δʯ͜ͱ
    • ΍ͬͯΈ͍͕ͨ๩ͯ͘͠खΛ෇͚ΒΕ͍ͯͳ͍ٕज़ݕূɾσʔλ෼ੳ
    • MLγεςϜͷิॿπʔϧʢσʔλ֬ೝɾϝτϦΫεऩूʣͷ։ൃ
    ۀ຿ܗଶ্ෆ޲͖ͳ࢓ࣄ͸ආ͚Δ
    • ظݶ͕͋Δɾۓٸੑ͕ߴ͍
    • ࣦഊ࣌ͷϦεΫ͕େ͖͍
    • ਂ͍υϝΠϯ஌ࣝɾଞ෦ॺͱͷີͳ࿈ܞΛཁ͢Δ

    View Slide

  13. ྫ: Julia ͷฒྻܭࢉػೳͷݕূɾಋೖ
    • ࣾ಺Ͱ͸ Julia ͰϨίϝϯυΞϧΰϦζϜΛ࣮૷͍ͯ͠Δ
    • ϓϩηεɾεϨουฒྻػೳʹΑΔߴ଎ԽΛݕূ࣮͠ࡍʹಋೖ

    View Slide

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

    View Slide

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

    View Slide

  16. Ξγελϯτۀ຿ʹ͓͚Δ੍໿
    ࣌ؒ ͷ੍໿
    • ීஈ͔Βतۀɾݚڀ౎߹ͷग़ୀࣾ࣌ࠁมߋ΍தൈ͚͕ൃੜ
    • ࣌ظʹΑͬͯࢼݧ΍࿦จࣥචʹΑΔ௕ظෆࡏ͕ൃੜ
    ۀ຿ൣғ ͷ੍໿
    • εΩϧ͕ݚڀدΓͰҰൠతͳ Web ։ൃʹෆ׳Εͳ͜ͱ΋
    • ݖݶ্ϝϯλʔʹ͔͠Ͱ͖ͳ͍࡞ۀ͕Ұఆൃੜ
    → ͦΕͧΕͷ੍໿ʹͲ͏ରԠ͍ͯ͠Δ͔Λ঺հ

    View Slide

  17. ࣌ؒͷ੍໿

    View Slide

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

    View Slide

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

    View Slide

  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/)
    ...

    View Slide

  21. Ξ΢τϓοτΛஈ֊తʹ
    ϓϩδΣΫτதʹෳ਺ճͷνΣοΫϙΠϯτΛઃ͚Δ
    • ։ൃܥϓϩδΣΫτͰ͸ϦϦʔεΛԿஈ֊͔ʹ෼͚Δ
    • ෼ੳɾݕূܥϓϩδΣΫτͰ͸ෳ਺ճϨϙʔτΛ࡞੒
    ϓϩδΣΫτ͕தஅͯ͠΋ͦͷ࣌఺·Ͱͷ੒Ռ͕׆͖ΔΑ͏ʹ͢Δ
    • ͍͖ͳΓػೳ࣮૷ʹೖΔͷͰ͸ͳٕ͘ज़ݕূ͔Β࢝ΊΔ
    • ݕূٕͨ͠ज़ͷಋೖ·ͰͰ͖ͳͯ͘΋஌ݟ͕࢒ΔΑ͏ʹ

    View Slide

  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 ͰͷϢʔβɾΞΠςϜຖͷείΞܭࢉ:
    ...

    View Slide

  23. ۀ຿ൣғͷ੍໿

    View Slide

  24. ۀ຿ൣғͷ੍໿
    εΩϧ͕ݚڀدΓͰҰൠతͳ Web ։ൃʹෆ׳Εͳ͜ͱ΋
    • ෳࡶͳ Git ͷϒϥϯνӡ༻ʹ׳Ε͍ͯͳ͍
    • Python, Jupyter ͸ݚڀͳͲͰ࢖͏͕ Web ΞϓϦ։ൃ͸ະܦݧ
    ݖݶ্ϝϯλʔʹ͔͠Ͱ͖ͳ͍࡞ۀ͕Ұఆൃੜ
    • ຊ൪؀ڥͰͷಈ࡞֬ೝ΍ϦϦʔε͸Ͱ͖ͳ͍
    • ։ൃऀͱӡ༻ऀ͕ҟͳΔͱ໰୊ൃੜ࣌ͷରԠʹखؒऔΔ
    → γεςϜߏ੒ɾϦϦʔεϑϩʔͷ޻෉ͰোนΛখ͘͢͞Δ

    View Slide

  25. ࠶ܝ: MLγεςϜͷߏ੒
    MLγεςϜͷߏ੒ཁૉΛ෼ׂ͠ʮίϯϙʔωϯτʯͱݺΜͰ͍Δ
    • ਪનΞϧΰϦζϜ, લॲཧ, ݁ՌϏϡʔϫ ͳͲ͕֤ʑ୯Ұίϯϙʔωϯτ
    • ̍ίϯϙʔωϯτ = ̍ϨϙδτϦ = ̍ίϯςφΠϝʔδ ͷߏ੒Ͱ౷Ұ
    ֤ίϯϙʔωϯτຖʹ ࣮૷ ʙ ςετ ʙ ϦϦʔε ͷαΠΫϧ͕׬݁
    • ίϯϙʔωϯτຖʹαϯϓϧσʔλ΍ࣗಈςετΛ੔උ
    • ίϯϙʔωϯτͷಈ࡞ݕূʹඞཁͳͷ͸ docker run ͚ͩ

    View Slide

  26. ίϯϙʔωϯτ୯ҐͰͷվળ
    ̍ϓϩδΣΫτͰ̍ίϯϙʔωϯτΛվળ → ඞཁεΩϧΛݶఆ
    • ֤ࣗͷಘҙ෼໺΍ڵຯʹԠͯ͡ϓϩδΣΫτΛ೚ͤΔ
    • ະܦݧͷٕज़Ͱ΋ΩϟονΞοϓίετΛͳΔ΂͘খ͘͞
    ̍ϨϙδτϦ͋ͨΓͷ։ൃਓ਺ΛݮΒͯ͠޻ఔΛ୯७Խ
    • Git flow ͷΑ͏ͳ൥ࡶͳϒϥϯνӡ༻͸ඞཁͳ͍
    • ίϯϑϦΫτ͕ൃੜ͠ʹ͘͘ɺൃੜͯ͠΋ղܾ͕༰қʹ

    View Slide

  27. ֤ϨϙδτϦ΁ͷϓϧϦΫ਺
    • Ξγελϯτ / ओͳίϯϙʔωϯτ ຖͷϓϧϦΫͷ਺
    • ਓʹΑͬͯѻ͏ίϯϙʔωϯτ͕ࣗવʹ෼͔Ε͍ͯΔ

    View Slide

  28. ϦϦʔεͷলྗԽɾ҆શԽ
    ϦϦʔεϑϩʔΛ̎ஈ֊ʹ෼͚ɺϝϯλʔ͸ίϯϙʔωϯτར༻ͷ൑அͷΈ
    1. Ξγελϯτ͕ίϯϙʔωϯτʹػೳ௥Ճ
    2. ϝϯλʔ͕γεςϜͰར༻͢ΔίϯϙʔωϯτόʔδϣϯΛ੾Γସ͑
    ϦϦʔεલޙͰ༷ʑͳ҆શࡦΛߨ͍ͯ͡Δ
    • ։ൃ؀ڥͰ͸Ξγελϯτ͕γεςϜͷಈ࡞֬ೝ·Ͱߦ͑Δ
    • ඞཁʹԠͯ͡ΧφϦΞϦϦʔεɾA/BςετͰӨڹΛہॴԽ
    • ສҰͷ੾Γ໭͠΋όʔδϣϯΛ໭͚ͩ͢ → ໰୊ରԠͷ༨༟͕ੜ·ΕΔ

    View Slide

  29. ϦϦʔεϑϩʔ

    View Slide

  30. ·ͱΊͱFAQ

    View Slide

  31. ·ͱΊ
    • MLγεςϜͷ։ൃɾӡ༻νʔϜͰݚڀɾ։ൃΞγελϯτΛ࠾༻
    • ֶੜΞϧόΠτͷۀ຿ʹ͸͍͔ͭ͘ͷ੍໿͕͋Δ
    • ࣌ؒͷ੍໿
    • ۀ຿ൣғͷ੍໿
    • ੍໿Λ͏·͘ѻ͏޻෉Λͯ͠νʔϜͷੜ࢈ੑΛ޲্
    • ࣌ؒͷ੍໿ → ϓϩδΣΫτ؅ཧΛ޻෉
    • ۀ຿ൣғͷ੍໿ → γεςϜߏ੒ɾϦϦʔεϑϩʔΛ޻෉

    View Slide

  32. FAQ
    • ΞγελϯτͷͨΊʹؤுͬͯ࢓૊ΈΛ࡞ΓࠐΉʁ
    • ΞγελϯτʹݶΒͣ৽نࢀೖোนΛԼ͛Δ͜ͱʹҙຯ͕͋Δ
    • Ξγελϯτ͕͍ͳ͘ͳͬͨΒͲ͏ͳΔʁ
    • ৽ػೳ։ൃ΍ٕज़తνϟϨϯδʹऔΓ૊ΊΔػձ͕ݮΔ
    • ϝϯλʔͱͯ͠Ұ൪େมͳ͜ͱ͸ʁ
    • ίϯςΩετεΠον
    • ϝϯλʔͷ࢓ࣄͬͯͲ͏ʁ
    • ૉ௚ʹָ͍͠

    View Slide