Path: blob/master/site/ko/guide/gpu_performance_analysis.md
25115 views
TensorFlow Profiler๋ก TensorFlow GPU ์ฑ๋ฅ ์ต์ ํ
Overview
์ด ๊ฐ์ด๋์์๋ TensorBoard์ ํจ๊ป TensorFlow Profiler๋ฅผ ์ฌ์ฉํ์ฌ GPU์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ป๊ณ ์ต๋ ์ฑ๋ฅ์ ์ป๊ณ , ํ๋ ์ด์์ GPU๊ฐ ์ถฉ๋ถํ ํ์ฉ๋์ง ์์ ๋ ๋๋ฒ๊ทธํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
ํ๋กํ์ผ๋ฌ๋ฅผ ์ฒ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ:
TensorFlow Profiler: Keras ์์ ๋ฐ TensorBoard๊ฐ ํฌํจ๋ ํ๋กํ ๋ชจ๋ธ ์ฑ๋ฅ ๋ ธํธ๋ถ์ผ๋ก ์์ํ์ธ์.
ํ๋กํ์ผ๋ฌ ๊ฐ์ด๋๋ฅผ ์ฌ์ฉํ์ฌ TensorFlow ์ฑ๋ฅ ์ต์ ํ ๋ฅผ ํตํด ํธ์คํธ(CPU)์์ TensorFlow ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ค์ํ ํ๋กํ์ผ๋ง ๋๊ตฌ ๋ฐ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์ธ์.
GPU๋ก ๊ณ์ฐ์ ์คํ๋ก๋ฉํ๋ ๊ฒ์ด ํนํ ์์ ๋ชจ๋ธ์ ๊ฒฝ์ฐ ํญ์ ์ ์ตํ ๊ฒ์ ์๋๋ผ๋ ์ ์ ์ผ๋์ ๋์ญ์์ค. ๋ค์์ผ๋ก ์ธํด ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
ํธ์คํธ(CPU)์ ์ฅ์น(GPU) ๊ฐ์ ๋ฐ์ดํฐ ์ ์ก ๊ทธ๋ฆฌ๊ณ
ํธ์คํธ๊ฐ GPU ์ปค๋์ ์์ํ ๋ ๊ด๋ จ๋ ๋๊ธฐ ์๊ฐ์ผ๋ก ์ธํด.
์ฑ๋ฅ ์ต์ ํ ์ํฌํ๋ก
์ด ๊ฐ์ด๋์์๋ ๋จ์ผ GPU์์ ์์ํ์ฌ ์ฌ๋ฌ GPU๊ฐ ์๋ ๋จ์ผ ํธ์คํธ๋ก ์ด๋ํ๋ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๋๋ฒ๊ทธํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋ตํ๊ฒ ์ค๋ช ํฉ๋๋ค.
๋ค์ ์์๋ก ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๋๋ฒ๊ทธํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
ํ๋์ GPU์์ ์ฑ๋ฅ ์ต์ ํ ๋ฐ ๋๋ฒ๊ทธ:
์ ๋ ฅ ํ์ดํ๋ผ์ธ์ด ๋ณ๋ชฉ ์ํ์ธ์ง ํ์ธํฉ๋๋ค.
ํ GPU์ ์ฑ๋ฅ์ ๋๋ฒ๊ทธํฉ๋๋ค.
ํผํฉ ์ ๋ฐ๋(
fp16
(float16) ์ฌ์ฉ)๋ฅผ ํ์ฑํํ๊ณ ์ ํ์ ์ผ๋ก XLA๋ฅผ ํ์ฑํํฉ๋๋ค.
๋ค์ค GPU ๋จ์ผ ํธ์คํธ์์ ์ฑ๋ฅ์ ์ต์ ํํ๊ณ ๋๋ฒ๊ทธํฉ๋๋ค.
์๋ฅผ ๋ค์ด TensorFlow ๋ฐฐํฌ ์ ๋ต ์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ GPU๊ฐ ์๋ ๋จ์ผ ํธ์คํธ์์ ๋ชจ๋ธ์ ํ๋ จํ๊ณ ์ต์ ์ด ์๋ GPU ์ฌ์ฉ๋ฅ ์ ํ์ธํ ๊ฒฝ์ฐ ๋ค์ค GPU ์์คํ ์ ๋๋ฒ๊น ํ๊ธฐ ์ ์ ๋จผ์ ํ๋์ GPU์ ๋ํ ์ฑ๋ฅ์ ์ต์ ํํ๊ณ ๋๋ฒ๊ทธํด์ผ ํฉ๋๋ค.
GPU์์ ๊ณ ์ฑ๋ฅ ์ฝ๋๋ฅผ ์ป๊ธฐ ์ํ ๊ธฐ์ค์ผ๋ก ์ด ๊ฐ์ด๋์์๋ ์ด๋ฏธ tf.function
์ ์ฌ์ฉํ๊ณ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. Keras Model.compile
๋ฐ Model.fit
API๋ ๋ด๋ถ์์ tf.function
์ ์๋์ผ๋ก ํ์ฉํฉ๋๋ค. tf.GradientTape
๋ก ์ฌ์ฉ์ ์ ์ ํ๋ จ ๋ฃจํ๋ฅผ ์์ฑํ ๋ tf.function
์ ํ์ฑํํ๋ ๋ฐฉ๋ฒ์ tf.function์ผ๋ก ์ฑ๋ฅ ํฅ์ํ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ค์ ์น์ ์์๋ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ์์ ํ๋ ๋ฐ ๋์์ด ๋๋๋ก ์์ ๊ฐ ์๋๋ฆฌ์ค์ ๋ํด ์ ์๋ ์ ๊ทผ ๋ฐฉ์์ ๋ํด ์ค๋ช ํฉ๋๋ค.
1. ํ๋์ GPU์์ ์ฑ๋ฅ ์ต์ ํ
์ด์์ ์ธ ๊ฒฝ์ฐ ํ๋ก๊ทธ๋จ์ GPU ์ฌ์ฉ๋ฅ ์ด ๋๊ณ CPU(ํธ์คํธ)์ GPU(์ฅ์น) ๊ฐ์ ํต์ ์ด ์ต์ํ๋์ด์ผ ํ๋ฉฐ ์ ๋ ฅ ํ์ดํ๋ผ์ธ์ ์ค๋ฒํค๋๊ฐ ์์ด์ผ ํฉ๋๋ค.
์ฑ๋ฅ ๋ถ์์ ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ํ๋์ GPU๋ก ์คํ๋๋ ๋ชจ๋ธ์ ํ๋กํ์ ์ป๋ ๊ฒ์ ๋๋ค.
TensorBoard์ Profiler ๊ฐ์ ํ์ด์ง( ํ๋กํ ์คํ ์ค์ ๋ชจ๋ธ์ด ์ด๋ป๊ฒ ์ํ๋์๋์ง์ ๋ํ ์ต์์ ๋ณด๊ธฐ๋ฅผ ๋ณด์ฌ์ค)๋ ํ๋ก๊ทธ๋จ์ด ์ด์์ ์ธ ์๋๋ฆฌ์ค์์ ์ผ๋ง๋ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์๋์ง์ ๋ํ ์์ด๋์ด๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
๊ฐ์ ํ์ด์ง์ ์ฃผ์ํด์ผ ํ ์ฃผ์ ๋ฒํธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ค์ ์ฅ์น ์คํ์์ ์ผ๋ง๋ ๋ง์ ๋จ๊ณ ์๊ฐ์ด ์์๋๋์ง
์ฅ์น ๋ ํธ์คํธ์ ๋ฐฐ์น๋ ์์ ์ ๋น์จ
์ผ๋ง๋ ๋ง์ ์ปค๋์ด
fp16
์ต์ ์ ์ฑ๋ฅ์ ๋ฌ์ฑํ๋ค๋ ๊ฒ์ ์ธ ๊ฐ์ง ๊ฒฝ์ฐ ๋ชจ๋์์ ์ด๋ฌํ ์์น๋ฅผ ์ต๋ํํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ํ๋ก๊ทธ๋จ์ ์ฌ์ธต์ ์ผ๋ก ์ดํดํ๋ ค๋ฉด TensorBoard์ Profiler ์ถ์ ๋ทฐ์ด์ ์ต์ํด์ผ ํฉ๋๋ค. ์๋ ์น์ ์์๋ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ง๋จํ ๋ ์ฐพ์์ผ ํ๋ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ์ถ์ ๋ทฐ์ด ํจํด์ ๋ณด์ฌ์ค๋๋ค.
์๋๋ ํ๋์ GPU์์ ์คํ๋๋ ๋ชจ๋ธ ์ถ์ ๋ณด๊ธฐ์ ์ด๋ฏธ์ง์ ๋๋ค. TensorFlow Name Scope ๋ฐ TensorFlow Ops ์น์ ์์ ์ ๋ฐฉํฅ ํต๊ณผ, ์์ค ํจ์, ์ญ๋ฐฉํฅ ํต๊ณผ/๊ธฐ์ธ๊ธฐ ๊ณ์ฐ, ์ต์ ํ๊ธฐ ๊ฐ์ค์น ์ ๋ฐ์ดํธ์ ๊ฐ์ ๋ชจ๋ธ์ ๋ค์ํ ๋ถ๋ถ์ ์๋ณํ ์ ์์ต๋๋ค. CUDA ์คํธ๋ฆผ์ ์ฐธ์กฐํ๋ ๊ฐ Stream ์์ GPU์์ ์์ ์ ์คํํ ์๋ ์์ต๋๋ค. ๊ฐ ์คํธ๋ฆผ์ ํน์ ์์ ์ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ์ถ์ ์์ Stream#118 ์ ์ปดํจํ ์ปค๋ ๋ฐ ์ฅ์น ๊ฐ ๋ณต์ฌ๋ฅผ ์์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. Stream#119 ๋ ํธ์คํธ ๋ ์ฅ์น ๋ณต์ฌ์ ์ฌ์ฉ๋๋ฉฐ Stream#120 ์ ์ฅ์น ๋ ํธ์คํธ ๋ณต์ฌ์ ์ฌ์ฉ๋ฉ๋๋ค.
์๋ ์ถ์ ์ ์ฑ๋ฅ ๋ชจ๋ธ์ ์ผ๋ฐ์ ์ธ ํน์ฑ์ ๋ณด์ฌ์ค๋๋ค.
์๋ฅผ ๋ค์ด GPU ์ปดํจํ ํ์๋ผ์ธ( Stream#118 )์ ๊ฐ๊ฒฉ์ด ๊ฑฐ์ ์๋ "๋ฐ์" ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ํธ์คํธ์์ ์ฅ์น๋ก( Stream #119 ) ๋ฐ ์ฅ์น์์ ํธ์คํธ๋ก( Stream #120 ) ์ต์ํ์ ๋ณต์ฌ๋ณธ์ด ์์ผ๋ฉฐ ๋จ๊ณ ๊ฐ์ ๊ฐ๊ฒฉ๋ ์ต์ํ๋ฉ๋๋ค. ํ๋ก๊ทธ๋จ์ ๋ํด ํ๋กํ์ผ๋ฌ๋ฅผ ์คํํ ๋ ์ถ์ ๋ณด๊ธฐ์์ ์ด๋ฌํ ์ด์์ ์ธ ํน์ฑ์ ์๋ณํ์ง ๋ชปํ ์ ์์ต๋๋ค. ์ด ๊ฐ์ด๋์ ๋๋จธ์ง ๋ถ๋ถ์์๋ ์ผ๋ฐ์ ์ธ ์๋๋ฆฌ์ค์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ค๋ฃน๋๋ค.
1. ์ ๋ ฅ ํ์ดํ๋ผ์ธ ๋๋ฒ๊ทธ
GPU ์ฑ๋ฅ ๋๋ฒ๊น ์ ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ํ๋ก๊ทธ๋จ์ด ์ ๋ ฅ ๋ฐ์ธ๋ฉ๋์ด ์๋์ง ํ์ธํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ํ์ ํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ ๋ ฅ ํ์ดํ๋ผ์ธ์ ์์๋ ์๊ฐ์ ๋ํ ๊ฐ์๋ฅผ ์ ๊ณตํ๋ TensorBoard ์์ Profiler์ ์ ๋ ฅ ํ์ดํ๋ผ์ธ ๋ถ์๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
์ ๋ ฅ ํ์ดํ๋ผ์ธ์ด ๋จ๊ณ ์๊ฐ์ ํฌ๊ฒ ๊ธฐ์ฌํ๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ์ ์ฌ์ ์กฐ์น๋ฅผ ์ทจํ ์ ์์ต๋๋ค.
tf.data
๊ด๋ จ ๊ฐ์ด๋ ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฅ ํ์ดํ๋ผ์ธ์ ๋๋ฒ๊ทธํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ธ ์ ์์ต๋๋ค.์ ๋ ฅ ํ์ดํ๋ผ์ธ์ด ๋ณ๋ชฉ ํ์์ธ์ง ํ์ธํ๋ ๋ ๋ค๋ฅธ ๋น ๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ ์ฒ๋ฆฌ๊ฐ ํ์ํ์ง ์์ ๋ฌด์์๋ก ์์ฑ๋ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ๋ค์์ ResNet ๋ชจ๋ธ์ ์ด ๊ธฐ์ ์ ์ฌ์ฉํ๋ ์์ ๋๋ค. ์ ๋ ฅ ํ์ดํ๋ผ์ธ์ด ์ต์ ์ธ ๊ฒฝ์ฐ ์ค์ ๋ฐ์ดํฐ์ ์์ฑ๋ ์์/ํฉ์ฑ ๋ฐ์ดํฐ์์ ์ ์ฌํ ์ฑ๋ฅ์ ๊ฒฝํํด์ผ ํฉ๋๋ค. ํฉ์ฑ ๋ฐ์ดํฐ ๊ฒฝ์ฐ์ ์ ์ผํ ์ค๋ฒํค๋๋ ๋ค์ ํ๋ฆฌํ์น ๋ฐ ์ต์ ํํ ์ ์๋ ์ ๋ ฅ ๋ฐ์ดํฐ ๋ณต์ฌ๋ก ์ธํ ๊ฒ์ ๋๋ค.
๋ํ ์ ๋ ฅ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ ์ต์ ํ๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
2. ํ๋์ GPU ์ฑ๋ฅ ๋๋ฒ๊ทธ
GPU ์ฌ์ฉ๋ฅ ์ ๋ฎ์ถ๋ ๋ฐ ๊ธฐ์ฌํ ์ ์๋ ๋ช ๊ฐ์ง ์์ธ์ด ์์ต๋๋ค. ๋ค์์ ์ถ์ ๋ทฐ์ด ๋ฐ ์ ์ฌ์ ์๋ฃจ์ ์ ๋ณผ ๋ ์ผ๋ฐ์ ์ผ๋ก ๊ด์ฐฐ๋๋ ๋ช ๊ฐ์ง ์๋๋ฆฌ์ค์ ๋๋ค.
1. ๋จ๊ณ ๊ฐ ๊ฒฉ์ฐจ ๋ถ์
ํ๋ก๊ทธ๋จ์ด ์ต์ ์ผ๋ก ์คํ๋์ง ์์ ๋ ์ผ๋ฐ์ ์ผ๋ก ๊ด์ฐฐ๋๋ ๊ฒ์ ํ๋ จ ๋จ๊ณ ์ฌ์ด์ ๊ฐ๊ฒฉ์ ๋๋ค. ์๋์ ํธ๋ ์ด์ค ๋ณด๊ธฐ ์ด๋ฏธ์ง์์ 8๋จ๊ณ์ 9๋จ๊ณ ์ฌ์ด์ ํฐ ๊ฐ๊ฒฉ์ด ์์ต๋๋ค. ์ด๋ ํด๋น ์๊ฐ ๋์ GPU๊ฐ ์ ํด ์ํ์์ ์๋ฏธํฉ๋๋ค.
์ถ์ ๋ทฐ์ด์์ ๋จ๊ณ ์ฌ์ด์ ํฐ ๊ฐ๊ฒฉ์ด ํ์๋๋ฉด ํ๋ก๊ทธ๋จ์ด ์ ๋ ฅ ๋ฐ์ธ๋ฉ๋์์์ ๋ํ๋ผ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์์ง ์ํํ์ง ์์ ๊ฒฝ์ฐ ์ ๋ ฅ ํ์ดํ๋ผ์ธ ๋๋ฒ๊น ์ ๋ํ ์ด์ ์น์ ์ ์ฐธ์กฐํด์ผ ํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ต์ ํ๋ ์
๋ ฅ ํ์ดํ๋ผ์ธ์ ์ฌ์ฉํ๋๋ผ๋ CPU ์ค๋ ๋ ๊ฒฝํฉ์ผ๋ก ์ธํด ํ ๋จ๊ณ์ ๋๊ณผ ๋ค๋ฅธ ๋จ๊ณ์ ์์ ์ฌ์ด์ ์ฌ์ ํ ๊ฐ๊ฒฉ์ด ์์ ์ ์์ต๋๋ค. tf.data
๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ ํ์ดํ๋ผ์ธ ์ฒ๋ฆฌ๋ฅผ ๋ณ๋ ฌํํฉ๋๋ค. ์ด๋ฌํ ์ค๋ ๋๋ ๋ฐ์ดํฐ ๋ณต์ฌ ๋๋ GPU ์์
์์ฝ๊ณผ ๊ฐ์ด ๊ฐ ๋จ๊ณ ์์ ์ ๋ฐ์ํ๋ GPU ํธ์คํธ ์ธก ํ๋์ ๋ฐฉํดํ ์ ์์ต๋๋ค.
GPU์์ ์ด๋ฌํ ์์
์ ์์ฝํ๋ ํธ์คํธ ์ธก์์ ํฐ ๊ฐ๊ฒฉ์ ๋ฐ๊ฒฌํ๋ฉด ํ๊ฒฝ ๋ณ์ TF_GPU_THREAD_MODE=gpu_private
์ค์ ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด GPU ์ปค๋์ด ์์ฒด ์ ์ฉ ์ค๋ ๋์์ ์์๋๊ณ tf.data
์์
๋ค์ ๋๊ธฐํ์ง ์์ต๋๋ค.
๋จ๊ณ ์ฌ์ด์ ๊ฐ๊ฒฉ์ ๋ฉํธ๋ฆญ ๊ณ์ฐ, Keras ์ฝ๋ฐฑ ๋๋ ํธ์คํธ์์ ์คํ๋๋ tf.function
์ด๋ฌํ ์์
์ TensorFlow ๊ทธ๋ํ ๋ด๋ถ์ ์์
๋งํผ ์ฑ๋ฅ์ด ์ข์ง ์์ต๋๋ค. ๋ํ ์ด๋ฌํ ์์
์ค ์ผ๋ถ๋ CPU์์ ์คํ๋๊ณ GPU์์ ์๋ค๋ก ํ
์๋ฅผ ๋ณต์ฌํฉ๋๋ค.
์
๋ ฅ ํ์ดํ๋ผ์ธ์ ์ต์ ํํ ์ดํ์๋ ์ถ์ ๋ทฐ์ด์์ ๋จ๊ณ ์ฌ์ด์ ๊ฐ๊ฒฉ์ด ๊ณ์ ๋ณด์ด๋ฉด ๋จ๊ณ ์ฌ์ด์ ๋ชจ๋ธ ์ฝ๋๋ฅผ ์ดํด๋ณด๊ณ ์ฝ๋ฐฑ/๋ฉํธ๋ฆญ์ ๋นํ์ฑํํ ๊ฒฝ์ฐ ์ฑ๋ฅ์ด ํฅ์๋๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ์ฐ์ฐ์ ์ผ๋ถ ์ธ๋ถ ์ ๋ณด๋ ์ถ์ ๋ทฐ์ด(์ฅ์น ๋ฐ ํธ์คํธ ์ธก ๋ชจ๋)์๋ ์์ต๋๋ค. ์ด ์๋๋ฆฌ์ค์์๋ ๋ชจ๋ ๋จ๊ณ๋ง๋ค ์คํํ๋ ๊ฒ๋ณด๋ค๋ ๊ณ ์ ๋ ์์ ๋จ๊ณ ์ดํ์ ์คํํ๋ฉฐ ์ฐ์ฐ์ ์ค๋ฒํค๋๋ฅผ ๋ถํ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. tf.keras
API์์ Model.compile
๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋ steps_per_execution
ํ๋๊ทธ๋ฅผ ์ค์ ํ๋ฉด ์ด ์์
์ ์๋์ผ๋ก ์ํํฉ๋๋ค. ์ฌ์ฉ์ ์ ์ ํ๋ จ ๋ฃจํ์๋ tf.while_loop
๋ฅผ ์ฌ์ฉํ์ธ์.
2. ๋ ๋์ ์ฅ์น ํ์ฉ๋ ๋ฌ์ฑ
1. ์์ GPU ์ปค๋ ๋ฐ ํธ์คํธ ์ปค๋ ์คํ ์ง์ฐ
ํธ์คํธ๋ GPU์์ ์คํํ ์ปค๋์ ๋๊ธฐ์ด์ ๋ฃ์ง๋ง ์ปค๋์ด ์ค์ ๋ก GPU์์ ์คํ๋๊ธฐ ์ ์ ๊ด๋ จ๋ ์ง์ฐ ์๊ฐ(์ฝ 20-40ฮผs)์ด ์์ต๋๋ค. ์ด์์ ์ธ ๊ฒฝ์ฐ ํธ์คํธ๋ ํธ์คํธ๊ฐ ๋ ๋ง์ ์ปค๋์ ๋๊ธฐ์ด์ ๋ฃ์ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ GPU๊ฐ ์คํํ๋ ๋ฐ ๋๋ถ๋ถ์ ์๊ฐ์ ํ ์ ํ๋๋ก ์ถฉ๋ถํ ์ปค๋์ GPU์ ๋๊ธฐ์ด์ ๋ฃ์ต๋๋ค.
TensorBoard์ Profiler ๊ฐ์ ํ์ด์ง ๋ ํธ์คํธ๊ฐ ์ปค๋์ ์์ํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋์ GPU๊ฐ ์ ํด ์ํ์๋ ์๊ฐ์ ๋ณด์ฌ์ค๋๋ค. ์๋ ์ด๋ฏธ์ง์์ GPU๋ ์ปค๋ ์คํ์ ๊ธฐ๋ค๋ฆฌ๋ ๋จ๊ณ ์๊ฐ์ ์ฝ 10% ๋์ ์ ํด ์ํ์ ๋๋ค.
์ด ๋์ผํ ํ๋ก๊ทธ๋จ์ ๋ํ ์ถ์ ๋ทฐ์ด ๋ ํธ์คํธ๊ฐ GPU์์ ์ปค๋์ ์์ํ๋ ๋ฐ ๋ฐ์ ์ปค๋ ์ฌ์ด์ ์์ ๊ฐ๊ฒฉ์ ๋ณด์ฌ์ค๋๋ค.
GPU์์ ๋ง์ ์์ ์์ (์: ์ค์นผ๋ผ ์ถ๊ฐ)์ ์์ํ๋ฉด ํธ์คํธ๊ฐ GPU๋ฅผ ๋ฐ๋ผ๊ฐ์ง ๋ชปํ ์ ์์ต๋๋ค. ๋์ผํ ํ๋กํ์ ๋ํ TensorBoard์ TensorFlow Stats ๋๊ตฌ๋ 2.77์ด๊ฐ ์์๋๋ 126,224 Mul ์์ ์ ๋ณด์ฌ์ค๋๋ค. ๋ฐ๋ผ์ ๊ฐ ์ปค๋์ ์ฝ 21.9ฮผs๋ก ๋งค์ฐ ์๊ณ (์์ ๋๊ธฐ ์๊ฐ๊ณผ ๊ฑฐ์ ๊ฐ์ ์๊ฐ) ์ ์ฌ์ ์ผ๋ก ํธ์คํธ ์ปค๋ ์์ ์ง์ฐ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
์ถ์ ๋ทฐ์ด์ ์์ ์ด๋ฏธ์ง์ ๊ฐ์ด GPU์ ์์ ๊ฐ์ ๋ง์ ์์ ๊ฐ๊ฒฉ์ด ํ์๋๋ ๊ฒฝ์ฐ ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
์์ ํ ์๋ฅผ ์ฐ๊ฒฐํ๊ณ ๋ฒกํฐํ๋ ์ฐ์ฐ์ ์ฌ์ฉํ๊ฑฐ๋ ๋ ํฐ ๋ฐฐ์น ํฌ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์คํ๋ ๊ฐ ์ปค๋์ด ๋ ๋ง์ ์์ ์ ์ํํ๋๋ก ํ๋ฉด GPU๊ฐ ๋ ์ค๋ ์ฌ์ฉ๋ฉ๋๋ค.
์์ ์ด๋ง ๋ชจ๋์์ ์์ ์ ์คํํ์ง ์๋๋ก
tf.function
์ ์ฌ์ฉํ์ฌ TensorFlow ๊ทธ๋ํ๋ฅผ ์์ฑํ๊ณ ์๋์ง ํ์ธํ์ญ์์ค.Model.fit
์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ( tf.GradientTape ๊ฐ ์๋ ์ฌ์ฉ์ ์ง์ ๊ต์ก ๋ฃจํ์tf.GradientTape
),tf.keras.Model.compile
์ด ์๋์ผ๋ก ์ด ์์ ์ ์ํํฉ๋๋ค.tf.function(jit_compile=True)
๋๋ ์๋ ํด๋ฌ์คํฐ๋ง๊ณผ ํจ๊ป ์ฌ์ฉํ์ฌ ์ปค๋์ ์ตํฉํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์๋์ ํผํฉ ์ ๋ฐ๋ ๋ฐ XLA ํ์ฑํ ์น์ ์ผ๋ก ์ด๋ํ์ฌ XLA๋ฅผ ํ์ฑํํ์ฌ ๋ ๋์ ์ฑ๋ฅ์ ์ป๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์. ์ด ๊ธฐ๋ฅ์ ๋์ ์ฅ์น ํ์ฉ๋๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
2. TensorFlow ์ฐ์ฐ ๋ฐฐ์น
ํ๋กํ์ผ๋ฌ ๊ฐ์ ํ์ด์ง ๋ ํธ์คํธ์ ๋ฐฐ์น๋ ์์ ๋ ์ฅ์น์ ๋ฐฑ๋ถ์จ์ ๋ณด์ฌ์ค๋๋ค( ์ถ์ ๋ทฐ์ด ๋ฅผ ๋ณด๊ณ ํน์ ์์ ์ ๋ฐฐ์น๋ฅผ ํ์ธํ ์๋ ์์ต๋๋ค. ์๋ ์ด๋ฏธ์ง์ ๊ฐ์ด ํธ์คํธ์ ์๋ ์์ ์ ๋ฐฑ๋ถ์จ์ ์ํฉ๋๋ค. ์ฅ์น์ ๋นํด ๋งค์ฐ ์์ต๋๋ค.
์ด์์ ์ผ๋ก๋ ๋๋ถ๋ถ์ ์ปดํจํ ์ง์ฝ์ ์์ ์ GPU์ ๋ฐฐ์นํด์ผ ํฉ๋๋ค.
๋ชจ๋ธ์ ์์
๊ณผ ํ
์๊ฐ ํ ๋น๋ ์ฅ์น๋ฅผ ์ฐพ์ผ๋ ค๋ฉด tf.debugging.set_log_device_placement(True)
๋ฅผ ํ๋ก๊ทธ๋จ์ ์ฒซ ๋ฒ์งธ ๋ช
๋ น๋ฌธ์ผ๋ก ์ค์ ํ์ญ์์ค.
๊ฒฝ์ฐ์ ๋ฐ๋ผ ํน์ ์ฅ์น์ ๋ฐฐ์นํ ์์
์ ์ง์ ํ๋๋ผ๋ ํด๋น ๊ตฌํ์ด ์ด ์กฐ๊ฑด์ ์ฌ์ ์ํ ์ ์์ต๋๋ค(์: tf.unique
). tf.distribute.OneDeviceStrategy
์ ๊ฐ์ ๋ฐฐํฌ ์ ๋ต์ ์ง์ ํ๋ฉด ์ฅ์น์ ์์
์ ๋ ๊ฒฐ์ ์ ์ผ๋ก ๋ฐฐ์นํ ์ ์์ต๋๋ค.
๋๋ถ๋ถ์ ์ฐ์ฐ์ GPU์ ๋ฐฐ์นํ๋ ํ ๊ฐ์ง ์ด์ ๋ ํธ์คํธ์ ์ฅ์น ๊ฐ์ ๊ณผ๋ํ ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํจ์ ๋๋ค(ํธ์คํธ์ ์ฅ์น ๊ฐ์ ๋ชจ๋ธ ์ ๋ ฅ/์ถ๋ ฅ ๋ฐ์ดํฐ์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ๊ฐ ์์๋จ). ๊ณผ๋ํ ๋ณต์ฌ์ ์๋ GPU ์คํธ๋ฆผ #167 , #168 ๋ฐ #169 ์ ๋ํ ์๋์ ์ถ์ ๋ณด๊ธฐ์ ๋์ ์์ต๋๋ค.
์ด๋ฌํ ๋ณต์ฌ๋ณธ์ GPU ์ปค๋์ ์คํ์ ์ฐจ๋จํ๋ ๊ฒฝ์ฐ ์ฑ๋ฅ์ ์ ํ์ํฌ ์ ์์ต๋๋ค. ์ถ์ ๋ทฐ์ด ์ ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ ์์ ์๋ ์ด๋ฌํ ๋ณต์ฌ๋ ํ ์์ ์์ค์ธ ์์ ์ ๋ํ ์ถ๊ฐ ์ ๋ณด๊ฐ ์์ง๋ง memCopy๋ฅผ ์์ ๊ณผ ์ฐ๊ฒฐํ๋ ๊ฒ์ด ํญ์ ์ฌ์ด ๊ฒ์ ์๋๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ๋ชจ๋ ๋จ๊ณ์์ ๋์ผํ ์์น์์ ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ๊ฐ ๋ฐ์ํ๋์ง ํ์ธํ๊ธฐ ์ํด ์ฃผ๋ณ์ ์์ ์ ์ดํด๋ณด๋ ๊ฒ์ด ๋์์ด ๋ฉ๋๋ค.
3. GPU์์ ๋ณด๋ค ํจ์จ์ ์ธ ์ปค๋
ํ๋ก๊ทธ๋จ์ GPU ์ฌ์ฉ๋ฅ ์ด ํ์ฉ ๊ฐ๋ฅํ ์์ค์ด๋ฉด ๋ค์ ๋จ๊ณ๋ Tensor Core ๋๋ ์ตํฉ ์์ ์ ํ์ฉํ์ฌ GPU ์ปค๋์ ํจ์จ์ฑ์ ๋์ด๋ ๊ฒ์ ๋๋ค.
1. ํ ์ ์ฝ์ด ํ์ฉ
์ต์ NVIDIAยฎ GPU์๋ ์ ๊ฒฉ ์ปค๋์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์๋ ํน์ Tensor ์ฝ์ด๊ฐ ์์ต๋๋ค.
TensorBoard์ GPU ์ปค๋ ํต๊ณ ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ค GPU ์ปค๋์ด Tensor Core์ ์ ํฉํ๊ณ ์ด๋ค ์ปค๋์ด Tensor Core๋ฅผ ์ฌ์ฉํ๋์ง ์๊ฐํํ ์ ์์ต๋๋ค. fp16
ํ์ฑํ(์๋์ ํผํฉ ์ ๋ฐ๋ ํ์ฑํ ์น์
์ฐธ์กฐ)๋ ํ๋ก๊ทธ๋จ์ GEMM(General Matrix Multiply) ์ปค๋(matmul ops)์ด ํ
์ ์ฝ์ด๋ฅผ ํ์ฉํ๋๋ก ํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์
๋๋ค. GPU ์ปค๋์ ์ ๋ฐ๋๊ฐ fp16์ด๊ณ ์
๋ ฅ/์ถ๋ ฅ ํ
์ ์ฐจ์์ด 8 ๋๋ 16( int8
)์ผ๋ก ๋๋ ์ ์๋ ๊ฒฝ์ฐ Tensor Core๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
์ฐธ๊ณ : cuDNN v7.6.3 ์ด์์์๋ Tensor Core๋ฅผ ํ์ฉํ๋ ๋ฐ ํ์ํ ๊ฒฝ์ฐ ์ปจ๋ณผ๋ฃจ์ ์ฐจ์์ด ์๋์ผ๋ก ์ฑ์์ง๋๋ค.
GPU์์ ์ปค๋์ ํจ์จ์ ์ผ๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ธฐํ ์์ธํ ๊ถ์ฅ ์ฌํญ์ NVIDIAยฎ ๋ฅ ๋ฌ๋ ์ฑ๋ฅ ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
2. ํจ์ฆ ์์
tf.function(jit_compile=True)
์ ์ฌ์ฉํ์ฌ ๋ ์์ ์ฐ์ฐ์ ์ตํฉํ์ฌ ๋ ํฐ ์ปค๋์ ํ์ฑํ์ฌ ์๋นํ ์ฑ๋ฅ ํฅ์์ ๊ฐ์ ธ์ต๋๋ค. ์์ธํ ๋ด์ฉ์ XLA ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
3. ํผํฉ ์ ๋ฐ๋ ๋ฐ XLA ์ฌ์ฉ
์์ ๋จ๊ณ๋ฅผ ์ํํ ํ ํผํฉ ์ ๋ฐ๋์ XLA๋ฅผ ํ์ฑํํ๋ฉด ์ฑ๋ฅ์ ๋์ฑ ํฅ์์ํค๊ธฐ ์ํด ์ทจํ ์ ์๋ ๋ ๊ฐ์ง ์ ํ์ ๋จ๊ณ์ ๋๋ค. ์ ์๋ ์ ๊ทผ ๋ฐฉ์์ ์ด๋ฅผ ํ๋์ฉ ํ์ฑํํ๊ณ ์ฑ๋ฅ ์ด์ ์ด ์์๋๋ก์ธ์ง ํ์ธํ๋ ๊ฒ์ ๋๋ค.
1. ํผํฉ ์ ๋ฐ๋ ์ฌ์ฉ
TensorFlow ํผํฉ ์ ๋ฐ๋ ๊ฐ์ด๋๋ GPU์์ fp16
์ ๋ฐ๋๋ฅผ ํ์ฑํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. NVIDIAยฎ GPU์์ AMP ๋ฅผ ํ์ฑํํ์ฌ Tensor ์ฝ์ด๋ฅผ ์ฌ์ฉํ๊ณ Volta ๋ฐ ์ต์ GPU ์ํคํ
์ฒ์์ fp32
(float32) ์ ๋ฐ๋๋ง ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋น๊ตํ ๋ ์ ์ฒด ์๋๊ฐ ์ต๋ 3๋ฐฐ ํฅ์๋ฉ๋๋ค.
ํ๋ ฌ/ํ ์ ์ฐจ์์ด ํ ์ ์ฝ์ด๋ฅผ ์ฌ์ฉํ๋ ์ปค๋ ํธ์ถ์ ๋ํ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋์ง ํ์ธํ์ญ์์ค. GPU ์ปค๋์ ์ ๋ฐ๋๊ฐ fp16์ด๊ณ ์ ๋ ฅ/์ถ๋ ฅ ์ฐจ์์ด 8 ๋๋ 16(int8์ ๊ฒฝ์ฐ)์ผ๋ก ๋๋ ์ ์๋ ๊ฒฝ์ฐ Tensor Core๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
cuDNN v7.6.3 ์ด์์์๋ Tensor Core๋ฅผ ํ์ฉํ๋ ๋ฐ ํ์ํ ๊ฒฝ์ฐ ์ปจ๋ณผ๋ฃจ์ ์ฐจ์์ด ์๋์ผ๋ก ์ฑ์์ง๋๋ค.
fp16
์ ๋ฐ๋์ ์ฑ๋ฅ ์ด์ ์ ์ต๋ํํ๋ ค๋ฉด ์๋ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด์ญ์์ค.
1. ์ต์ ์ fp16 ์ปค๋ ์ฌ์ฉ
fp16
ํ์ฑํ๋๋ฉด ํ๋ก๊ทธ๋จ์ GEMM(ํ๋ ฌ ๊ณฑ์
) ์ปค๋์ Tensor Core๋ฅผ ํ์ฉ fp16
๊ทธ๋ฌ๋ ์ด๋ค ๊ฒฝ์ฐ์๋ ์ด๋ฌํ ์ผ์ด ๋ฐ์ํ์ง ์๊ณ ํ๋ก๊ทธ๋จ์ด ๋์ ๋นํจ์จ์ ์ธ ๊ตฌํ์ผ๋ก ๋์ฒด๋๊ธฐ ๋๋ฌธ์ fp16
์ ํ์ฑํํ์ฌ ์์๋๋ ์๋ ํฅ์์ ๊ฒฝํํ์ง ๋ชปํฉ๋๋ค.
GPU ์ปค๋ ํต๊ณ ํ์ด์ง๋ ์ด๋ค ์์
์ด Tensor Core์ ์ ํฉํ๊ณ ์ด๋ค ์ปค๋์ด ์ค์ ๋ก ํจ์จ์ ์ธ Tensor Core๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ง ๋ณด์ฌ์ค๋๋ค. ๋ฅ ๋ฌ๋ ์ฑ๋ฅ์ ๋ํ NVIDIAยฎ ๊ฐ์ด๋์๋ Tensor Core๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ถ๊ฐ ์ ์ ์ฌํญ์ด ํฌํจ๋์ด ์์ต๋๋ค. fp16
์ฌ์ฉ์ ์ด์ ์ ์ด์ ์ ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ธ๋ฉ๋ ์ปค๋์์๋ ๋ํ๋ฉ๋๋ค. ์ด์ ์์
์ ์ ๋ฐ์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์
๋๋ค.
2. ๋์ ๋ ์ ์ ์์ค ์ค์ผ์ผ๋ง
fp16
์ ์ฌ์ฉํ ๋ ๋ฎ์ ์ ๋ฐ๋๋ก ์ธํ ์ธ๋ํ๋ก๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด Loss scaling์ด ํ์ํฉ๋๋ค. ์์ค ์ค์ผ์ผ๋ง์๋ ๋์ ๋ฐ ์ ์ ์ ๋ ๊ฐ์ง ์ ํ์ด ์์ผ๋ฉฐ, ๋ ๋ค ํผํฉ ์ ๋ฐ๋ ๊ฐ์ด๋ ์ ์์ธํ ์ค๋ช
๋์ด ์์ต๋๋ค. mixed_float16
์ ์ฑ
์ ์ฌ์ฉํ์ฌ Keras ์ตํฐ๋ง์ด์ ๋ด์์ ์์ค ์กฐ์ ์ ์๋์ผ๋ก ํ์ฑํํ ์ ์์ต๋๋ค.
์ฐธ๊ณ : Keras ํผํฉ ์ ๋ฐ๋ API๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋
๋ฆฝํ softmax ์ฐ์ฐ(Keras ์์ค ํจ์์ ์ผ๋ถ๊ฐ ์๋ ์ฐ์ฐ)์ fp16
์ผ๋ก ํ๊ฐํ์ฌ ์์น ๋ฌธ์ ์ ์๋ ด ๋ถ๋์ ์ ๋ฐํ ์ ์์ต๋๋ค. ์ต์ ์ ์ฑ๋ฅ์ ์ํด ์ด๋ฌํ ์์
์ fp32
๋ก ์ ์กํฉ๋๋ค.
์ฑ๋ฅ์ ์ต์ ํํ๋ ค๊ณ ํ ๋ ๋์ ์์ค ํฌ๊ธฐ ์กฐ์ ์ ํธ์คํธ์์ ์คํ๋๋ ์ถ๊ฐ ์กฐ๊ฑด๋ถ ์์ ์ ๋์ ํ ์ ์๊ณ ์ถ์ ๋ทฐ์ด์ ๋จ๊ณ ๊ฐ์ ํ์๋ ๊ฐ๊ฒฉ์ผ๋ก ์ด์ด์ง ์ ์์์ ๊ธฐ์ตํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ฐ๋ฉด, ์ ์ ์์ค ์ค์ผ์ผ๋ง์ ์ด๋ฌํ ์ค๋ฒํค๋๊ฐ ์์ผ๋ฉฐ ์ฌ๋ฐ๋ฅธ ์ ์ ์์ค ์ค์ผ์ผ ๊ฐ์ ์ง์ ํด์ผ ํ๋ ์บ์น๋ก ์ฑ๋ฅ ๋ฉด์์ ๋ ๋์ ์ต์ ์ด ๋ ์ ์์ต๋๋ค.
2. tf.function(jit_compile=True) ๋๋ ์๋ ํด๋ฌ์คํฐ๋ง์ผ๋ก XLA ํ์ฑํ
๋จ์ผ GPU๋ก ์ต๊ณ ์ ์ฑ๋ฅ์ ์ป๊ธฐ ์ํ ๋ง์ง๋ง ๋จ๊ณ๋ก XLA๋ฅผ ํ์ฑํํ์ฌ ์์
์ ํตํฉํ๊ณ ์ฅ์น ํ์ฉ๋๋ฅผ ๋์ด๊ณ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๊ณต๊ฐ์ ๋ฎ์ถ๋ ์คํ์ ํ ์ ์์ต๋๋ค. tf.function(jit_compile=True)
๋๋ ์๋ ํด๋ฌ์คํฐ๋ง์ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋จ์์ XLA๋ฅผ ํ์ฑํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ ์ XLA ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์ ์ญ JIT ์์ค์ -1
(ํด์ ), 1
๋๋ 2
์ค์ ํ ์ ์์ต๋๋ค. ๋ ๋์ ์์ค์ ๋ ๊ณต๊ฒฉ์ ์ด๋ฉฐ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ค์ด๊ณ ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์ ํ์ด ์๋ ๊ฒฝ์ฐ ๊ฐ์ 1
XLA ์ปดํ์ผ๋ฌ๋ ์๋ก์ด ๋ชจ์์ ๋ง๋ ๋๋ง๋ค ์ปค๋์ ๊ณ์ ์ปดํ์ผํด์ผ ํ๋ฏ๋ก XLA๋ ๊ฐ๋ณ ์
๋ ฅ ํ
์ ๋ชจ์์ด ์๋ ๋ชจ๋ธ์ ๋ํด ์ ์ํ๋์ง ์์ต๋๋ค.
2. ๋ค์ค GPU ๋จ์ผ ํธ์คํธ์์ ์ฑ๋ฅ ์ต์ ํ
tf.distribute.MirroredStrategy
API๋ ๋จ์ผ ํธ์คํธ์์ ํ๋์ GPU์์ ์ฌ๋ฌ GPU๋ก ๋ชจ๋ธ ํ๋ จ์ ํ์ฅํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. (TensorFlow๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ์ฐ ๊ต์ก์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด TensorFlow๋ฅผ ์ฌ์ฉํ ๋ถ์ฐ ๊ต์ก , GPU ์ฌ์ฉ, TPU ์ฌ์ฉ ๊ฐ์ด๋ ๋ฐ Keras๋ฅผ ์ฌ์ฉํ ๋ถ์ฐ ๊ต์ก ์์ต์๋ฅผ ์ฐธ์กฐํ์ธ์.)
ํ๋์ GPU์์ ์ฌ๋ฌ GPU๋ก์ ์ ํ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด์์ ์ผ๋ก ํ์ฅ ๊ฐ๋ฅํด์ผ ํ์ง๋ง ๋๋๋ก ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๋จ์ผ GPU๋ฅผ ์ฌ์ฉํ ํ๋ จ์์ ๋์ผํ ํธ์คํธ์ ์ฌ๋ฌ GPU๋ก ์ด๋ํ ๋ ์ด์์ ์ผ๋ก๋ ๊ทธ๋๋์ธํธ ํต์ ์ ์ถ๊ฐ ์ค๋ฒํค๋์ ํธ์คํธ ์ค๋ ๋ ํ์ฉ๋ ์ฆ๊ฐ๋ง์ผ๋ก ์ฑ๋ฅ ํ์ฅ์ ๊ฒฝํํด์ผ ํฉ๋๋ค. ์ด ์ค๋ฒํค๋๋ก ์ธํด ์๋ฅผ ๋ค์ด 1๊ฐ์์ 2๊ฐ์ GPU๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ ์ ํํ 2๋ฐฐ ์๋ ํฅ์์ ์ป์ ์ ์์ต๋๋ค.
์๋์ ์ถ์ ๋ณด๊ธฐ๋ ์ฌ๋ฌ GPU์์ ํ๋ จํ ๋ ์ถ๊ฐ ํต์ ์ค๋ฒํค๋์ ์๋ฅผ ๋ณด์ฌ์ค๋๋ค. ๊ทธ๋ผ๋์ธํธ๋ฅผ ์ฐ๊ฒฐํ๊ณ , ๋ณต์ ๋ณธ ๊ฐ์ ํต์ ํ๊ณ , ๊ฐ์ค์น ์ ๋ฐ์ดํธ๋ฅผ ์ํํ๊ธฐ ์ ์ ๋ถํ ํ๋ ๋ฐ ์ฝ๊ฐ์ ์ค๋ฒํค๋๊ฐ ์์ต๋๋ค.
๋ค์ ์ฒดํฌ๋ฆฌ์คํธ๋ ๋ค์ค GPU ์๋๋ฆฌ์ค์์ ์ฑ๋ฅ์ ์ต์ ํํ ๋ ๋ ๋์ ์ฑ๋ฅ์ ๋ฌ์ฑํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๋ฐฐ์น ํฌ๊ธฐ๋ฅผ ์ต๋ํํ์ฌ ์ฅ์น ํ์ฉ๋๋ฅผ ๋์ด๊ณ ์ฌ๋ฌ GPU์์ ํต์ ๋น์ฉ์ ์๊ฐํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ํ๋กํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก๊ทธ๋จ์ด ์ต๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ์ผ๋ง๋ ๊ทผ์ ํ๋์ง ์ ์ ์์ต๋๋ค. ๋ฐฐ์น ํฌ๊ธฐ๊ฐ ํด์๋ก ์๋ ด์ ์ํฅ์ ์ค ์ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์ฑ๋ฅ ์ด์ ์ด ๋ ์ค์ํฉ๋๋ค.
๋จ์ผ GPU์์ ์ฌ๋ฌ GPU๋ก ์ด๋ํ ๋ ์ด์ ๋์ผํ ํธ์คํธ์์ ํจ์ฌ ๋ ๋ง์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ (1) ์ดํ์๋ ์ ๋ ฅ ํ์ดํ๋ผ์ธ ์ฑ๋ฅ์ ๋ค์ ํ์ธํ์ฌ ๋ณ๋ชฉ ํ์์ด ์๋์ง ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ถํ์ํ AllReduce ํธ์ถ์ด ์๋์ง ํ๋ก๊ทธ๋จ์ ์ถ์ ๋ณด๊ธฐ์์ GPU ํ์๋ผ์ธ์ ํ์ธํ์ญ์์ค. ๊ทธ๋ฌ๋ฉด ๋ชจ๋ ์ฅ์น์์ ๋๊ธฐํ๋ฉ๋๋ค. ์์ ํ์๋ ์ถ์ ๋ณด๊ธฐ์์ AllReduce๋ NCCL ์ปค๋์ ํตํด ์ํ๋๋ฉฐ ๊ฐ ๋จ๊ณ์ ๊ทธ๋ผ๋์ธํธ์ ๋ํด ๊ฐ GPU์์ ํ๋์ NCCL ํธ์ถ๋ง ์์ต๋๋ค.
์ต์ํํ ์ ์๋ ๋ถํ์ํ D2H, H2D ๋ฐ D2D ๋ณต์ฌ ์์ ์ ํ์ธํฉ๋๋ค.
๊ฐ ๋ณต์ ๋ณธ์ด ๋์ผํ ์์ ์ ์ํํ๋์ง ๋จ๊ณ ์๊ฐ์ ํ์ธํ์ธ์. ์๋ฅผ ๋ค์ด ํธ์คํธ๊ฐ ์ค์๋ก ๋ ๋ง์ ์์ ์ ์ํํ๊ฒ ๋์ด GPU ํ๋(์ผ๋ฐ์ ์ผ๋ก
GPU0
)๊ฐ ์ด๊ณผ ๊ตฌ๋ ๋ ์ ์์ต๋๋ค.๋ง์ง๋ง์ผ๋ก, ์์ฐจ์ ์ผ๋ก ์คํ๋๋ ์์ ์ ๋ํ ์ถ์ ๋ณด๊ธฐ์ ๋ชจ๋ GPU์ ๋ํ ๊ต์ก ๋จ๊ณ๋ฅผ ํ์ธํฉ๋๋ค. ์ด๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ ํ GPU์์ ๋ค๋ฅธ GPU๋ก์ ์ ์ด ์ข ์์ฑ์ด ํฌํจ๋ ๋ ๋ฐ์ํฉ๋๋ค. ๊ณผ๊ฑฐ์๋ ์ด๋ฌํ ์ํฉ์์ ์ฑ๋ฅ์ ๋๋ฒ๊น ํ๋ ๊ฒ์ด ์ฌ๋ก๋ณ๋ก ํด๊ฒฐ๋์์ต๋๋ค. ํ๋ก๊ทธ๋จ์์ ์ด ๋์์ ๊ด์ฐฐํ๋ฉด ์ถ์ ๋ณด๊ธฐ์ ์ด๋ฏธ์ง์ ํจ๊ป GitHub ๋ฌธ์ ๋ฅผ ์ ์ถํ์ญ์์ค.
1. ๊ทธ๋ผ๋์ธํธ AllReduce ์ต์ ํ
๋๊ธฐ์ ์ ๋ต์ผ๋ก ํ๋ จํ ๋ ๊ฐ ์ฅ์น๋ ์ ๋ ฅ ๋ฐ์ดํฐ์ ์ผ๋ถ๋ฅผ ๋ฐ์ต๋๋ค.
๋ชจ๋ธ์ ํตํด ์ ๋ฐฉํฅ ๋ฐ ์ญ๋ฐฉํฅ ํต๊ณผ๋ฅผ ๊ณ์ฐํ ํ ๊ฐ ์ฅ์น์์ ๊ณ์ฐ๋ ๊ธฐ์ธ๊ธฐ๋ฅผ ์ง๊ณํ๊ณ ์ค์ฌ์ผ ํฉ๋๋ค. ์ด ๊ทธ๋๋์ธํธ AllReduce ๋ ๊ฐ ์ฅ์น์์ ๊ทธ๋๋์ธํธ ๊ณ์ฐ ํ, ๊ทธ๋ฆฌ๊ณ ์ต์ ํ ํ๋ก๊ทธ๋จ์ด ๋ชจ๋ธ ๊ฐ์ค์น๋ฅผ ์ ๋ฐ์ดํธํ๊ธฐ ์ ์ ๋ฐ์ํฉ๋๋ค.
๊ฐ GPU๋ ๋จผ์ ๋ชจ๋ธ ๋ ์ด์ด์ ๊ทธ๋ผ๋์ธํธ๋ฅผ ์ฐ๊ฒฐํ๊ณ tf.distribute.CrossDeviceOps
( tf.distribute.NcclAllReduce
๊ฐ ๊ธฐ๋ณธ๊ฐ์)๋ฅผ ์ฌ์ฉํ์ฌ GPU ๊ฐ์ ์ ๋ฌํ ๋ค์ ๋ ์ด์ด๋ณ๋ก ์ถ์ํ ํ ๊ทธ๋ผ๋์ธํธ๋ฅผ ๋ฐํํฉ๋๋ค.
์ตํฐ๋ง์ด์ ๋ ์ด๋ฌํ ๊ฐ์๋ ๊ทธ๋ผ๋์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ๊ฐ์ค์น๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. ์ด์์ ์ผ๋ก๋ ์ค๋ฒํค๋๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ด ํ๋ก์ธ์ค๊ฐ ๋ชจ๋ GPU์์ ๋์์ ๋ฐ์ํด์ผ ํฉ๋๋ค.
AllReduce์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋๋ต ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค.
์ด ๊ณ์ฐ์ ๋ถ์ฐ ๊ต์ก ์์
์ ์คํํ ๋์ ์ฑ๋ฅ์ด ์์๋๋ก์ธ์ง ๋๋ ์ถ๊ฐ ์ฑ๋ฅ ๋๋ฒ๊น
์ ์ํํด์ผ ํ๋์ง๋ฅผ ๋น ๋ฅด๊ฒ ํ์ธํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค. Model.summary
์์ ๋ชจ๋ธ์ ๋งค๊ฐ๋ณ์ ์๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
TensorFlow๋ fp32
(float32)๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ๋๋์ธํธ๋ฅผ ์ ๋ฌํ๋ฏ๋ก ๊ฐ ๋ชจ๋ธ ๋งค๊ฐ๋ณ์์ ํฌ๊ธฐ๋ 4๋ฐ์ดํธ์
๋๋ค. fp16
์ ์ฌ์ฉ ์ค์ ํ ๊ฒฝ์ฐ์๋ NCCL AllReduce๋ fp32
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ค์ผ์ผ๋ง์ ์ด์ ์ ์ป์ผ๋ ค๋ฉด ์ด๋ฌํ ์ค๋ฒํค๋์ ๋นํด ๋จ๊ณ ์๊ฐ์ด ํจ์ฌ ๋์์ผ ํฉ๋๋ค. ์ด๋ฅผ ๋ฌ์ฑํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ฐฐ์น ํฌ๊ธฐ๊ฐ ๋จ๊ณ ์๊ฐ์ ์ํฅ์ ์ฃผ์ง๋ง ํต์ ์ค๋ฒํค๋์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ผ๋ฏ๋ก ๋ ๋์ ๋ฐฐ์น ํฌ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
2. GPU ํธ์คํธ ์ค๋ ๋ ๊ฒฝํฉ
์ฌ๋ฌ GPU๋ฅผ ์คํํ ๋ CPU์ ์ญํ ์ ์ฅ์น ์ ์ฒด์์ GPU ์ปค๋์ ํจ์จ์ ์ผ๋ก ์คํํ์ฌ ๋ชจ๋ ์ฅ์น๋ฅผ ๋ฐ์๊ฒ ์ ์งํ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ CPU๊ฐ ํ๋์ GPU์์ ์์ฝํ ์ ์๋ ๋ง์ ๋ ๋ฆฝ์ ์ธ ์์ ์ด ์๋ ๊ฒฝ์ฐ CPU๋ ๋ง์ ํธ์คํธ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ ํ๋์ GPU๋ฅผ ์ฌ์ฉ ์ค์ธ ์ํ๋ก ์ ์งํ ๋ค์ ๋น๊ฒฐ์ ์ ์์๋ก ๋ค๋ฅธ GPU์์ ์ปค๋์ ์์ํ ์ ์์ต๋๋ค. . ์ด๋ก ์ธํด ์ฑ๋ฅ์ ๋ถ์ ์ ์ธ ์ํฅ์ ์ค ์ ์๋ ์๊ณก ๋๋ ์์ ํฌ๊ธฐ ์กฐ์ ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
์๋์ ์ถ์ ๋ทฐ์ด GPU1
GPU2
๊ฐ ์์๋ ํ ์์
์คํ์ ์์ํ๊ธฐ ๋๋ฌธ์ CPU๊ฐ GPU ์ปค๋์ ๋นํจ์จ์ ์ผ๋ก ์์ํ ๋์ ์ค๋ฒํค๋๋ฅผ ๋ณด์ฌ์ค๋๋ค.
ํธ์คํธ์ ๋ํ ์ถ์ ๋ณด๊ธฐ๋ ํธ์คํธ๊ฐ GPU1
์์ ์ปค๋์ ์์ํ๊ธฐ ์ ์ GPU2
์ปค๋์ ์์ํ๊ณ ์์์ ๋ณด์ฌ์ค๋๋ค(์๋ tf_Compute*
์์
์ CPU ์ค๋ ๋๋ฅผ ๋ํ๋ด์ง ์์).
ํ๋ก๊ทธ๋จ์ ์ถ์ ๋ณด๊ธฐ์์ GPU ์ปค๋์ ์ด๋ฌํ ์ข ๋ฅ์ ๋นํ๋ฆผ์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ ๊ถ์ฅ๋๋ ์กฐ์น๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
TensorFlow ํ๊ฒฝ ๋ณ์
TF_GPU_THREAD_MODE
๋ฅผgpu_private
์ค์ ํฉ๋๋ค. ์ด ํ๊ฒฝ ๋ณ์๋ GPU์ ๋ํ ์ค๋ ๋๋ฅผ ๋น๊ณต๊ฐ๋ก ์ ์งํ๋๋ก ํธ์คํธ์ ์ง์ํฉ๋๋ค.๊ธฐ๋ณธ์ ์ผ๋ก
TF_GPU_THREAD_MODE=gpu_private
๋ ์ค๋ ๋ ์๋ฅผ 2๋ก ์ค์ ํ๋ฉฐ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ถฉ๋ถํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด ์ซ์๋ TensorFlow ํ๊ฒฝ ๋ณ์TF_GPU_THREAD_COUNT
๋ฅผ ์ํ๋ ์ค๋ ๋ ์๋ก ์ค์ ํ์ฌ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.