주요 컨텐츠로 이동

NVIDIA H100 텐서 코어 GPU에서 정량화된 대규모 언어 모델(LLM) 제공


이 포스트 공유하기
Serving Quantized LLMs on NVIDIA H100 Tensor Core GPUs

정량화는 머신 러닝 모델을 더 작고 빠르게 만드는 기술입니다. 저희는 Llama2-70B-Chat을 정량화하여 초당 2.2배 더 많은 토큰을 생성하는 동등한 품질의 모델을 생성합니다.

언어 모델이 클수록 쿼리 속도가 느려지고 비용이 더 많이 들기 때문에 GPU는 메모리에서 더 많은 매개변수를 로드하고 더 많은 연산을 수행해야 합니다. 유니티 팀은 대규모 언어 모델(LLM) 성능 을 최적화하기 위해 다양한 기술을 개발하고 채택해 왔습니다. 이 블로그 게시물에서는 모델의 메모리 사용량을 줄이고 더 빠르게 실행하기 위해 모델의 수치 정밀도를 낮추는 인기 있는 기술인 양자화에 대해 설명합니다. Llama2-70B-Chat과 같은 LLM에 양자화를 적용하면 전체 16비트 정밀도로 실행할 때보다 초당 2.2배 더 많은 토큰을 생성하는 모델을 만들 수 있습니다. 중요한 것은 모델 품질이 유지되도록 하기 위해 유니티는Gauntlet 모델 평가 제품군의 수십 가지 벤치마크에서 양자화된 모델을 엄격하게 테스트한다는 점입니다.

정량화에 대한 간략한 입문서

최신 대규모 언어 모델(LLM)은 대부분 16비트 정밀도를 사용하여 학습됩니다. 모델이 학습되면 실무자는 종종 모델 가중치를 더 낮은 정밀도로 정량화하여 모델을 저장하거나 계산을 실행하는 데 필요한 비트 수를 줄임으로써 추론 속도를 높입니다. 모델 구성 요소 중 하나 이상을 정량화할 수 있습니다:

  • 모델 매개변수 (예: 가중치).
  • 키-값(KV) 캐시. 이는 출력 토큰을 순차적으로 생성할 때 반복적인 계산을 줄이기 위해 저장되는 관심 키 및 값과 관련된 상태입니다.
  • 활성화. 다음 레이어의 입력으로 사용되는 모델의 각 레이어의 출력입니다. 활성화를 정량화하면 행렬 곱셈과 같은 실제 계산을 더 낮은 정밀도로 수행하게 됩니다.

정량화는 더 작고 빠른 모델을 생성합니다. 모델 크기를 줄이면 GPU 메모리를 덜 사용하거나 최대 배치 크기를 늘릴 수 있습니다. 또한 모델이 작아지면 메모리에서 가중치를 이동하는 데 필요한 대역폭도 줄어듭니다. 이는 낮은 배치 크기에서 특히 중요한데, 대역폭이 제한된 낮은 배치 설정에서는 로드된 모델의 바이트당 연산 수가 적기 때문에 모델 가중치의 크기에 따라 병목 현상이 발생합니다. 또한 활성화를 정량화하면 하드웨어 지원을 활용하여 저정밀 연산을 빠르게 처리할 수 있습니다: NVIDIA A100 및 H100 텐서 코어 GPU는 16비트 부동 소수점 연산보다 2배 빠른 8비트 정수(INT8) 연산을 수행할 수 있습니다. H100 텐서 코어 GPU에는 8비트 정수 연산과 동일한 Transformer 속도로 8비트 부동 소수점 (FP8) 연산을 지원하는 엔진이 탑재 되어 있습니다. LLM 추론의 과제에 대해 자세히 알아보려면 이 주제에 대한 이전 블로그를 참조하세요.

이 작업에서는 두 가지 양자화 설정에 대해 설명합니다:

  1. INT8 가중치 + KV 캐시 양자화. 이 설정에서는 모델 가중치와 KV 캐시가 줄어들지만 활성화는 16비트로 유지됩니다.
  2. FP8. 가중치, KV 캐시, 활성화는 모두 8비트 부동소수점 값으로 축소됩니다. 8비트 부동소수점 연산은 NVIDIA H100 텐서 코어 GPU에서만 지원되며, NVIDIA A100 텐서 코어 GPU에서는 지원되지 않습니다.

정수 대 부동 소수점 양자화

INT8과 FP8의 차이점은 무엇인가요?

그림 1: 정수 양자화에 비해 FP8 양자화는 분포의 중간 부근에서 가중치에 대한 오차가 더 작습니다. 이는 정수 형식이 균일한 숫자 분포를 나타내는 반면, 부동소수점 숫자는 거듭제곱법칙 분포를 나타내기 때문입니다. 부동소수점 형식은 또한 동적 범위가 더 넓기 때문에 이상값에서 더 작은 오차를 발생시킵니다.

 

INT8 양자화에서는 모델 파라미터에 스케일링 계수를 곱하고, 0을 중심으로 위아래로 이동시킨 다음, 이 값을 INT8 형식으로 표현할 수 있는 256개의 정수 중 하나로 반올림합니다. 이 반올림은 오류를 유발하므로 매개변수를 반올림할 필요가 적을수록 정량화된 모델의 품질이 향상됩니다. 그러나 정수의 분포는 균일하므로 INT8 양자화는 모델 파라미터와 활성화도 균일하게 분포되어 있을 때 가장 잘 작동합니다 . 

안타깝게도 가중치와 활성화가 균일하게 분포하는 경우는 드뭅니다. 일반적으로 종 곡선처럼 보이므로 FP8 양자화가 더 잘 작동할 수 있습니다. 부동 소수점 숫자 형식은 균등하지 않은 분포를 나타낼 수 있는데,가수에 일부 비트를 사용하고 지수에 일부 비트를 사용하기 때문에 0에 가까운 숫자를 높은 정밀도로 표현하고 싶을 때 지수를 음수로 설정할 수 있습니다.

최근 연구에 따르면 이상값 가중치와 활성화(일반적인 값과 거리가 먼 숫자)가 모델 품질에 특히 중요하다는 사실이 밝혀졌습니다. FP8에는 지수 성분이 있기 때문에 INT8보다 오차가 적은 매우 큰 숫자를 나타낼 수 있습니다. 따라서 FP8로 양자화하면 INT8보다 더 정확한 모델을 생성하는 경향이 있습니다. 

활성화에는 가중치보다 이상값이 더 많이 포함되는 경향이 있습니다. 따라서 INT8로 모델 품질을 유지하기 위해 가중치와 KV 캐시만 INT8로 정량화하고 활성화는 현재 FP16에 그대로 둡니다. SmoothQuant와 같은 다른 기법을 사용하면 INT8 양자화를 통해 이상값 문제를 해결할 수 있습니다.

Llama2-70B-Chat 정량화하기

Llama2-70B-Chat은 현재 파운데이션 모델 API를 통해 제공되는 모델 중 가장 크고 품질이 우수한 모델 중 하나입니다. 안타깝게도 이는 더 작은 모델보다 속도가 느리고 동시성이 제한적이라는 의미이기도 합니다. 정량화가 도움이 될 수 있는지 알아봅시다!

 유니티는 NVIDIA TensorRT-LLM 라이브러리를 사용하여 최적화된 Llama2-70B-Chat 모델을 정량화하여 제공합니다. 그 결과 Llama2-70B-Chat을 정량화할 수 있음을 확인했습니다:

(a) 50% 더 작은 모델로, GPU 메모리 요구 사항을 낮추고 동일한 하드웨어에 2X-Large 배치 크기를 맞출 수있습니다.

(b) 최대 30% 더 빠른 출력 토큰 생성.

(c) 평균적으로 기존 Llama2-70B-Chat 모델과 동일한 품질입니다.

요약하자면, FP8 양자화를 사용하면 전체 모델 처리량을 2.2배까지 늘릴 수 있습니다!

속도

퀀타이제이션의 가장 큰 장점은 동일한 지연 시간 예산을 유지하면서 동일한 하드웨어에 맞출 수 있는 최대 배치 크기를 두 배로 늘릴 수 있기 때문에 높은 동시성을실현할 수 있다는 점입니다. FP8을 사용하는 H100의 배치 크기 64에서는 사용자당 출력 토큰당 시간(TPOT)이 10% 단축되어 FP16을 사용하는 배치 크기 32에 비해 초당 2.2배 더 많은 토큰을 생성할 수 있습니다 .

동시성을 높이는 것이 옵션이 아니더라도 양자화는 몇 가지 이점을 제공합니다. 배치 크기가 8 미만일 때 양자화된 모델의 경우 TPOT 및 처리량이 최대 30% 향상됩니다. 그 이상일 경우 INT8 가중치 전용 양자화는 계산이 FP16으로 유지되므로 속도가 거의 또는 전혀 향상되지 않습니다. 그러나 H100은 Transformer 엔진을 사용하여 더 빠른 FP8 계산을 수행하기 때문에 높은 배치 크기에서도 FP16에 비해 10%의 TPOT 향상을 유지합니다.

프롬프트 처리는 어떻게 하나요? 미리 채우는 동안 전체 컨텍스트를 한 번에 처리하므로 일반적으로 compute 에 바인딩됩니다. H100에서 FP8을 더 빠르게 작동하면 FP16에 비해 첫 번째 토큰에 도달하는 시간(TTFT)이 30% 향상됩니다. 그러나 INT8 가중치 전용 양자화는 계산이 FP16에 남아 있고 데이터 유형 간 변환에 따른 추가 오버헤드가 있기 때문에 실제로는 양자화를 하지 않는 것보다 느립니다.

마지막으로 GPU 유형을 비교해 보았습니다. 동일한 배치 크기와 정밀도(즉, 둘 다 INT8 또는 FP16을 실행하는 경우)에서 H100이 A100에 비해 25~30% 더 나은 TPOT을 보입니다. 가장 빠른 H100 모드인 FP8과 가장 빠른 A100 모드인 INT8(가중치 및 KV 캐시)을 비교하면 배치 크기가 클 경우 이 격차는 80%로 증가합니다. 그러나 H100은 A100보다 67% 더 많은 대역폭과 3배 더 많은 compute 을 제공하므로, 향후 H100용 소프트웨어와 커널이 더 최적화되면 이 차이는 더 커질 수 있습니다. 현재로서는 H100이 A100보다 성능 헤드룸이 더 많은 것으로 보입니다. 테스트 결과에 따르면, 데이터가 메모리에서 compute 요소로 얼마나 효율적으로 이동하는지를 측정하는 모델 대역폭 활용도는 출력 토큰 생성 시 A100이 H100에 비해 2%에서 7%까지 더 높은 것으로 나타났습니다.

그림 2. 각 Llama2-70B-Chat 양자화 모드와 하드웨어 구성에 대해 (위) 초당 출력 토큰 수로 측정된 모델 처리량, (아래) 사용자당 출력 토큰 당 시간(TPOT), (세 번째) 첫 번째 토큰까지의 시간, (아래) 지연 시간 대비 출력 처리량을 표시합니다.

 

품질

그림 3. INT8 및 FP8 라마 모델 모두에서 대규모 언어 모델(LLM) 평가 Gauntlet 하위 작업의 기준 모델과의 정확도 차이는 0에 가까운 중앙값을 가진 거의 정규 분포입니다.

 

모델을 정량화하면 모델 품질에 영향을 미칠 수 있습니다. 유니티는 다양한 작업에서 모델의 품질을 테스트할 수 있는 MosaicML Gauntlet 평가 제품군을 개발했습니다. 이 제품군에는 MMLU, BigBench, Arc, HellaSwag 등 수십 개의 산업 표준 벤치마크가 포함되어 있습니다. 이러한 벤치마크는 세계 지식, 상식적 추론, 언어 이해, 상징적 문제 해결, 독해력 등 다양한 종류의 문제로 구성되어 있습니다.

Gauntlet을 사용하여 양자화된 라마2-70B-Chat 모델에 대한 철저한 평가를 수행한 결과, 양자화 모드와 기준 모델 간에 유의미한 정확도 차이가 발견되지 않았습니다. 그림 3에서는 건틀릿 하위 작업에서 각 양자화 유형과 기준 모델인 Llama2-70B-Chat 간의 품질 차이를 보여줍니다. 평균적으로 양자화된 모델과 기준 모델 간에는 품질 차이가 없으며, 양자화된 모델은 대부분의 작업에서 기준 성능의 +/- 2% 이내입니다.

결론

정량화는 모델 속도와 처리량을 크게 향상시킬 수 있는 강력한 기술입니다. 낮은 배치 크기에서는 INT8 무게 전용과 FP8 모두 비슷한 이점을 제공합니다. 하지만 처리량이 많은 사용 사례의 경우 NVIDIA의 H100에서 FP8 양자화가 가장 큰 이점을 제공합니다. 

유니티 엔지니어링 팀은 속도 향상을 도입할 때 모델 품질을 유지하기 위해 항상 주의를 기울이며, 정량화도 마찬가지입니다. 건틀렛의 평가 제품군에 따르면 평균적으로 Llama2-70B-Chat은 FP8 또는 INT8 양자화 후에도 원래 품질을 유지합니다.

저희는 곧 위에서 설명한 모든 성능상의 이점을 갖춘 재단 모델 APIs 을 통해 정량화된 Llama2-70B-Chat을 제공할 예정입니다. 모델 쿼리를 빠르게 시작하고 토큰당 비용을 지불할 수 있으며, 프로덕션 워크로드에 대한 동시성 보장이 필요한 경우 프로비저닝된 처리량으로 파운데이션 모델 APIs 을 배포할 수 있습니다. 여기에서 자세히 알아보세요.

유니티는 고품질의 결과를 유지하면서 더 빠르게 제공하는 모델을 만들기 위해 끊임없이 노력하고 있습니다. 더 많은 최적화를 기대해 주세요!