LLM에서의 모델 정량화 및 정량화 적용|듀테크놀로지

1. 모델 추론 최적화

다양한 시나리오에서 모델을 구현하면서 모델 추론 가속화는 오랫동안 AI 엔지니어링의 중요한 부분이 되었습니다. 최근 몇 년 동안 Transformer 아키텍처를 기반으로 한 대형 모델이 주류가 되었으며 다양한 작업에서 SoTA 결과를 달성했습니다. 훈련 및 추론에 드는 비용이 높기 때문에 합리적인 비용으로 배포하는 방법이 더욱 중요해졌습니다.

대규모 모델 추론이 직면하는 과제는 주로 다음 두 가지 사항을 포함합니다.

  • 대용량 메모리(비디오 메모리) 요구 사항은 주로 모델 자체의 매개 변수 및 추론에 대한 즉각적인 요구 사항에서 비롯됩니다.
    • LLaMA2-30B 모델의 경우 모델 자체를 비디오 메모리에 로드하려면 추론 프로세스 중에 약 60GiB의 비디오 메모리가 필요합니다. 단일 토큰의 KV 캐시에는 약 1.6MiB의 비디오 메모리가 필요합니다: 6656(layer Dim) * 52( 레이어 번호) *2 ( K & V) * 2(fp16, 2bytes), 2048 토큰 요청에는 3.3GiB의 비디오 메모리가 필요합니다.
  • 생성 프로세스는 일반적으로 타이밍 측면에서 직렬 프로세스이기 때문에 병렬성이 좋지 않아 디코딩 프로세스를 병렬화하기 어렵고 계산 병목 현상이 발생합니다.

일반적인 추론 최적화 방법에는 KD(Knowledge Distillation), 가지치기 및 양자화뿐만 아니라 LLM 메모리 최적화를 위해 제안된 다양한 솔루션(예: Flash Attention, Paged Attention 등)이 포함됩니다.

Distillation은 작은 모델을 Student 모델로 직접 구축하고, Soft Label과 Original Label의 조합을 통해 원래 모델에 대한 지식을 지도 학습하여 Small 모델이 원본 모델과 동등한 성능을 갖도록 하고, 최종적으로 이를 대체하는 것을 말합니다. 추론 효율성을 높이기 위해 작은 모델을 사용합니다.

 

[이미지 출처: Knowledge Distillation: A Survey, 2021, p2]

가지치기는 모델에서 중요하지 않은 가중치를 잘라내어 모델을 "얇게 만들고" 모델의 추론 효율성을 향상시킵니다. 모델의 기능을 보장하기 위해 일반적으로 가지치기 프로세스에는 훈련 데이터를 기반으로 모델을 미세 조정하는 작업도 수반되어야 합니다. . 가지치기 가중치의 크기에 따라 구조적 가지치기와 비구조적 가지치기로 나눌 수 있습니다.

  • 구조화된 가지치기: 일반적으로 가중치 텐서의 하나 이상의 차원에 따라 블록에서 중요하지 않은 채널을 잘라내고 일반적인 행렬 곱셈을 유지합니다. 그러나 가지치기된 채널은 상위 및 하위 계층의 추론에 영향을 미치기 때문에 네트워크의 논리적 정확성은 다음과 같습니다. 점검을 받다.
  • 구조화되지 않은 가지치기(Unstructured pruning): 가중치 텐서에서 중요하지 않은 요소를 무작위로 가지치기하므로 일반적으로 원래의 가중치 구조를 유지하므로 희소 곱셈 계산이 발생하지만 범용 하드웨어에는 적합하지 않으므로 이를 가속화하려면 특수 하드웨어가 필요합니다.

현재 LLM에서는 가지치기를 적용한 사례가 거의 없습니다. 예를 들어 Activation-aware[1]를 기반으로 한 다음 가지치기 작업은 주로 가중치 자체의 절대값과 입력 텐서의 절대값을 기반으로 하는 비정형 가지치기 작업을 수행합니다. 가중치 텐서 자체가 희박하게 만들어져 모델의 정확도 손실이 엔지니어링 요구 사항을 충족할 수 없습니다.

 

[이미지 출처: 대규모 언어 모델을 위한 간단하고 효과적인 가지치기 접근 방식, 2021, p2]

아래 그림과 같이 구조화된 가지치기[2]에 대한 최근 연구에서는 검색 방법을 사용하여 모델의 하위 구조를 찾고 재학습을 통해 모델 정확도를 유지하지만 원래 모델에 비해 가지치기 모델의 정확도가 크게 감소할 수 밖에 없습니다. 동일한 수의 매개변수(가지치기 후)를 가진 다른 작은 모델과 비교하여 해당 방법의 중요성을 보여줍니다.

 

[이미지 출처: Sheared LLaMA: 구조화된 가지치기를 통한 언어 모델 사전 학습 가속화,2023,p3]

 

[사진출처:huggingface/Sheared-llama-1.3B]

정량화가 신경망 및 LLM에 대한 첫 번째 선택이 된 이유는 다음과 같은 장점 때문입니다.

  • 비디오 메모리 감소를 직관적으로 반영합니다.
    • 일반적으로 LLM 가중치는 FP16에 저장되며, 가중치를 int4로 양자화한 후 부피는 직관적으로 원래 크기의 1/4로 줄어듭니다(실제로는 비정량화 임베딩, 메모리 할당 및 기타 문제로 인해 약간 더 커질 수 있음). 이유) 및 비디오 메모리에 대한 리소스 요구 사항이 크게 감소했습니다.
  • 계산 속도를 높이기 위해 W4A16 및 W8A16과 같은 연산자를 가속화합니다.

2. 정량화 소개

베이스

정량화의 본질은 일반적으로 모델의 매개변수 또는 전체 모델의 추론 프로세스를 부동 소수점에서 정수로 변환하는 것입니다.

양자화 매개변수는 일반적으로 scale과 zero-point의 두 가지 값으로 구성됩니다. 전자는 부동 소수점이고 후자는 정수입니다. x가 텐서(추론을 위한 가중치 또는 중간 변수일 수 있음)라고 가정하면, 수량화 과정은 다음과 같이 표현될 수 있습니다.

 

b를 사용하여 양자화 비트 너비를 나타내고, q{min}과 q{max}는 각각 정수 값 범위의 범위를 나타냅니다. 예를 들어 int-8 양자화는 [-128,127], 즉 q{min}=을 사용할 수 있습니다. -2^(b-1 )=-128, q{max}=2^(b-1)-1=127, 클램프(a;q{min},q{max})는 입력 값 a가 다음과 같다는 것을 의미합니다. [q{min}, q{max }] 범위 잘림 연산을 기반으로 x{int}는 양자화된 결과를 나타내고, s와 z는 양자화 매개변수 스케일과 영점을 나타냅니다.

 

 

【사진 출처: 효율적인 신경망 추론을 위한 양자화 방법 조사,2021,p5;대형 언어 모델의 양자화 소개,p12】

정수에서 부동소수점으로의 역양자화 과정은 다음과 같다.

 

양자화 매개변수에 대해서는 검색, 최적화, LKD(레이어별 증류) 및 기타 알고리즘을 기반으로 최적의 솔루션을 계산하는 많은 알고리즘이 있으며 이를 통해 양자화로 인한 정확도 손실을 최소화하고 규모와 규모에 대한 가장 직접적인 계산 방법을 제공합니다. 이는 텐서 요소 최소/최대를 기반으로 합니다.

 

다음은 텐서 x를 fp32에서 int8 정수 유형으로 양자화한 다음 다시 fp32로 역양자화하는 것을 나타내는 간단한 코드 예제입니다.

x->x{int}->x_hat 프로시저의 예는 다음과 같습니다.

 

x 양자화 전:

 

x_hat 양자화 후:

 

대칭/비대칭

비대칭 양자화와 비교하면 대칭 양자화의 정의는 양자화로 매핑된 정수 값 범위가 0 값을 기준으로 대칭이 된다는 것, 즉 위 수식의 영점이 0, qmax = -qmin 이라는 식이 됩니다. 양자화 형태가 더욱 단순화되었습니다.

비대칭 양자화는 양자화 범위를 완전히 활용하는 데 유용합니다. 예를 들어 Conv+ReLU에 의한 여기 텐서 출력은 모두 양수 값을 갖습니다. 대칭 양자화가 사용되면 모든 부동 소수점은 [0~127] 범위에 매핑되고 해당 범위의 절반은 사용되지 않으며 양자화 정확도는 없습니다. 비대칭 양자화만큼 좋습니다.

 

[이미지 출처: 효율적인 신경망 추론을 위한 양자화 방법 조사, 2021, p5]

실제로는 가중치 텐서에 대해 대칭 양자화를 수행하고 입력 텐서에 대해 비대칭 양자화를 수행하는 것이 종종 선택됩니다. 다음은 Qualcomm의 수량화 백서에서 분석한 내용입니다. 예를 들어 선형 레이어의 행렬 곱셈을 예로 들어 가중치와 입력 모두에 대해 비대칭 양자화를 선택한 경우 표현식은 다음과 같이 확장됩니다.

 

  • 첫 번째 항목은 정수 텐서의 곱셈 연산으로, 이는 즉시 필요한 연산입니다.
  • 세 번째와 네 번째 항목의 연산에는 스케일, 0 및 정수 가중치의 곱셈이 포함되며, 이는 모두 미리 예측되므로 미리 계산하여 오프셋으로 추가할 수 있습니다.
  • 두 번째 항목의 계산은 x{int}에 따라 달라지며, 이는 각 추론에 대해 즉시 계산되어야 하며 이로 인해 추가 컴퓨팅 성능이 발생합니다.

따라서 가중치 양자화를 대칭 양자화(zW=0)로 변경하면 위 수식은 다음과 같이 단순화됩니다. 실시간 계산에서는 첫 번째 항목의 행렬 곱셈만 계산하면 되며, 두 번째 항목은 사전 계산된 편향 항목:

 

둘 다 대칭적으로 양자화되면 표현식은 다음과 같이 단순화됩니다.

 

원래 모델의 부동 소수점 계산 W{x}를 비교하면, W{int}x{int}는 정수와 정수 사이의 곱셈입니다. 이는 전자보다 Nvidia GPU에서 훨씬 빠릅니다. 속도가 크게 빨라집니다.

3. LLM의 정량화

LLM 양자화의 과제

모델 성능의 관점에서 볼 때, 정량화가 처음부터 끝까지 해결해야 하는 전제 중 하나는 양자화된 모델의 정확성을 어떻게 유지하느냐입니다. 추론 효율성.

신경망에서 정량화해야 하는 작업은 주로 컨벌루션 레이어 Conv(x;W)와 완전 연결 레이어 Wx입니다. 즉, 설명된 작업에 따라 각각 W와 x의 가중치 양자화(WQ) 및 여기입니다. 이전 부분에서 정량화(활성화 양자화, AQ).

CNN 모델이나 소형 Transformer 모델과 달리 대형 Transformer 모델의 행렬 곱셈에 의해 생성된 여기 텐서는 일반적으로 더 많은 이상값을 갖습니다. 즉, 값 분포의 대부분의 점으로 구성된 점 그룹이 값과 멀리 떨어져 있습니다. 절대값은 크지만 비율이 낮은 값은 정량화의 어려움을 증가시킵니다. 일반적으로 이상값을 선택하는 방법은 정량화 작업에 있어 큰 어려움이 됩니다. 너무 많이 고려하면 정량화 범위가 너무 커지고, 너무 많이 자르면 이러한 값은 절대값이 커집니다. 값은 일반적으로 모델 추론 결과에 더 큰 영향을 미치므로 모델 성능이 저하되고 후자는 LLM 정량화에서 특히 분명합니다.

아래 그림은 각각 Resnet18 및 Opt-13B의 특정 입력 텐서 계층의 요소 값 통계를 보여줍니다. 시그마는 해당 분포의 표준 편차를 나타냅니다. Resnet18 입력의 최대값은 약 28시그마이며 절대값의 비율입니다. 6시그마 이외의 값은 0.05%이고, Opt-13B 네트워크의 최대 입력값은 325시그마이며, 6시그마 이외의 절대값 비율은 0.2%이다. 정량화 효과 측면에서 Resnet18의 int-8 정확도는 기본적으로 손실이 없는 반면 Opt-13B의 int-8 모델의 정확도는 붕괴되었습니다.

 

[이미지 출처: 대규모 언어 모델의 양자화 소개, p20]

인센티브 정량화 문제에 대응하여 SmoothQuant에서 제안한 아이디어와 같이 양자화 정확도를 낮추려는 몇 가지 솔루션이 있습니다.

 

 

[이미지 출처: SmoothQuant,p4]

행렬 곱셈에서는 입력 텐서 ) 및 diag(s)·W의 값을 축소합니다. 이는 텐서 X의 수량화의 어려움을 줄이는 동시에 곱셈 연산의 결과가 변경되지 않도록 보장합니다. 실제 엔지니어링에서 이 양자화 방식으로 인한 양자화 오류는 여전히 대형 모델의 추론 효과에 상대적으로 분명한 영향을 미치며 int-8 정밀 양자화에서도 명백한 오류가 있습니다. 예를 들어 Llama2-7B에 대한 다음 SmoothQuant 적용 결과는 그 복잡성이 매우 낮고 실제로 적용하기 어렵다는 것을 보여줍니다.

 

따라서 현재 엔지니어링 배포에서 실용적인 솔루션의 대부분은 가중치 전용 정량 솔루션, 즉 활성화 정량 솔루션을 포기하는 것입니다.

GPTQ

GPTQ는 엔지니어링 배포에 허용되는 최초의 정량화 방식입니다. W8A16 또는 W4A16의 정량화 효과는 대부분의 시나리오에서 원래 모델에 가깝고 정량화 프로세스가 매우 빠릅니다.

정량화 과정

행렬 곱셈의 기본 단위 연산을 예로 들면, 가중치만 양자화하기 전과 후의 곱의 평균 제곱 오차를 바탕으로 다음과 같은 최적화 함수를 작성할 수 있습니다.

 

W는 Transformer의 선형 레이어 가중치이고 X는 해당 입력을 나타냅니다. 오프라인 양자화 과정은 모듈별(Transformer) 및 레이어별(Q, K, V, O, Fc1, Fc2)를 양자화하는 것입니다.

매개변수와 데이터는 다음과 같이 정의됩니다.

  • W∈R^{K×M}, X∈R^{M×N}, Y=W×X∈R^{K ×N}
  • 보정 세트: 데이터의 일부를 추론에 사용하고, 각 레이어의 입력 텐서 값 범위를 확인하는 데 사용하며, 이를 기반으로 양자화합니다.

구체적인 정량화 과정은 다음과 같습니다.

  • 헤세 행렬을 계산하고(위의 최적화 함수는 역전파의 헤세 행렬이 아닌 W_hat의 헤세 행렬에 대한 것임) 교란 항을 추가합니다.

 

  • act order sort(desc_act, 유사한 값 범위의 열을 함께 수량화)는 diag(H)를 기준으로 W의 열을 M 차원을 기준으로 재배열하는 것과 마찬가지로 H도 그에 따라 2차원으로 재배열됩니다.
  • 역 H^(-1)(콜레스키 분해)을 구합니다.
  • 차원 M을 따른 W의 경우, 왼쪽에서 오른쪽으로 블록별로 양자화하고, 블록 크기 B=128이며, 오른쪽의 양자화되지 않은 부분은 양자화 손실을 보상하기 위해 H^(-1)을 기반으로 업데이트됩니다.

 

  • (내부 루프) 각 블록에 대해 열별로 양자화하고, 오류를 계산하고, 오류를 기반으로 블록 내 양자화되지 않은 열을 업데이트합니다.

 

 

  • (외부 루프) 블록을 작동한 후 그 뒤에 오는 모든 열을 업데이트합니다.

 

그룹_크기

  • 그룹 크기가 지정되지 않은 경우 기본값은 g=-1입니다. 양자화 매개변수는 모든 열 단위로 계산되며, W∈R^{K×M}의 경우 각 행의 가중치가 수량화됩니다. 양자화 매개변수는 K×1입니다.

 

  • 예를 들어 그룹 크기를 g=128로 지정하면 양자화 매개변수는 128열 단위로 계산되며, 각 행의 가중치는 W∈R^{K×M}에 대해 수량화됩니다. 양자화 매개변수는 K×(M/g)입니다.

 

desc_act 재정렬

헤세 행렬 H에 따르면 W는 diag(H)를 기준으로 M 차원을 기준으로 재배열됩니다. 절대값이 큰 활성화에 해당하는 가중치 열을 우선순위로 두는 것이 목적입니다. 따라서 이러한 열을 수량화할 때 오류가 최대한 적게 발생하도록 하는 것이 좋습니다. 더 많은 양자화 오류를 나중에 덜 중요한 열로 이동합니다.

일부 실험에서는 양자화 손실에 대한 desc_act의 효과가 대부분의 작업에서 효과적인 트릭임을 보여줍니다.

 

GPTQ를 이용한 Pygmalion-7B의 당혹감 [7]

[사진출처: https://huggingface.co/reeducator/vicuna-13b-free/discussions/22]

운영자

엄밀히 말하면, 가중치만을 기반으로 한 W4A16은 원래의 W16A16에 비해 효율성이 크게 향상되지 않았으며, 추론에 퀀트/디퀀트 프로세스도 추가되었습니다. 양자화 알고리즘의 추론 속도를 높이기 위해 W4A16 효율적인 연산자 작성을 기반으로 한 오픈 소스 작업이 많이 있습니다. 예를 들어 GPTQ의 Python 패키지  AutoGPTQ는 오픈 소스 도구 exllama에 통합되어 양자화 곱셈의 병렬 컴퓨팅을 다시 작성합니다. 트리톤과 CUDA를 기반으로 합니다. exllama/exllama_ext/matrix.cuh 에서
dot_product8_h의 out=W_hat·x=(W{int}-z)s·x=(W{int}-z)x·s 구현을 볼 수 있습니다.

 

[사진출처: https://github.com/turboderp/exllama/blob/3b013cd53c7d413cf99ca04c7c28dd5c95117c0d/exllama_ext/matrix.cuh#L86]

AWQ

최적화 문제를 기반으로 솔루션을 설계하는 GPTQ에 비해 AWQ는 검색 기반의 정량적 솔루션입니다.

Q(·)를 이용하여 양자화와 역양자화 과정을 표현하면, 수정 전의 양자화 과정은 다음과 같다.

 

수정 후 W에 스케일링을 추가하면 양자화 프로세스는 다음과 같습니다.

 

찾다

AWQ의 정식 명칭은 Activation-aware Weight Quantization이며, 이는 Weight의 정량화 과정에서 Activation 값의 영향을 고려한다는 의미입니다. 출발점은 또한 Weight의 각 채널에서 해당 Activtion 값이 더 큰 채널이 상대적으로 중요하고 그 반대의 경우에도 중요도를 반영하기 위해 스케일링 계수 Δ를 곱한다는 사실에 기초합니다. Δ의 범위는 입력 활성화의 텐서 값으로 설계됩니다.

 

검색의 측정 기준은 선형 계층 양자화 전과 후의 출력 결과를 비교하여 MSE 결과가 가장 작은 것이 최적의 솔루션입니다.

 

효과

모델 성능 측면에서는 양자화 오차가 가장 작은 해를 얻기 위해 레이어별 스케일 검색을 통해 최적의 스케일링 계수를 찾습니다. 다음은 AWQ 논문의 효과 비교를 통해 Llama 2세대 테스트의 정량화 결과를 보여줍니다. Perplexity의 관점에서 볼 때 GPTQ 및 GPTQ의 정렬된 버전보다 약간 낫습니다.

 

[이미지 출처 : AWQ, p6]

실제 작업의 정확도로 판단하면 AWQ의 정확도는 GPTQ(GPTQ-R)의 act_order 버전과 비슷하지만 속도는 후자보다 좋습니다.

 

[이미지 출처 : AWQ, p5]

모델의 계산 성능 측면에서 GPTQ는 재정렬 연산을 갖고, 행렬 곱셈은 불연속 메모리 접근인 MV(matrix×Vector)인 반면, AWQ는 재정렬 연산을 갖지 않고, 행렬 곱셈은 ( 행렬×행렬)이 더 빠릅니다.

4. 요약

LLM 수량화 작업의 현재 SOTA 성능과 관련하여 기본적으로 가중치 전용 양자화 모드를 기반으로 하며, GPU에서 모델을 실행하는 데 필요한 비디오 메모리를 줄이는 것이 주요 기여입니다.

모델의 성능으로 볼 때 양자화 손실이 불가피하고 LLM 모델은 일반적으로 기존 CNN 모델보다 양자화에 훨씬 더 민감하지만 양자화 후 LLM의 성능은 많은 작업에서 양자화 전과 크게 다르지 않습니다. , 그러나 여전히 일부 작업을 수행하지 못할 수 있습니다.

모델 가속의 관점에서, 가중치 전용 정량화는 W4A16, W3A16 및 W8A16과 같은 곱셈 연산자에서 기본적으로 가속되는 기본 가속 작업을 촉진합니다. 논문에 제공된 이론적 데이터로 판단하면 FP16 모델과 비교할 때 일반적으로 속도 향상은 1.x~3.x배에 불과하지만 실제 배포 효과는 이 값보다 낮을 수 있으며 가속 효과는 W4A4, W8A8 및 기타 정수 곱셈 연산자의 기존 양자화 방법보다 훨씬 열등합니다. .

일반적으로 LLM 분야의 정량적 작업은 아직 예비 단계입니다. 실제 작업에서 모델의 성능 정확도가 매우 높으면 다음과 같은 단위 메모리 처리량을 향상시키기 위해 KV 캐시에만 기반한 알고리즘과 도구를 사용하는 것이 좋습니다. 플래시 어텐션-2, 페이징 어텐션 등

5. 참고자료

1. 대규모 언어 모델을 위한 간단하고 효과적인 가지치기 접근 방식, 2023.

2. Sheared LLaMA: 구조화된 가지치기를 통한 언어 모델 사전 훈련 가속화, 2023.

3. 신경망 양자화에 관한 백서, 2021.

4. SmoothQuant: 대규모 언어 모델을 위한 정확하고 효율적인 훈련 후 양자화, 2023.

5. GPTQ: 생성적 사전 훈련된 변환기를 위한 정확한 훈련 후 양자화, 2023.

6. AWQ: LLM 압축 및 가속을 위한 활성화 인식 가중치 양자화, 2023.

7. GPTQ 성능에 대한 일부 평가.

 

*텍스트/ 슈지옹

이 기사는 Dewu Technology의 원본입니다. 더 흥미로운 기사를 보려면 Dewu Technology 공식 웹사이트를 참조하세요.

Dewu Technology의 허가 없이 전재하는 것은 엄격히 금지되어 있으며, 그렇지 않을 경우 법에 따라 법적 책임을 추궁할 것입니다!

Google Python Foundation 팀이 해고되었습니다. Google은 해고를 확인했으며 Flutter, Dart 및 Python 관련 팀은 GitHub 핫리스트로 돌진했습니다. 오픈 소스 프로그래밍 언어와 프레임워크가 어떻게 그렇게 귀여울 수 있습니까? Xshell 8 베타 테스트 개시: RDP 프로토콜을 지원하고 Windows 10/11에 원격으로 연결할 수 있습니다. 승객이 고속철 WiFi에 연결하면 중국 코더의 "35세 저주"가 고속으로 연결됩니다. 레일 WiFi MySQL의 첫 번째 장기 지원 버전 8.4 GA AI 검색 도구 Perplexica: 완전히 오픈 소스이며 무료이며 Perplexity의 오픈 소스 대안입니다. Huawei 경영진은 오픈 소스 Hongmeng의 가치를 평가합니다. 지속적인 탄압에도 불구하고 여전히 자체 운영 체제가 있습니다. 독일의 자동차 소프트웨어 회사 Elektrobit는 우분투 기반의 자동차 운영체제 솔루션을 오픈소스화했습니다.
{{o.이름}}
{{이름}}

추천

출처my.oschina.net/u/5783135/blog/11066139