PyData.Okinawa Meetup #34 https://pydataokinawa.connpass.com/event/82009/
Introduction toGPU Programmingin Python2018.04.21 PyData.Okinawa #34@hoto17296
View Slide
@hoto17296• ͪΎΒσʔλגࣜձࣾ• σʔλੳϚϯ• JavaScript / Python / AWS• IPv6 ͕Θ͔Βͳ͍ࠓ͜ͷ͝Ζ
Ͳͷ͝Ոఉʹ͋Δ GPU Ϛγϯ
͍͜ͳͯ͠·͔͢ʁʁʁ
ࣗͷ GPU ͷΠϝʔδΛ͘ಈ͔ͤΔͭʂ
͍ͬͨͳ͍
GPU Λ͍ͨ͢ΊʹCUDA Λ৮ͬͯΈΑ͏
GPU ͱ• Graphics Processing Unit• άϥϑΟοΫॲཧͷͨΊͷϓϩηοα• ୯७ͳॲཧΛฒྻԋࢉͰ͖Δ• άϥϑΟοΫҎ֎ʹ׆༻͞ΕΔ (GPGPU)• σΟʔϓϥʔχϯάͱ͔
(NVIDIA) GPU ͷதετϦʔϛϯάϚϧνϓϩηοαଞʹϝϞϦͱ͔Ωϟογϡͱ͔৭ʑ͋Δ͚ͲলུCUDA ίΞ
CUDA ͱ• Compute Unified Device Architecture• NVIDIA GPU ΛͬͯฒྻܭࢉΛ͢ΔͨΊͷ ϓϩάϥϛϯάϞσϧ
CUDA ༻ޠ• ϗετͱσόΠε• CPU ଆΛϗετ, GPU ଆΛσόΠε ͱݺͿ• Χʔωϧؔ• GPU ଆͰ࣮ߦ͢ΔॲཧΛهड़ͨؔ͠
CUDA ϓϩάϥϛϯάϞσϧ• ฒྻ͕େʹͳΔ• εϨου, ϒϩοΫ, άϦου ͱ͍͏ ·ͱ·ΓͰฒྻॲཧΛߦ͏
ग़యɿ http://www.nvidia.co.jp/object/cuda_education_jp_old.html
CUDA ϓϩάϥϛϯάϞσϧ• ฒྻ = εϨου x ϒϩοΫ x άϦου• 1ϒϩοΫ͋ͨΓ࠷େ 512 εϨου• 1άϦου͋ͨΓ࠷େ 65536^2 ϒϩοΫ1GPU ͋ͨΓ࠷େ 2 ஹ ฒྻʂʂʂ ✌('ω'✌ )ࡾ✌('ω')✌ࡾ( ✌’ω')✌
CUDA ϓϩάϥϛϯάΓͨ͘ͳ͖ͬͯ·ͨ͠Ͷʁʁʁ
CUDA ϓϩάϥϛϯάͷํ๏• C Έ͍ͨͳݴޠͰΧʔωϧؔΛ࣮ͯ͠ nvcc ͱ͍͏ίϯύΠϥͰίϯύΠϧ͢Δ• μϧ͍• GPU Λར༻ͨ͠ฒྻॲཧΛॻ͍ͯΈ͍͕ͨ C ͕ॻ͖͍ͨΘ͚Ͱͳ͍• Python Ͱॻ͔ͤͯ͘Ε
Numba• JIT ίϯύΠϧͯ͠ Python ΛߴԽͰ͖Δͭ• GPU ར༻Ͱ͖Δ (Numba CUDA)
ΧʔωϧؔͷఆٛσίϨʔλΛࢦఆ͢Δ͜ͱͰΧʔωϧؔͱͯ͠ఆٛ ͜ͷΧʔωϧ͕ؔฒྻ࣮ߦ͞ΕΔݱࡏͲͷҐஔ (ʁ) ͷεϨουͰ ࣮ߦ͍ͯ͠Δ͔औಘͰ͖ΔεϨουͷҐஔใ͔Βॲཧ͢Δରཁૉͷ࠲ඪΛܭࢉ͢Δߦྻͷରཁૉʹରͯ͠ॲཧΛߦ͏
Χʔωϧؔͷ࣮ߦฒྻ (griddim, blockdim) Λࢦఆ͔ͯ͠Β࣮ߦ͢Δ
͏গ͠ෳࡶͳྫɿ ΈࠐΈԋࢉग़యɿ http://tecmemo.wpblog.jp/category/machine-learning/deep-learning/page/2/
ϥϓϥγΞϯϑΟϧλ• ΈࠐΈԋࢉͰը૾ͷΤοδݕग़Λߦ͏ख๏• ը૾ͷ৭ͷඍʹ૬͢Δ• ͜ͷߦྻΛϑΟϧλͱͯ͠ ΈࠐΈԋࢉΛߦ͏1 1 11 -8 11 1 1
ΈࠐΈԋࢉΛߦ͏ΧʔωϧؔΛ࣮
ೖྗը૾ ϑΟϧλ݁Ռ
·ͱΊ• Python Ͱ GPU ϓϩάϥϛϯάͰ͖Δ• GPU Ͱ༡Ϳͷͨͷ͍͠ ✌('ω'✌ )ࡾ✌('ω')✌ࡾ( ✌’ω')✌