본문 바로가기
AI · 인공지능/AI 뉴스

최대 24배 빠른 대규모 언어 모델 라이브러리 「vLLM」의 등장과 PagedAttention 구조

by 두우우부 2023. 6. 23.
반응형

대규모 언어 모델을 사용할 때는 모델 자체뿐만 아니라 모델을 다루는 라이브러리가 필요합니다. 대다수의 경우 Transformers라는 라이브러리가 사용되고 있습니다만, 「PagedAttention」이라는 구조를 도입한 새로운 라이브러리 「vLLM 」를 이용하여 처리량을 최대 24배 향상할 수 있다는 것이 대규모 언어 모델 연구팀에 의해 발표되었습니다.

vLLM: Easy, Fast, and Cheap LLM Serving with PagedAttention
https://vllm.ai/

vLLM: Easy, Fast, and Cheap LLM Serving with PagedAttention

vLLM: Easy, Fast, and Cheap LLM Serving with PagedAttention By Woosuk Kwon*, Zhuohan Li*, Siyuan Zhuang, Ying Sheng, Lianmin Zheng, Cody Yu, Joey Gonzalez, Hao Zhang, and Ion Stoica (* Equal Contribution). June 20th, 2023 GitHub | Documentation | Paper (St

vllm.ai



대규모 언어 모델을 조작하기 위한 라이브러리로는 Hugging Face의 Transformers(HF)나 프로덕션 환경용 Text Generation Inference(TGI)가 존재합니다. 이번에 등장한 vLLM은 여기에 새롭게 하나를 더하는 형국입니다.

아래 그림은 NVIDIA A100 40GB에서 LLAMA의 13B 모델을 동작시켰을 때의 처리 속도(왼쪽)와 NVIDIA A10G에서 LLAMA의 7B 모델을 동작시켰을 때의 처리 속도(오른쪽)를 비교한 것입니다. 각각 왼쪽 끝에 표시된 Transformers는 분당 1자리수 정도의 요청만 처리할 수 있지만, 오른쪽 끝 vLLM은 100개 이상의 요청을 처리합니다. vLLM은 실제로 Transformers의 24배 처리 속도를 향상하고 있으며, TGI와 비교해도 2.5배의 속도를 내고 있습니다.



또한, 복수의 출력을 동시에 실시하는 병렬 출력의 테스트에서는, Transformers의 15배, TGI의 3.5배의 속도로 처리하는 성능을 보여주고 있습니다.


이러한 처리 속도의 향상을 달성할 수 있었던 것은, 대규모 언어 모델의 퍼포먼스를 조사한 결과, 메모리 병목현상을 발견한 것이 계기입니다. 대규모 언어 모델에서는 텍스트를 생성할 때 모든 입력 토큰으로부터 어텐션 키와 값의 텐서가 계산되어 KV캐시로서 GPU 메모리에 보존됩니다만, 기존의 라이브러리에서는 KV캐시 사용시 아래와 같은 문제가 있었습니다.

・너무 무겁다
LLAMA의 13B로 한 번 처리하는데 1.7GB 메모리를 점유합니다.

・동적으로 사이즈가 바뀐다
KV캐시의 사이즈는 문장의 길이에 의존합니다만, 대규모 언어 모델이 얼마나 문장을 출력할지 예측할 수 없기 때문에, 메모리의 효율적인 관리가 어려워집니다. 기존의 라이브러리에서는 단편화나 과잉 할당에 의해 메모리의 6할에서 8할이 낭비되고 있는 경우도 있었습니다.


그래서 연구팀은 OS의 가상 메모리와 페이징 구조를 참고하여 어텐션 계산시 효율적으로 메모리를 취급할 수 있는 구조인 PagedAttention을 개발했습니다. PagedAttention에서는 각 입력 토큰을 일정 길이로 분할 취급하여 연속된 KV 캐시를 불연속 메모리 공간에 저장할 수 있습니다.



블록 테이블을 이용하는 것으로, 물리 메모리상에서는 완전 멀어진 장소에 있는 블록들을 마치 연속된 것처럼 취급할 수 있습니다.



또한 필요에 따라 새로운 메모리 블록이 할당됩니다. 이렇게 함으로써 점유 후 낭비되는 메모리의 양을 1블록 이내에 담을 수 있습니다. 메모리 효율이 향상되어 동시에 많은 요청을 일괄 처리할 수 있어, GPU의 사용 효율이 향상되고 처리 속도의 개선으로 이어진 것입니다.



또한 PagedAttention을 사용하면 여러 출력을 동시에 처리할 때 메모리 효율성을 높일 수 있습니다.



구체적으로는, 메모리 블록 단위로 공통되는 부분에의 참조를 같은 물리 블록으로 하는 것으로, 같은 내용을 중복해서 여러 번 메모리에 보존해 버리는 문제를 해소하고 있습니다. 또, 생성 시에는 피참조의 수를 확인해, 복수의 참조가 있는 경우에는 새로운 블록에 내용을 카피해 기입을 실시하는 것으로 트러블을 막을 수 있도록 했습니다.



이번 vLLM을 개발한 팀은 Vicuna의 개발진이 메인이 되고 있어, 이미 4월부터 vLLM을 이용해 Vicuna나 Koala, LLaMA 등의 모델이 호스팅 되고 있습니다. vLLM을 이용함으로써 GPU의 필요를 50% 삭감한 것 외에 매일 3만 건에서 피크타임 6만 건의 요청을 문제없이 처리할 수 있다는 것으로, vLLM의 안정성을 뒷받침하고 있습니다.



실제로 vLLM을 사용하고 싶은 사람들을 위한 설치 가이드와 퀵스타트 가이드가 준비되어 있으므로 한번 확인해 보세요~

vLLM 설치 가이드
https://vllm.readthedocs.io/en/latest/getting_started/installation.html


vLLM 퀵스타트 가이드
https://vllm.readthedocs.io/en/latest/getting_started/quickstart.html

반응형