日本最大のiOSカンファレンス、iOS2017での発表内容です。 デモに使用した動画は以下のリンクから視聴することができます。 https://twitter.com/yuky_az/status/910266701291315200 https://youtu.be/mRu4WkryeWs https://youtu.be/13qsJfwtdks https://youtu.be/evo7_GH-TtM
J04ͱਓೳ "*(16ฒྻԋࢉͷΈͱػցֶश:VLJOBHB"[VNB!ZVLZ@B[J04%$+BQBO
View Slide
ࣗݾհ:VLJOBHB"[VNB ʢզ࠺ʣΤϯδχΞ3%ϓϩάϥϛϯάߨࢣେֶͷݚڀһɺϝʔΧʔۈɺϓϩάϥϛϯάߨࢣɺϕϯνϟʔۈΛܦͯݱࡏϑϦʔϥϯε!ZVLZ@B[ΈΜͳͷ"*ߨ࠲ ࣮ફσʔλαΠΤϯεػցֶशXJUI1ZUIPO6EFNZͰडߨੜ͕ਓΛಥഁʂ͖ͳݴ༿5IFCFTUXBZUPQSFEJDUUIFGVUVSFJTUPJOWFOUJU
ൃදͷྲྀΕষਓೳ "*ͱষJ04ͷதͷ"*ষ.FUBMʹΑΔ(16ฒྻԋࢉ (1(16ষ.FUBMʹΑΔ"*ͷ࣮
1ষ. ਓೳʢAIʣͱwਓೳͷ֓ཁwػցֶशͱwχϡʔϥϧωοτϫʔΫͱw4XJGUͰ࣮͢ΔόοΫϓϩύήʔγϣϯ
ੜͷೳΛ฿͢Δٕज़ਓೳͱԿ͔ʁ
ڧ͍AIͱऑ͍AIڧ͍"*ˠੜʢಛʹώτʣͷೳʹഭΔ"*FHυϥ͑ΜɺమΞτϜɺ$10ͳͲऑ͍"*ˠݶఆతͳղܾਪFHνΣεকعͷ"*ɺը૾ೝࣝͳͲ
ਓೳͷ༻్ʢऑ͍AIʣը૾ॲཧˠମೝࣝɺը૾ੜ ԻɺձˠԻೝࣝɺձΤϯδϯจষͷೝࣝɺจষͷ࡞ˠνϟοτϩϘοτɺখઆͷࣥචػց੍ޚˠࣗಈӡసɺ࢈ۀ༻ϩϘοτ࡞ۂɺֆըͳͲͷΞʔτˠࣗಈ࡞ۂɺը෩ͷ฿FUDʜ
ਓೳͷछྨػցֶशˠίϯϐϡʔλ͕ܦݧɺֶशΛߦ͏ ҨతΞϧΰϦζϜˠੜͷҨࢠΛ฿ɺΞϧΰϦζϜ͕ಥવมҟٴͼަ͢Δ ܈ೳˠੜͷ܈ΕΛ฿ɺݸମͷू߹ମ͕ߴͳৼΔ͍ϑΝδΠ੍ޚɺΤΩεύʔτγεςϜɺFUDʜ
ػցֶशͱਓೳͷҰίϯϐϡʔλϓϩάϥϜ͕ܦݧɺֶशΛߦ͏γεςϜ
ػցֶशͷΞϧΰϦζϜαϙʔτϕΫλʔϚγϯˠฏ໘Λ܇࿅͠ྨΛߦ͏ڧԽֶशˠใु͕࠷ߴ͍ํ๏Λֶशܾఆˠࢬ͔ΕͰσʔλΛྨ χϡʔϥϧωοτϫʔΫˠͷਆܦࡉ๔ωοτϫʔΫΛ฿ Ξϯαϯϒϧֶशɺ,ۙ๏ɺFUDʜ
χϡʔϥϧωοτϫʔΫʹΑΔػցֶशϚεͷେ৽ൽ࣭ʹ͓͚Δਆܦࡉ๔*NBHF/SFUT$$CZTB/FVSPO8JLJQFEJBχϡʔϥϧωοτϫʔΫɺੜͷਆܦࡉ๔ωοτϫʔΫΛ฿
ਆܦࡉ๔ͷωοτϫʔΫग़ྗೖྗχϡʔϩϯथঢ়ಥىώτͷʹԯݸͷਆܦࡉ๔ஹݸͷ݁߹ʢγφϓεʣγφϓε࣠ࡧ
ਆܦࡉ๔ͷϞσϧԽೖྗೖྗೖྗɾɾɾɾɾɾग़ྗೖྗY݁߹ՙॏͷ߹ܭόΠΞεY݁߹ՙॏΛग़ྗʹม͢ΔؔχϡʔϩϯόΠΞε݁߹ՙॏ
χϡʔϥϧωοτϫʔΫೖྗೖྗग़ྗग़ྗχϡʔϩϯ
όοΫϓϩύήʔγϣϯʹΑΔֶशೖྗೖྗग़ྗग़ྗχϡʔϩϯೖྗதؒग़ྗਖ਼ղਖ਼ղޡࠩޡࠩ݁߹ՙॏͷमਖ਼݁߹ՙॏͷमਖ਼݁߹ՙॏͷमਖ਼݁߹ՙॏͷमਖ਼
σΟʔϓϥʔχϯάͱଟͰߏ͞ΕΔχϡʔϥϧωοτϫʔΫΛ༻͍ͨػցֶश
Demo: SwiftʹΑΔػցֶश࠷ٸ߱Լ๏ͷΞϧΰϦζϜʹΑΓޡࠩΛٯ͢Δ ߦ΄Ͳͷ4XJGUίʔυ ֤ͷχϡʔϩϯ< >ݸTJOؔΛਖ਼ղͱͯ͠όοΫϓϩύήʔγϣϯʹΑΓֶशχϡʔϥϧωοτϫʔΫޡࠩ8JLJQFEJB#BDLQSPQBHBUJPO݁߹ՙॏͷमਖ਼ྔʢБֶशʣˠग़ྗˠग़ྗҎ֎
Demo: SwiftʹΑΔػցֶश
2ষ. iOSͷதͷAIw$PSF.-w.14 .FUBM1FSGPSNBODF4IBEFSTw#//4 #BTJD/FVSBM/FUXPSL4VCSPVUJOFTw(BNFQMBZ,JU
Frameworkͷߏ$PSF.-:PVSBQQVision"DDFSBSBUFBOE#//4ϋʔυΣΞଆϢʔβʔଆ.FUBM1FSGPSNBODF4IBEFSTNatural Language Processing GameplayKitIUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPODPSFNM
Core MLˠ܇࿅ʢֶशʣࡁΈͷϞσϧΛΞϓϦʹಋೖ͢Δˠػցֶशͷ༧ଌʹಛԽˠओཁͳػցֶशπʔϧͷ܇࿅ࡁΈϞσϧΛ༻Մ ʢTDJLJUMFBSOɺ,FSBTɺ$BGFFɺFUDʜʣԠ༻ˠإೝࣝɺମೝࣝˠࣗવݴޠॲཧɺ༁ˠՁ֨ͳͲͷ༧ଌ
.14 .FUBM1FSGPSNBODF4IBEFSTˠ(16Λ༻͍ͨ.FUBMͷߴ͍ԋࢉػೳΛΞϓϦʹಋೖˠػցֶशͷ༧ଌʹಛԽˠΈࠐΈχϡʔϥϧωοτϫʔΫͷ"1*ʢ.14$//ʣ ˠ$PSF.-ΑΓίʔυ͕ෳࡶ "QQMFͷαϯϓϧίʔυˠ.14$//)FMMP8PSMEʢจࣈೝࣝʣˠ.FUBM*NBHF3FDPHOJUJPOʢը૾ೝࣝʣˠ.FUBM*NBHF'JMUFSTʢը૾ϑΟϧλʣ
#//4 #BTJD/FVSBM/FUXPSL4VCSPVUJOFTˠܭࢉॲཧશൠΛѻ͏"DDFMFSBUFʹؚ·ΕΔ ˠ$16ͷੑೳΛϑϧʹҾ͖ग़ͯ͠ԋࢉΛߦ͏ˠػցֶशͷ༧ଌʹಛԽ ˠΈࠐΈχϡʔϥϧωοτϫʔΫΛαϙʔτ
ˠήʔϜͷϩδοΫΛߏங͢ΔͨΊͷϑϨʔϜϫʔΫˠ$PSF.-ΛϕʔεʹɺఢΩϟϥͳͲͷಈ͖ʹɹֶशࡁΈͷܾఆͳͲΛ༻ՄˠϛχϚοΫε๏ʹΑΔରઓ૬खͷ"*ˠ"HFOUT (PBMT BOE#FIBWJPSTʹΑΔɹࣗతʹಈ͘ΦϒδΣΫτ(BNFQMBZ,JU
"#JPOJDνοϓͷొˠඵ࠷େ ԯͷԋࢉॲཧˠχϡʔϥϧΤϯδϯʹΑΔػցֶशΞϧΰϦζϜͷߴԽ ˠ"QQMFಠࣗઃܭͷ(16 ϑϨʔϜϫʔΫˍϋʔυΣΞͱʹɺଆͷ"*ڥ͕͏
3ষ. MetalʹΑΔGPUฒྻԋࢉ (GPGPU)w(16ฒྻԋࢉͱw.FUBMͷొਓwύϑΥʔϚϯεͷଌఆ
GPUฒྻԋࢉʢGPGPUʣͱGPUͷԋࢉϦιʔεΛը૾ॲཧҎ֎ʹར༻$16 (16
.FUBMͱ0QFO(-ͱ0QFO$-ʹࣅͨػೳΛҰͭͷ"1*ʹ౷߹$16ͱ(16ͷγʔϜϨεͳ࿈ܞ
CPUͱGPUͷ࿈ܞEFWFMPQFSBQQMFDPNNFUBM
Metal CPUଆͷొਓ 1.5-%FWJDF୯Ұͷ(16ͷΠϯλʔϑΣΠε.FUBMؔ࿈ͷ"1*ଟ͕͘ϓϩτίϧͰهࡌEFWJDF.5-$SFBUF4ZTUFN%FGBVMU%FWJDF QSJOUEFWJDFOBNF"QQMF"(16
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ˠ্هͷΩϡʔɺίϚϯυͷ࣮ߦॱΛཧ
Metal Shading LanguageJODMVEFNFUBM@TUEMJCVTJOHOBNFTQBDFNFUBMLFSOFMWPJEBEE0OF DPOTUEFWJDFqPBUJOQVU%BUB<<CV⒎FS >> EFWJDFqPBUPVUQVU%BUB<<CV⒎FS >> VJOUJE<<UISFBE@QPTJUJPO@JO@HSJE>>\qPBUSFTVMUJOQVU%BUBSFTVMUGPVUQVU%BUBSFTVMU^֤εϨου͝ͱʹ࣮ߦ͞ΕΔ
Experiment: GPU vs CPUɾೖྗʹΛͯ͠Ҿ͘Λ܁Γฦ͢ɾ$16ଆͰɺ্هΛສY/ճɾ(16ଆͰສεϨουY/ճLFSOFMWPJEBEE"OE4VCUSBDU DPOTUEFWJDFqPBUJOQVU%BUB<<CV⒎FS >> EFWJDFqPBUPVUQVU%BUB<<CV⒎FS >> VJOUJE<<UISFBE@QPTJUJPO@JO@HSJE>>\qPBUSFTVMUJOQVU%BUBGPS VJOUJJ/J\SFTVMUGSFTVMUG^PVUQVU%BUBSFTVMU^
Experiment: CPU vs GPUͷ݁Ռഒఔ
Experiment: CPU vs GPUͷ݁Ռʢରʣ$16(16ؒͷΓͱΓΛ࠷খݶʹ͢Δ͜ͱ͕େࣄ
4ষ. MetalʹΑΔAIͷ࣮wχϡʔϥϧωοτϫʔΫόοΫϓϩύήʔγϣϯwਓੜ໋ͷ࣮w܈ೳͷ࣮
݁߹ՙॏͷमਖ਼ྔΛ౷߹͠ɺ৽ͨͳ݁߹ՙॏͱ͢Δ(16$16JEਖ਼ղͱͷޡࠩJEʜJEQPTJUJPO QPTJUJPO QPTJUJPOਖ਼ղͱͷޡࠩਖ਼ղͱͷޡࠩDemo: MetalʹΑΔػցֶशͷྫ
ʢ6**NBHF7JFXͷαϒΫϥεʣ7JFX$POUSPMMFSTXJGU.FUBM.BOBHFSTXJGU 4IBEFSNFUBMDemo: MetalʹΑΔػցֶशͷྫ
Demo: MetalʹΑΔػցֶशͷྫ
Demo: MetalͰ࣮͢Δਓੜ໋ -ઢͷίωΫτίʔϜ$ɾΤϨΨϯε8JLJQFEJB$ɾΤϨΨϯε8JLJQFEJBઢͷҰछɺ$ΤϨΨϯεମࡉ๔ݸͷ͏ͪɺݸ͕ਆܦࡉ๔ਆܦࡉ๔ͷଓঢ়ଶΛදͨ͠ਤʢίωΫτίʔϜʣ
Demo: MetalͰ࣮͢Δਓੜ໋ -֓೦B͍ͷײ֮ثͷҐஔCDEFೖྗ1 = a - bೖྗ2 = c - dೖྗ3 = e< >ͷχϡʔϥϧωοτϫʔΫೖྗ1 ೖྗ2 ೖྗ3ਐߦ֯ͷ मਖ਼ྔརಘ རಘײ
Demo: MetalͰ࣮͢Δਓੜ໋
Demo: ܈ೳਓೳͷҰछɺूஂͱͯ͠ߴͳৼΔ͍
Demo: ܈ೳ -܈Εͷ3ͭͷϧʔϧBڑ֤ݸମ͕ڑΛอͭΑ͏ʹಈ͘Cฒߦ֤ݸମ͕ଞͷݸମͱಉ͖͡ʹͳΔΑ͏ʹಈ͘D֤ݸମଞͷݸମͱಉ͡ʹͳΔΑ͏ʹಈ͘
Demo: ܈ೳ -ࣜԽBڑCฒߦD
Demo: ܈ೳ -γΣʔμʔͷίʔυLFSOFMWPJENPWF ʜGPS VJOUJJOPEF$PVOUJ\ʜڑqPBUBUUSBDUJPOFYQ C EJTUBODFB EJTUBODFBqPBUSFQVMTJPOFYQ CEJTUBODFEJTUBODFE"OHMFBMQIB OFBS"OHMFBUUSBDUJPOGBS"OHMFSFQVMTJPOJOUFSWBMฒߦqPBUQBSBMMFM"OHMF%JGHFU3BOHFE"OHMF OPEFBOHMFDVSSFOU/PEFBOHMFE"OHMFCFUBQBSBMMFM"OHMF%JGFYQ CEJTUBODFEJTUBODFJOUFSWBMqPBUOPEF7FMPDJUZTRSU OPEFWFMPDJUZ9OPEFWFMPDJUZ9OPEFWFMPDJUZ:OPEFWFMPDJUZ:WFMPDJUZHBNNB OPEF7FMPDJUZWFMPDJUZFYQ CEJTUBODFEJTUBODF^
Demo: ܈ೳ
·ͱΊ"*༻ͷϑϨʔϜϫʔΫͷॆ࣮ˠଆͰಈ࡞͢Δ"*ͷଘࡏײͷ্J04ͱਓೳʢ"*ʣʹ͍ͭͯ.FUBMʹΑΔ(16ฒྻԋࢉˠ"*ʹඞཁͳେͳϦιʔεΛఏڙ ˠࣗ༝ʹਓೳΛߏஙͰ͖ΔJ04ΞϓϦʹɺੑ͕॓Γͭͭ͋Δ
͝੩ௌɺ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ
ΈࠐΈχϡʔϥϧωοτϫʔΫΈࠐΈχϡʔϥϧωοτϫʔΫˠ$POWPMVUJPOBM/FVSBM/FUXPSL $//ˠώτͷࢹਆܦٴͼࢹ֮Λ฿ˠը૾ͷಛΛநग़͠ɺମͷೝࣝΛߦ͏$//ωίΠψαΪωζϛʜ
%$("/ˠ%FFQ$PWPMVUJPOBM(FOFSBUJWF"EWFSTBSJBM/FUXPSLTˠآ࡞ऀɺؑఆऀͷͭͷχϡʔϥϧωοτϫʔΫˠ্ه͕૬ޓʹ᛭ୖຏ͢Δ͜ͱͰɺຊΒ͍͠ը૾͕ੜ͞ΕΔϥϯμϜͳσʔλ(FOFSBUPSآ࡞ऀ%JTDSJNJOBUPSؑఆऀਅ࡞ؑఆऀ͕ὃ͞ΕΔآ࡞
࣮ԋ case1IUUQTZPVUVCFD"60+XNF6"ЋЌЍ
࣮ԋ case2IUUQTZPVUVCF(KES:&3:,7DЋЌЍ