벤치마크가 다가 아니야! vLLM으로 보는 LLM 추론 최적화
제목: 벤치마크가 다가 아니야! vLLM으로 보는 LLM 추론 최적화
원문 링크: https://blog.aqudi.me/vllm-llm-inference-optimization
카테고리: 기술
핵심 요약: AI 모델을 고를 때 보통 벤치마크 점수만 봐 왔습니다. 그런데 Ollama x FriendliAI Seoul Meetup에 다녀온 뒤, 모델을 서비스로 운영하는 입장에서는 벤치마크 점수뿐 아니라 응답 속도, 동시 처리량, 비용 같은 추론 성능도 중요하다는 걸 알게 됐습니다. 이번 글에서는 추론 성능을 높이는 최적화 기법들을 vLLM을 중심으로 살펴봤습니다.
주요 내용:
원문 링크: https://blog.aqudi.me/vllm-llm-inference-optimization
카테고리: 기술
핵심 요약: AI 모델을 고를 때 보통 벤치마크 점수만 봐 왔습니다. 그런데 Ollama x FriendliAI Seoul Meetup에 다녀온 뒤, 모델을 서비스로 운영하는 입장에서는 벤치마크 점수뿐 아니라 응답 속도, 동시 처리량, 비용 같은 추론 성능도 중요하다는 걸 알게 됐습니다. 이번 글에서는 추론 성능을 높이는 최적화 기법들을 vLLM을 중심으로 살펴봤습니다.
주요 내용:
- LLM 요청은 입력 전체를 한 번에 처리하는 prefill과 토큰을 하나씩 만드는 decode로 나뉩니다. decode는 토큰마다 모델 가중치 전체를 메모리에서 읽어야 해서, 계산보다 메모리를 읽는 데 시간이 더 걸립니다. 게다가 응답 길이를 미리 알 수 없어서 메모리를 얼마나 잡아 둘지 예측하기 어렵습니다.
- continuous batching은 배치를 요청 단위가 아니라 decode 스텝 단위로 다시 짭니다. 끝난 요청의 자리를 다음 스텝에 바로 새 요청으로 채워 GPU가 쉬는 시간을 줄입니다. 이 방식은 OSDI 2022의 Orca 논문에서 처음 제안됐습니다.
- vLLM의 PagedAttention은 운영체제의 메모리 페이징처럼 KV cache를 고정 크기 블록으로 나누고 필요할 때만 할당합니다. 메모리 낭비가 줄어드는 만큼 같은 GPU에 더 많은 요청을 올릴 수 있습니다. 같은 프롬프트를 쓰는 요청끼리는 블록을 공유합니다.
- 이 밖에도 prefix caching, chunked prefill, speculative decoding, quantization, tensor/pipeline parallelism처럼 스케줄링, 메모리, 연산, 분산 계층마다 최적화 기법이 있습니다.