์คํ ์ฝ๋์ ์์ธ ๊ฒฐ๊ณผ๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ - https://github.com/ldj7672/Vision-AI-Tutorials/tree/main/inference_acceleration
Vision-AI-Tutorials/inference_acceleration at main · ldj7672/Vision-AI-Tutorials
Computer Vision & AI๋ฅผ ์ฝ๊ฒ ๋ฐฐ์ฐ๊ณ ์ค์ตํ ์ ์๋ ์์ ๋ชจ์์ ๋๋ค. Contribute to ldj7672/Vision-AI-Tutorials development by creating an account on GitHub.
github.com
1. ๊ฐ์

Large-scale AI ๋ชจ๋ธ์ ์์ญ์ต ํ๋ผ๋ฏธํฐ ๊ท๋ชจ์ Transformer ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ฅผ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ฉฐ, ์ถ๋ก ๊ณผ์ ์์ attention ์ฐ์ฐ๊ณผ KV cache ๊ด๋ฆฌ๊ฐ ์ฃผ์ ๋ณ๋ชฉ์ผ๋ก ์์ฉํ๋ค. ํนํ ์์ฒญ ์๊ฐ ์ฆ๊ฐํ๊ฑฐ๋ ์ปจํ ์คํธ ๊ธธ์ด๊ฐ ๊ธธ์ด์ง์๋ก GPU ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ ์ถ๋ก ์ง์ฐ(latency)์ด ๊ธ๊ฒฉํ ์ฆ๊ฐํ๋ค.
vLLM์ ์ด๋ฌํ ๋๊ท๋ชจ ๋ชจ๋ธ ์ถ๋ก ๋ณ๋ชฉ์ ํด๊ฒฐํ๊ธฐ ์ํด ์ค๊ณ๋ ๊ณ ์ฑ๋ฅ ์ธํผ๋ฐ์ค ์์ง์ผ๋ก, PagedAttention, continuous batching, CUDA Graph ๋ฑ ๋ค์ํ ์์คํ ์์ค ์ต์ ํ๋ฅผ ํตํด ์ถ๋ก ํจ์จ์ ํฌ๊ฒ ๊ฐ์ ํ๋ค. ๋ณธ ๊ธ์์๋ vLLM์ ํ์ฉํด Large-scale AI ๋ชจ๋ธ์ ์ถ๋ก ์ ๊ฐ์ํํ ์คํ์ ์ ๋ฆฌํ๊ณ , ์ด๋ค ์ค์ ๊ณผ ๋ฉ์ปค๋์ฆ์ด ์ค์ ์ฑ๋ฅ ํฅ์์ ๊ธฐ์ฌํ๋์ง๋ฅผ ๊ธฐ์ ์ ์ผ๋ก ๋ถ์ํ๋ค.
์คํ์ Vision-Language Model(VLM)์ธ Qwen2-VL-7B-Instruct๋ฅผ ๋์์ผ๋ก ์ํํ์์ผ๋ฉฐ, Hugging Face Transformers ๊ธฐ๋ฐ ์ถ๋ก ๊ณผ vLLM ๊ธฐ๋ฐ ์ถ๋ก ์ ๋น๊ตํ๋ค. ๋ค๋ง ๋ณธ ์คํ์์ ๊ด์ฐฐ๋ ๊ฐ์ํ ํน์ฑ๊ณผ ์ธ์ฌ์ดํธ๋ ์ผ๋ฐ์ ์ธ ๋๊ท๋ชจ LLM ๋ฐ ๋ฉํฐ๋ชจ๋ฌ ๋ชจ๋ธ์๋ ๋์ผํ๊ฒ ์ ์ฉ ๊ฐ๋ฅํ๋ค.
2. vLLM์ ํ์ฉํ Large-scale Model ๊ฐ์ํ
2.1 PagedAttention๊ณผ KV Cache ๊ด๋ฆฌ
vLLM์ ๊ฐ์ฅ ํต์ฌ์ ์ธ ์ฐจ๋ณ์ ์ PagedAttention ๊ธฐ๋ฐ์ KV cache ๊ด๋ฆฌ ๋ฐฉ์์ด๋ค. ๊ธฐ์กด Transformers ์ถ๋ก ์์ง์ ์์ฒญ ๋จ์๋ก ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ KV cache๋ฅผ ํ ๋นํ๋ค. ์ด ๋ฐฉ์์ ๊ตฌํ์ ๋จ์ํ์ง๋ง, ์์ฒญ ์๊ฐ ์ฆ๊ฐํ๊ฑฐ๋ ์ํ์ค ๊ธธ์ด๊ฐ ๋ฌ๋ผ์ง ๊ฒฝ์ฐ GPU ๋ฉ๋ชจ๋ฆฌ ๋จํธํ๊ฐ ๋น ๋ฅด๊ฒ ๋ฐ์ํ๋ค.
vLLM์ KV cache๋ฅผ page ๋จ์๋ก ๋ถํ ํ์ฌ ๊ด๋ฆฌํ๋ค. ๊ฐ ํ ํฐ์ KV๋ ์ฐ์๋ ๋ํ ๋ฒํผ๊ฐ ์๋, ์ฌ๋ฌ ํ์ด์ง์ ๋ถ์ฐ ์ ์ฅ๋๋ฉฐ ๋ ผ๋ฆฌ์ ์ผ๋ก๋ง ์ฐ๊ฒฐ๋๋ค. ์ด๋ฅผ ํตํด ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ์ ์ด์ ์ ์ป๋๋ค.
- GPU ๋ฉ๋ชจ๋ฆฌ ๋จํธํ ๊ฐ์ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ํ์ฉ๋ฅ ์ฆ๊ฐ
- ์์ฒญ ๊ฐ KV cache์ ์ ์ฐํ ํ ๋น ๋ฐ ํ์
- ์๋ก ๋ค๋ฅธ ๊ธธ์ด์ ์ํ์ค์์๋ ์์ ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ
์ด ๊ตฌ์กฐ๋ ๋จ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ๋ ์์ค์ ๋์ด, ๋์ ๋ค์ค ์์ฒญ ํ๊ฒฝ์์ ์ถ๋ก ์ฑ๋ฅ์ ์ ์งํ๋ ํต์ฌ ์์๋ก ์์ฉํ๋ค. ํนํ ๋ฉํฐ๋ชจ๋ฌ ๋ชจ๋ธ์ฒ๋ผ ์ ๋ ฅ ํ ํฐ ์๊ฐ ๊ฐ๋ณ์ ์ด๊ฑฐ๋ ๊ธ๊ฒฉํ ์ฆ๊ฐํ๋ ๊ฒฝ์ฐ, PagedAttention ๊ธฐ๋ฐ KV cache ๊ด๋ฆฌ์ ํจ๊ณผ๋ ๋์ฑ ๋๋๋ฌ์ง๋ค.
2.2 Continuous Batching
๊ธฐ์กด LLM/VLM ์ถ๋ก ํ์ดํ๋ผ์ธ์ static batching๋ฅผ ์ ์ ๋ก ์ค๊ณ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์ด ๊ฒฝ์ฐ, ๋ฐฐ์น๊ฐ ๋๋ ๋๊น์ง ์๋ก์ด ์์ฒญ์ ๋๊ธฐ ์ํ๋ก ๋จ๊ฒ ๋๋ฉฐ GPU ์ ํด ์๊ฐ์ด ๋ฐ์ํ๋ค.
vLLM์ continuous batching ๋ฐฉ์์ ์ฌ์ฉํ๋ค. ์คํ ์ค์ธ ๋ฐฐ์น๊ฐ ์ข ๋ฃ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ , ์๋ก์ด ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ฆ์ ๊ธฐ์กด ๋ฐฐ์น์ ํฉ๋ฅ์ํจ๋ค. ์ด๋ฅผ ํตํด ๋ค์๊ณผ ๊ฐ์ ํจ๊ณผ๋ฅผ ์ป๋๋ค.
- ์์ฒญ ๋๊ธฐ ์๊ฐ(latency) ๊ฐ์
- GPU ์ฌ์ฉ๋ฅ ๊ทน๋ํ
- ์์ฒญ ๊ธธ์ด๊ฐ ์๋ก ๋ฌ๋ผ๋ ํจ์จ์ ์ธ ๋ณ๋ ฌ ์ฒ๋ฆฌ ๊ฐ๋ฅ
์ด ๋ฐฉ์์ ๋๊ท๋ชจ ๋ชจ๋ธ ์ถ๋ก ์์ ํนํ ์ค์ํ๋ค. ๋ชจ๋ธ์ด ํด์๋ก ๋จ์ผ ์ถ๋ก ๋น์ฉ์ด ํฌ๊ธฐ ๋๋ฌธ์, GPU๊ฐ ์ ์๋ผ๋ ๋๊ฒ ๋๋ ์๊ฐ์ด ์ ์ฒด ์์คํ ์ฒ๋ฆฌ๋์ ํฐ ์ํฅ์ ๋ฏธ์น๋ค. vLLM์ continuous batching์ ์ด๋ฌํ ๋นํจ์จ์ ๊ตฌ์กฐ์ ์ผ๋ก ์ ๊ฑฐํ๋ค.
2.3 CUDA Graph
๋๊ท๋ชจ Transformer ๋ชจ๋ธ ์ถ๋ก ์์๋ ๋์ผํ ์ฐ์ฐ ํจํด์ด ๋ฐ๋ณต์ ์ผ๋ก ์คํ๋๋ค. ์ด๋ ๋ฐ์ํ๋ CPU-GPU ๊ฐ ์ปค๋ ๋ฐ์น ์ค๋ฒํค๋๋ ๋ฌด์ํ๊ธฐ ์ด๋ ค์ด ๋น์ฉ์ด ๋๋ค.
vLLM์ CUDA Graph๋ฅผ ํ์ฉํด ์ถ๋ก ๊ณผ์ ์์ ๋ฐ๋ณต๋๋ CUDA ์ฐ์ฐ์ ๊ทธ๋ํ ํํ๋ก ์บก์ฒํ ๋ค ์ฌ์ฌ์ฉํ๋ค. ์ด๋ฅผ ํตํด ๋ค์๊ณผ ๊ฐ์ ์ต์ ํ๋ฅผ ๋ฌ์ฑํ๋ค.
- ์ปค๋ ๋ฐ์น ๋ฐ ๋๊ธฐํ ์ค๋ฒํค๋ ๊ฐ์
- CPU ๊ฐ์ ์ต์ํ๋ก ์ธํ ์ง์ฐ ์๊ฐ ๊ฐ์
- ๋ฐ๋ณต ์ถ๋ก ํ๊ฒฝ์์ ์์ ์ ์ธ ์ฑ๋ฅ ์ ์ง
CUDA Graph๋ ๋จ์ผ ์์ฒญ์์๋ ํจ๊ณผ๊ฐ ์์ง๋ง, ํนํ ๋์ผํ ๋ชจ๋ธ ์ค์ ์ผ๋ก ๋ฐ๋ณต ์ถ๋ก ์ด ์ด๋ฃจ์ด์ง๋ ์๋น์ค ํ๊ฒฝ์์ ํฐ ์ฑ๋ฅ ์ฐจ์ด๋ฅผ ๋ง๋ ๋ค. ๋ณธ ์คํ์์๋ CUDA Graph ๋นํ์ฑํ ์ ์ถ๋ก ์๊ฐ์ด ์ ์๋ฏธํ๊ฒ ์ฆ๊ฐํ์ผ๋ฉฐ, vLLM ์ฑ๋ฅ์ ์ค์ํ ๊ตฌ์ฑ ์์์์ ํ์ธํ ์ ์๋ค.
3. ์คํ ์ค์
3.1 ์คํ ํ๊ฒฝ
- GPU: NVIDIA A100-SXM4-80GB
- CUDA: 12.8
- PyTorch: 2.9.0+cu128
- ๋ชจ๋ธ: Qwen2-VL-7B-Instruct
- ์ธก์ ๋ฐฉ์: ๊ฐ ์ค์ ๋น 10ํ ์ถ๋ก ํ ํ๊ท
3.2 ๋น๊ต ๋์ ๋ฐ ์คํ ๊ตฌ์ฑ
์คํ์ ์ด 5๊ฐ์ง ์ค์ ์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๊ฐ ์คํ์ vLLM์ ํต์ฌ ์ต์ ํ ์์๋ฅผ ํ๋์ฉ ์ ๊ฑฐํ๊ฑฐ๋ ๋ณ๊ฒฝํ๋ ๋ฐฉ์์ผ๋ก ์ค๊ณ๋์๋ค.
1) Transformers Baseline
- Hugging Face Transformers ๊ธฐ๋ฐ ์ถ๋ก
- ์ผ๋ฐ์ ์ธ FP16 ์ค์
- static batching ๋ฐ ๊ธฐ๋ณธ KV cache ๊ด๋ฆฌ ๋ฐฉ์ ์ฌ์ฉ
vLLM์ ์ฌ์ฉํ์ง ์์์ ๋์ ๊ธฐ์ค ์ฑ๋ฅ์ ์ธก์ ํ๊ธฐ ์ํ ๋ฒ ์ด์ค๋ผ์ธ์ด๋ค.
2) vLLM + No Chunked Prefill
- vLLM ์ฌ์ฉ
- FP32 ์ ๋ฐ๋
- enable_chunked_prefill=False
Chunked Prefill์ด ๋นํ์ฑํ๋ ์ํ์์ vLLM์ ๊ธฐ๋ณธ ๊ฐ์ ํจ๊ณผ(PagedAttention, continuous batching, CUDA Graph)๋ฅผ ํ์ธํ๊ธฐ ์ํ ์คํ์ด๋ค. ์๋์ ์ผ๋ก ์งง์ ์ ๋ ฅ ์ํ์ค์์ Chunked Prefill์ ์ํฅ๋๋ฅผ ๊ด์ฐฐํ๋ค.
3) vLLM + No CUDA Graph
- vLLM ์ฌ์ฉ
- FP32 ์ ๋ฐ๋
- enforce_eager=True (CUDA Graph ๋นํ์ฑํ)
CUDA Graph๊ฐ ์ถ๋ก ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ๋ถ๋ฆฌํด์ ํ์ธํ๊ธฐ ์ํ ์คํ์ด๋ค. ๋ฐ๋ณต ํธ์ถ ํ๊ฒฝ์์ ์ปค๋ ๋ฐ์น ์ค๋ฒํค๋๊ฐ ์ฑ๋ฅ์ ์ผ๋ง๋ ์ํฅ์ ์ฃผ๋์ง๋ฅผ ๊ด์ฐฐํ๋ค.
4) vLLM Baseline (FP32)
- vLLM ๊ธฐ๋ณธ ์ค์
- FP32 ์ ๋ฐ๋
- Chunked Prefill ๋ฐ CUDA Graph ๋ชจ๋ ํ์ฑํ
vLLM์ ๊ธฐ๋ณธ ๊ตฌ์ฑ๋ง์ผ๋ก ์ป์ ์ ์๋ ์์ ๊ฐ์ ํจ๊ณผ๋ฅผ ํ์ธํ๊ธฐ ์ํ ์คํ์ด๋ค. ์ ํ๋๋ฅผ ์ต๋ํ ์ ์งํ๋ฉด์ ์ป์ ์ ์๋ ์ฑ๋ฅ ์ํ์ ์ ๋ณด์ฌ์ค๋ค.
5) vLLM + BF16
- vLLM ๊ธฐ๋ณธ ์ค์
- BF16 ์ ๋ฐ๋ (dtype="bfloat16")
์ฐ์ฐ ์ ๋ฐ๋๋ฅผ BF16์ผ๋ก ๋ฎ์ท์ ๋์ ์ฑ๋ฅ ๋ณํ๋ฅผ ์ธก์ ํ๋ค. A100 GPU์ BF16 ํ๋์จ์ด ๊ฐ์์ ํ์ฉํ ์ต์ ์ค์ ์ผ๋ก, ๋ณธ ์คํ์์ ๊ฐ์ฅ ๋์ ์ฒ๋ฆฌ๋๊ณผ ๊ฐ์ฅ ๋ฎ์ ์ถ๋ก ์ง์ฐ ์๊ฐ์ ๊ธฐ๋กํ๋ค.
4. ์คํ ๊ฒฐ๊ณผ


vLLM ๊ธฐ๋ณธ ์ค์ ๋ง์ผ๋ก๋ ์ฝ 4.5๋ฐฐ์ ์ฑ๋ฅ ํฅ์์ด ๋ํ๋ฌ์ผ๋ฉฐ, BF16 ์ ์ฉ ์ 7๋ฐฐ ์ด์์ ๊ฐ์์ ๋ฌ์ฑํ๋ค.
- Transformers Baseline
- Transformers๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๊ฐ์ฅ ์ ์ง๋ง, KV cache ๊ด๋ฆฌ์ ๋ฐฐ์น ์ฒ๋ฆฌ ์ต์ ํ๊ฐ ๋ถ์กฑํด ์ถ๋ก ์๊ฐ์ด ๊ฐ์ฅ ๊ธธ๋ค. ๋จ์ผ ์์ฒญ ๊ธฐ์ค์์๋ ์ค๋ฒํค๋๊ฐ ํฌ๋ค.
- vLLM Baseline
- PagedAttention๊ณผ CUDA Graph๋ง์ผ๋ก๋ ์ถ๋ก ์๊ฐ์ด ๋ํญ ๊ฐ์ํ๋ค. FP32 ์ ๋ฐ๋๋ฅผ ์ ์งํ๋ฉด์๋ 4๋ฐฐ ์ด์์ ์ฑ๋ฅ ํฅ์์ ๋ณด์ธ๋ค.
- vLLM + BF16
- BF16 ์ ์ฉ ์ ์ฐ์ฐ throughput์ด ํฌ๊ฒ ์ฆ๊ฐํ๋ค.
- ์ ํ๋ ์ ํ๊ฐ ๊ฑฐ์ ์์ด ์ถ๋ก ์๋๋ FP32 ๋๋น ์ฝ 39% ์ถ๊ฐ ๊ฐ์ ๋๋ฉฐ, ์ ์ฒด์ ์ผ๋ก Transformers ๋๋น 7๋ฐฐ ์ด์์ ๊ฐ์์ ๋ฌ์ฑํ๋ค.
VLM ์ถ๋ก ์ ๊ตฌ์กฐ์ ์ผ๋ก ๋น์ฉ์ด ๋์ง๋ง, vLLM์ ํ์ฉํ๋ฉด ๋จ์ผ ์์ฒญ ๊ธฐ์ค์์๋ ํฐ ์ฑ๋ฅ ๊ฐ์ ์ ์ป์ ์ ์๋ค. ํนํ ๋ฉํฐ๋ชจ๋ฌ ๋ชจ๋ธ์ ์๋น์ค ํ๊ฒฝ์ ์ฌ๋ฆด ๊ฒฝ์ฐ, vLLM์ ์ ํ์ด ์๋ ํ์์ ๊ฐ๊น์ด ์ธํผ๋ฐ์ค ์์ง์ด๋ค. ๋ณธ ์คํ์ด VLM ์๋น ๋ฐ ๊ฐ์ํ ์ ๋ต์ ์ค๊ณํ๋ ๋ฐ ์ฐธ๊ณ ์๋ฃ๊ฐ ๋๊ธฐ๋ฅผ ๋ฐ๋๋ค.
'๐ ๏ธ Engineering > Distributed Training & Inference' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| DeepSpeed ์๋ฒฝ ์ดํดํ๊ธฐ! (1) | 2025.07.07 |
|---|---|
| PyTorch FSDP (Fully Sharded Data Parallel) ์๋ฒฝ ์ดํดํ๊ธฐ! (4) | 2025.07.06 |
| PyTorch ๋ถ์ฐ ํ์ต ๊ธฐ์ด: ๋ฐ์ดํฐ ๋ณ๋ ฌํ, ๋ชจ๋ธ ๋ณ๋ ฌํ, ํ์ดํ๋ผ์ธ ๋ณ๋ ฌํ (1) | 2025.07.03 |
| GPU ํด๋ฌ์คํฐ: SuperPOD์ Slurm์ ๊ฐ๋ ๊ณผ ํ์ฉ๋ฒ (1) | 2025.07.03 |