-
초거대 LLM 24배 빠르게 서빙하기Paper Reviews 2023. 11. 2. 15:59
SOSP 2023
vLLM: Easy, Fast, and Cheap LLM Serving with PagedAttention [paper]
아래 내용은 vLLM의 [blog] 내용을 발췌하여 요약한 것입니다.
vLLM의 성능
HuggingFace Transformers (HF) 보다 24x배, 기존 state of the art였던 HuggingFace Text Generation Inference (TGI)보다 3.5x배 높은 throuphput을 보인다.
어떻게 이렇게 속도를 개선한 것일까? vLLM이라는 서빙 플랫폼에 대해서 소개한다. 직접 써보니 정말 간단하고, 빠르다!!
PagedAttention
이 논문에서는 LLM 서빙의 병목이 GPU 메모리 활용에 있음을 밝혀내었다. LLM에 입력으로 들어가는 모든 토큰들의 attention key, value 쌍이 모두 다음 토큰들을 예측할 때까지 GPU 메모리 상에 유지되고, 이렇게 캐싱된 key, value tensor (KV cache) 때문에 서빙이 느려진다.
KV cache의 특징은 large, dynamic의 두 가지 특성을 보인다.
- Large : LLaMA-13B 모델의 경우, 1개의 문장이 1.7GB까지 차지
- Dynamic : 생성될 문장 길이를 예측 불가능하기 때문에, 메모리의 fragmentation, over-reservation 문제로 기존 방식은 60~80% 메모리를 낭비 중.
운영체제의 가상 메모리와 페이징 알고리즘에 영감을 받아서 LLM 서빙에 PagedAttention 을 도입하였다.
PagedAttention를 활용하면, 비연속적인 메모리 공간에 연속적인 key value를 저장할 수 있다. 즉 PagedAttention 알고리즘은 각 문장 KV cache를 block으로 분할한다. 각 block은 고정된 길이의 토큰들의 key, value를 포함하게 된다. attention을 계산 할 때는 PagedAttention kernel이 이러한 block을 효율적으로 식별하고, 연산에 필요한 부분을 가져오게 된다.
비연속적인 공간에 저장된 토큰들의 KV cache를 연속적으로 불러오는 과정 PagedAttention에서는 메모리 낭비가 마지막 블록에서만 4% 정도 발생하게 된다. 이 수준은 near-optimal이며, 이러한 메모리 효율성은 더 많은 배치를 처리할 수 있도록해주고, GPU 이용률을 높여서 throughput 상에서 큰 이득을 볼 수 있다.
그런데 이런 과정을 통하면, throughput은 좋아지지만 한 개 샘플 기준 latency는 비슷하거나 더 나빠질 것 같다. 즉 다수의 유저에게 답변을 더 많이 제공할 수 있지만, 유저 입장에서는 속도가 향상되었다고 느끼지 못할 것 같다.
또 다른 PagedAttention의 장점은 메모리 공유가 효율적으로 가능하다는 점이다. 모두 동일한 prompt를 공유하는 경우에, 그 prompt는 특정 메모리 block에 계속 올려두고 공유하면 되기 때문에, 다수의 출력 시퀀스가 같은 prompt로부터 동시에 생성될 수 있다! 안전한 공유를 위해서, PagedAttention는 물리적 블록의 참조 횟수를 추적하며, Copy-on-Write 메커니즘을 구현하고 있다. (아래 2번째 그림 참조)
같은 prompt를 공유하는 여러 개의 출력 시퀀스 prompt 공유에 따른 Copy-on-write 메커니즘 동일 prompt에 대해 매번 inference를 어떻게 할 수 있는지 궁금했었는데, 이렇게 하면 되는구나...
Get started
이미 huggingface transformers에서 제공하는 많은 모델들을 활용 가능하도록 지원하고 있기에, 일반적인 GPT2LMHeadModel 등을 사용하고 있다면, 사용 방법은 아래와 같이 매우 간단하다. 지원하는 모델들 리스트 를 확인하려면, 링크를 클릭!
'Paper Reviews' 카테고리의 다른 글
[논문 리뷰] KnowAgent: Knowledge-Augmented Planning for LLM-Based Agents (0) 2024.04.15 [논문 리뷰] Direct Preference Optimization (DPO) Explained! (0) 2024.01.05 상용화된 LLM에서 얻은 피드백 활용 방법 (0) 2023.10.31 LLAMA2를 무해한 모델로 만들기 위한 노력 (0) 2023.08.24 LEVER: Learning to Verify Language-to-Code Generation with Execution 논문 리뷰 (0) 2023.08.16