vLLM
vLLM์ LLM ์๋น์ ์ํ ๋ํ์ ์ธ ์ต์ ํ ์์ง ์ค ํ๋๋ค.
์คํ๋ชจ๋ธ๋ค์ ํจ์จ์ ์ผ๋ก ์ฌ๋ ค์ ์ธ ์ ์๊ฒ ํด์ค๋ค. ๋ค๋ง ๊ฐ๋ณ๊ณ ์๊ฒ ์ฌ๋ฆด ์ ์๊ฒ ํด์ฃผ๋ ๊ฒ์ ์๋๋ค.
vLLM์ด ์ด๋ค ์ ๊ทผ๋ฒ์ผ๋ก ๋ชจ๋ธ์ ํจ์จ์ ์ผ๋ก ์๋นํ๋์ง, ์ด๋ป๊ฒ ์ธ ์ ์๋์ง ์ ๋๋ฅผ ๋๋ต ์ ๋ฆฌํด๋ณธ๋ค.
๊ธฐ์กด ๋ชจ๋ธ ์๋น ๋ฐฉ์์ ๋ฌธ์
์ง์ ๋ชจ๋ธ์ ๋ฐ์์ ์๋นํ๊ฒ ๋๋ฉด ๋ณดํต ํ๊น ํ์ด์ค Transformer ๋ชจ๋์ ๊ฐ์ ธ๋ค๊ฐ ์ ๋นํ ํ์ด์ฌ์ผ๋ก ๋ก๋ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
์ด ๋ฐฉ์์ ์ ๋์ํ๊ธด ํ์ง๋ง, ์ฌ๋ฌ๋ชจ๋ก ๋นํจ์จ์ ์ธ ๋ถ๋ถ๋ค์ด ๋ง๋ค.
-
๋์ ์์ฒญ์ ๋ํ GPU ํ์ฉ๋ฅ ๋ฎ์
-
๋ฉ๋ชจ๋ฆฌ ๋ญ๋น ์ฌํจ
-
Batch ์ฒ๋ฆฌ์ ๋นํจ์จ์ฑ ์กด์ฌ
-
๊ทธ๋ฅ ์ ๋ฐ์ ์ผ๋ก ๋๋ฆผ
vLLM์ ์ด๋ฐ ๋ถ๋ถ๋ค์ ์ข ์ต์ ํํด์ฃผ๋ ๊ณ์ธต์ด๋ค.
vs Ollama
Ollama๋ ๋ชจ๋ธ์ ์๋นํ ๋ ๊ธฐ์ด์ ์ธ ์ต์ ํ๋ฅผ ์ข ํด์ฃผ๊ธด ํ๋ค.
llama.cpp๋ฅผ ์ฌ์ฉํด์ KV Cache ์ฒ๋ฆฌ, Batch ์ต์ ํ๋ฅผ ํด์ฃผ๋๋ฐ, ์ ๋ฐ์ ์ธ ์ต์ ํ ๋ฅ๋ ฅ์ vLLM์ด ๋ ์ข์ ํธ์ด๋ค.
๊ทธ๋์ ์ฑ๋ฅ์ด๋ ์ฒ๋ฆฌ๋์ด ํ์ํ๋ค๋ฉด vLLM์ด ์ ํธ๋๋ค.
๋ฐ๋ก ์ด์ด์ vLLM์ด ๋ชจ๋ธ์ ์ต์ ํํ๋ ๋ฒ์ ์ ๋ฆฌํด๋ณด๊ฒ ๋ค.
KV Cache: PagedAttention
LLM ๋ชจ๋ธ๋ค์ ๋ณดํต KV ์บ์๋ฅผ ํตํด์ ์ถ๋ก ์ค์ ์ต์ ํ๋ฅผ ๋ง์ด ๊ฐ์ ธ๊ฐ๋ ํธ์ด๋ค.
ํ ํฐ๋ง๋ค ๋ฒกํฐ๊ฐ์ ์ฌ๋ถ์ GPU VRAM์ ์บ์๋ก ์ ์ฅํ๋ ๊ฒ์ด๋ค.
๊ทผ๋ฐ ์ด๊ฒ ์ผ๋ฐ์ ์ธ ๊ตฌํ์ฒด๋ค์์๋ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ ๋ฌธ์ ๊ฐ ์๋ค. ์บ์๋ฅผ ๋ฃ์๋ค๊ฐ ๋นผ๋ค๋ณด๋ฉด ์ค๊ฐ์ค๊ฐ ๋ถ ๋ ์, ๊ณต๊ฐ์ด ๋จ์๋ ๋ฃ์ง ๋ชปํ ์ ์๋ ๊ฒ์ด๋ค.
GC ๋ฐํ์์ด๋ ์ธ์ด, OS ๋ ๋ฒจ์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋นํด์ ๋ก ๋จํธํ๊ฐ ์๊ธฐ๋ ๊ฒ๊ณผ ๋ฌธ์ ์๋ฆฌ๊ฐ ๊ฐ๋ค.
vLLM์ ์ญ์ ๊ณ ์ ์ ์ธ ์ ๊ทผ๋ฒ์ผ๋ก VRAM ๋จํธํ ๋ฌธ์ ๋ฅผ ํด์ํ๋ค.
GPU VRAM์ ์ด์์ฒด์ ์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ฒ๋ผ ํ์ด์ง ๋จ์๋ก ์ชผ๊ฐ๋๊ณ , ํ์ด์ง์ ๋ถ์ฐํด์ ์บ์๊ฐ์ ์ ์ฅํ๋ ๊ฒ์ด๋ค.
vLLM์ ์ด๊ฑธ PagedAttention๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ฌ์ค ๊ทธ๋ฅ ํ์ด์ง์ด๋ผ๊ณ ๋ถ๋ฌ๋ ๋ ๊ฒ ๊ฐ๊ธด ํ๋ฐ ์๋ฌดํผ.
์ด๋ฅผ ํตํด ์ ์ฅ ํจ์จ์ฑ์ ๋์ธ๋ค.
Prefix Caching
Prefix Caching์ ๋ง ๊ทธ๋๋ก ํ๋กฌํํธ์ ์๋ถ๋ถ์ ์บ์ฑํ๋ค๋ ๊ฒ์ด๋ค.
์ด๊ฒ ์ ์๋ฏธ๊ฐ ์์๊น?
์ฌ์ค ์๋น์์ ์ ์ ๋ค์ ํ๋กฌํํธ ์ง์์ด๋ฅผ ์์๋ค๊ฐ ๊ณ ์ ํด๋๊ณ ์ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
์ด๋ฐ ์์ผ๋ก ๋ง์ด๋ค.
[์์ฒญ 1]
Translate:
Hello world
[์์ฒญ 2]
Translate:
Good morning
[์์ฒญ 3]
Translate:
Thank you
์ด๋ฐ ํจํด์ ๊ฒฝ์ฐ์๋ Translate:์ ๋ํ ๋ฒกํฐ ์บ์๋ง ์์๋๊ณ ์ฌ์ฌ์ฉํด๋, ์์ด๋ฉด ๊ฝค ๋ง์ ์ถ๋ก ๋น์ฉ์ ์ ๊ฐํ ์ ์๋ ๊ฒ์ด๋ค.
๋์ vRAM ์๋น๋์ด ์ข ์ฆ๊ฐํ๋ค. ์ด๊ฑด ์ถ๋ก ์ด ๋๋๋ ๊ณ์ ์ ์งํ๋ ๋ฐ์๊ตฌ ์บ์์ด๊ธฐ ๋๋ฌธ์ด๋ค.
Continuous Batching
vLLM์ Batch ์ฒ๋ฆฌ์ ์์ด์๋ ๊ฝค ๊ณต๊ฒฉ์ ์ธ ์ต์ ํ๋ฅผ ํด์ค๋ค.
๊ทธ๋ฅ ์ ๋นํ Batch ์ต์ ํ๋ฅผ ํ ๋๋ ์ด๋ฐ ๋ฌธ์ ๊ฐ ์์ ์ ์๋ค.
๋ณดํต A, B, C์ ๋ํด ๋ฐฐ์น ์ถ๋ก ์ ๋ ๋ฆฌ๋ฉด, ์ด ๋ฐฐ์น ์ถ๋ก ์ ๊ฐ์ฅ ์ค๋ ๊ฑธ๋ฆฌ๋ ์ถ๋ก ๋จ์๊ฐ ๋๋ ๋๊น์ง ๋ธ๋ญ๋๋ค.
๋ค์ ๋งํด์, A, B ์ถ๋ก ์ด ๋๋๋๋ผ๋, C๊ฐ ๋๋์ง ์์ผ๋ฉด A, B ๊ณต๊ฐ์ ๋๊ณ ์๋ค๋ ๊ฒ์ด๋ค.
vLLM์ ์ด ๋ถ๋ถ์ ํํฌ์ธํธ๋ก ์ต์ ํํ๋ค. C๊ฐ ๋๋์ง ์์๋๋ผ๋, ๋ค ๋๋๊ณ ๋๊ณ ์๋ A, B ์๋ฆฌ์๋ D, E ์ฐ์ฐ์ ๋ฐ๋ก ์ฐ๊ฒจ๋ฃ์ด์ ํ์ดํ๋ผ์ธ์ฒ๋ผ ๋น ๋ฅด๊ฒ ํ ํฐ ์ถ๋ก ์ ๋๋ฆด ์ ์๋ค.
https://www.redhat.com/ko/blog/meet-vllm-faster-more-efficient-llm-inference-and-serving
vLLM์ ์ด๋ฅผ ํตํด์ ํต์์ ์ผ๋ก 2๋ฐฐ, ๊ทน๋จ์ ์ผ๋ก๋ 5~10๋ฐฐ ์ ๋์ ์ฒ๋ฆฌ๋ ํฅ์์ ์ ๊ณตํ๋ค.
vLLM์ด ์ฃผ๋ชฉ๋ฐ์ ์ฃผ์ ์ง์ ์ค ํ๋๋ค.
vLLM์ ๋จ์
์ด๊ฒ ์ฑ๋ฅ์ ์ข์๋ฐ, ์ธํ ๋ ๋ฒ๊ฑฐ๋กญ๊ณ ์ด์ ํฌ์ธํธ๋ ์ข ์๋ค.
์ฐ์ GPU๋ง๋ค ํธํ์ฑ ๋ฌธ์ ๊ฐ ์ข ์๋ค. ํน์ ๋ชจ๋ธ๊ณผ ์์ํ, vLLM์ ์กฐํฉ์ด ์ด๋ค GPU ์ฅ๋น์์๋ ์ ๋์ํ์ง ์๊ฑฐ๋ ๋ฒ๊ทธ๊ฐ ๋ง์ ์ ์๋ค. ์ด๊ฑด ์ ์ฒดํฌํด๋ด์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์์์ ์ธ๊ธํ๋ฏ์ด, vRAM์ ์ข ๋ ๋จน์ ์ ์๋ค. Prefix Cache ๊ฐ์ ์ ๊ทน์ ์บ์ ๋ ์ด์ด๋ฅผ ์ฐ๊ธฐ ๋๋ฌธ์ด๋ค. (๋ฌผ๋ก ๋ ์๋ ์์)
vLLM์ ๋ถ๊ฐ๊ธฐ๋ฅ
OpenAI ํธํ ํ๋กํ ์ฝ์ ์ ๊ณตํ๋ค. ๋๋ถ๋ถ์ ๋๊ตฌ์ ์ถ๊ฐ์ ์ธ ์ด๋ํฐ ์์ด ๋ถ์ฌ์ธ ์ ์๋ค.
Prometheus Metrics๋ ์ ์ง์ํ๋ค. ์ด๋ฅผ ํตํด ๋ฉํธ๋ฆญ์ ์๊ณ ์ด์ ๋ฌธ์ ๋ฅผ ์ถ์ ํ ์ ์๋ค.
Gemma4 ๊ตด๋ ค๋ณด๊ธฐ (with Docker)
์ง์ vllm ์จ์ ๋ชจ๋ธ ๋ค์ด๋ฐ๊ณ ์๋นํด๋ ๋๋๋ฐ, ๋์ค์ ์ธ ๋ชจ๋ธ๋ค์ ํ๋ฆฌ์
์ผ๋ก ๋ง์๋์ ๊ฒ๋ค์ด ์๋ค.
gemma4์ ๊ฒฝ์ฐ์๋ ํ๊น
ํ์ด์ค ํ ํฐ๋ง ์์ผ๋ฉด ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
export HF_TOKEN=hf_*
sudo docker run -d --name gemma4-translate --restart unless-stopped --gpus all --ipc=host --network host --shm-size 16G -e HF_TOKEN=$HF_TOKEN -v ~/.cache/huggingface:/root/.cache/huggingface vllm/vllm-openai:latest --model google/gemma-4-12B-it-qat-w4a16-ct --host 0.0.0.0 --port 8001 --dtype bfloat16 --max-model-len 8192 --gpu-memory-utilization 0.90 --max-num-seqs 2
์ด๊ฑด GPU VRAM์ 20GB ์ ๋ ๋จน๋๋ค. ๋ด ๊ฒฝ์ฐ์๋ L4๋ก ๋๋ ธ๋๋ฐ, ์ฌ๋ ฅ์ด ์๋๋ค๋ฉด ๋ ์์ ๋ชจ๋ธ์ ์ฐพ๋ค.
์๋ฌดํผ ์คํํ๋ฉด, ์ฝ๊ฐ์ ๋ก๋ํ์๊ณผ ํจ๊ป ๋ฐ ๊ฒ์ด๋ค.


๊ทธ๋ผ ๋ฉ๋ชจ๋ฆฌ ์๋ฉ ๋จน๊ณ

HTTP API๋ฅผ ํตํด ์ฐ๋ฌ๋ณผ ์ ์์ ๊ฒ์ด๋ค.
์ ๋์ํ๋ค.
์ฐธ์กฐ
https://github.com/vllm-project/vllm
https://arxiv.org/abs/2309.06180?utm_source=chatgpt.com
https://www.redhat.com/ko/blog/meet-vllm-faster-more-efficient-llm-inference-and-serving
https://docs.vllm.ai/en/stable/design/prefix_caching/
https://docs.vllm.ai/en/stable/design/metrics/