๊ฐ์ ๊ณผ ๋ ์ฐฝ์ฑ, ํต์ฌ ์๊ณ ๋ฆฌ์ฆ, ๊ทธ๋ฆฌ๊ณ ํ๊ณ
๋ฌผ์ด๋ณธ ๊ฒ: ์ด ๋ ผ๋ฌธ์ ์์ฃผ ์์ธํ๊ฒ ์ฝ๊ณ ๋ ผ๋ฌธ์ ๊ฐ์ ๊ณผ ๋ ์ฐฝ์ ์ธ ์ง์ ์ ์ค๋ช ํด์ฃผ๊ณ ํต์ฌ ์๊ณ ๋ฆฌ์ฆ์ ์์ ์ ๋ ฅ์ ๋ค์ด์ ์ ์ฒด์ ์ธ ๊ณผ์ ์ ์ค๋ช ํด์ค ์ถ๊ฐ์ ์ผ๋ก ๋ ผ๋ฌธ์ ํ๊ณ์ ์ ๋ํด์๋ ์๋ ค์ค
๐ ๋ ผ๋ฌธ ์ ๋ชฉ: NEO: Saving GPU Memory Crisis with CPU Offloading for Online LLM Inference
๐ ์ ์: Xuanlin Jiang, Yang Zhou, Shiyi Cao, Ion Stoica, Minlan Yu
1. ๊ฒฐ๋ก ์์ฝ (๊ฐ์ & ๋ ์ฐฝ์ ์ธ ์ง์ )
NEO๋ GPU ๋ฉ๋ชจ๋ฆฌ์ ์ ํ์ผ๋ก ์ธํด ๋ฐ์ํ๋ LLM ์ถ๋ก ์ ๋ณ๋ชฉ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋น๋์นญ GPU-CPU ํ์ดํ๋ผ์ด๋๊ณผ ๋ถํ ์ธ์ ์ค์ผ์ค๋ง์ ์ ์ฉํ ์๋ก์ด ์์คํ ์ ๋๋ค. ์ฃผ์ ๊ฐ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
GPU ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ต์ ํ:
- GPU์์ ๋ชจ๋ธ ๊ฐ์ค์น ๋ฐ ์ผ๋ถ KV ์บ์๋ง ์ ์งํ๋ฉฐ, ๋๋จธ์ง ์บ์๋ CPU๋ก ์คํ๋ก๋ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ณ๋ชฉ์ ํด๊ฒฐํฉ๋๋ค.
- GPU์ CPU ์ฌ์ด์ ๋ฐ์ดํฐ ํ๋ฆ์ ์ต์ ํํ์ฌ ๋ณ๋ ฌ ์ฐ์ฐ์ ๊ทน๋ํํฉ๋๋ค.
๋น๋์นญ ํ์ดํ๋ผ์ด๋ (Asymmetric Pipelining):
- ํ๋์ ๋ฐฐ์น๋ฅผ ๋ ๊ฐ๋ก ๋๋์ด GPU์ CPU์์ ๋์์ ์์ ์ ์ํํ๋๋ก ํฉ๋๋ค.
- GPU์ ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค๋ฅผ ์ต๋ํ ํ์ฉํ๋ฉด์๋ CPU์ ์ฐ์ฐ ๋ฅ๋ ฅ์ ์ ์ ํ ๋ฐฐ์นํฉ๋๋ค.
- ๊ธฐ์กด ๋์นญ ํ์ดํ๋ผ์ด๋๋ณด๋ค ํจ์จ์ ์ผ๋ก CPU์ GPU๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ถํ ์ธ์ ์ค์ผ์ค๋ง (Load-Aware Scheduling):
- GPU ๋ฐ CPU์ ์ฌ์ฉ๋ฅ ์ ์ค์๊ฐ์ผ๋ก ๋ชจ๋ํฐ๋งํ์ฌ ์ต์ ์ ์คํ๋ก๋ ์ ์ฑ ์ ๋์ ์ผ๋ก ๊ฒฐ์ ํฉ๋๋ค.
- ์์ ์ด GPU ๋๋ CPU์์ ์ต์ ์ผ๋ก ์ํ๋๋๋ก ๋ฐฐ์น๋ฅผ ํ์ฑํฉ๋๋ค.
์ฑ๋ฅ ํฅ์:
- H100 GPU์์ ์ต๋ 14%, A10G GPU์์ 26%, T4 GPU์์ 7.5๋ฐฐ์ ์ถ๋ก ์ฒ๋ฆฌ๋ ์ฆ๊ฐ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
- ๋ณด๋ค ๊ฐ๋ ฅํ CPU๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ A10G GPU์์ 79.3%์ ์ฑ๋ฅ ๊ฐ์ ์ ๋ฌ์ฑํฉ๋๋ค.
2. ํต์ฌ ์๊ณ ๋ฆฌ์ฆ ์ค๋ช (์์ ํฌํจ)
๐ก NEO์ ํต์ฌ ์์ด๋์ด๋ GPU ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ์ ํผํ๊ธฐ ์ํด CPU๋ก ์ผ๋ถ ์์ ์ ์คํ๋ก๋ํ๋ ๊ฒ์ ๋๋ค.
NEO์ ๊ตฌ์ฑ ์์
- Prefilling: ์ ๋ ฅ ํ ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๊ธฐ KV ์บ์๋ฅผ ์์ฑํฉ๋๋ค.
- Decoding: ์ ๋ ฅ์ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ํ ํฐ์ ์์ธกํ๋ฉฐ, ์์ฑ๋ KV ์บ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- Scheduler: ์์ ์์ฒญ์ GPU์ CPU๋ก ๋ถ๋ฐฐํ๋ ๊ธฐ๋ฅ์ ํฉ๋๋ค.
์๊ณ ๋ฆฌ์ฆ ๊ณผ์
์ ๋ ฅ ๋ฐ ์ด๊ธฐํ:
- ์์ ์ ๋ ฅ: “The quick brown fox jumps over the lazy dog.”
- ๋ชจ๋ธ์ ์ด ์ ๋ ฅ์ ํ ํฐํํ๊ณ ์๋ฒ ๋ฉ์ ์์ฑํฉ๋๋ค.
Prefilling Stage (GPU):
- ์ ๋ ฅ ํ ํฐ์ ํตํด ์ด๊ธฐ KV ์บ์๋ฅผ GPU์์ ์์ฑํฉ๋๋ค.
- ์ด ๋, ๋ชจ๋ธ์ ํ๋ผ๋ฏธํฐ๋ ๋ชจ๋ GPU ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋์ด ์์ต๋๋ค.
Decoding Stage (GPU + CPU):
- ๋น๋์นญ ํ์ดํ๋ผ์ด๋์ ์ ์ฉํ์ฌ ์ผ๋ถ ์์ฒญ์ GPU์์, ์ผ๋ถ๋ CPU๋ก ์คํ๋ก๋ํ์ฌ ์ฒ๋ฆฌํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, ์ ๋ ฅ ๊ธธ์ด๊ฐ ๊ธด ์์ฒญ์ GPU์์, ์งง์ ์์ฒญ์ CPU์์ ์ฒ๋ฆฌํ๋๋ก ๋ถ๋ฐฐํฉ๋๋ค.
Load-Aware Scheduling:
- GPU์ CPU์ ์ฌ์ฉ๋ฅ ์ ์ค์๊ฐ์ผ๋ก ํ๊ฐํ์ฌ ์ต์ ์ ์์ ๋ถ๋ฐฐ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
- ๋ง์ฝ GPU๊ฐ ๊ณผ๋ถํ ์ํ๋ผ๋ฉด ๋ ๋ง์ ์์ฒญ์ CPU๋ก ์คํ๋ก๋ํฉ๋๋ค.
๊ฒฐ๊ณผ ์์ฑ:
- ์๋ฅผ ๋ค์ด, “dog"๋ผ๋ ๋จ์ด ๋ค์์ ๋ชจ๋ธ์ด “is sleeping"์ ์์ธกํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
- GPU์ CPU์์ ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๋ ๊ฒฐํฉํ์ฌ ์ต์ข ์ถ๋ ฅ์ ์์ฑํฉ๋๋ค.
3. ๋ ผ๋ฌธ์ ํ๊ณ์
GPU์ CPU ๊ฐ ํต์ ๋ณ๋ชฉ (PCIe Bandwidth ๋ฌธ์ ):
- GPU์ CPU ๊ฐ์ ๋ฐ์ดํฐ ์ ์ก์ด ๋น๋ฒํ๊ฒ ๋ฐ์ํ๋ฉด PCIe ๋์ญํญ์ด ๋ณ๋ชฉ์ผ๋ก ์์ฉํ ์ ์์ต๋๋ค.
์ค์ผ์ค๋ง ๋ณต์ก๋ ์ฆ๊ฐ:
- ๋ถํ ์ธ์ ์ค์ผ์ค๋ง์ ์ค์๊ฐ์ผ๋ก GPU์ CPU ์ฌ์ฉ๋ฅ ์ ๋ชจ๋ํฐ๋งํ๊ณ ์ต์ ์ ๋ฐฐ์น๋ฅผ ์ฐพ์์ผ ํ๋ฏ๋ก ์ถ๊ฐ์ ์ธ ๊ณ์ฐ ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค.
ํน์ ํ๊ฒฝ์์ ์ฑ๋ฅ ์ ํ:
- ์ ๋ ฅ ๊ธธ์ด๊ฐ ์งง๊ฑฐ๋ GPU ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ถฉ๋ถํ ํด ๊ฒฝ์ฐ, CPU๋ก์ ์คํ๋ก๋๊ฐ ์คํ๋ ค ์ฑ๋ฅ ์ ํ๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค.
๋ค์ค GPU ํ๊ฒฝ์์์ ์ต์ ํ ๋ฏธํก:
- ๋ ผ๋ฌธ์์๋ ์ฃผ๋ก ๋จ์ผ GPU ๋๋ 2-GPU ํ๊ฒฝ์์์ ์คํ์ด ์ด๋ฃจ์ด์ก์ผ๋ฉฐ, 4-GPU ์ด์์ ๋๊ท๋ชจ ์์คํ ์ ๋ํ ๊ฒ์ฆ์ด ๋ถ์กฑํฉ๋๋ค.
4. ๊ฒฐ๋ก ๋ฐ ์ ์
NEO๋ GPU ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ์ ๊ทน๋ณตํ๊ธฐ ์ํด CPU ์คํ๋ก๋๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ฉํ๋ ์์คํ ์ผ๋ก, ๋ค์ํ ์คํ์์ ๋์ ์ฒ๋ฆฌ๋์ ์ ์ฆํ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ค์ค GPU ํ๊ฒฝ์์์ ์ต์ ํ์ PCIe ๋์ญํญ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ถ๊ฐ์ ์ธ ์ฐ๊ตฌ๊ฐ ํ์ํฉ๋๋ค.
์ ์
- ๋ค์ค GPU ํ๊ฒฝ ์ต์ ํ: Tensor ๋ณ๋ ฌ ์ฒ๋ฆฌ ๋ฐ ๋ชจ๋ธ ์ค๋ฉ ๊ธฐ๋ฒ์ ๊ฐ์ ํ์ฌ ๋ค์ค GPU ํ๊ฒฝ์์๋ ๋์ ์ฑ๋ฅ์ ์ ์งํ ์ ์๋๋ก ๊ฐ์ ์ด ํ์ํฉ๋๋ค.
- PCIe ๋ณ๋ชฉ ํด๊ฒฐ: CPU์ GPU ๊ฐ ๋ฐ์ดํฐ ์ ์ก์ ์ค์ด๊ธฐ ์ํ ์๋ก์ด ์คํ๋ก๋ ๋ฐฉ์์ ์ฐ๊ตฌํด์ผ ํฉ๋๋ค.
ํต์ฌ ์๊ณ ๋ฆฌ์ฆ์ ์์๋ก ๋ฐ๋ผ๊ฐ๊ธฐ
๋ฌผ์ด๋ณธ ๊ฒ: ๋ ผ๋ฌธ์ ํต์ฌ์๊ณ ๋ฆฌ์ฆ์ ์์๋ฅผ ๋ค์ด ์์ฃผ ์์ธํ๊ฒ ์ค๋ช ํด์ฃผ๊ณ ์ ๋ฆฌํด ์ค
๋ ผ๋ฌธ์ ํต์ฌ ์๊ณ ๋ฆฌ์ฆ์ ์์ ์ ๋ ฅ์ ๋ฐํ์ผ๋ก ์์ฃผ ๊ตฌ์ฒด์ ์ด๊ณ ๋จ๊ณ์ ์ผ๋ก ์ค๋ช ํ๊ณ ์ ๋ฆฌํ๊ฒ ์ต๋๋ค.
๐ ํต์ฌ ์๊ณ ๋ฆฌ์ฆ: NEO์ ๋น๋์นญ GPU-CPU ํ์ดํ๋ผ์ด๋ ๋ฐ ๋ถํ ์ธ์ ์ค์ผ์ค๋ง
NEO๋ GPU ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ผ๋ก ์ธํ ์ถ๋ก ์ฑ๋ฅ ์ ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, ์ผ๋ถ ์ฐ์ฐ(Decoding Attention)๊ณผ ๋ฉ๋ชจ๋ฆฌ(KV Cache)๋ฅผ GPU์์ CPU๋ก ์คํ๋ก๋ํ์ฌ GPU์ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ๋์ด๊ณ ์ถ๋ก ์ฑ๋ฅ์ ์ฆ๊ฐ์ํค๋ ๋ฐฉ๋ฒ์ ์ ์ํฉ๋๋ค.
๐ ์๊ณ ๋ฆฌ์ฆ ์ ์ฒด ๊ณผ์ (์์๋ฅผ ํตํด ๋จ๊ณ๋ณ๋ก ์ค๋ช )
์์ ์ ๋ ฅ ํ ์คํธ:
"OpenAI develops powerful AI models."์ด ์ ๋ ฅ์ด ๋ค์ด์์ ๋ LLM ์ถ๋ก ์ด ์ด๋ป๊ฒ ์งํ๋๋์ง ๊ธฐ์กด ๋ฐฉ์(vLLM)๊ณผ NEO ๋ฐฉ์์ผ๋ก ๋๋์ด ์์ธํ ๋น๊ตํ๋ฉฐ ์ค๋ช ํฉ๋๋ค.
โ ์์ ํ๊ฒฝ
- GPU: NVIDIA A10G (GPU ๋ฉ๋ชจ๋ฆฌ ์ ํ: 24GB)
- CPU: Intel Xeon (64GB ๋ฉ๋ชจ๋ฆฌ)
๐ 1๋จ๊ณ: Prefilling Stage (์ด๊ธฐ ์ ๋ ฅ ์ฒ๋ฆฌ)
โช๏ธ ๊ธฐ์กด ๋ฐฉ์ (vLLM)
- ์ ๋ ฅ ํ ํฐ(์: [“OpenAI”, “develops”, “powerful”, “AI”, “models”, “.”])์ GPU์์ Transformer ์ธต์ ๊ฑฐ์ณ ์๋ฒ ๋ฉ ์์ฑ ๋ฐ ์ด๊ธฐ KV ์บ์ ์์ฑ
- ์์ฑ๋ KV ์บ์๋ ๋ชจ๋ GPU ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ
๋ฌธ์ ์ :
์ ๋ ฅ์ด ๋ง์์ง๋ฉด GPU ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ผ๋ก batch size๊ฐ ์ ํ๋๊ณ GPU ์ฐ์ฐ ์์์ด ๋ญ๋น๋จ.
๐ข NEO ๋ฐฉ์
- ์ ๋ ฅ ํ ํฐ์ ๋์ผํ๊ฒ GPU์์ ์ฒ๋ฆฌํ์ฌ ์๋ฒ ๋ฉ ๋ฐ ์ด๊ธฐ KV ์บ์ ์์ฑ.
- ๊ทธ๋ฌ๋ ์์ฑ๋ KV ์บ์๋ฅผ GPU ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ฉํ๋ ๋งํผ๋ง GPU์ ์ ์งํ๊ณ , ๋๋จธ์ง๋ ์ฆ์ CPU ๋ฉ๋ชจ๋ฆฌ๋ก ์คํ๋ก๋(์ ์ก) ํฉ๋๋ค.
- ์ด๋ GPU์ CPU ๊ฐ KV ์บ์ ์ ์ก์ ๊ณ์ธต(layer) ๋จ์๋ก ์ฆ์ ์ํ๋๋ฉฐ, ์ฐ์ฐ๊ณผ ์ ์ก์ด ๊ฒน์น๊ฒ ๋ฉ๋๋ค.
NEO ์ด์ :
GPU ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ๋ฌธ์ ํด๊ฒฐ (GPU์ CPU ๋ฉ๋ชจ๋ฆฌ ๋์ ํ์ฉ)
๐ 2๋จ๊ณ: Decoding Stage (์ถ๋ ฅ ํ ํฐ ์์ฑ)
์ ๋ ฅ ๋ฌธ์ฅ ๋ค์์ ์ฌ ๊ฐ๋ฅ์ฑ์ด ๋์ ๋จ์ด๋ค์ ์์ฑํ๋ ๊ณผ์ (์: “They”, “are”, “widely”, “used”, …)
โช๏ธ ๊ธฐ์กด ๋ฐฉ์ (vLLM)
- GPU์์ ์ ๋ ฅ๋ KV ์บ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก attention์ ๊ณ์ฐํ๊ณ ๋ค์ ํ ํฐ ์์ฑ (์: “They”).
- ๋ชจ๋ ๊ณ์ฐ(KV cache ๋ฐ attention ๊ณ์ฐ)์ GPU์์๋ง ์ํ.
๋ฌธ์ ์ :
GPU ๋ฉ๋ชจ๋ฆฌ ์ ํ์ผ๋ก ์ธํด batch ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ๋๋ฆฌ์ง ๋ชปํ๊ณ GPU ์ฐ์ฐ ์์์ ์ถฉ๋ถํ ํ์ฉ ๋ชป ํจ.
๐ข NEO ๋ฐฉ์
NEO๋ ๋น๋์นญ GPU-CPU ํ์ดํ๋ผ์ด๋์ ์ ์ฉํ์ฌ ๋ ๊ฐ์ ์๋ธ ๋ฐฐ์น๋ฅผ ํ์ฑํฉ๋๋ค:
Batch 0 (GPU ์ค์ฌ ๋ฐฐ์น):
- Prefilling ๋จ๊ณ์ ์์ฒญ๋ค (์ ๋ ฅ์ฒ๋ฆฌ) + ์ผ๋ถ GPU์ ์ ํฉํ Decoding ์์ฒญ๋ค์ GPU์์ ์ฒ๋ฆฌ.
- ์ฃผ๋ก GPU ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์ฐ ์์์ ํ์ฉํ์ฌ ๋น ๋ฅด๊ฒ ์งํ๋๋ batch.
Batch 1 (CPU ์ค์ฌ ๋ฐฐ์น):
- Decoding ๋จ๊ณ ์ค attention ๊ณ์ฐ์ด ๋ฌด๊ฑฐ์ด ์์ฒญ๋ค(๊ธธ์ด๊ฐ ๊ธธ๊ฑฐ๋ KV ์บ์๊ฐ ํฐ ์์ฒญ)์ CPU๋ก ์คํ๋ก๋ํ์ฌ ์ฒ๋ฆฌ.
- ์ด ์์ฒญ๋ค์ attention ์ฐ์ฐ๊ณผ KV ์บ์ ์ ๊ทผ์ CPU ๋ฉ๋ชจ๋ฆฌ์์ ์ํ.
์ด์ :
GPU๋ GPU์ ์ ํฉํ ์์ ์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ณ , CPU๋ attention ์ค์ฌ์ memory-bound ์์ ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํจ์ผ๋ก์จ ํจ์จ์ฑ ๊ทน๋ํ.
๐ 3๋จ๊ณ: Load-Aware Scheduling (GPU-CPU ๋์ ๋ถํ ๋ถ๋ฐฐ)
NEO๋ ๋งค iteration๋ง๋ค ๋ค์ ์์น์ผ๋ก GPU์ CPU์ ์์ฒญ ๋ถ๋ฐฐ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค:
- Greedy ๋ฐฉ์์ผ๋ก GPU-only ๋ฐฉ์๊ณผ GPU-CPU ํ์ดํ๋ผ์ด๋ ๋ฐฉ์์ ์์ ์ฑ๋ฅ์ ๋น๊ตํ์ฌ ๋์ ์ฑ๋ฅ์ ๋ผ ๋ฐฉ์์ ์ ํ.
- GPU์ CPU์ ์ฐ์ฐ ์๊ฐ ๊ท ํ ์ ์ง (Balancing)
- GPU์ ๋น ์๊ฐ(idle)์ ์ต์ํํ๊ณ CPU์ ์ฐ์ฐ์ GPU ์ฐ์ฐ ๋ค์ ์จ๊ฒจ์ ๋์ ์์ ์ํ (Hiding CPU)
- GPU ์ฌ์ฉ์ ๊ทน๋ํํ์ฌ ๊ฐ๋ฅํ ๋ง์ ์์ฒญ์ GPU๋ก ์ฒ๋ฆฌ (Maximizing GPU)
์ด ์์น์ ๊ธฐ๋ฐ์ผ๋ก batch ํ์ฑ ์ ์ฐจ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
| ์์ | ์ฒ๋ฆฌ ๋จ๊ณ | ์ค๋ช | ์์ ์์น |
|---|---|---|---|
| โ | GPU decoding | GPU์ ์ต์ ํ๋ ์์ฒญ์ ์ฐ์ GPU ๋ฐฐ์น | GPU |
| โก | Prefilling | ์ ์ ๋ ฅ ์์ฒญ ์ฒ๋ฆฌ, KV cache๋ GPU์ ์ ์ฅํ๊ฑฐ๋ CPU๋ก ์ ์ก | GPUโCPU |
| โข | CPU decoding | GPU ์ฒ๋ฆฌ์ ๋ฐฉํด๋์ง ์๋ ์์ฒญ์ CPU ๋ฐฐ์น | CPU |
| โฃ | Prefilling ์กฐ์ | CPU ์์ ์๊ฐ์ ์ด๊ณผํ์ง ์๋๋ก Prefilling ์์ฒญ ์ต์ ํ | GPU |
| โค | ๋ฐฉ์ ๊ฒฐ์ | GPU-only์ GPU-CPU ๋ณ๋ ฌ ์ฒ๋ฆฌ ์ค ์ต์ ์ ๋ฐฉ์์ ์ ํ | GPU-CPU |
๐ 4๋จ๊ณ: ๊ฒฐ๊ณผ ์ทจํฉ ๋ฐ ์ถ๋ ฅ
- GPU์ CPU์์ ๋ณ๋ ฌ๋ก ๊ณ์ฐ๋ attention ๊ฒฐ๊ณผ๋ ์ต์ข ์ ์ผ๋ก GPU๋ก ์ ๋ฌ๋์ด ํตํฉ๋ฉ๋๋ค.
- ์ต์ข ์๋ฒ ๋ฉ์ด ์์ฑ๋๋ฉด ๋ค์ ํ ํฐ(์: “They”)์ ํ๋ฅ ์ ๊ณ์ฐํ์ฌ ์ฌ์ฉ์์๊ฒ ์ ๊ณต๋ฉ๋๋ค.
๐ ๐ ์๊ณ ๋ฆฌ์ฆ ํจ๊ณผ (๋ ผ๋ฌธ ์คํ ๊ฒฐ๊ณผ ๊ธฐ๋ฐ)
| GPU ์ฅ๋น | ๋ชจ๋ธ ํฌ๊ธฐ | vLLM ๋๋น NEO ์ฑ๋ฅ ํฅ์ |
|---|---|---|
| T4 | 7B | ์ต๋ 7.5๋ฐฐ ์ฆ๊ฐ |
| A10G | 8B | ์ต๋ 26% ์ฆ๊ฐ |
| H100 | 70B | ์ต๋ 14% ์ฆ๊ฐ |
โป CPU ๋ฉ๋ชจ๋ฆฌ ๋์ญํญ์ด ํด์๋ก ์ฑ๋ฅ ์ฆ๊ฐํญ ์ปค์ง (์ต๋ 79.3%)
๐ ์๊ณ ๋ฆฌ์ฆ ์ ์ฒด ์์ฝ (์ ๋ฆฌ)
NEO์ ํต์ฌ์ GPU ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด CPU๋ก attention ์ฐ์ฐ๊ณผ KV ์บ์ ์ผ๋ถ๋ฅผ ํจ์จ์ ์ผ๋ก ์คํ๋ก๋ํ๋ ๊ฒ์ ๋๋ค. ๋น๋์นญ ํ์ดํ๋ผ์ด๋๊ณผ ๋ถํ ์ธ์ ์ค์ผ์ค๋ง์ ์ ์ฉํ์ฌ GPU์ CPU ์์์ ๋์ ์ผ๋ก ์ต์ ํํ๊ณ , ๊ฒฐ๊ณผ์ ์ผ๋ก GPU-only ์์คํ ๋๋น ํ์ ํ ์ฑ๋ฅ ๊ฐ์ ์ ์ด๋ฃจ์์ต๋๋ค.
- ๊ธฐ์กด ๋ฐฉ์: ๋ชจ๋ ์ฐ์ฐ๊ณผ KV ์บ์๊ฐ GPU์ ์์น.
- NEO ๋ฐฉ์:
- GPU์์ ์ ํฉํ ์์ ์ํ (Prefilling, Linear ๊ณ์ฐ)
- CPU์์ ์ ํฉํ ์์ ์ํ (Memory-bound Attention)
- GPU์ CPU ์ฐ์ฐ์ด ์๋ก ๊ฒน์ณ์ ๋ณ๋ ฌํ
๊ฒฐ๊ณผ์ ์ผ๋ก GPU ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ๊ทน๋ณตํ๊ณ GPU์ CPU์ ๊ฐ์ ์ ๋ชจ๋ ํ์ฉํ์ฌ LLM ์ถ๋ก ์ฑ๋ฅ์ ๊ฐ์ ํ ๋ ์ฐฝ์ ์ธ ์์คํ ์ ๋๋ค.
์คํ ๊ฒฐ๊ณผ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ก ๊ณผ์ ์ฐจ์ด
๋ฌผ์ด๋ณธ ๊ฒ: ์ด ๋ ผ๋ฌธ์์ ์ ์ํ ๊ฒฐ๊ณผ๋ฅผ ์์ธํ๊ฒ ๋ณด๊ณ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ก ์ ๋นํ์ฌ ํน์ถ๋ ์ ๊ณผ ๋ ผ๋ฌธ์์ ์ ๊ธฐํ๋ ์ด๋ ํ ๋ฐฉ๋ฒ์ด ์ด๋ฌํ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ๊ฒ ๋์๋์ง ๋ ผ๋ฌธ์์ ์ ์ํ๋ ์ด์ ์ ๋์ ์๊ฐ์ ์๋ ค์ค
๋ ผ๋ฌธ์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ์์ธํ ๋ถ์ํ์ฌ, ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ก ๊ณผ ๋น๊ตํ์ฌ ํน์ถ๋ ์ ๊ณผ ๊ทธ ์ด์ ๋ฅผ ๋ ผ๋ฌธ์์ ์ ์ํ ๊ทผ๊ฑฐ์ ํจ๊ป ๋ถ์ํ๊ณ , ์ ์ ๊ฒฌํด๋ฅผ ๋ง๋ถ์ฌ ์ ๋ฆฌํ๊ฒ ์ต๋๋ค.
๐ 1. ์คํ๊ฒฐ๊ณผ ์์ฝ (์ ๋์ ์์น)
๋ ผ๋ฌธ์ ์ธ ๊ฐ์ง GPU ํ๊ฒฝ(T4, A10G, H100)๊ณผ ์ธ ๊ฐ์ง LLM ๋ชจ๋ธ(7B, 8B, 70B)์ ๋ํด NEO, vLLM (GPU-only), ๊ทธ๋ฆฌ๊ณ ๊ธฐ์กด์ CPU ์คํ๋ก๋ ๋ฐฉ์์ธ FastDecode๋ฅผ ๋น๊ตํฉ๋๋ค.
| GPU ํ๊ฒฝ | ๋ชจ๋ธ ํฌ๊ธฐ | Throughput (NEO vs. GPU-only(vLLM)) | Latency |
|---|---|---|---|
| T4 | 7B | ์ต๋ 7.5๋ฐฐ(750%) ์ฆ๊ฐ | ์ ์ง |
| A10G | 8B | ์ต๋ 26% ์ฆ๊ฐ | ์ ์ง |
| H100 | 70B | ์ต๋ 14% ์ฆ๊ฐ | ์ ์ง |
์ถ๊ฐ์ ์ผ๋ก, CPU ์ฑ๋ฅ์ ๋์ผ ๊ฒฝ์ฐ A10G GPU ํ๊ฒฝ์์ ์ต๋ 79.3%์ ์ฑ๋ฅํฅ์์ด ๊ด์ฐฐ๋์์ต๋๋ค.
๐ 2. ๊ธฐ์กด ๋ฐฉ๋ฒ๋ก ๋๋น ํน์ถ๋ ์
๋ ผ๋ฌธ์์ ๋น๊ตํ ์ฃผ์ ๊ธฐ์กด ๋ฐฉ๋ฒ๋ก ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- vLLM (GPU-only): GPU๋ง ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก, ๋ฉ๋ชจ๋ฆฌ ์ ํ์ผ๋ก ์ธํด ๋์ batch ํฌ๊ธฐ๋ฅผ ํ๋ณดํ์ง ๋ชปํ๋ ํ๊ณ๊ฐ ์์ต๋๋ค.
- FastDecode: KV cache์ attention์ ๋ชจ๋ CPU์ ์์ ํ ์คํ๋ก๋ํ๋ ๋ฐฉ์์ผ๋ก, CPU๊ฐ ๋ณ๋ชฉ ์ง์ ์ด ๋์ด ์ฑ๋ฅ์ด ๋จ์ด์ง๋ ๋ฌธ์ ์ ์ด ์์ต๋๋ค.
| ๋น๊ต ๊ธฐ์ค | NEO (๋ณธ ๋ ผ๋ฌธ) | vLLM (GPU-only) | FastDecode (Full Offload) |
|---|---|---|---|
| GPU ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ | โญ ๋์ | โ ๋ฎ์ (์ ํ์ batch size) | โญ ๋์ |
| CPU-GPU ๋ณ๋ ฌํ | โญ ๋งค์ฐ ํจ์จ์ | โ ์์ | โณ ์ ํ์ ๋ณ๋ ฌํ |
| Latency ์ ์ง | โญ ์ ์ง | โญ ์ ์ง | โ ์ฆ๊ฐ |
| CPU ์์ ํ์ฉ | โญ ์ต์ ํ | โ ํ์ฉํ์ง ์์ | โณ ๋ณ๋ชฉ์ด ๋์ด ๋นํจ์จ์ |
| Throughput ์ฑ๋ฅ | โญ ๊ฐ์ฅ ๋์ | โ ๋ฎ์ | โณ ์ผ๋ถ ํ๊ฒฝ์์๋ง ๋์ |
- ํน์ถ๋ ์ง์ :
- NEO๋ GPU์ ์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ฅํ๋ฉด์ CPU ์์์ ์ต๋ํ ํ์ฉํ์ฌ GPU-only ๋ฐฉ์๊ณผ Full-offload ๋ฐฉ์์ ๋จ์ ์ ๋ชจ๋ ๋ณด์ํ์ต๋๋ค.
- ํนํ GPU-only ๋ฐฉ์(vLLM)์ ๋นํด ์ต๋ 750%๋ผ๋ ๊ทน์ ์ธ ์ฑ๋ฅ ํฅ์์ ๋ณด์ฌ์ฃผ๋ฉฐ, FastDecode์ CPU ๋ณ๋ชฉ ๋ฌธ์ ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํํผํ์์ต๋๋ค.
๐ 3. ๋ ผ๋ฌธ์์ ๋ฐํ ์ฑ๋ฅ ํฅ์์ ์ฃผ์ ์์ธ (๋ ผ๋ฌธ์ ์ฃผ์ฅ)
๋ ผ๋ฌธ์ NEO๊ฐ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ผ ์ ์์๋ ์ฃผ์ ์ด์ ๋ก ๋ค์ ๋ ๊ฐ์ง ํต์ฌ ๊ธฐ์ ์ ์ ์ํฉ๋๋ค.
โ Asymmetric Pipelining (๋น๋์นญ ํ์ดํ๋ผ์ด๋)
- GPU ์ฐ์ฐ(Linear operation, Prefilling)์ ์ต์ ํ๋ ์์ฒญ์ GPU์์,
attention ์ฐ์ฐ์ด ๋ง์ ์์ฒญ์ CPU์์ ์ฒ๋ฆฌํ์ฌ ๋ณ๋ ฌํํฉ๋๋ค. - ํจ๊ณผ: GPU ๋ฉ๋ชจ๋ฆฌ์ ํจ์จ์ ์ฌ์ฉ๊ณผ ๋์์ CPU ์ฐ์ฐ ๋ฅ๋ ฅ๊น์ง ์ต๋ํํฉ๋๋ค.
๋ ผ๋ฌธ์ ๊ทผ๊ฑฐ:
“๊ธฐ์กด ๋์นญ(symmetric) ํ์ดํ๋ผ์ด๋์ GPU์ CPU๊ฐ ๋์ผํ ์์ ๋์ ์ฒ๋ฆฌํ๋๋ก ๊ฐ์ ํ๋ฏ๋ก, CPU๊ฐ ๋ณ๋ชฉ์ด ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
NEO์ ๋น๋์นญ(asymmetric) ํ์ดํ๋ผ์ด๋์ ์๋ก ๋ค๋ฅธ ์์ ์ฑ๊ฒฉ์ GPU์ CPU์ ์ ์ ํ ๋ฐฐ์นํ์ฌ idle ์๊ฐ์ ์ต์ํํ๊ณ ์ฑ๋ฅ์ ๊ทน๋ํํฉ๋๋ค.”
โก Load-Aware Scheduling (๋ถํ ์ธ์ ์ค์ผ์ค๋ง)
- ๋งค iteration๋ง๋ค ์ค์๊ฐ์ผ๋ก GPU์ CPU์ ๋ถํ๋ฅผ ๊ณ ๋ คํด ์์ฒญ์ ๋์ ์ผ๋ก ๋ถ๋ฐฐํฉ๋๋ค.
- ํจ๊ณผ: GPU์ CPU ์ด๋ ํ ์ชฝ๋ ๋ณ๋ชฉ์ด ๋์ง ์๋๋ก ๊ท ํ ์ ์ง๊ฐ ๊ฐ๋ฅํด์ง๋๋ค.
๋ ผ๋ฌธ์ ๊ทผ๊ฑฐ:
“๊ธฐ์กด ๋ฐฉ์์ ์ ์ ์ธ(static) ์ ์ฑ ์ ์ฌ์ฉํ์ฌ ์์ฒญ์ ์ /์ถ๋ ฅ ๊ธธ์ด ๋ณํ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋์ํ๊ธฐ ์ด๋ ต์ต๋๋ค.
NEO์ ๋์ ๋ถํ ์ธ์ ์ค์ผ์ค๋ง์ ์ค์๊ฐ ํ๊ฒฝ์์ ๊ฐ์ฅ ํจ์จ์ ์ธ ์์ฒญ ๋ฐฐ์น๋ฅผ ๊ฒฐ์ ํด ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.”
๐ฏ 4. ๋์ ๋ถ์ ๋ฐ ๊ฒฌํด
๋ ผ๋ฌธ์ ์ ๊ทผ ๋ฐฉ๋ฒ์ GPU ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฝ์ ํด๊ฒฐํ๊ธฐ ์ํ ์๋นํ ํ์ค์ ์ด๊ณ ํจ๊ณผ์ ์ธ ์ ๊ทผ์ ๋๋ค. ํนํ, ๋ค์๊ณผ ๊ฐ์ ์ธก๋ฉด์์ ๋ ์ฐฝ์ฑ๊ณผ ์คํจ์ฑ์ ๋๊ฒ ํ๊ฐํฉ๋๋ค.
ํ์ค์ ์ธ GPU ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ
GPU ๊ธฐ์ ์ ๋น ๋ฅด๊ฒ ๋ฐ์ ํ์ฌ ์ฐ์ฐ ์ฑ๋ฅ์ ๊ธ์ํ ์ฆ๊ฐํ์ผ๋, ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ ์ ํ์ ์ธ ๋ฐ์ ์๋๋ฅผ ๋ณด์์ต๋๋ค.
NEO๋ ์ด๋ฌํ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ๋ฌธ์ ์ ๋ํด CPU ์คํ๋ก๋๋ฅผ ์์ฃผ ์ค์ฉ์ ์ธ ํด๋ฒ์ผ๋ก ์ ์ํ์ต๋๋ค.CPU ์์์ ์ต๋ํ ํ์ฉํ๋ ๊ด์
๋๋ถ๋ถ ์๋ฒ ํ๊ฒฝ์์๋ GPU์ ํจ๊ป ๊ฐ๋ ฅํ CPU๊ฐ ๋ฐฐ์น๋ฉ๋๋ค.
์ด๋ฅผ ํ์ฉํ์ง ์๊ณ GPU๋ง์ ์ฌ์ฉํ๋ ๊ธฐ์กด ๋ฐฉ์๊ณผ ๋ฌ๋ฆฌ, CPU๋ฅผ ์ ๊ทน ํ์ฉํ์ฌ ์์์ ๋ญ๋น ์์ด ์ต๋ํ ์ฑ๋ฅ์ ๋์ด๋ธ ์ ์ด ๋ ์ฐฝ์ ์ ๋๋ค.CPU๋ฅผ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ์ง ์๋ ์ ์ ๋ ์ค๊ณ
FastDecode๋ ๋ชจ๋ attention ์์ ์ CPU๋ก ๋๊ธฐ๋ฉด์ CPU ๋ณ๋ชฉ ๋ฌธ์ ๊ฐ ์ฌ๊ฐํ์ต๋๋ค.
๋ฐ๋ฉด NEO๋ ๋ถ๋ถ์ ์ธ ์คํ๋ก๋๋ก CPU์ ๋ถ๋ด์ ์ต์ํํ์ฌ, ํ์ค์ ์ธ ๋ณ๋ชฉ ๋ฌธ์ ๋ฅผ ํํผํ๋ ์งํ๋ก์ด ์ค๊ณ๋ฅผ ๋ณด์์ต๋๋ค.
๋ค๋ง, ํ ๊ฐ์ง ์ฐ๋ ค๋๋ ๋ถ๋ถ์:
- GPU-CPU ๊ฐ ๋น๋ฒํ ๋ฐ์ดํฐ ์ ์ก์ผ๋ก ์ธํ PCIe bandwidth ๋ณ๋ชฉ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
- ์ด๋ ๋ ๋์ ์ฑ๋ฅ์ PCIe ๋๋ CXL ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ํด์๋ ๊ฐ๋ฅ์ฑ์ด ์์ง๋ง, ๋ณด๋ค ๊ตฌ์ฒด์ ์ธ ์คํ ๊ฒ์ฆ์ด ํ์ํฉ๋๋ค.
๐ ์ต์ข ๊ฒฐ๋ก ๋ฐ ์ ์
์ด ๋ ผ๋ฌธ์ GPU ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํจ๊ณผ์ ์ด๋ฉฐ ์ค์ฉ์ ์ธ ์ ๊ทผ๋ฒ์ผ๋ก์ ๋งค์ฐ ์ ์๋ฏธํ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ์ต๋๋ค. ์ด๋ GPU-CPU์ ์์์ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ์ ๋ต ๋๋ถ์ด๋ฉฐ, ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ก ์ด ๊ฐ์ง๋ ํ๊ณ๋ฅผ ๊ทน๋ณตํ ๋ ์ฐฝ์ ์ธ ๊ธฐ๋ฒ์ ๋๋ค.
ํฅํ ์ฐ๊ตฌ์์๋:
- PCIe ๋์ญํญ ์ ํ์ ์ด๋ป๊ฒ ๊ทน๋ณตํ ์ ์์์ง์ ๋ํ ์ถ๊ฐ ์คํ๊ณผ ๋ถ์์ด ํ์ํฉ๋๋ค.
- ๋ ๋ง์ GPU (4~8 GPU ์ด์)๋ฅผ ์ฌ์ฉํ๋ ๋๊ท๋ชจ ํ๊ฒฝ์์์ ์ฑ๋ฅ์ ๊ฒ์ฆํ๋ ๊ฒ์ด ํ์ํฉ๋๋ค.
์ด๋ฌํ ์ถ๊ฐ ์ฐ๊ตฌ๊ฐ ์ด๋ฃจ์ด์ง๋ค๋ฉด, NEO ๋ฐฉ์์ ๋๊ท๋ชจ LLM ์ถ๋ก ์์คํ ์ ์ฑ๋ฅ๊ณผ ํจ์จ์ฑ์ ํฌ๊ฒ ๊ฐ์ ํ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
์ ๋ ฅ ๋ฐ์ดํฐ์ ์ถ๋ก ๊ณผ์ , ๋ชจ๋ธ ๊ตฌ์กฐ์ ์์ ์๊ตฌ๋
๋ฌผ์ด๋ณธ ๊ฒ: ์ด ๋ ผ๋ฌธ์ ์ ๋ ฅ๋ฐ์ดํฐ์ ์ถ๋ก ๊ณผ์ ์ ๋ํด์ ์์๋ฅผ ๋ค์ด ์์ฃผ ์์ธํ๊ฒ ์ค๋ช ํด ์ฃผ๊ฒ ๋? ์ถ๊ฐ์ ์ผ๋ก ๋ชจ๋ธ์ํคํ ์ฒ์ ๊ตฌ์ฑ ๋ฐ ๋ชจ๋ธ์ ๊ตฌ์ฑํ๋ ์ฐ์ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ๋ ์ปดํจํ ์๊ตฌ๋ ๋ํด์๋ ์ค๋ช ํด์ค
์ด ๋ ผ๋ฌธ์์ ์ ์๋ NEO ์์คํ ์ ์ ๋ ฅ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ณผ์ , ์ถ๋ก ๊ณผ์ , ๋ชจ๋ธ ์ํคํ ์ฒ, ์ฐ์ฐ ๋ฐ ๋ฉ๋ชจ๋ฆฌ/์ปดํจํ ์๊ตฌ๋์ ์์๋ฅผ ๋ค์ด ๋งค์ฐ ๊ตฌ์ฒด์ ์ผ๋ก ์ค๋ช ํ๊ฒ ์ต๋๋ค.
๐ 1. ์ ๋ ฅ ๋ฐ์ดํฐ์ ์ถ๋ก ๊ณผ์ ์์ (Detailed Example)
๋ค์๊ณผ ๊ฐ์ ์ ๋ ฅ ๋ฌธ์ฅ์ ์์๋ก ๋ค๊ฒ ์ต๋๋ค.
์ ๋ ฅ ๋ฌธ์ฅ:
"GPT models can generate high-quality text."์ด ์ ๋ ฅ์ ๊ธฐ๋ฐ์ผ๋ก NEO ์์คํ ์์ ์ถ๋ก ์ด ์งํ๋๋ ๊ตฌ์ฒด์ ์ด๊ณ ์์ธํ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๐ 2. NEO ์์คํ ์ ๋จ๊ณ๋ณ ์ถ๋ก ๊ณผ์ ์์ธ ์ค๋ช
NEO์์์ LLM ์ถ๋ก ์ ํฌ๊ฒ Prefilling๊ณผ Decoding ๋ ๋จ๊ณ๋ก ๋๋์ด ์งํ๋ฉ๋๋ค.
โ ๋จ๊ณ 1: Prefilling ๋จ๊ณ
์ด ๋จ๊ณ์์๋ ์ ๋ ฅ๋ ๋ฌธ์ฅ ์ ์ฒด๋ฅผ ๋ชจ๋ธ์ด ์ฒ๋ฆฌํ์ฌ ์ต์ด์ KV ์บ์๋ฅผ ์์ฑํฉ๋๋ค.
์ ๋ ฅ ํ ํฐํ(Tokenization)
์ ๋ ฅ ๋ฌธ์ฅ์ด ๋ชจ๋ธ์ด ์ดํดํ ์ ์๋ ํ ํฐ ํํ๋ก ๋ณํ๋ฉ๋๋ค.PLAINTEXT["GPT", "models", "can", "generate", "high", "-", "quality", "text", "."]["GPT", "models", "can", "generate", "high", "-", "quality", "text", "."]์๋ฒ ๋ฉ(Embedding)
๊ฐ ํ ํฐ์ ์๋ฒ ๋ฉ ๋ ์ด์ด๋ฅผ ํต๊ณผํ์ฌ ๋ฒกํฐ ํํ๋ก ๋ฐ๋๋๋ค.- ์
๋ ฅ ์ฐจ์ ์์:
[ํ ํฐ์ ร ์๋ฒ ๋ฉ ํฌ๊ธฐ]
- ์
๋ ฅ ์ฐจ์ ์์:
Transformer Layer ์ฐ์ฐ
Transformer๋ ์ฃผ๋ก Attention ์ฐ์ฐ๊ณผ Feed Forward Network (FFN) ์ฐ์ฐ์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค.Self-Attention ์ฐ์ฐ: ์ ๋ ฅ ๋ฒกํฐ๋ผ๋ฆฌ ์ฐ๊ด์ฑ์ ๊ณ์ฐํ์ฌ context-awareํ ๋ฒกํฐ๋ฅผ ์์ฑํฉ๋๋ค.
- Attention(Q,K,V) = softmax(QKแต/โd_k)V
- ๊ณ์ฐ ๋ณต์ก๋: ์ ๋ ฅ ๊ธธ์ด \( n \)์ ๋ํด \( O(n^2) \)
KV Cache ์์ฑ
Attention ์ฐ์ฐ์ ์ค๊ฐ ๊ฒฐ๊ณผ๋ก Key, Value ๋ฒกํฐ๋ฅผ ์์ฑํ์ฌ GPU ๋ฐ CPU ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํฉ๋๋ค.
(์: “GPT models can generate"์ ๊ฐ์ ์ด์ ํ ํฐ์ ์ ๋ณด๊ฐ KV cache์ ์ ์ฅ)FFN ์ฐ์ฐ
Attention ์ถ๋ ฅ์ ๋ฐ์ FFN ์ธต์ ํต๊ณผํ๋ฉฐ, ๋ชจ๋ธ์ ํํ ๋ฅ๋ ฅ์ ์ฆ๊ฐ์ํค๋ ์ถ๊ฐ ๋ณํ์ ์ํํฉ๋๋ค.
์ด ๊ณผ์ ํ GPU์์ ์์ฑ๋ KV cache ์ค ์ผ๋ถ๋ CPU ๋ฉ๋ชจ๋ฆฌ๋ก ์คํ๋ก๋ ๋ฉ๋๋ค.
โ ๋จ๊ณ 2: Decoding ๋จ๊ณ
Decoding ๋จ๊ณ์์๋ ๋ค์์ ์ฌ ํ ํฐ์ ํ๋์ฉ ์์ฑํ๋ ๊ณผ์ ์ ๋๋ค.
์์: ์
๋ ฅ ๋ฌธ์ฅ ์ดํ ์์ฑํ ๋ค์ ๋จ์ด "They"์ ์์ฑ์ ์์ธก
Attention ์ฐ์ฐ (Decoding Attention)
์๋ก์ด ์ ๋ ฅ ํ ํฐ"They"์ ๋ํ attention ์ฐ์ฐ์, ๊ธฐ์กด KV cache์์ attention์ ๊ณ์ฐํฉ๋๋ค.- ๊ณ์ฐ ๋ณต์ก๋: KV cache์ ๊ธธ์ด(\(m\))์ ๋ํด \( O(m) \) (์ ํ ๋ณต์ก๋)
- ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์ค์ฌ ์ฐ์ฐ(memory bandwidth-bound ์ฐ์ฐ)
NEO์ GPU-CPU ์คํ๋ก๋ ์ ๋ต
- GPU์ KV cache๊ฐ ์๋ ๊ฒฝ์ฐ: GPU์์ ์ฒ๋ฆฌ
- CPU์ ์คํ๋ก๋๋ KV cache๋ CPU ๋ฉ๋ชจ๋ฆฌ์์ ์ฒ๋ฆฌ
๋น๋์นญ ํ์ดํ๋ผ์ด๋ (NEO์ ๋ ์ฐฝ์ฑ)
- GPU๊ฐ Prefilling๊ณผ Decoding ์ผ๋ถ ์ฐ์ฐ(FFN, Linear)์ ๋ณ๋ ฌ ์ํ
- CPU๊ฐ Attention ์ฐ์ฐ๋ง ๋ณ๋ ฌ๋ก ์ํ
์ด๋ ๊ฒ GPU์ CPU์์ ๋ณ๋ ฌ๋ก ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๊ฐ ๋ค์ ๊ฒฐํฉ๋์ด ๋ค์ ๋จ์ด์ ํ๋ฅ ๋ถํฌ๋ฅผ ๊ณ์ฐํ๊ณ , ๊ฐ์ฅ ํ๋ฅ ์ด ๋์ ๋จ์ด๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
๐ ๏ธ 3. ๋ชจ๋ธ ์ํคํ ์ฒ ๊ตฌ์ฑ (Transformer ๊ตฌ์กฐ)
NEO๊ฐ ์ฌ์ฉํ๋ Transformer ๊ธฐ๋ฐ ๋ชจ๋ธ ์ํคํ ์ฒ๋ ๋ค์๊ณผ ๊ฐ์ ์ธต(layer)๋ค๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
[Input] โ [Embedding Layer] โ [Transformer Layer (Attention + FFN)] x N โ [Linear Layer] โ [Output Token Probabilities]๊ฐ Transformer ์ธต์ ๋ค์๊ณผ ๊ฐ์ ์ฐ์ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- Multi-Head Attention
- Query(Q), Key(K), Value(V) ๋ฒกํฐ ๊ณ์ฐ ๋ฐ Attention ์ฐ์ฐ
- Feed Forward Network (FFN)
- ๋ ๊ฐ์ fully-connected ์ธต์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ ์ค๊ฐ์ ํ์ฑํ ํจ์(ReLU ๋๋ GELU)๊ฐ ์ ์ฉ
๋ชจ๋ธ ์์: LLaMa-3 8B ๋ชจ๋ธ
- ๋ชจ๋ธ ํ๋ผ๋ฏธํฐ: 80์ต ๊ฐ
- ์ธต(layer) ์: 32๊ฐ
- ์๋ฒ ๋ฉ ์ฐจ์: 4096 ์ฐจ์
- ํค๋(head)์ ์: 32๊ฐ (Attention ์ฐ์ฐ์ ๋ณ๋ ฌ์ฑ ์ ๊ณต)
๐ป 4. ์ฐ์ฐ ์๊ตฌ๋ (Computational Complexity)
Transformer ๊ธฐ๋ฐ ๋ชจ๋ธ์ ์ฐ์ฐ์ ํฌ๊ฒ ๋ค์ ๋ ๊ฐ์ง๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
| ์ฐ์ฐ ์ข ๋ฅ | ์ฐ์ฐ ์ค๋ช | ๊ณ์ฐ ๋ณต์ก๋ |
|---|---|---|
| Attention ์ฐ์ฐ | ์ ๋ ฅ ์ํ์ค ๊ธธ์ด n, ๋ฒกํฐ ์ฐจ์ d์ผ ๋ | \(O(n^2 \cdot d)\) (Prefilling), \(O(n \cdot d)\) (Decoding) |
| FFN ์ฐ์ฐ | ์ ๋ ฅ ๊ธธ์ด n, ๋ฒกํฐ ์ฐจ์ d์ผ ๋ | \(O(n \cdot d^2)\) |
- Attention์ ์งง์ ๋ฌธ์ฅ์์๋ ํฐ ๋ฉ๋ชจ๋ฆฌ bandwidth๋ฅผ ์๊ตฌํฉ๋๋ค.
- FFN์ GPU ์ฐ์ฐ ๋ฅ๋ ฅ์ ๋ง์ด ํ์๋ก ํ๋ compute-bound ์ฐ์ฐ์ ๋๋ค.
๐พ 5. ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ๋ (Memory Requirements)
๋ฉ๋ชจ๋ฆฌ๋ ํฌ๊ฒ ๋ชจ๋ธ ๊ฐ์ค์น, Activations, KV Cache ๋ก ๋๋ ์ง๋๋ค.
| ๋ฉ๋ชจ๋ฆฌ ์ข ๋ฅ | ์ค๋ช | ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ๋ ์์ (LLaMa-3 8B ๊ธฐ์ค) |
|---|---|---|
| ๋ชจ๋ธ ๊ฐ์ค์น | ๋ชจ๋ธ ํ๋ผ๋ฏธํฐ ์ ์ฅ | ์ฝ 16 GB (FP16) |
| Activations | ์ถ๋ก ์ ์์ ์ ์ฅ | ์๋ฐฑ MB ~ GB (Batch์ ๋ฐ๋ผ ๋ฌ๋ผ์ง) |
| KV Cache | ์ด์ ํ ํฐ์ ์ ๋ณด๋ฅผ ์ ์ฅ | ์ ๋ ฅ ๊ธธ์ด์ ์ถ๋ ฅ ๊ธธ์ด์ ๋น๋ก (์ GB~์์ญ GB ์ด์ ๊ฐ๋ฅ) |
NEO๋ ์ด ์ค KV cache ์ผ๋ถ๋ฅผ CPU ๋ฉ๋ชจ๋ฆฌ๋ก ์คํ๋ก๋ํ์ฌ GPU ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ด์ ์ค์ ๋๋ค.
โ๏ธ 6. NEO๊ฐ ์ฐ์ฐ/๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ๋์ด๋ ๋ฐฉ๋ฒ
NEO์ ์ฑ๋ฅํฅ์ ์์ธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- GPU ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ โ CPU ๋ฉ๋ชจ๋ฆฌ ํ์ฉ (์คํ๋ก๋)
- Attention ์ฐ์ฐ์ ๋ฉ๋ชจ๋ฆฌ bandwidth-bound ํน์ฑ โ CPU์์ ํจ์จ์ ์ฒ๋ฆฌ
- FFN ์ฐ์ฐ์ compute-bound ํน์ฑ โ GPU์์ ํจ์จ์ ์ฒ๋ฆฌ
- GPU์ CPU์ ์ฐ์ฐ์ ๋น๋์นญ์ ์ผ๋ก ๋ณ๋ ฌํ โ idle ์๊ฐ์ ์ต์ํํด ์ฑ๋ฅ ๊ทน๋ํ
์ด๋ฌํ ์ ๋ต ๋๋ถ์, ๋์ผ ํ๋์จ์ด ํ๊ฒฝ์์๋ GPU-only ๋ฐฉ์ ๋๋น ์ต๋ 7.5๋ฐฐ๋ผ๋ ๋๋ผ์ด ์ฑ๋ฅํฅ์์ ๋ณด์ผ ์ ์๊ฒ ๋ฉ๋๋ค.
๐ฉ ๊ฒฐ๋ก ๋ฐ ๋์ ์๊ฒฌ
NEO๋ Transformer ๊ธฐ๋ฐ ๋ชจ๋ธ์ ํน์ง์ ์ ๋ถ์ํ์ฌ GPU์ ๋ฉ๋ชจ๋ฆฌ ํ๊ณ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํด๊ฒฐํ๊ณ GPU์ CPU์ ์์์ ์ต์ ์ผ๋ก ํ์ฉํ ์์คํ ์ ๋๋ค.
์ด๋ฌํ ๊ตฌ์กฐ์ ์ดํด์ ํจ์จ์ ์ธ ์์ ๋ฐฐ์น๋ ์์ผ๋ก๋ ๋ค์ํ ๋๊ท๋ชจ AI ์์คํ ๊ฐ๋ฐ์ ์ค์ํ ์ค๊ณ๋ฐฉ์์ผ๋ก ํ์ฉ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํ๊ณ๋ฅผ ๋์ผ๋ ค๋ ์ฐ๊ตฌ ํ๋ฆ
๋ฌผ์ด๋ณธ ๊ฒ: ์ด ๋ ผ๋ฌธ์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ด๋ค ์ฐ๊ตฌํ๋ฆ์ด ์๋์ง ์ ๋ฆฌํด์ ์์ธํ๊ฒ ์ค๋ช ํด ์ค
๋ณธ ๋ ผ๋ฌธ(N E O)์ GPU ๋ฉ๋ชจ๋ฆฌ์ ์ ํ์ผ๋ก ์ธํ ์ฑ๋ฅ ์ ํ ๋ฌธ์ ๋ฅผ CPU ์คํ๋ก๋ ๋ฐ ๋น๋์นญ ํ์ดํ๋ผ์ด๋ ๊ธฐ๋ฒ์ผ๋ก ํจ๊ณผ์ ์ผ๋ก ํด๊ฒฐํ์ต๋๋ค. ํ์ง๋ง ๋ ผ๋ฌธ์ด ๋ฐํ ๋ช ๊ฐ์ง ํ๊ณ์ ์ด ์์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ต๊ทผ์ ์ฐ๊ตฌํ๋ฆ์์ ์ด๋ ํ ์ ๊ทผ๋ฒ๊ณผ ์ฐ๊ตฌ ๋ฐฉํฅ๋ค์ด ์๋์ง ์ ๋ฆฌํ๊ณ ์ ์ํ๊ฒ ์ต๋๋ค.
๐ 1. ๋ ผ๋ฌธ์์ ๋ฐํ ํ๊ณ์ ์์ฝ
๋ ผ๋ฌธ์์ ์ง์ ์ ์ผ๋ก ์ ์ํ๊ฑฐ๋ ๊ฐ์ ์ ์ผ๋ก ์ธ๊ธํ NEO์ ํ๊ณ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
GPU-CPU ๊ฐ ํต์ ๋ณ๋ชฉ(PCIe bandwidth ๋ฌธ์ )
- GPU์ CPU ์ฌ์ด KV ์บ์ ๋ฐ์ดํฐ์ ๋น๋ฒํ ์ ์ก์ผ๋ก ์ธํด PCIe ์ธํฐํ์ด์ค๊ฐ ๋ณ๋ชฉ์ด ๋ ๊ฐ๋ฅ์ฑ ์กด์ฌ
- ๋์ญํญ ์ ํ์ผ๋ก ์ธํด ์ค์ ์ด์ ํ๊ฒฝ์์ ์ฑ๋ฅ ์ ํ ์ฐ๋ ค๊ฐ ์์
๋์ ์ค์ผ์ค๋ง์ ๋ณต์ก๋ ์ฆ๊ฐ ๋ฌธ์
- GPU์ CPU ์์ ์ฌ์ฉ๋ฅ ์ค์๊ฐ ๋ชจ๋ํฐ๋ง ๋ฐ ๋ถํ ๊ท ํ ์ ์ง๋ฅผ ์ํ ๋ณต์กํ ์ค์ผ์ค๋ง ๊ณ์ฐ ๋น์ฉ ๋ฐ์
๋ค์ค GPU ํ๊ฒฝ์์์ ๋ฏธํกํ ์ต์ ํ
- ๋ณธ ์ฐ๊ตฌ์์๋ ์ฃผ๋ก ๋จ์ผ ๋๋ 2-GPU ํ๊ฒฝ ์คํ ์ํ
- ์์ญ์์ ์๋ฐฑ GPU๊ฐ ์ฌ์ฉ๋๋ ๋๊ท๋ชจ ํ๊ฒฝ์์๋ ์ฑ๋ฅ ๊ฒ์ฆ ๋ถ์กฑ
๐ 2. ํ๊ณ ๊ทน๋ณต์ ์ํ ์ต๊ทผ ์ฐ๊ตฌ ํ๋ฆ ๋ฐ ์ ๊ทผ ๋ฐฉ๋ฒ
๐ฉ (1) GPU-CPU ๊ฐ ๋ณ๋ชฉ ํด๊ฒฐ์ ์ํ ์ ๊ทผ ๋ฐฉ๋ฒ๋ค
โ โ ์ฐจ์ธ๋ ๊ณ ์ ์ธํฐํ์ด์ค ๊ธฐ์ ํ์ฉ
- PCIe 5.0, 6.0, CXL(Compute Express Link)
- ์ต๊ทผ PCIe 4.0 (64GB/s)์์ PCIe 5.0 (128GB/s), 6.0 (256GB/s)๋ก ๋น ๋ฅด๊ฒ ์งํ ์ค
- ํนํ CXL ๊ธฐ์ ์ GPU-CPU ๊ฐ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ง์, ์ฑ๋ฅ ๊ทน๋ํ ๊ฐ๋ฅ์ฑ ์์
๊ด๋ จ ์ต์ ์ฐ๊ตฌ ํ๋ฆ
DistServe(2024),FastServe(2023): ๋ฐ์ดํฐ ํ๋ฆ ์ต์ ํ์ ์ธํฐํ์ด์ค ๊ธฐ์ ์ ์ ๋ชฉํด GPU-CPU ์ ์ก ํจ์จ ํฅ์InstInfer(2024): ์ ์ฅ์ฅ์น(SSD)์ ์ผ๋ถ ์ฐ์ฐ์ offloadingํ์ฌ PCIe ๋ณ๋ชฉ ํํผ ์๋
โ โก ์์ถ ๋ฐ ๊ฒฝ๋ํ ๊ธฐ์ (KV cache ์์ถ, ์์ถ ์ฐ์ฐ)
- KV cache ์์ถ(KV-cache compression) ๋ฐ ์์ํ(Quantization)
- KV cache ์์ถ ๊ธฐ์ ๋ก ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ ์ค์ฌ GPU-CPU ๊ฐ ๋ฐ์ดํฐ ์ ์ก๋ ๊ฐ์
- ๋ฎ์ ๋นํธ ์ ๋ฐ๋(8-bit, 4-bit) ์ฐ์ฐ์ ํ์ฉํ KV cache ์ฐ์ฐ ํจ์จํ ์ฐ๊ตฌ ์งํ ์ค
๊ด๋ จ ์ต์ ์ฐ๊ตฌ ํ๋ฆ
Atom(2024),GPTQ(2023): 8-bit ์ดํ ์์ํ ๋ฐ sparse ์์ถ์ ํ์ฉํ KV-cache ์์ถAWQ(2024): Activation-aware quantization์ผ๋ก ๋ฐ์ดํฐ ์ ์ก๋ ์ ๊ฐ ๋ฐ bandwidth ์๊ตฌ๋ ๊ฐ์
๐ฉ (2) ๋์ ์ค์ผ์ค๋ง ๋ณต์ก๋ ํด๊ฒฐ์ ์ํ ์ฐ๊ตฌ ๋ฐฉํฅ
โ โ ๊ฐํํ์ต ๊ธฐ๋ฐ ์ต์ ํ๋ ๋์ ์ค์ผ์ค๋ง
- ๋ณต์กํ ํ๊ฒฝ์ ๋์ ์ต์ ํํ๋ ๋ฌธ์ ์ ๊ฐํํ์ต(RL)์ ํ์ฉ
- GPU ๋ฐ CPU ์ฌ์ฉ๋ฅ ์ ์์ธกํ๊ณ , ์ํฉ์ ๋ง๋ ์ค์ผ์ค๋ง ์ ์ฑ ์ ํ์ตํ์ฌ ์ค์๊ฐ ์ค๋ฒํค๋๋ฅผ ์ต์ํ
๊ด๋ จ ์ต์ ์ฐ๊ตฌ ํ๋ฆ
ORCA(2022),Sarathi-Serve(2024): RL ๊ธฐ๋ฐ ๋๋ ํด๋ฆฌ์คํฑ ๋ฐฉ๋ฒ์ ์ด์ฉํ์ฌ ์ค์ผ์ค๋ง ์ต์ ํ ์๋- RL-based Scheduling (์ต๊ทผ Google Research ๋ฑ์์ ํ๋ฐํ ์ฐ๊ตฌ ์ค)
โ โก ํด๋ฆฌ์คํฑ & ๋ฉํ๋ฌ๋์ ํตํ ์ค์ผ์ค๋ง ๊ฐ์ํ
- ๋ณต์กํ ์ค์ผ์ค๋ง ์ฐ์ฐ์ ๋จ์ํ๋ ํด๋ฆฌ์คํฑ(Heuristic) ๋ฐ ๋ฉํ๋ฌ๋(Meta-learning) ๊ธฐ๋ฐ์ ๊ฐ๋จํ ๋ชจ๋ธ๋ก ๊ตฌํํ์ฌ ์ค์๊ฐ ์ค์ผ์ค๋ง ์ค๋ฒํค๋ ์ต์ํ
๊ด๋ จ ์ต์ ์ฐ๊ตฌ ํ๋ฆ
FlexGen(2023),HeteGen(2024): ํด๋ฆฌ์คํฑ ๋ฐฉ์์ ํจ์จ์ ์ธ ์ค์ผ์ค๋ง ์ฐ๊ตฌ- Lightweight meta-schedulers (์ค์ผ์ค๋ง ์ค๋ฒํค๋๋ฅผ ์ต์ํํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ต๊ทผ ํ๋ฐํ ์ฐ๊ตฌ๋จ)
๐ฉ (3) ๋ค์ค GPU ํ๊ฒฝ ์ต์ ํ ์ฐ๊ตฌ ํ๋ฆ
โ โ ํ ์ ๋ณ๋ ฌํ(Tensor Parallelism) ๋ฐ ๋ชจ๋ธ ์ค๋ฉ(Sharding)
- ๋ชจ๋ธ ๋ฐ ๋ฐ์ดํฐ๋ฅผ GPU๊ฐ ๋๋์ด ๋ฐฐ์นํ์ฌ GPU ๋ฉ๋ชจ๋ฆฌ ํจ์จํ ๋ฐ ์ฐ์ฐ ๋ณ๋ ฌํ
- ๋ณ๋ ฌ GPU ํ๊ฒฝ์์ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๋ถ๋ฐฐ ๋ฐ ๊ณ์ฐ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ด ์ค์ ์ฐ๊ตฌ ์ฃผ์
๊ด๋ จ ์ต์ ์ฐ๊ตฌ ํ๋ฆ
Megatron-LM(NVIDIA, 2022~),Alpa(2023): ๋๊ท๋ชจ ํ ์ ๋ณ๋ ฌํ ๋ฐ ํจ์จ์ ์ธ GPU ๋ถ์ฐ์ฒ๋ฆฌ ์ฐ๊ตฌDistServe(2024),DeepSpeed(Microsoft, 2023): ๋ฐ์ดํฐ ๋ฐ ๋ชจ๋ธ ๋ณ๋ ฌํ๋ฅผ ํตํ ํจ์จ์ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์ฐ์ฐ ์ฒ๋ฆฌ
โ โก ํ์ด๋ธ๋ฆฌ๋ ๋ณ๋ ฌํ ๊ธฐ๋ฒ (Hybrid Parallelism)
- ํ ์ ๋ณ๋ ฌํ + ๋ฐ์ดํฐ ๋ณ๋ ฌํ + ํ์ดํ๋ผ์ธ ๋ณ๋ ฌํ๋ฅผ ๊ฒฐํฉํ ํ์ด๋ธ๋ฆฌ๋ ๋ณ๋ ฌํ ๊ธฐ๋ฒ
- ๋๊ท๋ชจ ํ๊ฒฝ์์ ์ฐ์ฐ, ๋ฐ์ดํฐ, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ต์ ํํ์ฌ GPU ์์ ์ฌ์ฉ ๊ทน๋ํ
๊ด๋ จ ์ต์ ์ฐ๊ตฌ ํ๋ฆ
Colossal-AI(2024),DeepSpeed-ZeRO(2023~2024): ํ์ด๋ธ๋ฆฌ๋ ๋ณ๋ ฌํ๋ฅผ ํตํด ์๋ฐฑ GPU ํ๊ฒฝ ์ต์ ํ ์๋- LLaMA, GPT ์๋ฆฌ์ฆ ๋ชจ๋ธ๋ค์ ์๋ฐฑ๋ GPU์์ ์ฒ๋ฆฌํ๋ ์คํ์ ํ๋ฐํ ์งํ ์ค
๐ ๊ฒฐ๋ก ๋ฐ ์ฐ๊ตฌ ๋ฐฉํฅ ์ ๋ฆฌ (ํ๊ณ ๊ทน๋ณต ๋ฐฉ๋ฒ ์์ฝ)
| ํ๊ณ์ | ํด๊ฒฐ ์ ๊ทผ๋ฒ | ์ต์ ์ฐ๊ตฌ ์ฌ๋ก |
|---|---|---|
| GPU-CPU ์ ์ก ๋ณ๋ชฉ | ์ฐจ์ธ๋ ์ธํฐํ์ด์ค, ์์ถ ๋ฐ ๊ฒฝ๋ํ | CXL, Atom(2024), AWQ(2024), InstInfer(2024) |
| ๋์ ์ค์ผ์ค๋ง ๋ณต์ก์ฑ | ๊ฐํํ์ต, ๋ฉํ๋ฌ๋, ํด๋ฆฌ์คํฑ ๊ธฐ๋ฒ | ORCA(2022), FlexGen(2023), Sarathi-Serve(2024) |
| ๋ค์ค GPU ํ๊ฒฝ ์ต์ ํ | ํ ์ ๋ณ๋ ฌํ, ํ์ด๋ธ๋ฆฌ๋ ๋ณ๋ ฌํ ๊ธฐ๋ฒ | Megatron-LM(2022~), DistServe(2024), Colossal-AI(2024) |
๐ ๋์ ์๊ฒฌ ๋ฐ ์ ๋ง
ํฅํ NEO์ ๊ฐ์ CPU ์คํ๋ก๋ ๋ฐฉ์์ ๋ ํจ์จ์ ์ธ ํ๋์จ์ด(CXL ๋ฑ)์ ๋ณ๋ ฌํ ๊ธฐ์ ๋ฐ์ ์ ํ์
์ด ์ฑ๋ฅ์ด ํฌ๊ฒ ๊ฐ์ ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
ํนํ GPU์ CPU ์์์ ๋์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฐํํ์ต ๊ธฐ๋ฐ์ ํจ์จ์ ์ค์ผ์ค๋ง ์ฐ๊ตฌ๊ฐ ๊ธ์ํ ๋ฐ์ ํ ๊ฒ์ผ๋ก ์์๋๋ฉฐ, ์ด๋ ๋๊ท๋ชจ LLM ์ถ๋ก ์์คํ
์ ์ฑ๋ฅ์ ๊ทน๋ํํ๋ ํต์ฌ์ด ๋ ๊ฒ์
๋๋ค.
๋ฐ๋ผ์ ํฅํ ์ฐ๊ตฌ๋ ์ด๋ฌํ ์ต์ ๊ธฐ์ ๋ฐ ๋ฐฉ๋ฒ๋ค์ ํตํฉ์ ์ผ๋ก ํ์ฉํ์ฌ, NEO์ ์ค์ฉ์ฑ๊ณผ ํจ์จ์ฑ์ ๋์ฑ ํ์ฅํ๋ ๋ฐฉํฅ์ผ๋ก ๋ฐ์ ํ ๊ฒ์ ๋๋ค.
์ถ๊ฐ์ ์ธ ์ง๋ฌธ ์์ผ์๋ฉด ์ธ์ ๋ ์ง ํธํ๊ฒ ๋ฌผ์ด๋ณด์ธ์! ๐
Q : NEO ์์คํ ์ด GPU-only ์์คํ (vLLM)๊ณผ ๊ธฐ์กด CPU ์คํ๋ก๋ ์์คํ (FastDecode)์ ๋นํด ์ฑ๋ฅ์ด ๋ ๋ฐ์ด๋ ๊ทผ๋ณธ์ ์ธ ์ด์ ๋ ๋ฌด์์ด๋ฉฐ, ์ด ์ฐจ์ด๋ฅผ ๋ง๋๋ ํต์ฌ ๋ฉ์ปค๋์ฆ์ ๊ตฌ์ฒด์ ์ผ๋ก ์ด๋ป๊ฒ ๋์ํ๋๊ฐ?
NEO ์์คํ ์ด GPU-only ์์คํ (vLLM) ๋ฐ ๊ธฐ์กด CPU ์คํ๋ก๋ ์์คํ (FastDecode)์ ๋นํด ์ฑ๋ฅ์ด ๋ฐ์ด๋ ๊ทผ๋ณธ์ ์ธ ์ด์ ๋ GPU์ CPU์ ์์์ ๋์์ ๊ท ํ ์๊ฒ ์ต์ ํํ์ฌ ํ์ฉํ๋ “๋น๋์นญ ํ์ดํ๋ผ์ด๋(Asymmetric Pipelining)“๊ณผ ์ค์๊ฐ์ผ๋ก ์์ ๋ฐฐ๋ถ์ ๊ฒฐ์ ํ๋ “๋ถํ ์ธ์ ์ค์ผ์ค๋ง(Load-Aware Scheduling)“์ ์์ต๋๋ค.
๊ตฌ์ฒด์ ์ผ๋ก ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฒซ์งธ, ๊ธฐ์กด GPU-only ์์คํ (vLLM)์ GPU ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฝ์ผ๋ก ์ธํด ํฐ batch ํฌ๊ธฐ๋ฅผ ํ๋ณดํ์ง ๋ชปํ์ฌ GPU ์ฐ์ฐ ๋ฅ๋ ฅ์ ์ถฉ๋ถํ ํ์ฉํ์ง ๋ชปํฉ๋๋ค. ๋ฐ๋ฉด, NEO๋ ์ผ๋ถ attention ์ฐ์ฐ๊ณผ KV cache๋ฅผ CPU ๋ฉ๋ชจ๋ฆฌ๋ก ์คํ๋ก๋ํ์ฌ GPU ๋ฉ๋ชจ๋ฆฌ ์ฌ์ ๋ฅผ ํ๋ณดํ๊ณ batch ํฌ๊ธฐ๋ฅผ ํค์ธ ์ ์์ด GPU์ ๊ณ์ฐ ์ฑ๋ฅ์ ๊ทน๋ํํฉ๋๋ค.
๋์งธ, ๊ธฐ์กด CPU ์คํ๋ก๋ ์์คํ (FastDecode)์ ๋ชจ๋ decoding attention ์ฐ์ฐ์ ๋ฌด์กฐ๊ฑด CPU๋ก ๋๊ธฐ๊ธฐ ๋๋ฌธ์ CPU๊ฐ ๋ณ๋ชฉ ์ง์ ์ด ๋์ด ์ ์ฒด ์ฑ๋ฅ์ด ์ ํ๋ฉ๋๋ค. NEO๋ ์ด์ ๋ฌ๋ฆฌ attention ์ฐ์ฐ์ ์ผ๋ถ๋ง ์ ํ์ ์ผ๋ก CPU์ ์คํ๋ก๋ํ์ฌ CPU ๊ณผ๋ถํ๋ฅผ ํผํ๊ณ , GPU์ CPU๋ฅผ ๋์์ ํจ์จ์ ์ผ๋ก ๊ฐ๋ํ ์ ์๋๋ก ๋ณ๋ ฌํํฉ๋๋ค.
ํต์ฌ์ ์ผ๋ก NEO์ “๋น๋์นญ ํ์ดํ๋ผ์ด๋"์ GPU์ CPU๊ฐ ๊ฐ๊ฐ ๊ฐ์ฅ ์ ์ฒ๋ฆฌํ ์ ์๋ ์์ ์ ๋๋์ด ๋์์ ๋ณ๋ ฌ๋ก ์ํํ๊ฒ ํ๋ ๋ฐฉ์์ ๋๋ค. GPU๋ ์ฃผ๋ก prefilling ๋จ๊ณ๋ ๊ณ์ฐ ์ค์ฌ(linear, FFN ๋ฑ)์ ์์ ์ ๋ด๋นํ๊ณ , CPU๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์ค์ฌ์ attention ์์ ์ ๋ด๋นํฉ๋๋ค. ๋ ์์ ์ด ์ค์ฒฉ๋์ด ์ํ๋๋ฏ๋ก GPU์ CPU๋ ๊ฑฐ์ ์ฌ๋ ์๊ฐ ์์ด ๊ณ์ ์ฐ์ฐํ ์ ์๊ฒ ๋ฉ๋๋ค.
์ถ๊ฐ์ ์ผ๋ก “๋ถํ ์ธ์ ์ค์ผ์ค๋ง"์ GPU์ CPU์ ํ์ฌ ์์ ๋ถํ๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ ํ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก batch๋ฅผ ํ์ฑํ์ฌ ์์์ ๊ฐ์ฅ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค. ์ด๋ฅผ ํตํด GPU-only ๋ฐฉ์์ด๋ ๊ธฐ์กด CPU ์คํ๋ก๋ ๋ฐฉ์ ๋๋น ๋์ ์ฒ๋ฆฌ๋(throughput)๊ณผ ๋ฎ์ ์ง์ฐ(latency)์ ๋์์ ๋ฌ์ฑํ ์ ์๊ฒ ๋ฉ๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก, NEO๊ฐ ์ ์ํ ์ด๋ฌํ ๋ ๊ฐ์ง ๋ฉ์ปค๋์ฆ์ ์กฐํฉ์ด GPU-only ์์คํ ๋ฐ ๊ธฐ์กด CPU ์คํ๋ก๋ ์์คํ ์ ๋จ์ ์ ๊ทน๋ณตํ๊ณ ํ์ ํ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ฌ์ฑํ ๊ทผ๋ณธ์ ์ด์ ์ ๋๋ค.
Q : NEO์์ ์ฌ์ฉํ ๋น๋์นญ ํ์ดํ๋ผ์ด๋๊ณผ ๋ถํ ์ธ์ ์ค์ผ์ค๋ง์ด ์ค์๊ฐ์ผ๋ก ์ด๋ป๊ฒ ๋์ํ๋ฉฐ, ์ด ๊ณผ์ ์์ ๋ฐ์ํ ์ ์๋ ๋ณ๋ชฉ ํ์์ด๋ ์ค๋ฒํค๋๋ฅผ ์ต์ํํ๊ธฐ ์ํด ๋ ผ๋ฌธ์์ ์ ์ํ ๊ตฌ์ฒด์ ์ธ ์ ๋ต์ ๋ฌด์์ธ๊ฐ?
NEO์์ ์ฌ์ฉํ ๋น๋์นญ ํ์ดํ๋ผ์ด๋(Asymmetric Pipelining)๊ณผ ๋ถํ ์ธ์ ์ค์ผ์ค๋ง(Load-Aware Scheduling)์ ์ค์๊ฐ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ๋์ํฉ๋๋ค.
๋จผ์ ๋น๋์นญ ํ์ดํ๋ผ์ด๋์ ์ถ๋ก ์์ฒญ์ด ๋ค์ด์์ ๋, ์ด๋ฅผ ๋ ๊ฐ์ ์๋ก ๋น๋์นญ์ ์ธ ํ์ ๋ฐฐ์น๋ก ๋๋์ด GPU์ CPU์ ๋์ ์ฒ๋ฆฌํ๋๋ก ํฉ๋๋ค. ํ๋์ ๋ฐฐ์น(batch-0)๋ GPU๊ฐ ๊ฐ์ ์ธ Prefilling ๋จ๊ณ์ ์ ํ(Linear, FFN ๋ฑ) ์ฐ์ฐ์ ์์ฃผ๋ก ์ํํ๊ณ , ๋ค๋ฅธ ๋ฐฐ์น(batch-1)๋ CPU๊ฐ ๊ฐ์ ์ธ attention ์ฐ์ฐ์ ์ฃผ๋ก ์ํํฉ๋๋ค. ์ด๋ ๊ฒ ๋ ๋ฐฐ์น๊ฐ ๊ฐ์์ ์์ ์ ๋ณ๋ ฌ๋ก ์ํํ๋ฉฐ, GPU์ CPU๊ฐ ๋์์ ์ผ์ ํจ์ผ๋ก์จ ์ฐ์ฐ ์์์ idle ์๊ฐ์ ์ต์ํํฉ๋๋ค.
๋ถํ ์ธ์ ์ค์ผ์ค๋ง์ GPU์ CPU์ ์์ ์ํฉ๊ณผ ๋ถํ(load)๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ชจ๋ํฐ๋งํ๋ฉด์ ์ต์ ์ ์์ ๋ถ๋ฐฐ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๋งค iteration๋ง๋ค ๋ค์์ ์์น์ ์ ์ฉํ์ฌ ๋ฐฐ์น๋ฅผ ํ์ฑํฉ๋๋ค.
- Greedy ์์น: GPU-only ๋ฐฉ์๊ณผ GPU-CPU ํผํฉ ๋ฐฉ์์ ์ค์๊ฐ์ผ๋ก ๋น๊ตํ์ฌ ๊ฐ์ฅ ์ฑ๋ฅ์ด ์ข์ ๋ฐฉ์์ ์ ํํฉ๋๋ค.
- Balancing ์์น: GPU์ CPU์ ์ฐ์ฐ ์๊ฐ์ ์ต๋ํ ๋น์ทํ๊ฒ ๋ง์ถ์ด ์ด๋ ํ ์ชฝ์ด ๋ณ๋ชฉ(bottleneck)์ด ๋์ง ์๊ฒ ํฉ๋๋ค.
- Hiding CPU ์์น: CPU ์ฐ์ฐ์ GPU ์ฐ์ฐ์ ๋ค์ ์จ๊ฒจ์, CPU ์ฐ์ฐ ์ค GPU๊ฐ idle ์ํ๊ฐ ๋๋ ํ์์ ์ต์ํํฉ๋๋ค.
- Maximizing GPU ์์น: ๊ฐ๋ฅํ ํ ๋ง์ ์์ฒญ์ GPU์์ ์ฒ๋ฆฌํ์ฌ GPU์ ์ฐ์ฐ ๋ฅ๋ ฅ์ ์ต๋ํ ํ์ฉํฉ๋๋ค.
์ด๋ฌํ ๊ณผ์ ์ ์ํํ๋ ๋์ ๋ฐ์ํ ์ ์๋ ๋ณ๋ชฉ์ด๋ ์ค๋ฒํค๋๋ฅผ ์ต์ํํ๊ธฐ ์ํด ๋ ผ๋ฌธ์ด ์ ์ํ ๊ตฌ์ฒด์ ์ธ ์ ๋ต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฒซ์งธ, ๋ถ๋ถ ์คํ๋ก๋(Partial Offloading) ์ ๋ต์ ์ฌ์ฉํ์ฌ CPU์ ๋ถํ๋ฅผ ๊ณผ๋ํ๊ฒ ๋ง๋ค์ง ์๊ณ ์ ์ ํ ์์ค๋ง CPU๋ก ์ฎ๊ธฐ๋ฉฐ, GPU ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ์ต์ ์ ์ํ๋ก ์ ์งํฉ๋๋ค.
๋์งธ, ๋ฐฐ์น๋ฅผ ํ์ฑํ ๋ ๊ณ์ธต ๋จ์(layer-wise)์ KV cache ์คํ๋ก๋ ์ ๋ต์ ์ ์ฉํ์ฌ GPU-CPU ๊ฐ์ ๋ฐ์ดํฐ ์ ์ก์ ์ฐ์ฐ๊ณผ ๊ฒน์น๋๋ก(overlap) ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ ์ ์ก์ผ๋ก ์ธํ idle ์๊ฐ์ ์ต์ํํฉ๋๋ค.
์ ์งธ, ์ค์๊ฐ ๋ชจ๋ํฐ๋ง์ ํตํด ๊ฒฐ์ ํ๋ ๋์ ์ค์ผ์ค๋ง(dynamic scheduling)์ ๊ตฌํํ์ฌ GPU-CPU ๊ฐ ๊ท ํ์ ๋ง์ถ๊ณ , ์ํฉ ๋ณํ(์ ์ถ๋ ฅ ๊ธธ์ด์ ๋ณํ ๋ฑ)์ ๋น ๋ฅด๊ฒ ๋์ํ์ฌ ๋ณ๋ชฉ ๋ฐ์์ ๋ฐฉ์งํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก, GPU ์ฐ์ฐ ์ปค๋(kernel) ํธ์ถ ํ์๋ฅผ ์ต์ํํ๋ ๊ตฌ์กฐ(์: GPU ์ปค๋์ ๋ฐ๋ณต ํธ์ถํ๋ ๋์ ํ ๋ฒ์ ๊ธด ํธ์ถ๋ก ์ฒ๋ฆฌํ๋ ๊ตฌ์กฐ)๋ฅผ ํตํด GPU kernel launch๋ก ์ธํ ์ค๋ฒํค๋๋ฅผ ์ค์ ๋๋ค.
์ข ํฉ์ ์ผ๋ก NEO๋ ๋น๋์นญ์ GPU-CPU ๋ณ๋ ฌํ์ ์ค์๊ฐ ๋์ ์ค์ผ์ค๋ง์ ํ์ฉํ์ฌ ์ฐ์ฐ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๋ฅผ ์ต์ํํ๊ณ GPU ๋ฐ CPU ์์์ ์ต๋ํ ํจ์จ์ ์ผ๋ก ํ์ฉํ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ถ๊ณ ์์ต๋๋ค.
Q : NEO์ ์ฑ๋ฅ ํฅ์์ด ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ ๊ธธ์ด, GPU/CPU ์ฑ๋ฅ ๋ฑ ๋ค์ํ ์์๋ค์ ๋ฐ๋ผ ์ด๋ป๊ฒ ๋ฌ๋ผ์ง๋์ง ์คํ ๊ฒฐ๊ณผ๋ฅผ ํตํด ์ค๋ช ํ๊ณ , ์ค์ ํ๊ฒฝ์ ์ ์ฉํ ๋ ๊ณ ๋ คํด์ผ ํ ์ค์ํ ์์์ ํ๊ณ์ ์ ๋ฌด์์ธ๊ฐ?
NEO์ ์ฑ๋ฅ ํฅ์์ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ ๊ธธ์ด, GPU ๋ฐ CPU์ ์ฑ๋ฅ์ด๋ผ๋ ์์๋ค์ ๋ฐ๋ผ ๋ค์๊ณผ ๊ฐ์ด ๋ฌ๋ผ์ง๋ค๊ณ ๋ ผ๋ฌธ์ ์ค๋ช ํ๊ณ ์์ต๋๋ค.
๋จผ์ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ ๊ธธ์ด์ ๋ฐ๋ฅธ ์ฑ๋ฅ ๋ณํ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ ๋ ฅ ๊ธธ์ด๊ฐ ๊ธธ๊ฑฐ๋ ์ถ๋ ฅ ๊ธธ์ด๊ฐ ๊ธธ์ด์ง์๋ก KV ์บ์์ ํฌ๊ธฐ๊ฐ ์ฆ๊ฐํ๋ฉฐ, GPU-only ์์คํ ์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ผ๋ก ์ธํด ์ฒ๋ฆฌ ๊ฐ๋ฅํ ๋ฐฐ์น ํฌ๊ธฐ๊ฐ ๊ธ๊ฒฉํ ์ค์ด๋ญ๋๋ค. ๋ฐ๋ฉด, NEO๋ CPU ๋ฉ๋ชจ๋ฆฌ๋ก KV ์บ์ ์ผ๋ถ๋ฅผ ์คํ๋ก๋ํ๋ฏ๋ก, ํนํ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ ๊ธธ์ด๊ฐ ์ค๊ฐ์์ ๊ธด ๊ฒฝ์ฐ(batch ํฌ๊ธฐ๊ฐ ์ค์ํ ์ํฉ)์ ์ฑ๋ฅ์ด ํฌ๊ฒ ๊ฐ์ ๋ฉ๋๋ค.
๊ตฌ์ฒด์ ์ธ ์คํ ๊ฒฐ๊ณผ๋ก, T4 GPU ํ๊ฒฝ์์ ์ ๋ ฅ ๊ธธ์ด๊ฐ 100์์ 500, ์ถ๋ ฅ ๊ธธ์ด๊ฐ 50์์ 200 ์ ๋์ผ ๋, GPU-only ๋๋น NEO์ ์ฑ๋ฅ์ ์ต๋ 7.5๋ฐฐ๊น์ง ์์นํฉ๋๋ค. ํํธ, ์ ๋ ฅ๊ณผ ์ถ๋ ฅ ๊ธธ์ด๊ฐ ๋งค์ฐ ์งง์ ๊ฒฝ์ฐ GPU ๋ฉ๋ชจ๋ฆฌ ๋ณ๋ชฉ ๋ฌธ์ ๊ฐ ๊ฑฐ์ ์์ด NEO์ ์ฑ๋ฅ ํฅ์ํญ์ ์๋์ ์ผ๋ก ์ค์ด๋ค๊ฑฐ๋ ์คํ๋ ค ์คํ๋ก๋ ๊ณผ์ ์ ์ค๋ฒํค๋๋ก ์ธํด ์ฝ๊ฐ ๋จ์ด์ง ์๋ ์์ต๋๋ค.
GPU ๋ฐ CPU ์ฑ๋ฅ์ ์ํฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
CPU ์ฑ๋ฅ(ํนํ ๋ฉ๋ชจ๋ฆฌ bandwidth)์ด ์ฆ๊ฐํ๋ฉด CPU๊ฐ ๋ ๋ง์ KV ์บ์์ Attention ์ฐ์ฐ์ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋์ด GPU ๋ถ๋ด์ ๋์ด์ค๋๋ค. ๋ ผ๋ฌธ์ ์คํ ๊ฒฐ๊ณผ๋ก AWS EC2 ํ๊ฒฝ์์ CPU์ ๋ฉ๋ชจ๋ฆฌ ๋์ญํญ์ ์ฆ๊ฐ์ํฌ ๊ฒฝ์ฐ A10G GPU์์ ์ต๋ 79.3%๊น์ง ์ถ๊ฐ์ ์ธ ์ฑ๋ฅ ํฅ์์ด ๊ฐ๋ฅํ์ต๋๋ค. ๋ฐ๋ฉด, CPU ์ฑ๋ฅ์ด ๋ฎ์ ํ๊ฒฝ์์๋ CPU๊ฐ ์ฝ๊ฒ ๋ณ๋ชฉ ์ง์ ์ด ๋์ด ์ฑ๋ฅ ํฅ์ํญ์ด ์ค์ด๋ญ๋๋ค.
GPU ์ฑ๋ฅ์ ๊ฒฝ์ฐ, H100์ฒ๋ผ ์ต์ ๊ณ ์ฑ๋ฅ GPU๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ฑ๋ฅ ํฅ์ํญ์ ๋ค์ ์์์ง์ง๋ง(์ฝ 14%), T4๋ A10G์ฒ๋ผ ์ค๊ฐ~ํ์ ์ฑ๋ฅ GPU๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ GPU ๋ฉ๋ชจ๋ฆฌ ํ๊ณ๊ฐ ๋ช ํํด์ง๋ฏ๋ก ์ฑ๋ฅ ํฅ์ํญ์ด ๋ ํฝ๋๋ค(26% ~ 7.5๋ฐฐ ์ฆ๊ฐ).
์ด๋ฌํ ์คํ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก ์ค์ ํ๊ฒฝ์ NEO๋ฅผ ์ ์ฉํ ๋ ๊ณ ๋ คํด์ผ ํ ์ค์ํ ์์์ ํ๊ณ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ค์ํ ๊ณ ๋ ค ์์๋:
- GPU ๋ฉ๋ชจ๋ฆฌ ์ฉ๋๊ณผ ์ฑ๋ฅ: GPU ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ํ์์ด ๋๋ ทํ ํ๊ฒฝ์ผ์๋ก NEO์ ์ฑ๋ฅ ์ด๋์ด ์ปค์ง๋๋ค.
- CPU ๋ฉ๋ชจ๋ฆฌ bandwidth: CPU ๋ฉ๋ชจ๋ฆฌ ๋์ญํญ์ด ์ถฉ๋ถํ ํ๋ณด๋ ํ๊ฒฝ์ด์ด์ผ CPU ์คํ๋ก๋ ํจ๊ณผ๊ฐ ์ปค์ง๊ณ , ๋ณ๋ชฉ์ด ๋ฐ์ํ์ง ์์ต๋๋ค.
- ์ ๋ ฅ๊ณผ ์ถ๋ ฅ ๊ธธ์ด์ ๋ถํฌ: ์์ฒญ๋๋ ์ถ๋ก ์์ ์ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ ๊ธธ์ด๊ฐ ๊ธธ์๋ก NEO์ ํจ๊ณผ๊ฐ ํฌ๋ฉฐ, ๋ฐ๋๋ก ๋งค์ฐ ์งง์ ์์ฒญ์ด ๋ง์ผ๋ฉด GPU-only ๋ฐฉ์์ด ๋ ํจ์จ์ ์ผ ์ ์์ต๋๋ค.
- GPU-CPU ๊ฐ ์ธํฐํ์ด์ค(PCIe ๋๋ CXL)์ ์ฑ๋ฅ: ์ธํฐํ์ด์ค ์ฑ๋ฅ์ด ์ถฉ๋ถํ ๋์์ผ ์คํ๋ก๋ ๊ณผ์ ์์ ๋ณ๋ชฉ์ด ๋ฐ์ํ์ง ์์ต๋๋ค.
ํ๊ณ์ ์:
- PCIe ์ธํฐํ์ด์ค ๋ณ๋ชฉ: ๋น๋ฒํ GPU-CPU ๊ฐ ๋ฐ์ดํฐ ์ ์ก์ผ๋ก ์ธํด PCIe bandwidth๊ฐ ๋ณ๋ชฉ์ด ๋ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
- ์ค์ผ์ค๋ง ๋ณต์ก์ฑ ์ฆ๊ฐ: ๋ถํ ์ธ์ ์ค์ผ์ค๋ง์ ์ค์๊ฐ ์ฐ์ฐ์ด ๋ณต์กํ์ฌ, ๊ด๋ฆฌ ๋น์ฉ๊ณผ ์ค๋ฒํค๋๊ฐ ์ฆ๊ฐํ ์ ์์ต๋๋ค.
- ์งง์ ์์ฒญ์ด ์ฃผ๋ฅผ ์ด๋ฃจ๋ ํ๊ฒฝ์์๋ ์คํ๋ก๋ ๊ณผ์ ์์ฒด๊ฐ ์ค๋ฒํค๋๊ฐ ๋ ์ ์์ด ์คํ๋ ค ์ฑ๋ฅ์ ๋จ์ด๋จ๋ฆด ์ ์์ต๋๋ค.
- ๋ค์ค GPU ํ๊ฒฝ ์ต์ ํ ๋ฏธํก: ํ์ฌ ๋ ผ๋ฌธ์์ ๊ฒ์ฆ๋ ๊ฒ์ ๋จ์ผ GPU๋ ์์ GPU ํ๊ฒฝ์ผ๋ก, ๋ง์ ์์ GPU๋ฅผ ์ฌ์ฉํ๋ ํ๊ฒฝ์์์ ์ฑ๋ฅ ๊ฒ์ฆ์ ์์ง ๋ฏธํกํฉ๋๋ค.
๋ฐ๋ผ์ ์ค์ ํ๊ฒฝ์์๋ ์์ ๊ฐ์ ์์๋ค์ ์ฌ์ ์ ์ฒ ์ ํ ํ๊ฐํ๊ณ , GPU-CPU ํ๊ฒฝ ์ค์ , ํ๋์จ์ด ์คํ ์ ์ , ์์ฒญ ๊ธธ์ด ํน์ฑ์ ๊ณ ๋ คํ์ฌ NEO์ ์ต์ ์ ์ฉ ์ฌ๋ถ๋ฅผ ํ๋จํด์ผ ํฉ๋๋ค.
๋๊ธ