대규모 언어 모델(LLM)은 강력한 성능을 갖고 있지만 매개 변수의 수는 수백억, 수천억에 쉽게 도달할 수 있으며, 컴퓨팅 장비와 메모리에 대한 수요는 일반 기업이 감당할 수 없을 정도로 큽니다.
양자화는 모델 가중치의 정확도(예: 32비트에서 8비트로)를 줄여 추론 속도를 높이고 메모리 요구 사항을 줄이는 대신 모델 성능의 일부를 희생하는 일반적인 압축 작업입니다.
그러나 1,000억 개 이상의 매개변수가 있는 LLM의 경우 기존 압축 방법으로는 모델의 정확성을 유지할 수 없으며 하드웨어에서 효율적으로 실행할 수도 없습니다.
최근 MIT와 NVIDIA의 연구원들은 대규모 언어 모델에 대해 8비트를 효율적으로 구현할 수 있는 범용 사후 훈련 양자화(GPQ, universal- Purpose Post-training Quantization) 솔루션 SmoothQuant를 공동으로 제안했습니다. 8비트 활성화(W8A8)의 양자화, 학습 없이 모델 정확도 유지
논문 링크: https://arxiv.org/pdf/2211.10438.pdf
코드 링크: https://github.com/mit-han-lab/smoothQuant
활성화는 가중치보다 정량화하기가 더 어렵기 때문에 SmoothQuant는 수학적 등가 변환을 통해 정량화하기 어려운 활성화를 가중치로 마이그레이션하여 활성화 이상값을 원활하게 처리합니다.
SmoothQuant는 OPT-175B, BLOOM-176B 및 GLM-130B를 포함하여 INT8까지 모든 LLM의 다양한 계층에서 가중치와 활성화를 양자화할 수 있습니다.
가중 최적화나 활성화의 혼합 정밀도 정량화만 수행하는 기존 방법에 비해 SmoothQuant는 하드웨어 효율성이 더 높아 1.56배의 가속을 달성하고 메모리 요구 사항은 원래 LLM의 절반에 불과하며 메모리 요구 사항이 거의 없습니다. 정확성 손실 .
SmoothQuant는 또한 SmoothQuant를 LLM 서비스 프레임워크인 FasterTransformer에 통합하여 더 빠른 추론 속도를 달성했으며, 필요한 GPU 수는 절반만 필요합니다
첫 번째 기사의 저자인 Xiao Guangxuan은 MIT EECS의 1학년 박사 과정 학생이며 Tsinghua University의 컴퓨터 과학 기술 대학에서 학사 학위를 취득했습니다.
한송 강사는 MIT EECS 부교수입니다. 그는 스탠포드 대학에서 박사학위를 받았습니다. 그의 주요 연구 방향은 효율적인 딥 러닝입니다. 그는 한때 신경망의 크기를 줄일 수 있는 딥 압축 기술을 제안했습니다. 손실 없이 크기 순서.
양자화는 정밀도가 높은 값을 정밀도가 낮은 이산 값에 매핑하는 것입니다. 이 논문에서 연구자들은 주로 하드웨어, 특히 INT8에 대한 보다 효율적인 정수 균일 양자화에 중점을 둡니다.
양자화 작업은 다양한 세분성에서 수행될 수 있습니다. 예를 들어 텐서별 양자화는 전체 가중치 행렬에 적용되고, 토큰별 양자화는 활성화의 각 토큰에 적용되며, 채널별 양자화는 적용됩니다. 각 가중치 출력 채널에 연결됩니다.
연구원들은 활성화의 정량화 결과를 관찰하여 다음과 같은 몇 가지 패턴을 결론지었습니다.
1 정량화는 무게보다 정량화하기가 더 어렵습니다.
가중치 분포는 상대적으로 더 균일하고 평평합니다. 이전 연구 결과에 따르면 대규모 언어 모델의 가중치를 INT8 또는 INT4로 줄이는 것이 정확도에 거의 영향을 미치지 않는 것으로 나타났습니다.
2. 활성화 수량화의 주요 어려움은 이상값입니다.
활성화 시 이상값은 일반적으로 정상 값보다 약 100배 높기 때문에 이상값이 없는 채널의 양자화 비트/레벨 효율성이 매우 낮습니다.
3. 특정 채널에서 비정상적인 값이 수정됩니다.
이상값은 채널의 일부에만 표시되지만, 채널에 이상값이 있는 경우 모든 토큰에 이상값이 나타날 수 있습니다.
특정 토큰에 포함된 모든 채널의 변동은 크지만(일부 채널은 매우 크지만 대부분은 작음) 모든 토큰 수준에서 특정 채널의 변동은 작습니다(예외적) 가치 채널은 매우 클 것입니다).
이상값은 각 채널 내에서 연속적으로 발생하고 변동이 작은 특성을 가지므로 활성화에 대해 채널별 양자화를 수행하면 양자화 오류는 텐서별 양자화보다 훨씬 작습니다.
간단한 실험을 통해 연구진의 생각을 다시 한번 검증한 결과, INT8로 양자화했을 때 채널별 정확도는 텐서별 및 토큰별 양자화보다 훨씬 높으며 FP16 기준 정확도와는 다릅니다. 별로.
연구원들은 채널별 평활화 인자 s를 사용하여 입력 활성화를 평활화했습니다. 선형 레이어의 수학적 동등성을 유지하려면 가중치도 역으로 조정해야 합니다.
입력 이후 추가 확장된 커널 호출 오버헤드. 입력이 잔여 추가에서 나오는 경우와 같은 다른 경우에는 잔여 분기에 추가 스케일링을 추가할 수 있습니다.
Smooth의 목표는 역연산을 더 쉽게 정량화할 수 있도록 채널별 평활화 요소를 선택하는 것입니다.
양자화 오류를 줄이려면 모든 채널의 유효 양자화 비트를 늘려야 합니다. 모든 채널의 최대 크기가 동일하면 유효 양자화 비트의 총 개수가 가장 커집니다.
따라서 가장 직접적인 평활화 요소 선택 중 하나는 입력의 각 채널의 최대값입니다. 이는 분할 후 모든 활성화 채널이 동일한 최대값을 갖도록 보장하여 더 쉽게 수량화할 수 있습니다.
그러나 활성화 범위는 동적이며 입력 샘플마다 다르다는 점에 유의해야 합니다. 그래서 연구원들은 사전 훈련 데이터 세트의 교정 샘플을 사용하여 활성화 채널의 크기를 추정했습니다.
이 공식은 모든 수량화의 어려움을 가중치에 전가시키기 때문에 이 경우 가중치의 양자화 오차가 커져 정확도가 크게 떨어지는 것을 알 수 있습니다.
반면에 sj = 1/ max(|Wj|)를 선택하여 모든 양자화 난이도를 가중치에서 활성화로 푸시하는 것도 가능합니다. 마찬가지로 과도한 활성화 양자화 오류로 인해 모델 성능도 저하됩니다. 따라서 수량화 난이도를 가중치와 활성화로 나누어서 둘 다 쉽게 수량화할 수 있도록 해야 합니다.
연구원들은 활성화에서 가중치로의 전달 어려움을 제어하기 위해 하이퍼파라미터 전달 강도 α를 도입했습니다.
OPT 및 BLOOM 모델과 같은 대부분의 모델에서 α=0.5는 특히 가중치와 활성화에 동일한 양자화기를 사용하여 양자화 난이도를 균등하게 분배할 수 있는 좋은 균형점이라는 것을 알 수 있습니다.
이 공식은 해당 채널의 가중치와 활성화가 유사한 최대값을 가지며 따라서 동일한 양자화 난이도를 공유함을 보장합니다.
활성화 정량화가 더 어려운 30% 이상값이 있는 GLM-130B와 같이 활성화 이상값이 상대적으로 큰 일부 다른 모델의 경우 더 큰 α(예: 0.75)를 선택할 수 있습니다. 정량화 난이도는 가중치로 이전됩니다.
SmoothQuant는 Transformer 블록에 적용됩니다.
선형 레이어는 LLM 모델의 매개변수와 계산의 대부분을 차지합니다. 기본적으로 SmoothQuant는 Transformer의 모든 선형 레이어의 입력 활성화를 확장하고 W8A8을 사용하여 선형 레이어를 양자화합니다. 이를 통해 Attention 계산에서 BMM 연산자의 양자화가 가능합니다.
이 과정에서 INT8은 먼저 선형 계층 및 Attention 계층의 BMM과 같은 계산 집약적인 연산자의 입력 및 가중치를 정량화하는 데 사용되는 반면 Softmax 및 LayerNorm과 같은 다른 경량 요소의 연산은 FP16으로 활성화하면 이러한 설계는 정확성과 추론 효율성의 균형을 맞추는 데 도움이 됩니다.
연구원들은 SmoothQuant를 평가하기 위해 OPT, BLOOM 및 GLM-130B를 포함한 3개의 대규모 언어 모델을 선택하고 LAMBADA, HellaSwag, PIQA, WinoGrande, OpenBookQA, RTE, COPA를 포함한 7개의 제로샷 작업을 사용했습니다. 외.
실험 결과에 따르면 SmoothQuant는 활성화를 정량화하기가 더 어려운 매우 큰 LLM의 양자화 문제를 처리할 수 있는 것으로 나타났습니다.
SmoothQuant는 모든 평가 데이터 세트에서 FP16의 정확도를 일치시킬 수 있는 반면, W8A8, ZeroQuant 및 Outlier Suppression 기준선은 거의 무작위 결과를 생성합니다.
그리고 SmoothQuant는 100B 이상의 매개변수를 사용하여 모든 열려 있는 LLM을 무손실 양자화할 수 있습니다.
SmoothQuant의 O1 및 O2 단계는 부동 소수점 정확도를 성공적으로 유지하는 반면, O3 단계(텐서별 정적)는 평균 정확도를 0.8% 감소시킵니다. 실제 평가 샘플에 대한 정적으로 수집된 통계와 활성화 통계의 차이점.
그럼에도 불구하고 SmoothQuant-O1은 FP16의 정확도와 일치할 수 있는 반면 SmoothQuant-O3는 정확도를 1%만 줄이며 이는 기준보다 훨씬 좋습니다.
SmoothQuant는 매개변수가 100B가 넘는 매우 큰 LLM에 효과적일 뿐만 아니라 더 작은 LLM에도 안정적인 효과를 제공합니다. SmoothQuant는 모든 규모의 OPT 모델에서 작동할 수 있으며 INT8 양자화의 FP16 정확도와 일치합니다.
PyTorch 및 FasterTransformer에 통합된 SmoothQuant-O3의 속도 향상 및 메모리 절약을 입증하기 위해 우리는 한 번에 4개의 문장 배치에 대해 모든 숨겨진 상태를 생성하는 엔드투엔드 대기 시간을 측정했습니다. 컨텍스트 단계에서 대기 시간을 확인하고 이 프로세스 중 최대 GPU 메모리 사용량을 기록했습니다.
Huggingface의 모델 병렬 처리 지원 부족으로 인해 연구원들은 단일 GPU에서 SmoothQuant의 PyTorch 구현 성능만 측정했기 때문에 평가를 위해 OPT-6.7B, OPT-13B 및 OPT-30B를 선택했습니다.
FasterTransformer 라이브러리에서 SmoothQuant는 Tensor Parallelism 알고리즘과 원활하게 연결될 수 있으므로 연구원들은 OPT-13B, OPT-30B, OPT-66B 및 OPT-175B에서 SmoothQuant의 단일 GPU 및 다중 GPU 벤치마크를 테스트했습니다.
NVIDIA A100 80GB GPU 서버에서 수행된 실험 결과에 따르면 SmoothQuant는 PyTorch 구현을 기반으로 한 추론 지연 시간 및 최대 메모리 사용량 측면에서 항상 FP16 기준보다 빠릅니다. 시퀀스 길이가 256일 때 OPT-30B에서 1.51배를 얻습니다. 속도 증가.
또한 모델이 클수록 속도 향상이 더 뚜렷해지는 추세를 볼 수 있지만 LLM.int8()은 거의 항상 FP16 기준보다 느립니다. 이는 혼합 작업의 엄청난 오버헤드 때문이기도 합니다. 정밀 활성화 표현.
메모리 측면에서 SmoothQuant와 LLM.int8()은 모두 FP16 모델의 메모리 사용량을 거의 절반으로 줄일 수 있는 반면, SmoothQuant는 INT8 GEMM을 완전히 사용하기 때문에 약간 더 많은 메모리를 절약합니다.
FasterTransformer의 FP16 OPT 구현과 비교하여 SmoothQuant-O3는 단일 GPU를 사용할 때 OPT-13B 및 OPT-30B의 실행 지연 시간을 최대 1.56배 더 줄일 수 있습니다.
위 내용은 100억 개의 매개변수가 있는 언어 모델을 실행할 수 없나요? MIT의 한 중국 의사는 SmoothQuant 정량화를 제안했는데, 이는 메모리 요구 사항을 절반으로 줄이고 속도를 1.56배 높였습니다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!