
๐ ๏ธ GPU ๊ฐ์ ์ปดํจํ ์ 3๋จ๊ณ ๋ ์ด์ด: ์ํคํ ์ฒ์ ์ ๊ทผ
๋ฅ๋ฌ๋ ์คํ์ ๊ตฌ์ถํ ๋ ์ด ์ธ ๊ฐ์ง๋ ๋จ์ํ ์ํํธ์จ์ด๊ฐ ์๋๋ผ, ํ๋์จ์ด์ ๋ฌผ๋ฆฌ์ ํ๊ณ๋ฅผ ์ํํธ์จ์ด ์ต์ ํ๋ก ๊ทน๋ํํ๋ ๋จ๊ณ๋ณ ํ๋ก์ธ์ค๋ก ์ดํดํด์ผ ํฉ๋๋ค.
1. CUDA (The Fundamental Interface)
CUDA๋ GPU์ ์์ฒ ๊ฐ ์ฝ์ด์ ๋ช ๋ น์ ๋ด๋ฆฌ๊ธฐ ์ํ ์ถ์ํ ๊ณ์ธต(Abstraction Layer)์ ๋๋ค.
- ๊ธฐ์ ์ ์ค์ฒด: GPGPU(General-Purpose computing on GPU)๋ฅผ ๊ฐ๋ฅ์ผ ํ๋ ๋ณ๋ ฌ ์ปดํจํ ํ๋ซํผ์ด์ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ๋๋ค. CPU์ ์ง๋ ฌ ์ฒ๋ฆฌ ๋ฐฉ์๊ณผ ๋ฌ๋ฆฌ, ๋ฐ์ดํฐ ๋ณ๋ ฌ์ฑ์ ๊ทน๋ํํ๊ธฐ ์ํด Thread - Block - Grid๋ผ๋ ๊ณ์ธต ๊ตฌ์กฐ๋ก ์ฐ์ฐ์ ์ค์ผ์ค๋งํฉ๋๋ค.
- ํต์ฌ ๊ธฐ๋ฅ: ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ(Host to Device ๋ณต์ฌ), ์ปค๋ ์คํ ์ ์ด, ๊ทธ๋ฆฌ๊ณ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ(Shared Memory) ํ์ฉ์ ํตํ ์ง์ฐ ์๊ฐ(Latency) ๊ฐ์๋ฅผ ๋ด๋นํฉ๋๋ค.
- ์ ๋ฌธ๊ฐ์ ์๊ฐ: "GPU๋ผ๋ ๊ฑฐ๋ํ ์ฐ์ฐ ์ฅ์น๋ฅผ ์ ์ดํ๊ธฐ ์ํ ๊ฐ์ฅ ๋ก์ฐ๋ ๋ฒจ(Low-level)์ ์ด์์ฒด์ ์ธํฐํ์ด์ค"๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
2. cuDNN (The Primitive Library for Deep Learning)
cuDNN์ CUDA ์์์ ๋์ํ๋ ๋ฅ๋ฌ๋ ์ ์ฉ ๊ฐ์ ํ๋ฆฌ๋ฏธํฐ๋ธ(Primitives) ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- ๊ธฐ์ ์ ์ค์ฒด: Convolution, Pooling, Normalization, Activation ๋ฑ ๋ฅ๋ฌ๋ ๋ชจ๋ธ์ ํต์ฌ ์ฐ์ฐ์ ํ๋์จ์ด ํน์ฑ์ ๋ง์ถฐ ํ๋ํด๋ ์งํฉ์ฒด์ ๋๋ค.
- ์ ํ์ํ๊ฐ?: ๋จ์ํ CUDA๋ก Convolution ์ฐ์ฐ์ ์ง๋ ๊ฒ๊ณผ, ์๋น๋์ ์์ง๋์ด๋ค์ด GPU์ L1/L2 ์บ์ ๊ตฌ์กฐ์ ๋ฉ๋ชจ๋ฆฌ ๋์ญํญ์ ๊ณ ๋ คํด ์ด์ ๋ธ๋ฆฌ ์์ค์ผ๋ก ๊น์๋์ cuDNN์ ์ฐ๋ ๊ฒ์ ์ฑ๋ฅ ์ฐจ์ด๊ฐ ์ฒ์ง์ฐจ์ด์ ๋๋ค.
- ํต์ฌ ๊ธฐ์ : Winograd ์๊ณ ๋ฆฌ์ฆ์ด๋ FFT(Fast Fourier Transform) ๊ธฐ๋ฐ์ Convolution ์ต์ ํ ๋ฑ์ ํตํด ์ฐ์ฐ ๋ณต์ก๋๋ฅผ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ค์ฌ์ค๋๋ค.
- ์ ๋ฌธ๊ฐ์ ์๊ฐ: "ํ๋ ์์ํฌ(PyTorch, TensorFlow)๊ฐ GPU ์ฑ๋ฅ์ ์ ๋๋ก ๋ฝ์๋ด๊ธฐ ์ํด ๋ด๋ถ์ ์ผ๋ก ํธ์ถํ๋ ์ต์ ํ ์์ง๋ฃธ"์ ๋๋ค.
3. TensorRT (The Inference Optimizer & Runtime)
TensorRT๋ ํ์ต์ฉ์ด ์๋๋๋ค. ํ์ต๋ ๋ชจ๋ธ์ ํน์ GPU ํ๋์จ์ด์์ ์ต๊ณ ์ ์ฑ๋ฅ์ผ๋ก ์คํํ๊ธฐ ์ํ SDK์ ๋๋ค.
- ๊ธฐ์ ์ ์ค์ฒด: ํ์ต๋ ๋ชจ๋ธ(ONNX, TensorFlow ๋ฑ)์ ์ ๋ ฅ๋ฐ์ ํ๊ฒ GPU์ ์ต์ ํ๋ 'Engine' ํ์ผ๋ก ์ง๋ ฌํ(Serialization)ํฉ๋๋ค.
- ์ฃผ์ ์ต์ ํ ๊ธฐ๋ฒ:
- Layer & Tensor Fusion: ๋ถํ์ํ ๋ ์ด์ด๋ฅผ ํฉ์ณ ๋ฉ๋ชจ๋ฆฌ IO๋ฅผ ์ค์ ๋๋ค (์: Conv+Bias+ReLU๋ฅผ ํ๋์ ์ปค๋๋ก ํตํฉ).
- Precision Calibration: FP32 ๋ชจ๋ธ์ ์ฑ๋ฅ ์์ค์ ์ต์ํํ๋ฉด์ FP16์ด๋ INT8๋ก ์์ํ(Quantization)ํ์ฌ ์ฒ๋ฆฌ๋์ ๋ช ๋ฐฐ๋ก ๋์ ๋๋ค.
- Kernel Auto-tuning: ํด๋น GPU ์ํคํ ์ฒ(Ampere, Hopper ๋ฑ)์์ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ์๋์ผ๋ก ์ ํํฉ๋๋ค.
- ์ ๋ฌธ๊ฐ์ ์๊ฐ: "์ปดํ์ผ๋ฌ๊ฐ ์ฝ๋๋ฅผ ์ต์ ํํ๋ฏ, ๋ฅ๋ฌ๋ ๋ชจ๋ธ ๊ทธ๋ํ๋ฅผ ํ๋์จ์ด ๋ง์ถคํ์ผ๋ก ์ฌ์ค๊ณํ๋ ๊ณ ์ฑ๋ฅ ์ถ๋ก ์์ง"์ ๋๋ค.
์ํฌํ๋ก์ฐ ๊ด์
| ๋จ๊ณ | ๊ตฌ์ฑ ์์ | ์ฃผ์ ์ญํ | ์ฐ์ถ๋ฌผ/๊ฒฐ๊ณผ |
| ๊ธฐ๋ฐ | CUDA | ํ๋์จ์ด ์ ์ด ๋ฐ ๋ณ๋ ฌ ์ฐ์ฐ ํ ๋น | GPU ์ฐ์ฐ ๊ฐ์ฉ ์ํ |
| ๊ฐ๋ฐ/ํ์ต | cuDNN | ํ์ค ๋ฅ๋ฌ๋ ์ฐ์ฐ์ ๊ฐ์ํ | ๊ฐ์ํ๋ Training ์ฑ๋ฅ |
| ๋ฐฐํฌ/์๋น์ค | TensorRT | ๋ชจ๋ธ ๊ทธ๋ํ ์ต์ ํ ๋ฐ ์์ํ | ์ ์ง์ฐ(Low Latency) ์ถ๋ก ์์ง |
๊ฒฐ๋ก ์ ์ผ๋ก, ํ์ต(Training) ํ๊ฒฝ์์๋ CUDA์ cuDNN ๋ฒ์ ํธํ์ฑ์ ๋ง์ถ๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํ๋ฉฐ, ์ค์ ์๋น์ค(Inference) ๋จ๊ณ์์๋ TensorRT๋ฅผ ํตํด ์ฒ๋ฆฌ๋(Throughput)์ ์ผ๋ง๋ ๋์ด์ฌ๋ฆฌ๋๋๊ฐ ์์ง๋์ด์ ์ญ๋์ด ๋ฉ๋๋ค.