테크레시피

LLM 출력 속도 24배 높여주는 라이브러리 등장했다

대규모 언어 모델을 사용할 때에는 모델 자체 뿐 아니라 모델을 다루는 라이브러리가 필요하다. 대다수는 트랜스포머(Transformers)라는 라이브러리가 사용되고 있지만 페이지드어텐션(PagedAttention)이라는 구조를 도입한 새로운 라이브러리인 vLLM을 이용하는 것으로 처리량을 최대 24배 향상할 수 있다는 게 대규모 언어 모델 연구팀에 의해 발표됐다.

대규모 언어 모델을 조작하기 위한 라이브러리에는 허깅페이스의 HF(Transformers)나 프로덕션 환경용 TGI(Text Generation Inference)가 존재한다. 이번에 등장한 vLLM은 여기에 더해진 형태다.

엔비디아 A100 40GB에서 LLaMA 13B 모델을 동작시켰을 때의 처리 속도, 엔비디아 A10G에서 LLaMA 7B 모델을 동작시켰을 때의 처리 속도를 비교하면 트랜스포머는 분당 1자리 정도만 처리하지만 vLLM은 100개 이상 요청을 처리한다. vLLM은 트랜스포머의 24배 처리 속도 향상을 달성하고 있으며 TGI와 비교해도 2.5배 속도를 올리고 있다. 또 복수 출력을 동시에 실시하는 병렬 출력 테스트에선 트랜스포머 15배, TGI 3.5배 속도를 처리하는 성능을 보였다.

연구팀은 운영체제 가상 메모리와 페이징 구조를 참고로 어텐션 계산을 할 때 효율적으로 메모리를 취급할 수 있는 구조인 페이지드어텐션을 개발했다. 페이지드어텐션에선 각 입력 토큰을 일정 길이마다 분할해 취급해 연속하는 KV캐시를 불연속 메모리 공간에 저장할 수 있다. 블록 테이블을 이용하는 것으로 물리적 메모리상에서 완전히 멀어진 장소에 있는 블록끼리 마치 연속한 것처럼 취급할 수 있다.

또 필요에 따라 새로운 메모리 블록이 할당된다. 이렇게 해 점유했는데 낭비되는 메모리량을 1블록분 이내에 담을 수 있다. 메모리 효율이 향상된 덕에 시스템이 동시에 많은 요청을 일괄 처리할 수 있어 GPU 사용 효율이 향상되어 처리 속도 개선으로 이어졌다고 한다.

또 페이지드어텐션을 이용하면 여러 출력을 동시에 처리할 때 메모리 효율성을 높일 수 있다. 구체적으론 메모리 블록 단위로 공통되는 부분 참조를 같은 물리 블록으로 해 같은 내용을 복수 회 메모리에 보존해 버리는 문제를 해소하고 있다. 또 생성할 때에는 피참조 수를 확인해 복수 참조가 있는 경우에는 새로운 블록에 내용을 복제해 기입을 실시하는 것으로 트러블을 막도록 했다.

이번 vLLM을 개발한 팀은 이미 4월부터 vLLM을 이용해 여러 모델(Vicuna, Koala, LLaMA)이 호스팅되고 있다. vLLM을 이용해 GPU 필요수를 50% 줄인 것 외에 매일 3만 건에서 피크시에는 6만 건 요청을 문제없이 처리할 수 있다는 것으로 vLLM 안정성이 뒷받침되고 있다고 한다. 관련 내용은 이곳에서 확인할 수 있다.

추천기사