Upgrade to Pro — share decks privately, control downloads, hide ads and more …

クックパッドの機械学習基盤 2018 / Machine Learning Platform at Cookpad ~ 2018 ~

クックパッドの機械学習基盤 2018 / Machine Learning Platform at Cookpad ~ 2018 ~

Yuichiro Someya

February 21, 2018
Tweet

More Decks by Yuichiro Someya

Other Decks in Programming

Transcript

  1. ΫοΫύουͷ

    ػցֶशج൫
    ΫοΫύουגࣜձࣾછ୩༔Ұ࿠
    1Z%BUB5PLZP

    View Slide

  2. ࣗݾ঺հ
    છ୩༔Ұ࿠<:VJDIJSP4PNFZB>
    ΫοΫύουגࣜձࣾݚڀ։ൃ෦

    ϦαʔνΤϯδχΞ೥݄d
    ʰػցֶशʹඞཁͳج൫Λ

    "84্ʹߏங͢Δʱ
    [email protected]
    HJUIVCDPNBZFNPT
    IUUQTXXXBZFNPTNF

    View Slide

  3. View Slide

  4. Ϩγϐ਺ɿສ඼Ҏ্
    ࠃ಺ͷ݄ؒར༻ऀ਺ɿ໿ສਓ

    View Slide

  5. ରԠݴޠɿݴޠϲࠃ
    ւ֎ͷ݄ؒར༻ऀ਺ɿສਓҎ্

    View Slide

  6. τϐοΫ
    ΫοΫύουݚڀ։ൃ෦ͷൃ଍͔Βࠓ·ͰͷऔΓ૊Έ
    ػցֶशνʔϜͷ๊͑Δ՝୊ϞσϧͷσϓϩΠ
    ϞσϧΛσϓϩΠ͢Δҝʹඞཁͳ͜ͱ
    ϞσϧσϓϩΠͷࣗಈԽ΁޲͚ͯ

    View Slide

  7. ΫοΫύουͷ

    ػցֶशج൫

    View Slide

  8. എܠΫοΫύουݚڀ։ൃ෦
    ೥݄ʹൃ଍ ࢲ͕഑ଐ͞Εͨͷ΋ಉ࣌ظ

    ౰࣌͸໊ͷϝϯόʔ
    ೥݄ݱࡏ͸ࠃ಺ʹ໊ւ֎ʹ໊

    View Slide

  9. ྉཧ͖Ζ͘
    ৞ΈࠐΈχϡʔϥϧωοτϫʔΫ
    ʹΑΔྉཧը૾ͷࣗಈೝࣝ
    εϚʔτϑΥϯͷࣸਅͷ಺ɺ
    ྉཧࣸਅΛࣗಈతʹऩूه࿥

    View Slide

  10. ྉཧ͖Ζ͘
    ສਓҎ্ͷϢʔβʔʹΑΓར༻
    ສຕҎ্ͷྉཧࣸਅ

    View Slide

  11. Ϩγϐࡐྉ໊ͷ
    ࣗಈਖ਼نԽ
    ը૾෼ੳʹΑΔ
    Ϩγϐͷ෼ྨ
    \$MBTT^
    ϑΟʔυόοΫͷ
    ࣗಈλά෇͚
    Ϩγϐࡐྉ໊ͷ
    ࣗಈਖ਼نԽ

    View Slide

  12. Ϩγϐࡐྉ໊ͷ
    ࣗಈਖ਼نԽ
    ը૾෼ੳʹΑΔ
    Ϩγϐͷ෼ྨ
    \$MBTT^
    ϑΟʔυόοΫͷ
    ࣗಈλά෇͚
    ʙਓ
    Ϩγϐࡐྉ໊ͷ
    ࣗಈਖ਼نԽ

    View Slide

  13. Ϩγϐࡐྉ໊ͷ
    ࣗಈਖ਼نԽ
    ը૾෼ੳʹΑΔ
    Ϩγϐͷ෼ྨ
    \$MBTT^
    ϑΟʔυόοΫͷ
    ࣗಈλά෇͚
    ʙਓ
    Ϩγϐࡐྉ໊ͷ
    ࣗಈਖ਼نԽ
    IUUQUFDIMJGFDPPLQBEDPN

    View Slide

  14. ਂ૚ֶशϞσϧͷߴ଎ͳ

    ࣮૷ʗ࣮ݧΛՄೳʹ͢Δ

    View Slide

  15. ਂ૚ֶशϞσϧͷߴ଎ͳ

    ࣮૷ʗ࣮ݧΛՄೳʹ͢Δ

    View Slide

  16. ਂ૚ֶशϞσϧͷߴ଎ͳ

    ࣮૷ʗ࣮ݧΛՄೳʹ͢Δ

    View Slide

  17. ਂ૚ֶशϞσϧͷߴ଎ͳ

    ࣮૷ʗ࣮ݧΛՄೳʹ͢Δ

    View Slide

  18. ೥݄౰࣌
    (16Πϯελϯε͕ཉ͍͠Πϯϑϥґཔ
    ʙिؒ
    ࣮ݧ༻ͷΞΧ΢ϯτΛ෼͚ɺར༻ऀ͕ࣗ෼Ͱ

    ΠϯελϯεΛ࡞Δʁ
    71$ 4VCOFU ,FZ1BJS 4UPSBHFͷઃఆɺ*OUFSOBM%/4ͱͷؔ࿈෇
    ͚ OWJEJBESJWFS $6%" DV%//ͳͲ݁ߏେม
    %FFQ-FBSOJOH".*
    ͸΋͏ͪΐͬͱະདྷͷ࿩

    IUUQTBXTBNB[PODPNKQNBDIJOFMFBSOJOHBNJT

    View Slide

  19. ೥݄౰࣌
    (16Πϯελϯε͕ཉ͍͠Πϯϑϥґཔ
    ʙिؒ
    ࣮ݧ༻ͷΞΧ΢ϯτΛ෼͚ɺར༻ऀ͕ࣗ෼Ͱ

    ΠϯελϯεΛ࡞Δʁ
    71$ 4VCOFU ,FZ1BJS 4UPSBHFͷઃఆɺ*OUFSOBM%/4ͱͷؔ࿈෇
    ͚ OWJEJBESJWFS $6%" DV%//ͳͲ݁ߏେม
    %FFQ-FBSOJOH".*
    ͸΋͏ͪΐͬͱະདྷͷ࿩

    IUUQTBXTBNB[PODPNKQNBDIJOFMFBSOJOHBNJT

    View Slide


  20. ιϑτ΢ΣΞɺϛυϧ΢ΣΞͷ

    Πϯετʔϧͱઃఆ
    ίʔυԽͯ͠όʔδϣϯ؅ཧ
    εφοϓγϣοτ

    View Slide


  21. ιϑτ΢ΣΞɺϛυϧ΢ΣΞͷ

    Πϯετʔϧͱઃఆ
    ίʔυԽͯ͠όʔδϣϯ؅ཧ
    εφοϓγϣοτ
    ߏ੒؅ཧπʔϧͱεφοϓγϣοτʹΑΓɺ

    OWJEJBESJWFS $6%"ͳͲڞ௨ͯ͠ར༻͞ΕΔ

    ιϑτ΢ΣΞ͸தԝूݖతʹίʔυͰ؅ཧ

    View Slide

  22. $6%" DV%//
    $6%" DV%//
    %FFQ-FBSOJOH".*+BO

    FUD
    DSFBUFXPSLCFODI
    [email protected]
    DPNNBOEDSFBUFXPSLCFODI
    0VUHPJOH8FCIPPLT

    MBNCEB*OWPLF

    View Slide

  23. $6%" DV%//
    $6%" DV%//
    %FFQ-FBSOJOH".*+BO

    FUD
    FD3VO*OTUBODFT
    71$ 4VCOFU /BNFλά౳

    ؀ڥಛ༗ͷઃఆ΋͜͜Ͱ΍Δ
    Πϯελϯεʹ[email protected]Λ

    λά෇͚ͯ͠ॴ༗ऀΛ؅ཧ͢Δ
    *ODPNJOH8FCIPPLT

    TTIBZFNPTXPSLCFODIEOTDPNQBOZ
    خ͍͠

    View Slide

  24. $6%" DV%//
    $6%" DV%//
    %FFQ-FBSOJOH".*+BO

    FUD
    FD3VO*OTUBODFT
    71$ 4VCOFU /BNFλά౳

    ؀ڥಛ༗ͷઃఆ΋͜͜Ͱ΍Δ
    Πϯελϯεʹ[email protected]Λ

    λά෇͚ͯ͠ॴ༗ऀΛ؅ཧ͢Δ
    *ODPNJOH8FCIPPLT

    خ͍͠
    TTIBZFNPTXPSLCFODIEOTDPNQBOZ
    MJTU<\NZcSVOOJOH^>JOTUBODFT
    -JTUFYJTUJOHJOTUBODFT
    TUBSU*/45/"$&@/".&
    4UBSU&$JOTUBODFFYJTUJOHVOEFSSBOEEBDDPVOU
    TUPQ*/45/"$&@/".&
    4UPQ&$JOTUBODFFYJTUJOHVOEFSSBOEEBDDPVOU
    DSFBUFXPSLCFODI803,#&/5)@5:1&<803,#&/$)@/".&>
    $SFBUFOFX&$XPSLCFODIXJUITQFDJpFEUZQF ".*

    UFSNJOBUF*/45"/$&@/".&
    5FSNJOBUF&$JOTUBODFFYJTUJOHVOEFSSBOEEBDDPVOU
    MJTUXPSLCFODIUZQFT
    -JTU&$XPSLCFODIUZQFT ".*
    FYJTUJOHVOEFSSBOEEBDDPVOU

    View Slide

  25. $6%" DV%//
    $6%" DV%//
    %FFQ-FBSOJOH".*+BO

    FUD
    FD3VO*OTUBODFT
    71$ 4VCOFU /BNFλά౳

    ؀ڥಛ༗ͷઃఆ΋͜͜Ͱ΍Δ
    Πϯελϯεʹ[email protected]Λ

    λά෇͚ͯ͠ॴ༗ऀΛ؅ཧ͢Δ
    *ODPNJOH8FCIPPLT

    خ͍͠
    TTIBZFNPTXPSLCFODIEOTDPNQBOZ
    MJTU<\NZcSVOOJOH^>JOTUBODFT
    -JTUFYJTUJOHJOTUBODFT
    TUBSU*/45/"$&@/".&
    4UBSU&$JOTUBODFFYJTUJOHVOEFSSBOEEBDDPVOU
    TUPQ*/45/"$&@/".&
    4UPQ&$JOTUBODFFYJTUJOHVOEFSSBOEEBDDPVOU
    DSFBUFXPSLCFODI803,#&/5)@5:1&<803,#&/$)@/".&>
    $SFBUFOFX&$XPSLCFODIXJUITQFDJpFEUZQF ".*

    UFSNJOBUF*/45"/$&@/".&
    5FSNJOBUF&$JOTUBODFFYJTUJOHVOEFSSBOEEBDDPVOU
    MJTUXPSLCFODIUZQFT
    -JTU&$XPSLCFODIUZQFT ".*
    FYJTUJOHVOEFSSBOEEBDDPVOU
    &$Πϯελϯεʹ·ͭΘΔҰ࿈ͷૢ࡞Λ

    ڞ௨Խ͠ɺ$IBU#PUܦ༝Ͱఏڙ

    ࣮ݧ໨తͰ࢖͏Πϯελϯεͷઃఆ஋͸΄΅ڞ௨Խग़དྷΔ

    View Slide

  26. View Slide

  27. ೥݄౰࣌
    (16Πϯελϯε͕ཉ͍͠Πϯϑϥґཔ
    ʙिؒ
    ࣮ݧ༻ͷΞΧ΢ϯτΛ෼͚ɺར༻ऀ͕ࣗ෼Ͱ

    ΠϯελϯεΛ࡞Δʁ
    71$ 4VCOFU ,FZ1BJS 4UPSBHFͷઃఆɺ*OUFSOBM%/4ͱͷؔ࿈෇
    ͚ OWJEJBESJWFS $6%" DV%//ͳͲ݁ߏେมղܾ
    %FFQ-FBSOJOH".*
    ͸΋͏ͪΐͬͱະདྷͷ࿩

    IUUQTBXTBNB[PODPNKQNBDIJOFMFBSOJOHBNJT

    View Slide

  28. ΫοΫύουͷ

    ػցֶशج൫
    ΄΅
    ׬
    ͜͜·ͰͰ෼

    View Slide

  29. ΫοΫύουͷ

    ػցֶशج൫

    View Slide

  30. ΫοΫύουݚڀ։ൃ෦
    ೥݄ʹൃ଍ ࢲ͕഑ଐ͞Εͨͷ΋ಉ࣌ظ

    ౰࣌͸໊ͷϝϯόʔ
    ೥݄ݱࡏ͸ࠃ಺ʹ໊ւ֎ʹ໊

    View Slide

  31. ΞϓϦ

    ࣾ಺γεςϜ౳
    Ϟσϧ
    σʔλऩू
    ܇࿅
    ෼ੳ
    "1*࣮૷
    %PDLFSԽ
    όον࣮૷
    ςετʗ؂ࢹ
    લॲཧ
    Ϟσϧ࣮૷ σϓϩΠ
    ೥·Ͱ

    View Slide

  32. Ϟσϧ
    Ϟσϧ࣮૷
    ΞϓϦ

    ࣾ಺γεςϜ౳
    σʔλऩू
    ܇࿅
    ෼ੳ
    "1*࣮૷
    %PDLFSԽ
    όον࣮૷
    ςετʗ؂ࢹ
    લॲཧ
    σϓϩΠ
    ϘτϧωοΫ
    ݱࡏ

    View Slide

  33. Ϟσϧ
    Ϟσϧ࣮૷
    ΞϓϦ

    ࣾ಺γεςϜ౳
    σʔλऩू
    ܇࿅
    ෼ੳ
    "1*࣮૷
    %PDLFSԽ
    όον࣮૷
    ςετʗ؂ࢹ
    લॲཧ
    σϓϩΠ
    ϘτϧωοΫ
    Ϟσϧ։ൃऀ͕૿͑ɺ

    ϞσϧͷσϓϩΠ࡞ۀ͕ϘτϧωοΫʹ

    View Slide

  34. ػցֶशϞσϧͷσϓϩΠ
    ͱ͸
    αʔόʔ΁ͷຒΊࠐΈʗύοέʔδԽʗ"1*Խʁ
    গͳ͘ͱ΋ࠓճ͸
    είʔϓ֎ͳࣄ
    ϞσϧͷपΓʹϏδωεϩδοΫΛ࣮૷͢Δࣄ

    ྫ౤ߘΛεύϜ൑ఆͨ͠Β%#ʹద੾ͳϑϥάΛॻ͖ࠐΉ

    ͜͜·Ͱ͕σϓϩΠ͞ΕͨϞσϧͷ੹຿

    View Slide

  35. ػցֶशϞσϧͷσϓϩΠ
    ͱ͸
    αʔόʔ΁ͷຒΊࠐΈʗύοέʔδԽʗ"1*Խʁ
    গͳ͘ͱ΋ࠓճ͸
    είʔϓ֎ͳࣄ
    ϞσϧͷपΓʹϏδωεϩδοΫΛ࣮૷͢Δࣄ

    ྫ౤ߘΛεύϜ൑ఆͨ͠Β%#ʹద੾ͳϑϥάΛॻ͖ࠐΉ

    ͜͜·Ͱ͕σϓϩΠ͞ΕͨϞσϧͷ੹຿

    View Slide

  36. αʔόʔʗΞϓϦʹ૊ΈࠐΉ
    ͍͍ͱ͜Ζ
    Ϟσϧݺͼग़͠ݩͷ௨৴Φʔόʔϔου౳͕ආ͚ΒΕΔ
    Α͘ͳ͍ͱ͜Ζ
    ΞϓϦέʔγϣϯίʔυΛ͍͡Δඞཁ͕͋Δ
    1ZUIPO؀ڥʹݶΒΕΔPSม׵͢Δඞཁ͕͋Δ

    Ұํ1Z$BMMͱ͍͏ͷ΋͋Δ


    άϧʔίʔυ͕ॏෳ͢Δ

    ͔͠΋݁ߏάϧʔ͕෼ް͔ͬͨΓ͢Δ

    IUUQTHJUIVCDPNNSLOQZDBMMSC

    View Slide

  37. 1ZUIPOQBDLBHFʹ͢Δ
    άϧʔ෦෼ΛؚΊͯ1ZUIPOQBDLBHFԽͯ͠ଞॴͰར༻Ͱ͖Δ
    Α͏ʹ͢Δ
    ެ։Ͱ͖ͳ΋ͷʹ͍ͭͯ͸1Z1*$MPVE
    ͳͲΛࣾ಺ʹ

    ཱͯΔͱ͍͏ख͕͋Δ
    IUUQTHJUIVCDPNTUFWFBSDQZQJDMPVE

    View Slide

  38. 1ZUIPOQBDLBHFʹ͢Δ
    ͍͍ͱ͜Ζ
    άϧʔίʔυͷॏෳ͕ආ͚ΒΕΔ
    Α͘ͳ͍ͱ͜Ζ
    ґવ1ZUIPO؀ڥʹݶΒΕΔ
    ख͕͔͔ؒΔ
    //ϑϨʔϜϫʔΫͷ஌ࣝɺ1ZUIPOͷQBDLBHJOHʹؔ͢Δ஌͕ࣝඞཁʹ
    ͳΔ ୭͕΍Δͷ͔໰୊

    IUUQTHJUIVCDPNTUFWFBSDQZQJDMPVE

    View Slide

  39. "1*Խ͢Δ
    Ϟσϧ୯ମΛ"1*Խ
    ϞσϧΛಡΈࠐΜͰɺ֎෦ϦΫΤετʹԠͯ͡ϞσϧΛ

    ݺͼग़͢ബ͘খ͞ͳ"1*Λ࣮૷͢Δ NJDSPTFSWJDF

    पลͷϩδοΫ ʰϞσϧ͕εύϜ൑ఆͨ͠Β%#ʹϑϥάΛ
    ཱͯΔʱ
    ͸֎෦Ͱ࣮૷

    View Slide

  40. "1*Խ͢Δ
    ͍͍ͱ͜Ζ
    Ϟσϧ࣮૷ͱΞϓϦέʔγϣϯ࣮૷Λ্ख͘੾Γ཭ͤΔ

    ։ൃऀ΋্ख͘෼͚ΒΕΔ
    ΞϓϦέʔγϣϯ͸1ZUIPOͰͳͯ͘΋Α͍ NJDSPTFSWJDF

    Α͘ͳ͍ͱ͜Ζ
    ख͕͔͔ؒΔ

    View Slide

  41. "1*Խ͢Δ
    ͍͍ͱ͜Ζ
    Ϟσϧ࣮૷ͱΞϓϦέʔγϣϯ࣮૷Λ্ख͘੾Γ཭ͤΔ

    ։ൃऀ΋্ख͘෼͚ΒΕΔ
    ΞϓϦέʔγϣϯ͸1ZUIPOͰͳͯ͘΋Α͍ NJDSPTFSWJDF

    Α͘ͳ͍ͱ͜Ζ
    ख͕͔͔ؒΔ

    View Slide

  42. "1*Խʹඞཁͳ΋ͷ
    Ϟσϧ ͷEVNQ
    NPEFM\QC I ^

    "1* BQQQZ

    )551 T
    &OEQPJOU QSFEJDU JOGPͱ͔

    ϞσϧͷಡΈࠐΈͱ*0ϋϯυϥ
    ࡞ۀ
    طଘγεςϜʗΠϯϑϥ΁ͷΠϯςάϨʔγϣϯ

    -#ɺϞχλϦϯάɺ%/4౳ʑ
    ࣮ߦ؀ڥ %PDLFSpMF

    View Slide

  43. Ϟσϧ
    Ϟσϧ࣮૷
    ΞϓϦ

    ࣾ಺γεςϜ౳
    σʔλऩू
    ܇࿅
    ෼ੳ
    "1*࣮૷
    %PDLFSԽ
    όον࣮૷
    ςετʗ؂ࢹ
    લॲཧ
    σϓϩΠ
    ϘτϧωοΫ

    View Slide

  44. σϓϩΠ
    Ϟσϧ
    Ϟσϧ࣮૷
    ΞϓϦ

    ࣾ಺γεςϜ౳
    σʔλऩू
    ܇࿅
    ෼ੳ
    "1*࣮૷
    %PDLFSԽ
    όον࣮૷
    ςετʗ؂ࢹ
    લॲཧ
    ϞσϧΛσϓϩΠ͢ΔਓΛ૿΍͢

    View Slide

  45. "1*Խʹඞཁͳ΋ͷ
    Ϟσϧ ͷEVNQ
    NPEFM\QC I ^

    "1* BQQQZ

    )551 T
    &OEQPJOU QSFEJDU JOGPͱ͔

    ϞσϧͷಡΈࠐΈͱ*0ϋϯυϥ
    ࡞ۀ
    طଘγεςϜʗΠϯϑϥ΁ͷΠϯςάϨʔγϣϯ

    -#ɺϞχλϦϯάɺ%/4౳ʑ
    ࣮ߦ؀ڥ %PDLFSpMF

    View Slide

  46. "1*Խʹඞཁͳ΋ͷ
    Ϟσϧ ͷEVNQ
    NPEFM\QC I ^

    "1* BQQQZ

    )551 T
    &OEQPJOU QSFEJDU JOGPͱ͔

    ϞσϧͷಡΈࠐΈͱ*0ϋϯυϥ
    ࡞ۀ
    طଘγεςϜʗΠϯϑϥ΁ͷΠϯςάϨʔγϣϯ

    -#ɺϞχλϦϯάɺ%/4౳ʑ
    ࣮ߦ؀ڥ %PDLFSpMF

    ػցֶशͱͷυϝΠϯڞ༗౓


    View Slide

  47. "1*Խʹඞཁͳ΋ͷ
    Ϟσϧ ͷEVNQ
    NPEFM\QC I ^

    "1* BQQQZ

    )551 T
    &OEQPJOU QSFEJDU JOGPͱ͔

    ϞσϧͷಡΈࠐΈͱ*0ϋϯυϥ
    ࡞ۀ
    طଘγεςϜʗΠϯϑϥ΁ͷΠϯςάϨʔγϣϯ

    -#ɺϞχλϦϯάɺ%/4౳ʑ
    ࣮ߦ؀ڥ %PDLFSpMF

    ػցֶशͱͷυϝΠϯڞ༗౓


    3%ଆͰϋϯυϧ͍ͨ͠ൣғ
    ػցֶशͱڞ༗͢ΔυϝΠϯ͕େ͖͍

    View Slide

  48. σϓϩΠ
    Ϟσϧ
    Ϟσϧ࣮૷
    ΞϓϦ

    ࣾ಺γεςϜ౳
    σʔλऩू
    ܇࿅
    ෼ੳ
    "1*࣮૷
    %PDLFSԽ
    όον࣮૷
    ςετʗ؂ࢹ
    લॲཧ
    ϞσϧΛσϓϩΠ͢ΔਓΛ૿΍͢

    View Slide

  49. Ϟσϧ
    Ϟσϧ࣮૷
    ΞϓϦ

    ࣾ಺γεςϜ౳
    σʔλऩू
    ܇࿅
    ෼ੳ
    "1*࣮૷
    %PDLFSԽ
    όον࣮૷
    ςετʗ؂ࢹ
    લॲཧ
    σϓϩΠ
    Ϟσϧ࣮૷ऀ͕ࣗ෼ͰσϓϩΠ͢Δ

    View Slide

  50. "1*Խʹඞཁͳ΋ͷ
    Ϟσϧ ͷEVNQ
    NPEFM\QC I ^

    "1* BQQQZ

    )551 T
    &OEQPJOU QSFEJDU JOGPͱ͔

    ϞσϧͷಡΈࠐΈͱ*0ϋϯυϥ
    ࡞ۀ
    طଘγεςϜʗΠϯϑϥ΁ͷΠϯςάϨʔγϣϯ

    -#ɺϞχλϦϯάɺ%/4౳ʑ
    ࣮ߦ؀ڥ %PDLFSpMF

    ػցֶशͱͷυϝΠϯڞ༗౓


    View Slide

  51. ͱ͸͍͑
    "1*࣮૷ͱ͔%PDLFSOJ[Fͱ͔΍ͬͨ͜ͱແ͍͠ʜ
    ͜Ε͸؀ڥʹΑΔ͕
    ଞͷ࡞ۀ΋ͳΜ͔ͩΜͩ৭ʑൃੜ͢Δ
    σϓϩΠ+PCͷఆٛ SVOEFDL KFOLJOT

    %PDLFSJNBHFΛϏϧυͯࣾ͠಺ϨϙδτϦʹొ࿥
    Ͳ͏ʹָ͔ʹ΍Γ͍ͨ

    View Slide

  52. ͜͜·Ͱ·ͱΊ
    Ϟσϧ։ൃऀ͕૿͖͑ͯͨ݁ՌɺϞσϧͷσϓϩΠͱ͍͏

    ϘτϧωοΫ͕ݟ͖͑ͯͨ
    "1*Խ·ͰΛ3%ଆͰ୲౰͢Δͷ΋ͪΐͬͱݫ͍͠
    Ͳ͏͢Ε͹ʜ

    View Slide

  53. ϚωʔδυͳιϦϡʔγϣϯ
    ਂ૚ֶशϞσϧͷֶश ࠓճ͸ແࢹ
    ʗσϓϩΠΛαϙʔτ͢Δ.-BB4
    (PPHMF$MPVE.BDIJOF-FBSOJOH&OHJOF
    "NB[PO4BHF.BLFS
    'MPZE)VC

    FUD

    View Slide

  54. .-BB4ͷ σϓϩΠख๏ͷ
    ղ๤

    ʹΑΓɺϞσϧͷσϓϩΠͷצॴΛ೺Ѳ͢Δ

    View Slide

  55. ࣮ߦ؀ڥ 4FSWF࣮૷
    ϞσϧͷϋϯυϦϯά

    ೖग़ྗͷಛఆͳͲ

    (PPHMF$MPVE

    .-&OHJOF
    'MPZE)VC
    "NB[PO
    4BHF.BLFS
    IUUQTEPDTqPZEIVCDPNHVJEFTFOWJSPONFOUT

    View Slide

  56. .PEFM7FSTJPO
    3VOUJNF
    6QMPBEANPEFMQCAXJUI

    *0TJHOBUVSFT

    1045W\QBSFOUQSPKFDUT^NPEFMT
    \
    EFQMPZNFOU6SJHTQBUIUPNPEFM
    SVOUJNF7FSTJPO
    BVUP4DBMJOH
    ^


    ࢀর


    1045W\OBNFQSPKFDUT^QSFEJDU
    (PPHMF$MPVE.-&OHJOFʹΑΔσϓϩΠͷਤ
    $SFBUF

    JOQVUT
    PVUQVUT
    JOQVUT
    PVUQVUT

    View Slide

  57. .PEFM7FSTJPO
    3VOUJNF
    6QMPBEANPEFMQCAXJUI

    *0TJHOBUVSFT

    1045W\QBSFOUQSPKFDUT^NPEFMT
    \
    EFQMPZNFOU6SJHTQBUIUPNPEFM
    SVOUJNF7FSTJPO
    BVUP4DBMJOH
    ^


    ࢀর


    1045W\OBNFQSPKFDUT^QSFEJDU
    (PPHMF$MPVE.-&OHJOFʹΑΔσϓϩΠͷਤ
    $SFBUF

    JOQVUT
    PVUQVUT
    JOQVUT
    PVUQVUT
    IUUQTDMPVEHPPHMFDPNNMFOHJOFEPDTSVOUJNFWFSTJPOMJTU

    View Slide

  58. .PEFM7FSTJPO
    3VOUJNF
    6QMPBEANPEFMQCAXJUI

    *0TJHOBUVSFT

    1045W\QBSFOUQSPKFDUT^NPEFMT
    \
    EFQMPZNFOU6SJHTQBUIUPNPEFM
    SVOUJNF7FSTJPO
    BVUP4DBMJOH
    ^


    ࢀর


    1045W\OBNFQSPKFDUT^QSFEJDU
    (PPHMF$MPVE.-ʹΑΔσϓϩΠͷਤ
    $SFBUF

    JOQVUT
    PVUQVUT
    JOQVUT
    PVUQVUT
    "1*ͷ࣮ମ͸$MPVE.-೚ͤ
    A4JHOBUVSF%FGAΛར༻ͯ͠JOQVUPVUQVUUFOTPSΛ

    ಛఆ͢Δख๏Λऔ͍ͬͯΔ
    ༧Ί༻ҙ͞Ε࣮ͨߦ؀ڥΛࢦఆͯ͠σϓϩΠ
    %PDLFSJNBHF͕ෆཁ

    View Slide

  59. ࣮ߦ؀ڥ 4FSWF࣮૷
    ϞσϧͷϋϯυϦϯά

    ೖग़ྗͷಛఆͳͲ

    (PPHMF$MPVE

    .-&OHJOF
    ϓϦηοτ

    5FOTPS'MPX

    ෆཁ
    ηϛΦʔτ

    4JHOBUVSF%FGΛར༻ͯ͠༧Ί*0Λ
    ಛఆՄೳʹ͢Δ

    'MPZE)VC
    "NB[PO
    4BHF.BLFS
    IUUQTEPDTqPZEIVCDPNHVJEFTFOWJSPONFOUT

    View Slide

  60. 'MPZE)VCʹΑΔσϓϩΠͷਤ
    SFGIUUQTEPDTqPZEIVCDPNDPNNBOETSVOTFSWF

    %BUBTFU
    NPVOUBCMFGPMEFST

    1SFWJPVTUSBJOJOHKPCT

    &OEQPJOU
    BQQQZ
    import os
    from flask import Flask, send_file, request
    from werkzeug.exceptions import BadRequest
    from werkzeug.utils import secure_filename
    from evaluate import ffwd_to_img
    ALLOWED_EXTENSIONS = set(['jpg', 'jpeg'])
    app = Flask(__name__)
    @app.route('/', methods=["POST"])
    def style_transfer(path):
    """
    Take the input image and style transfer it
    """
    # check if the post request has the file part
    if 'file' not in request.files:
    return BadRequest("File not present in request")
    file = request.files['file']
    if file.filename == '':
    return BadRequest("File name is not present in request")
    if not allowed_file(file.filename):
    return BadRequest("Invalid file type")
    if file and allowed_file(file.filename):
    filename = secure_filename(file.filename)
    input_filepath = os.path.join('./images/', filename)
    output_filepath = os.path.join('/output/', filename)
    file.save(input_filepath)
    # Get checkpoint filename from la_muse
    checkpoint = request.form.get("checkpoint") or "la_muse.ckpt"
    ffwd_to_img(input_filepath, output_filepath, '/input/' + checkpoint, '/gpu:0')
    return send_file(output_filepath, mimetype='image/jpg')
    def allowed_file(filename):
    return '.' in filename and \
    filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
    if __name__ == '__main__':
    app.run(host='0.0.0.0')
    BQQQZ
    NPVOU

    qPZESVOFOWLFSBTQZ
    EBUBQBUIUPNPEFMNPEFMT
    NPEFTFSWF
    'MPZEFYQFDUTUIJTpMF
    UPDPOUBJOUIFDPEFUP
    SVOBXFCTFSWFSBOE
    MJTUFOPOQPSU

    IUUQTEPDTqPZEIVCDPN
    [email protected]
    TFSWFNPEF

    https://
    www.floydhub.com/
    expose/ABCDEFabcdef
    SPVUF

    ॻ͘

    View Slide

  61. 'MPZE)VCʹΑΔσϓϩΠͷਤ
    SFGIUUQTEPDTqPZEIVCDPNDPNNBOETSVOTFSWF

    %BUBTFU
    NPVOUBCMFGPMEFST

    1SFWJPVTUSBJOJOHKPCT

    &OEQPJOU
    BQQQZ
    import os
    from flask import Flask, send_file, request
    from werkzeug.exceptions import BadRequest
    from werkzeug.utils import secure_filename
    from evaluate import ffwd_to_img
    ALLOWED_EXTENSIONS = set(['jpg', 'jpeg'])
    app = Flask(__name__)
    @app.route('/', methods=["POST"])
    def style_transfer(path):
    """
    Take the input image and style transfer it
    """
    # check if the post request has the file part
    if 'file' not in request.files:
    return BadRequest("File not present in request")
    file = request.files['file']
    if file.filename == '':
    return BadRequest("File name is not present in request")
    if not allowed_file(file.filename):
    return BadRequest("Invalid file type")
    if file and allowed_file(file.filename):
    filename = secure_filename(file.filename)
    input_filepath = os.path.join('./images/', filename)
    output_filepath = os.path.join('/output/', filename)
    file.save(input_filepath)
    # Get checkpoint filename from la_muse
    checkpoint = request.form.get("checkpoint") or "la_muse.ckpt"
    ffwd_to_img(input_filepath, output_filepath, '/input/' + checkpoint, '/gpu:0')
    return send_file(output_filepath, mimetype='image/jpg')
    def allowed_file(filename):
    return '.' in filename and \
    filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
    if __name__ == '__main__':
    app.run(host='0.0.0.0')
    BQQQZ
    NPVOU

    qPZESVOFOWLFSBTQZ
    EBUBQBUIUPNPEFMNPEFMT
    NPEFTFSWF
    'MPZEFYQFDUTUIJTpMF
    UPDPOUBJOUIFDPEFUP
    SVOBXFCTFSWFSBOE
    MJTUFOPOQPSU

    IUUQTEPDTqPZEIVCDPN
    [email protected]
    TFSWFNPEF

    https://
    www.floydhub.com/
    expose/ABCDEFabcdef
    SPVUF

    IUUQTEPDTqPZEIVCDPNHVJEFTFOWJSPONFOUT

    View Slide

  62. 'MPZE)VCʹΑΔσϓϩΠͷਤ
    SFGIUUQTEPDTqPZEIVCDPNDPNNBOETSVOTFSWF

    %BUBTFU
    NPVOUBCMFGPMEFST

    1SFWJPVTUSBJOJOHKPCT

    &OEQPJOU
    BQQQZ
    import os
    from flask import Flask, send_file, request
    from werkzeug.exceptions import BadRequest
    from werkzeug.utils import secure_filename
    from evaluate import ffwd_to_img
    ALLOWED_EXTENSIONS = set(['jpg', 'jpeg'])
    app = Flask(__name__)
    @app.route('/', methods=["POST"])
    def style_transfer(path):
    """
    Take the input image and style transfer it
    """
    # check if the post request has the file part
    if 'file' not in request.files:
    return BadRequest("File not present in request")
    file = request.files['file']
    if file.filename == '':
    return BadRequest("File name is not present in request")
    if not allowed_file(file.filename):
    return BadRequest("Invalid file type")
    if file and allowed_file(file.filename):
    filename = secure_filename(file.filename)
    input_filepath = os.path.join('./images/', filename)
    output_filepath = os.path.join('/output/', filename)
    file.save(input_filepath)
    # Get checkpoint filename from la_muse
    checkpoint = request.form.get("checkpoint") or "la_muse.ckpt"
    ffwd_to_img(input_filepath, output_filepath, '/input/' + checkpoint, '/gpu:0')
    return send_file(output_filepath, mimetype='image/jpg')
    def allowed_file(filename):
    return '.' in filename and \
    filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
    if __name__ == '__main__':
    app.run(host='0.0.0.0')
    BQQQZ
    NPVOU

    qPZESVOFOWLFSBTQZ
    EBUBQBUIUPNPEFMNPEFMT
    NPEFTFSWF
    'MPZEFYQFDUTUIJTpMF
    UPDPOUBJOUIFDPEFUP
    SVOBXFCTFSWFSBOE
    MJTUFOPOQPSU

    IUUQTEPDTqPZEIVCDPN
    [email protected]
    TFSWFNPEF

    https://
    www.floydhub.com/
    expose/ABCDEFabcdef
    SPVUF

    5SBJO࣌ͱڞ௨ͷ%BUBTFU GPMEFS
    Λར༻
    Ϟσϧͷ"SUJGBDUΛద੾ͳ৔ॴʹNPVOU͢Δ

    ద੾ͳ৔ॴΛࣗ෼Ͱߟ͑Δ

    ىಈ࣌ʹ࣮ߦ؀ڥ AFOWA
    Λࢦఆ
    %PDLFSpMF͸ෆཁ
    ABQQQZAΛ࣮૷ͯ͠σϓϩΠ
    Ϟσϧͷ"SUJGBDUΛಡΈࠐΜͰ1PSUͰ଴ͭ

    View Slide

  63. ࣮ߦ؀ڥ 4FSWF࣮૷
    ϞσϧͷϋϯυϦϯά

    ೖग़ྗͷಛఆͳͲ

    (PPHMF$MPVE

    .-&OHJOF
    ϓϦηοτ

    5FOTPS'MPX

    ෆཁ
    ηϛΦʔτ

    4JHOBUVSF%FGΛར༻ͯ͠༧Ί*0Λ
    ಛఆՄೳʹ͢Δ

    'MPZE)VC
    ϓϦηοτ

    5FOTPS'MPX ,FSBT
    1Z5PSDI FUD


    BQQQZͰ࣮૷ BQQQZͰ࣮૷
    "NB[PO
    4BHF.BLFS
    IUUQTEPDTqPZEIVCDPNHVJEFTFOWJSPONFOUT

    View Slide

  64. &OEQPJOU &$3 %PDLFSSFQPTJUPSZ

    "NB[PO4BHF.BLFSʹΑΔσϓϩΠͷਤ
    .PEFM"SUJGBDU
    GET /ping
    POST /invocations NPEFMTFSWFMBUFTU

    #VJME1VTI


    NPEFMTFSWFMBUFTU
    %PXOMPBE

    TBHFNBLFS$SFBUF.PEFM
    TBHFNBLFS$SFBUF&OEQPJOU
    NPEFMUSBJOMBUFTU
    5SBJOJOH+PC
    NPEFMUSBJOMBUFTU
    6QMPBE

    TBHFNBLFS$SFBUF5SBJOJOH+PC


    3FGIUUQTEPDTBXTBNB[PODPNTBHFNBLFSMBUFTUEH
    IPXJUXPSLTIPTUJOHIUNM
    4BHF.BLFS1ZUIPO4%,
    NPEFMpU

    NPEFMEFQMPZ



    TBHFNBLFS*OWPLF&OEQPJOU
    NPEFMQSFEJDU

    View Slide

  65. &OEQPJOU
    "NB[PO4BHF.BLFSʹΑΔσϓϩΠͷਤ
    .PEFM"SUJGBDU
    GET /ping
    POST /invocations
    QSFTFUTFSWFMBUFTU
    %PXOMPBE

    TBHFNBLFS$SFBUF.PEFM
    TBHFNBLFS$SFBUF&OEQPJOU
    5SBJOJOH+PC
    QSFTFUUSBJOMBUFTU
    6QMPBE

    TBHFNBLFS$SFBUF5SBJOJOH+PC


    3FGIUUQTEPDTBXTBNB[PODPNTBHFNBLFSMBUFTUEH
    IPXJUXPSLTIPTUJOHIUNM
    4BHF.BLFS1ZUIPO4%,
    [email protected]

    [email protected]

    TBHFNBLFS*OWPLF&OEQPJOU
    [email protected]

    1SFTFU #VJMUJO

    "MHPSJUINT

    -JOFBS-FBSOFS
    9(#PPTU
    *NBHF$MBTTJpDBUJPO
    TFRTFR
    FUD
    SFGIUUQTEPDTBXTBNB[PODPN
    TBHFNBLFSMBUFTUEHBMHPTIUNM

    View Slide

  66. ࣮ߦ؀ڥ 4FSWF࣮૷
    ϞσϧͷϋϯυϦϯά

    ೖग़ྗͷಛఆͳͲ

    (PPHMF$MPVE

    .-&OHJOF
    ϓϦηοτ

    5FOTPS'MPX

    ෆཁ
    ηϛΦʔτ

    4JHOBUVSF%FGΛར༻ͯ͠༧Ί*0Λಛ
    ఆՄೳʹ͢Δ

    'MPZE)VC
    ϓϦηοτ

    5FOTPS'MPX ,FSBT
    1Z5PSDI FUD


    BQQQZͰ࣮૷ BQQQZͰ࣮૷
    "NB[PO
    4BHF.BLFS
    ϓϦηοτʗ
    ࣗલͷ%PDLFS
    JNBHFΑΓબ୒
    ෆཁ
    ϓϦηοτΛར༻͢Δ৔߹ෆཁ
    ಠࣗϞσϧΛʏඞཁ
    IUUQTEPDTqPZEIVCDPNHVJEFTFOWJSPONFOUT

    View Slide

  67. ࣮ߦ؀ڥ 4FSWF࣮૷
    ϞσϧͷϋϯυϦϯά

    ೖग़ྗͷಛఆͳͲ

    (PPHMF$MPVE

    .-&OHJOF
    ϓϦηοτ

    5FOTPS'MPX

    ෆཁ
    ηϛΦʔτ

    4JHOBUVSF%FGΛར༻ͯ͠༧Ί*0Λಛ
    ఆՄೳʹ͢Δ

    'MPZE)VC
    ϓϦηοτ

    5FOTPS'MPX ,FSBT
    1Z5PSDI FUD


    BQQQZͰ࣮૷ BQQQZͰ࣮૷
    "NB[PO
    4BHF.BLFS
    ϓϦηοτʗ
    ࣗલͷ%PDLFS
    JNBHFΑΓબ୒
    ෆཁ
    ϓϦηοτΛར༻͢Δ৔߹ෆཁ
    ಠࣗϞσϧΛʏඞཁ
    IUUQTEPDTqPZEIVCDPNHVJEFTFOWJSPONFOUT
    ϓϦηοτͱͯ͠੩తͳ࣮ߦ؀ڥ Ϧετ
    ͕

    ఏڙ͞Ε͍ͯΔ

    View Slide

  68. ࣮ߦ؀ڥʹؔ͢Δߟ࡯
    ʰز͔ͭͷ࣮ߦ؀ڥΛϓϦηοτͱͯ͠༻ҙͯ͠΍Δ͚ͩͰ

    σϓϩΠઌͷ؀ڥͱͯ͠͸े෼ػೳ͢Δͷ͔΋͠Εͳ͍ʱ

    .-BB4ʹ͓͚Δྫ͔ΒݟΒΕΔΑ͏ʹ

    %PDLFSpMFʹΑΔ؀ڥͷఆٛͷखؒΛল͚ΔՄೳੑ͕͋Δ
    ϓϦηοτΛࣾ಺EPDLFSSFQPTJUPSZͰఏڙ͢Ε͹ɺϩʔΧϧͰ΋ར
    ༻Ͱ͖Δ
    ϩʔΧϧͱσϓϩΠઌͷ࣮ߦ؀ڥΛἧ͑Δͱ͍͏ίϯςφԽ

    σϓϩΠͷར఺Λอ͍ͬͯΔ

    View Slide

  69. 3VOUJNF T

    EPDLFSSFQPTJUPSZ

    LFSBTQZ
    TFSWFQZ

    ϩʔΧϧ

    ؀ڥ
    1VMM

    %FQMPZNFOUT
    $MPVE
    4UPSBHF
    1VMM

    LFSBTQZ
    TFSWFQZ
    LFSBTQZ
    TFSWFQZ
    ͭ·Γ͜Μͳײ͡
    5SBJO
    6QMPBE

    View Slide

  70. ࣮ߦ؀ڥ 4FSWF࣮૷
    ϞσϧͷϋϯυϦϯά

    ೖग़ྗͷಛఆͳͲ

    (PPHMF$MPVE

    .-&OHJOF
    ϓϦηοτ

    5FOTPS'MPX

    ෆཁ
    ηϛΦʔτ

    4JHOBUVSF%FGΛར༻ͯ͠༧Ί*0Λಛ
    ఆՄೳʹ͢Δ

    'MPZE)VC
    ϓϦηοτ

    5FOTPS'MPX ,FSBT
    1Z5PSDI FUD


    BQQQZͰ࣮૷ BQQQZͰ࣮૷
    "NB[PO
    4BHF.BLFS
    ϓϦηοτʗ
    ࣗલͷ%PDLFS
    JNBHFΑΓબ୒
    ෆཁ
    ϓϦηοτΛར༻͢Δ৔߹ෆཁ
    ಠࣗϞσϧΛʏඞཁ
    IUUQTEPDTqPZEIVCDPNHVJEFTFOWJSPONFOUT

    View Slide

  71. ϋϯυϥ
    ϞσϧͷϋϯυϦϯά
    ͱ͸
    ϞσϧͷαʔόʔΛ࡞Δ৔߹ʹɺҎԼͷػೳ͕ඞཁʹͳΔ
    ϞσϧΛ ͓ͦΒ͘ϝϞϦʹ
    ಡΈࠐΉ
    ೖྗ "1*αʔόʔͷ৔߹SFRVFTU
    ΛϞσϧʹ౉͢
    Ϟσϧ͔Βͷग़ྗΛड͚औΓSFTQPOTFʹฦ͢
    "1*
    -PBE

    View Slide

  72. ϞσϧͷϋϯυϦϯά
    ·ͣωοτϫʔΫͷ*0ͷ৔ॴͱܕΛಛఆ͢Δඞཁ͕͋Δ
    ͜͜͸ϑϨʔϜϫʔΫʹΑͬͯ͘Δ

    ωοτϫʔΫ࣮૷࣌ʹJOQVUPVUQVU͕ܾ·Δ৔߹΋͋Δ

    ,FSBT 1Z5PSDI +*5


    ݁ߏَ໳
    *OQVU 0VUQVU
    ͕ෳ਺͋Δ৔߹͸ʁ
    ඪ४ԽΛ͢ΔྲྀΕ΋͋Δ

    View Slide

  73. ϞσϧͷϋϯυϦϯά
    ·ͣωοτϫʔΫͷ*0ͷ৔ॴͱܕΛಛఆ͢Δඞཁ͕͋Δ
    ͜͜͸ϑϨʔϜϫʔΫʹΑͬͯ͘Δ

    ωοτϫʔΫ࣮૷࣌ʹJOQVUPVUQVU͕ܾ·Δ৔߹΋͋Δ

    ,FSBT 1Z5PSDI +*5


    ݁ߏَ໳
    *OQVU 0VUQVU
    ͕ෳ਺͋Δ৔߹͸ʁ
    ඪ४ԽΛ͢ΔྲྀΕ΋͋Δ IUUQTTQFBLFSEFDLDPNBZFNPT
    QZUPSDIUPDB⒎FUPPOOYUPTIFODFOH
    YVFYJNPEFSVGBMTFEFQVSPJOJUVJUF

    View Slide

  74. ࣮ߦ؀ڥ 4FSWF࣮૷
    ϞσϧͷϋϯυϦϯά

    ೖग़ྗͷಛఆͳͲ

    (PPHMF$MPVE

    .-&OHJOF
    ϓϦηοτ

    5FOTPS'MPX

    ෆཁ
    ηϛΦʔτ

    4JHOBUVSF%FGΛར༻ͯ͠༧Ί*0Λಛ
    ఆՄೳʹ͢Δ

    'MPZE)VC
    ϓϦηοτ

    5FOTPS'MPX ,FSBT
    1Z5PSDI FUD


    BQQQZͰ࣮૷ BQQQZͰ࣮૷
    "NB[PO
    4BHF.BLFS
    ϓϦηοτʗ
    ࣗલͷ%PDLFS
    JNBHFΑΓબ୒
    ෆཁ
    ϓϦηοτΛར༻͢Δ৔߹ෆཁ
    5FOTP'MPX .9/FU ಠࣗϞσϧඞཁ
    IUUQTEPDTqPZEIVCDPNHVJEFTFOWJSPONFOUT

    View Slide

  75. Ϟσϧͷ"1*ʹؔ͢Δߟ࡯
    Ϟσϧͷ"1*ͱͯ͠ඞཁͳػೳʁ
    QSFEJDU IFBMUIଞʹ͸ʁ
    ׂΓ੾Ε͹݁ߏڞ௨Խग़དྷΔ

    (PPHMF$MPVE.-ͷྫʹݟΔΑ͏ʹ

    લड़ͨ͠໰୊ʹൺ΂Ε͹ᘭ຤Ͱ͋Δ

    ࣮ߦ؀ڥͱϞσϧͷϋϯυϦϯά͕ͳΜͱ͔ͳΕ͹

    "1*ͷ࣮૷͸Ͳ͏ʹͰ΋ͳΓͦ͏

    View Slide

  76. ͪΐͬͱ·ͱΊ
    ࣮ߦ؀ڥʗ"1*࣮૷ڞʹڞ௨Խग़དྷΔ༨஍͕͋Δ
    ͔ͩΒͦ͜
    .-BB4ͷΑ͏ͳڞ௨ج൫͕੒ཱ͠͏Δ
    ະ࣮ͩ༻ྫ͸ଟ͘ͳ͍͕
    ֤Ϟσϧ࣮૷ऀ͕σϓϩΠ·Ͱߦ͏ମ੍΋ෆՄೳͰ͸ͳ͍

    View Slide

  77. .-BB4ͱͷ෇͖߹͍ํ
    ϓϥοτϑΥʔϜ͕αϙʔτ͢Δൣғ͸෼ް͘ͳͬͯ͘Δ ͸ͣ

    $*$%ɺ"#ςετ $BOBSZ
    ͳͲ
    ࠓޙ΋࣍ୈʹ৐͔ͬΔϝϦοτ͕େ͖͘ͳͬͯ͘Δ
    খதن໛ͳػցֶशνʔϜͰ͸ࣗڅࣗ଍͢Δͷ΋ ࠓͷͱ͜Ζ

    બ୒ࢶʹೖΔ

    View Slide

  78. Ϟσϧ
    Ϟσϧ࣮૷
    ΞϓϦ

    ࣾ಺γεςϜ౳
    σʔλऩू
    ܇࿅
    ෼ੳ
    "1*࣮૷
    %PDLFSԽ
    όον࣮૷
    ςετʗ؂ࢹ
    લॲཧ
    σϓϩΠ
    Ϟσϧ࣮૷ऀ͕ࣗ෼ͰσϓϩΠ͢Δ

    View Slide

  79. .-BB4͕ͪΐͬͱ෼͔ͬͨͷͰ
    ࣮ݧͯ͠Έͨ

    View Slide

  80. NPEFMQC
    3VOUJNFEFpOJUJPOT
    LFSBTQZ
    3VOUJNFT &$3

    LFSBTQZ
    TFSWFQZ
    %PDLFSpMF

    TFSWFQZ
    %PDLFSpMF
    UFOTPSqPXQZ
    TFSWFQZ
    %PDLFSpMF

    UFOTPSqPXQZ
    TFSWFQZ
    %PDLFSpMF
    #VJME
    NFUBEBUBZNM
    name: cookpadnet
    model:
    path: model.pb
    input: input_1
    output: final_result
    runtime: tensorflow

    View Slide

  81. NPEFMQC
    3VOUJNFEFpOJUJPOT
    LFSBTQZ
    3VOUJNFT &$3

    LFSBTQZ
    TFSWFQZ
    %PDLFSpMF

    TFSWFQZ
    %PDLFSpMF
    UFOTPSqPXQZ
    TFSWFQZ
    %PDLFSpMF

    UFOTPSqPXQZ
    TFSWFQZ
    %PDLFSpMF
    #VJME
    NFUBEBUBZNM
    name: cookpadnet
    model:
    path: model.pb
    input: input_1
    output: final_result
    runtime: tensorflow
    $ python deploy.py

    Uploading model artifacts to: s3://foo/model.pb
    Updating task definition...
    Updated: arn:aws:ecs:::task-definition/cookpadnet:1
    Deploying new sevice...

    View Slide

  82. $ python deploy.py

    Uploading model artifacts to: s3://foo/model.pb
    Updating task definition...
    Updated: arn:aws:ecs:::task-definition/cookpadnet:1
    Deploying new sevice...
    &$4
    NPEFMQC
    3VOUJNFEFpOJUJPOT
    LFSBTQZ
    3VOUJNFT &$3

    LFSBTQZ
    TFSWFQZ
    %PDLFSpMF

    TFSWFQZ
    %PDLFSpMF
    UFOTPSqPXQZ
    TFSWFQZ
    %PDLFSpMF

    UFOTPSqPXQZ
    TFSWFQZ
    %PDLFSpMF
    #VJME
    NFUBEBUBZNM
    name: cookpadnet
    model:
    path: model.pb
    input: input_1
    output: final_result
    runtime: tensorflow

    View Slide

  83. $ python deploy.py

    Uploading model artifacts to: s3://foo/model.pb
    Updating task definition...
    Updated: arn:aws:ecs:::task-definition/cookpadnet:1
    Deploying new sevice...
    &$4
    NPEFMQC
    3VOUJNFEFpOJUJPOT
    LFSBTQZ
    3VOUJNFT &$3

    LFSBTQZ
    TFSWFQZ
    %PDLFSpMF

    TFSWFQZ
    %PDLFSpMF
    UFOTPSqPXQZ
    TFSWFQZ
    %PDLFSpMF

    UFOTPSqPXQZ
    TFSWFQZ
    %PDLFSpMF
    #VJME
    NFUBEBUBZNM
    name: cookpadnet
    model:
    path: model.pb
    input: input_1
    output: final_result
    runtime: tensorflow
    DVSMEBUBCJOBSZ!GPPEKQHIPHFMCFMCBNB[POBXTDPNQSFEJDU
    )$POUFOU5ZQFJNBHFKQFH
    \
    SFTVMU<
    <


    F
    >
    >
    ^

    View Slide

  84. ·ͱΊ
    ೥݄ɺΫοΫύουݚڀ։ൃ෦ͷൃ଍
    ࠓ·Ͱ૊৫ͱ֦ͯ͠େ͖ͯͨ͠
    ͞ΒͳΔ֦େʹ଱͑͏Δεέʔϥϒϧͳ։ൃ؀ڥΛ࡞Γ͍ͨ
    ֤Ϟσϧ࣮૷ऀ͕σϓϩΠ·Ͱߦ͏ମ੍΁ ޲͔͍͍ͨ

    .-BB4ͳͲͷطଘख๏Λࢀߟʹ࠷ળखΛ୳͍ͬͯΔॴ

    View Slide

  85. ΫοΫύουͷ

    ػցֶशج൫
    ଓ͘

    View Slide

  86. એ఻
    ͦΜͳج൫ΛҰॹʹ࡞Γ·ͤΜ͔
    IUUQTDPPLQBEKPCT

    View Slide