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

iOSと人工知能(AI) -GPU並列演算の仕組みと機械学習-

1ae8fc4f63ab4770dd4545006489234c?s=47 yuky_az
September 17, 2017

iOSと人工知能(AI) -GPU並列演算の仕組みと機械学習-

日本最大のiOSカンファレンス、iOS2017での発表内容です。
デモに使用した動画は以下のリンクから視聴することができます。
https://twitter.com/yuky_az/status/910266701291315200
https://youtu.be/mRu4WkryeWs
https://youtu.be/13qsJfwtdks
https://youtu.be/evo7_GH-TtM

1ae8fc4f63ab4770dd4545006489234c?s=128

yuky_az

September 17, 2017
Tweet

Transcript

  1. J04ͱਓ޻஌ೳ "*  (16ฒྻԋࢉͷ࢓૊Έͱػցֶश :VLJOBHB"[VNB !ZVLZ@B[ J04%$+BQBO

  2. ࣗݾ঺հ :VLJOBHB"[VNB
 ʢզ࠺޾௕ʣ ΤϯδχΞ 3% ϓϩάϥϛϯάߨࢣ େֶͷݚڀһɺϝʔΧʔۈ຿ɺϓϩάϥϛϯά ߨࢣɺϕϯνϟʔۈ຿Λܦͯݱࡏ͸ϑϦʔϥϯε !ZVLZ@B[ ΈΜͳͷ"*ߨ࠲


    ࣮ફσʔλαΠΤϯεػցֶशXJUI1ZUIPO 6EFNZͰडߨੜ਺͕ਓΛಥഁʂ ޷͖ͳݴ༿ 5IFCFTUXBZUPQSFEJDUUIFGVUVSFJTUPJOWFOUJU
  3. ൃදͷྲྀΕ ষਓ޻஌ೳ "* ͱ͸ ষJ04ͷதͷ"* ষ.FUBMʹΑΔ(16ฒྻԋࢉ (1(16 ষ.FUBMʹΑΔ"*ͷ࣮૷

  4. 1ষ. ਓ޻஌ೳʢAIʣͱ͸ wਓ޻஌ೳͷ֓ཁ wػցֶशͱ͸ wχϡʔϥϧωοτϫʔΫͱ͸ w4XJGUͰ࣮૷͢ΔόοΫϓϩύήʔγϣϯ

  5. ੜ෺ͷ஌ೳΛ໛฿͢Δٕज़ ਓ޻஌ೳͱ͸Կ͔ʁ

  6. ڧ͍AIͱऑ͍AI ڧ͍"* ˠੜ෺ʢಛʹώτʣͷ஌ೳʹഭΔ"* FHυϥ͑΋Μɺమ࿹ΞτϜɺ$10ͳͲ ऑ͍"* ˠݶఆతͳ໰୊ղܾ΍ਪ࿦ FHνΣε΍কعͷ"*ɺը૾ೝࣝͳͲ

  7. ਓ޻஌ೳͷ༻్ʢऑ͍AIʣ ը૾ॲཧ ˠ෺ମೝࣝɺը૾ੜ੒
 Ի੠ɺձ࿩ ˠԻ੠ೝࣝɺձ࿩Τϯδϯ จষͷೝࣝɺจষͷ࡞੒ ˠνϟοτϩϘοτɺখઆͷࣥච ػց੍ޚ ˠࣗಈӡసɺ࢈ۀ༻ϩϘοτ ࡞ۂɺֆըͳͲͷΞʔτ

    ˠࣗಈ࡞ۂɺը෩ͷ໛฿ FUDʜ
  8. ਓ޻஌ೳͷछྨ ػցֶश ˠίϯϐϡʔλ͕ܦݧɺֶशΛߦ͏
 Ҩ఻తΞϧΰϦζϜ ˠੜ෺ͷҨ఻ࢠΛ໛฿ɺΞϧΰϦζϜ͕ಥવมҟٴͼަ഑͢Δ
 ܈஌ೳ ˠੜ෺ͷ܈ΕΛ໛฿ɺݸମͷू߹ମ͕ߴ౓ͳৼΔ෣͍ ϑΝδΠ੍ޚɺΤΩεύʔτγεςϜɺFUDʜ

  9. ػցֶशͱ͸ ਓ޻஌ೳͷҰ෼໺ ίϯϐϡʔλϓϩάϥϜ͕ܦݧɺֶशΛߦ͏γεςϜ

  10. ػցֶशͷΞϧΰϦζϜ αϙʔτϕΫλʔϚγϯ ˠ௒ฏ໘Λ܇࿅͠෼ྨΛߦ͏ ڧԽֶश ˠใु͕࠷΋ߴ͍ํ๏Λֶश ܾఆ໦ ˠࢬ෼͔ΕͰσʔλΛ෼ྨ
 χϡʔϥϧωοτϫʔΫ ˠ೴ͷਆܦࡉ๔ωοτϫʔΫΛ໛฿ 


    Ξϯαϯϒϧֶशɺ,ۙ๣๏ɺFUDʜ
  11. χϡʔϥϧωοτϫʔΫʹΑΔػցֶश Ϛ΢εͷେ೴৽ൽ࣭ʹ͓͚Δਆܦࡉ๔ *NBHF/SFUT$$CZTB/FVSPO8JLJQFEJB χϡʔϥϧωοτϫʔΫ͸ɺੜ෺ͷਆܦࡉ๔ωοτϫʔΫΛ໛฿

  12. ਆܦࡉ๔ͷωοτϫʔΫ ग़ྗ ೖྗ χϡʔϩϯ थঢ়ಥى ώτͷ೴ʹ͸ԯݸͷਆܦࡉ๔ ஹݸͷ݁߹ʢγφϓεʣ γφϓε ࣠ࡧ

  13. ਆܦࡉ๔ͷϞσϧԽ ೖྗ ೖྗ ೖྗ ɾ ɾ ɾ ɾ ɾ ɾ

    ग़ྗ ೖྗY݁߹ՙॏͷ߹ܭ όΠΞεY݁߹ՙॏ Λग़ྗʹม׵͢Δؔ਺ χϡʔϩϯ όΠΞε ݁߹ՙॏ
  14. χϡʔϥϧωοτϫʔΫ ೖྗ ೖྗ ग़ྗ ग़ྗ χϡʔϩϯ

  15. όοΫϓϩύήʔγϣϯʹΑΔֶश ೖྗ ೖྗ ग़ྗ ग़ྗ χϡʔϩϯ ೖྗ૚ தؒ૚ ग़ྗ૚ ਖ਼ղ

    ਖ਼ղ ޡࠩ ޡࠩ ݁߹ՙॏͷमਖ਼ ݁߹ՙॏͷमਖ਼ ݁߹ՙॏͷमਖ਼ ݁߹ՙॏͷमਖ਼
  16. σΟʔϓϥʔχϯάͱ͸ ଟ૚Ͱߏ੒͞ΕΔχϡʔϥϧωοτϫʔΫΛ༻͍ͨػցֶश

  17. Demo: SwiftʹΑΔػցֶश ࠷ٸ߱Լ๏ͷΞϧΰϦζϜʹΑΓ ޡࠩΛٯ఻೻͢Δ ߦ΄Ͳͷ4XJGUίʔυ
 ֤૚ͷχϡʔϩϯ਺͸<   >ݸ TJOؔ਺Λਖ਼ղ஋ͱͯ͠

    όοΫϓϩύήʔγϣϯʹΑΓֶश χϡʔϥϧωοτϫʔΫ ޡࠩ 8JLJQFEJB#BDLQSPQBHBUJPO ݁߹ՙॏͷमਖ਼ྔʢБֶश܎਺ʣ ˠग़ྗ૚ ˠग़ྗ૚Ҏ֎
  18. Demo: SwiftʹΑΔػցֶश

  19. 2ষ. iOSͷதͷAI w$PSF.- w.14 .FUBM1FSGPSNBODF4IBEFST  w#//4 #BTJD/FVSBM/FUXPSL4VCSPVUJOFT  w(BNFQMBZ,JU

  20. Frameworkͷߏ੒ $PSF.- :PVSBQQ Vision "DDFSBSBUFBOE#//4 ϋʔυ΢ΣΞଆ Ϣʔβʔଆ .FUBM1FSGPSNBODF4IBEFST Natural Language

    Processing GameplayKit IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPODPSFNM
  21. Core ML ˠ܇࿅ʢֶशʣࡁΈͷϞσϧΛΞϓϦʹಋೖ͢Δ ˠػցֶशͷ༧ଌʹಛԽ ˠओཁͳػցֶशπʔϧͷ܇࿅ࡁΈϞσϧΛ࢖༻Մ
 ʢTDJLJUMFBSOɺ,FSBTɺ$BGFFɺFUDʜʣ Ԡ༻ ˠإೝࣝɺ෺ମೝࣝ ˠࣗવݴޠॲཧɺ຋༁ ˠՁ֨ͳͲͷ༧ଌ


  22. .14 .FUBM1FSGPSNBODF4IBEFST ˠ(16Λ༻͍ͨ.FUBMͷߴ͍ԋࢉػೳΛΞϓϦʹಋೖ ˠػցֶशͷ༧ଌʹಛԽ ˠ৞ΈࠐΈχϡʔϥϧωοτϫʔΫͷ"1*ʢ.14$//ʣ
 ˠ$PSF.-ΑΓ΋ίʔυ͕ෳࡶ
 "QQMFͷαϯϓϧίʔυ ˠ.14$//)FMMP8PSMEʢจࣈೝࣝʣ ˠ.FUBM*NBHF3FDPHOJUJPOʢը૾ೝࣝʣ ˠ.FUBM*NBHF'JMUFSTʢը૾ϑΟϧλʣ


  23. #//4 #BTJD/FVSBM/FUXPSL4VCSPVUJOFT  ˠ਺஋ܭࢉॲཧશൠΛѻ͏"DDFMFSBUFʹؚ·ΕΔ
 ˠ$16ͷੑೳΛϑϧʹҾ͖ग़ͯ͠ԋࢉΛߦ͏ ˠػցֶशͷ༧ଌʹಛԽ
 ˠ৞ΈࠐΈχϡʔϥϧωοτϫʔΫΛαϙʔτ


  24. ˠήʔϜͷϩδοΫΛߏங͢ΔͨΊͷϑϨʔϜϫʔΫ ˠ$PSF.-ΛϕʔεʹɺఢΩϟϥͳͲͷಈ͖ʹ ɹֶशࡁΈͷܾఆ໦ͳͲΛ࢖༻Մ ˠϛχϚοΫε๏ʹΑΔରઓ૬खͷ"* ˠ"HFOUT (PBMT BOE#FIBWJPSTʹΑΔ ɹࣗ཯తʹಈ͘ΦϒδΣΫτ (BNFQMBZ,JU

  25. "#JPOJDνοϓͷొ৔ ˠඵ࠷େ ԯͷԋࢉॲཧ ˠχϡʔϥϧΤϯδϯʹΑΔػցֶशΞϧΰϦζϜͷߴ଎Խ
 ˠ"QQMFಠࣗઃܭͷ(16
 ϑϨʔϜϫʔΫˍϋʔυ΢ΣΞͱ΋ʹɺ ୺຤ଆͷ"*؀ڥ͕੔͏

  26. 3ষ. MetalʹΑΔGPUฒྻԋࢉ (GPGPU) w(16ฒྻԋࢉͱ͸ w.FUBMͷొ৔ਓ෺ wύϑΥʔϚϯεͷଌఆ

  27. GPUฒྻԋࢉʢGPGPUʣͱ͸ GPUͷԋࢉϦιʔεΛը૾ॲཧҎ֎ʹར༻ $16 (16

  28. .FUBMͱ͸ 0QFO(-ͱ0QFO$-ʹࣅͨػೳΛҰͭͷ"1*ʹ౷߹ $16ͱ(16ͷγʔϜϨεͳ࿈ܞ

  29. CPUͱGPUͷ࿈ܞ EFWFMPQFSBQQMFDPNNFUBM

  30. Metal CPUଆͷొ৔ਓ෺ 1 .5-%FWJDF୯Ұͷ(16ͷΠϯλʔϑΣΠε .FUBMؔ࿈ͷ"1*͸ଟ͕͘ϓϩτίϧͰهࡌ EFWJDF.5-$SFBUF4ZTUFN%FGBVMU%FWJDF  QSJOUEFWJDFOBNF"QQMF"(16

  31. Metal CPUଆͷొ৔ਓ෺ 2 .5-%FWJDF͕ҎԼΛੜ੒ 
 .5--JCSBSZˠγΣʔμʔ΁ͷΠϯλʔϑΣΠε .5-'VODUJPOˠ.FUBM4IBEJOH-BOHVBHFͰॻ͔Εͨؔ਺ .5-$PNQVUF1JQFMJOF4UBUFˠ.5-'VODUJPOΛίϯύΠϧ͞Εͨίʔυʹม׵ .5-$PNQVUF$PNNBOE&ODPEFSˠίϚϯυΛ(16༻ʹΤϯίʔυ .5-$PNNBOE#V⒎FSˠ(16Ͱ࣮ߦ͞ΕΔίϚϯυΛ֨ೲ

    .5-$PNNBOE2VFVFˠ্هͷΩϡʔɺίϚϯυͷ࣮ߦॱΛ؅ཧ
  32. Metal Shading Language JODMVEFNFUBM@TUEMJC VTJOHOBNFTQBDFNFUBM LFSOFMWPJEBEE0OF DPOTUEFWJDFqPBU JOQVU%BUB<<CV⒎FS  >>

     EFWJDFqPBU PVUQVU%BUB<<CV⒎FS  >>  VJOUJE<<UISFBE@QPTJUJPO@JO@HSJE>>  \ qPBUSFTVMUJOQVU%BUB<JE> SFTVMU G PVUQVU%BUB<JE>SFTVMU ^ ֤εϨου͝ͱʹ࣮ߦ͞ΕΔ
  33. Experiment: GPU vs CPU ɾೖྗʹΛ଍ͯ͠Ҿ͘Λ܁Γฦ͢ ɾ$16ଆͰ͸ɺ্هΛສY/ճ ɾ(16ଆͰ͸ສεϨουY/ճ LFSOFMWPJEBEE"OE4VCUSBDU DPOTUEFWJDFqPBU JOQVU%BUB<<CV⒎FS

     >>  EFWJDFqPBU PVUQVU%BUB<<CV⒎FS  >>  VJOUJE<<UISFBE@QPTJUJPO@JO@HSJE>>  \ qPBUSFTVMUJOQVU%BUB<JE> GPS VJOUJJ/J \ SFTVMU G SFTVMUG ^ PVUQVU%BUB<JE>SFTVMU ^
  34. Experiment: CPU vs GPUͷ݁Ռ ഒఔ౓

  35. Experiment: CPU vs GPUͷ݁Ռʢର਺ʣ $16(16ؒͷ΍ΓͱΓΛ࠷খݶʹ͢Δ͜ͱ͕େࣄ

  36. 4ষ. MetalʹΑΔAIͷ࣮૷ wχϡʔϥϧωοτϫʔΫόοΫϓϩύήʔγϣϯ wਓ޻ੜ໋ͷ࣮૷ w܈஌ೳͷ࣮૷

  37. ݁߹ՙॏͷमਖ਼ྔΛ౷߹͠ɺ৽ͨͳ݁߹ՙॏͱ͢Δ (16 $16 JE ਖ਼ղ஋ ͱͷޡࠩ JE ʜ JE QPTJUJPO

    QPTJUJPO QPTJUJPO ਖ਼ղ஋ ͱͷޡࠩ ਖ਼ղ஋ ͱͷޡࠩ Demo: MetalʹΑΔػցֶशͷྫ
  38. ʢ6**NBHF7JFXͷαϒΫϥεʣ 7JFX$POUSPMMFSTXJGU .FUBM.BOBHFSTXJGU 4IBEFSNFUBM Demo: MetalʹΑΔػցֶशͷྫ

  39. Demo: MetalʹΑΔػցֶशͷྫ

  40. Demo: MetalͰ࣮૷͢Δਓ޻ੜ໋ -ઢ஬ͷίωΫτίʔϜ $ɾΤϨΨϯε8JLJQFEJB $ɾΤϨΨϯε8JLJQFEJB ઢ஬ͷҰछɺ$ΤϨΨϯε ମࡉ๔ݸͷ͏ͪɺ໿ݸ͕ਆܦࡉ๔ ਆܦࡉ๔ͷ઀ଓঢ়ଶΛදͨ͠஍ਤʢίωΫτίʔϜʣ

  41. Demo: MetalͰ࣮૷͢Δਓ޻ੜ໋ -֓೦ B ೏͍ͷ෼෍ ײ֮ثͷҐஔ C D E F

    ೖྗ1 = a - b ೖྗ2 = c - d ೖྗ3 = e ଎౓ <  >ͷχϡʔϥϧωοτϫʔΫ ೖྗ1 ೖྗ2 ೖྗ3 ਐߦ֯౓ͷ
 मਖ਼ྔ རಘ རಘײ৘
  42. Demo: MetalͰ࣮૷͢Δਓ޻ੜ໋

  43. Demo: ܈஌ೳ ਓ޻஌ೳͷҰछɺूஂͱͯ͠ߴ౓ͳৼΔ෣͍

  44. Demo: ܈஌ೳ -܈Εͷ3ͭͷϧʔϧ B౳ڑ཭֤ݸମ͕౳ڑ཭ΛอͭΑ͏ʹಈ͘ Cฒߦ֤ݸମ͕ଞͷݸମͱಉ͡޲͖ʹͳΔΑ͏ʹಈ͘ D౳଎֤ݸମ͸ଞͷݸମͱಉ͡଎౓ʹͳΔΑ͏ʹಈ͘

  45. Demo: ܈஌ೳ -਺ࣜԽ B౳ڑ཭ Cฒߦ D౳଎౓

  46. Demo: ܈஌ೳ -γΣʔμʔͷίʔυ LFSOFMWPJENPWF ʜ GPS VJOUJJOPEF$PVOUJ \ ʜ ౳ڑ཭

    qPBUBUUSBDUJPOFYQ C  EJTUBODFB EJTUBODFB  qPBUSFQVMTJPOFYQ C EJTUBODF EJTUBODF  E"OHMF BMQIB  OFBS"OHMF BUUSBDUJPO GBS"OHMF SFQVMTJPO JOUFSWBM ฒߦ qPBUQBSBMMFM"OHMF%JGHFU3BOHFE"OHMF OPEFBOHMFDVSSFOU/PEFBOHMF  E"OHMF CFUB QBSBMMFM"OHMF%JG FYQ C EJTUBODF EJTUBODF  JOUFSWBM ౳଎౓ qPBUOPEF7FMPDJUZTRSU OPEFWFMPDJUZ9 OPEFWFMPDJUZ9 OPEFWFMPDJUZ: OPEFWFMPDJUZ:  WFMPDJUZ HBNNB  OPEF7FMPDJUZWFMPDJUZ  FYQ C EJTUBODF EJTUBODF  ^
  47. Demo: ܈஌ೳ

  48. ·ͱΊ "*༻ͷϑϨʔϜϫʔΫͷॆ࣮ ˠ୺຤ଆͰಈ࡞͢Δ"*ͷଘࡏײͷ޲্ J04ͱਓ޻஌ೳʢ"*ʣʹ͍ͭͯ .FUBMʹΑΔ(16ฒྻԋࢉ ˠ"*ʹඞཁͳ๲େͳϦιʔεΛఏڙ
 ˠࣗ༝ʹਓ޻஌ೳΛߏஙͰ͖Δ J04ΞϓϦʹɺ஌ੑ͕॓Γͭͭ͋Δ

  49. ͝੩ௌɺ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ

  50. ৞ΈࠐΈχϡʔϥϧωοτϫʔΫ ৞ΈࠐΈχϡʔϥϧωοτϫʔΫ ˠ$POWPMVUJPOBM/FVSBM/FUXPSL $//  ˠώτͷࢹਆܦٴͼࢹ֮໺Λ໛฿ ˠը૾಺ͷಛ௃Λநग़͠ɺ෺ମͷೝࣝΛߦ͏ $// ωί Πψ

    ΢αΪ ωζϛ ʜ
  51. %$("/ ˠ%FFQ$PWPMVUJPOBM(FOFSBUJWF"EWFSTBSJBM/FUXPSLT ˠآ࡞ऀɺؑఆऀͷͭͷχϡʔϥϧωοτϫʔΫ ˠ্ه͕૬ޓʹ੾᛭ୖຏ͢Δ͜ͱͰɺຊ෺Β͍͠ը૾͕ੜ੒͞ΕΔ ϥϯμϜͳσʔλ (FOFSBUPS آ࡞ऀ %JTDSJNJOBUPS ؑఆऀ ਅ࡞

    ؑఆऀ͕ ὃ͞ΕΔ آ࡞
  52. ࣮ԋ case1 IUUQTZPVUVCFD"60+XNF6" ЋЌ—Ѝ

  53. ࣮ԋ case2 IUUQTZPVUVCF(KES:&3:,7D ЋЌЍ