대규모 언어 모델(LLM)은 일반적으로 수십억 개의 매개변수를 가지며 수조 개의 토큰에 대해 훈련됩니다. 그러나 이러한 모델은 훈련하고 배포하는 데 비용이 매우 많이 듭니다. 계산 요구 사항을 줄이기 위해 다양한 모델 압축 기술이 종종 사용됩니다.
이러한 모델 압축 기술은 일반적으로 증류, 텐서 분해(하위 인수분해 포함), 가지치기 및 양자화의 네 가지 범주로 나눌 수 있습니다. 가지치기 방법은 한동안 사용되어 왔지만 성능을 유지하기 위해 가지치기 후 RFT(복구 미세 조정)가 필요한 경우가 많아 전체 프로세스에 비용이 많이 들고 확장이 어렵습니다.
ETH Zurich와 Microsoft의 연구원들은 SliceGPT라는 이 문제에 대한 솔루션을 제안했습니다. 이 방법의 핵심 아이디어는 모델의 성능을 유지하기 위해 가중치 행렬에서 행과 열을 삭제하여 네트워크의 임베딩 차원을 줄이는 것입니다. SliceGPT의 출현은 이 문제에 대한 효과적인 솔루션을 제공합니다.
연구원들은 SliceGPT를 사용하면 단일 GPU를 사용하여 몇 시간 만에 대규모 모델을 압축할 수 있었고 RFT 없이도 생성 및 다운스트림 작업에서 경쟁력 있는 성능을 유지할 수 있었다고 언급했습니다. 현재 해당 연구는 ICLR 2024에 승인되었습니다.
가지치기 방법은 LLM에 있는 가중치 행렬의 특정 요소를 0으로 설정하고 주변 요소를 선택적으로 업데이트하여 보상하는 방식으로 작동합니다. 이로 인해 신경망의 순방향 전달에서 일부 부동 소수점 연산을 건너뛰는 희소 패턴이 생성되어 계산 효율성이 향상됩니다.
희소성 정도와 희소성 모드는 컴퓨팅 속도의 상대적 향상을 결정하는 요소입니다. 희소 모드가 더 합리적이면 더 많은 계산 이점을 얻을 수 있습니다. 다른 가지치기 방법과 달리 SliceGPT는 가중치 행렬의 전체 행이나 열을 잘라서(잘라냅니다!) 가지치기합니다. 절제 전에 네트워크는 예측을 변경하지 않고 약간 영향을 받는 전단 프로세스를 허용하는 변환을 거칩니다.
그 결과 가중치 행렬이 줄어들고 신호 전송이 약해지며 신경망의 차원이 줄어듭니다.
아래 그림 1은 SliceGPT 방법을 기존 희소성 방법과 비교합니다.
저자는 광범위한 실험을 통해 SliceGPT가 LLAMA-2 70B, OPT 66B 및 Phi-2 모델에 대한 모델 매개변수(임베딩 포함)를 최대 25% 제거하는 동시에 99%의 매개변수를 유지할 수 있음을 발견했습니다. 조밀한 모델은 각각 99% 및 90%의 제로 샘플 작업 성능을 보여줍니다.
SliceGPT로 처리된 모델은 더 적은 수의 GPU에서 실행될 수 있으며 추가 코드 최적화 없이 더 빠르게 실행될 수 있습니다. 24GB 소비자급 GPU에서 저자는 LLAMA-2의 전체 추론 계산을 70B와 비교하여 그 양이 64%로 줄었습니다. 40GB A100 GPU에서는 밀도가 높은 모델에서는 66%로 줄었습니다.
또한 그들은 SliceGPT를 가능하게 하는 Transformer 네트워크의 새로운 개념인 계산 불변성도 제안했습니다.
SliceGPT 방법은 Transformer 아키텍처에 내재된 계산 불변성에 의존합니다. 이는 한 구성 요소의 출력에 직교 변환을 적용하고 다음 구성 요소에서 이를 실행 취소할 수 있음을 의미합니다. 저자는 네트워크 블록 간에 수행되는 RMSNorm 작업이 변환에 영향을 미치지 않는다는 것을 관찰했습니다. 이러한 작업은 교환 가능합니다.
논문에서 저자는 먼저 RMSNorm 연결을 사용하여 Transformer 네트워크에서 불변성을 달성하는 방법을 소개한 다음 LayerNorm 연결로 훈련된 네트워크를 RMSNorm으로 변환하는 방법을 설명합니다. 다음으로 그들은 주성분 분석(PCA)을 사용하여 각 레이어의 변환을 계산함으로써 블록 간의 신호를 주성분에 투영하는 방법을 소개합니다. 마지막으로, 작은 주요 구성 요소를 제거하는 것이 네트워크의 행이나 열을 자르는 것과 어떻게 일치하는지 보여줍니다.
Transformer 네트워크의 계산 불변성
Q를 사용하여 직교 행렬을 나타냅니다.
X_ℓ를 Transformer 블록의 출력이라고 가정하고, RMSNorm에 의해 처리된 후 RMSNorm(X_ℓ) 형태로 다음 블록에 입력됩니다. RMSNorm 앞에 직교 행렬 Q가 있고 RMSNorm 뒤에 Q^⊤가 있는 선형 레이어를 삽입하면 신호 행렬의 각 행에 Q가 곱해지고 정규화되어 Q^ ⊤가 곱해지기 때문에 네트워크는 변경되지 않은 상태로 유지됩니다.
이제 네트워크의 각 Attention 또는 FFN 블록이 입력 및 출력에 대해 선형 작업을 수행하므로 추가 작업 Q가 모듈의 선형 계층에 흡수될 수 있습니다. 네트워크에는 잔여 연결이 포함되어 있으므로 Q는 모든 이전 레이어(임베딩까지)와 모든 후속 레이어(LM 헤드까지)의 출력에도 적용되어야 합니다.
불변 함수는 입력 변환으로 인해 출력이 변경되지 않는 함수를 의미합니다. 이 기사의 예에서는 결과를 변경하지 않고 변환기의 가중치에 직교 변환 Q를 적용할 수 있으므로 모든 변환 상태에서 계산을 수행할 수 있습니다. 저자는 이를 계산 불변성이라고 부르며 다음 정리로 정의합니다.
정리 1: 및 를 RMSNorm 연결된 변압기 네트워크의 ℓ 선형 레이어의 가중치 행렬로 두고, 및 를 해당 바이어스(있는 경우)로 두고, W_embd 및 W_head는 임베딩 행렬 및 헤드입니다. 행렬 . Q가 차원 D의 직교 행렬이라고 가정하면 다음 네트워크는 원래 변환기 네트워크와 동일합니다.
입력 바이어스 및 헤드 바이어스 복사:
은 알고리즘을 통해 수행할 수 있습니다. 1 변환된 네트워크가 원래 네트워크와 동일한 결과를 계산한다는 것을 증명합니다.
LayerNorm Transformer는 RMSNorm으로 변환할 수 있습니다.
Transformer 네트워크의 계산 불변성은 RMSNorm 연결된 네트워크에만 적용됩니다. LayerNorm을 사용하여 네트워크를 처리하기 전에 작성자는 먼저 LayerNorm의 선형 블록을 인접한 블록에 흡수하여 네트워크를 RMSNorm으로 변환합니다.
그림 3은 Transformer 네트워크의 이러한 변형을 보여줍니다(그림 2 참조). 각 블록에서 작성자는 출력 행렬 W_out에 평균 빼기 행렬 M을 곱합니다. 이는 후속 LayerNorm의 평균 빼기를 고려합니다. 입력 행렬 W_in에는 이전 LayerNorm 블록의 비율이 미리 곱해집니다. 임베딩 행렬 W_embd는 평균 빼기를 거쳐야 하며 W_head는 마지막 LayerNorm의 비율에 따라 크기를 다시 조정해야 합니다. 이는 작업 순서의 간단한 변경이며 네트워크 출력에 영향을 주지 않습니다.
각 블록의 변환
이제 변환기의 모든 LayerNorm이 RMSNorm으로 변환되었으므로 Q를 선택하여 모델을 수정할 수 있습니다. 저자의 원래 계획은 모델에서 신호를 수집하고 이 신호를 사용하여 직교 행렬을 구성한 다음 네트워크의 일부를 삭제하는 것이었습니다. 그들은 네트워크의 서로 다른 블록의 신호가 정렬되지 않았으므로 각 블록에 서로 다른 직교 행렬 Q_ℓ을 적용해야 한다는 것을 빨리 발견했습니다.
각 블록에 사용된 직교 행렬이 다른 경우 모델은 변경되지 않습니다. 증명 방법은 알고리즘 1의 5행을 제외하고 정리 1과 동일합니다. 여기에서 잔여 연결의 출력과 블록의 회전이 동일해야 함을 알 수 있습니다. 이 문제를 해결하기 위해 저자는 잔차를 선형 변환하여 잔차 연결을 수정합니다.
그림 4는 잔여 연결에 대해 추가 선형 연산을 수행하여 다양한 블록에서 다양한 회전을 수행하는 방법을 보여줍니다. 가중치 행렬 수정과 달리 이러한 추가 작업은 미리 계산할 수 없으며 모델에 작은(D × D) 오버헤드를 추가합니다. 그러나 모델을 잘라내려면 이러한 작업이 필요하며 전체 속도가 증가하는 것을 볼 수 있습니다.
행렬 Q_ℓ을 계산하기 위해 저자는 PCA를 사용했습니다. 훈련 세트에서 교정 데이터 세트를 선택하고 모델을 통해 이를 실행한 다음(LayerNorm 작업을 RMSNorm으로 변환한 후) 해당 레이어에 대한 직교 행렬을 추출합니다. 더 정확하게 말하면, 변환된 네트워크의 출력을 사용하여 다음 레이어의 직교 행렬을 계산합니다. 보다 정확하게는 가 교정 데이터 세트의 i번째 시퀀스에 대한 ℓ번째 RMSNorm 모듈의 출력인 경우 다음을 계산합니다.
하고 Q_ℓ를 C_ℓ의 고유 벡터로 설정합니다. 고유값의 내림차순 정렬.成 제거 分 주성분 분석의 목표는 데이터 행렬 X를 얻고 저차원 표현 Z를 계산하고 근사 재구성 :
그 중 Q는
은 고유벡터 D는 행렬의 왼쪽에 있는 일부 열을 삭제하는 데 사용되는 D × D 작은 삭제 행렬(D × D 동질 행렬의 D 작은 열 포함). QD가를 최소화하는 선형 맵이라는 점에서 재구성은 L_2 최적입니다.
블록 간 신호 행렬에 PCA를 적용하는 경우 위의 연산에서 이 행렬에 Q를 곱했습니다. 작성자는 W_in의 행과 W_out 및 W_embd의 열을 제거했습니다. 또한 잔여 연결에 삽입된 행렬의 행과 열을 제거했습니다(그림 4 참조).
실험 결과Generation task
SliceGPT의 성능은 모델 크기가 커질수록 향상됩니다. SparseGPT 2:4 모드는 모든 LLAMA-2 시리즈 모델에 대해 25% 클리핑에서 SliceGPT보다 성능이 떨어집니다. OPT의 경우 2.7B 모델을 제외한 모든 모델에서 절제율이 30%인 모델의 희소성이 2:4에 비해 더 좋은 것을 확인할 수 있다.
제로 샘플 작업
저자는 PIQA, WinoGrande, HellaSwag, ARC-e 및 ARCc의 5가지 작업을 사용하여 제로 샘플 작업에서 SliceGPT의 성능을 평가했습니다. LM 평가 하네스를 기본으로 사용했습니다. 평가 매개변수에서.
그림 5는 위 작업에 대해 맞춤형 모델이 얻은 평균 점수를 보여줍니다. 그림의 윗줄은 WikiText-2에서 SliceGPT의 평균 정확도를 보여주고, 아랫줄은 Alpaca에서 SliceGPT의 평균 정확도를 보여줍니다. 생성 작업에서와 마찬가지로 결과에서도 유사한 결론을 볼 수 있습니다. OPT 모델은 LLAMA-2 모델보다 압축에 더 잘 적응하고, 모델이 클수록 가지치기 후 정확도 감소가 덜 분명해집니다.
저자는 Phi-2와 같은 작은 모델에서 SliceGPT의 효과를 테스트했습니다. 트림된 Phi-2 모델은 트림된 LLAMA-2 7B 모델과 비슷한 성능을 발휘합니다. 가장 큰 OPT 및 LLAMA-2 모델은 효율적으로 압축할 수 있으며, SliceGPT는 66B OPT 모델에서 30%를 제거할 때 몇 퍼센트 포인트만 손실됩니다.
저자는 RFT(Recovery Fine Tuning) 실험도 진행했습니다. LoRA를 사용하여 다듬어진 LLAMA-2 및 Phi-2 모델에 대해 소수의 RFT가 수행되었습니다.
실험 결과는 그림 6에 나와 있습니다. WikiText-2와 Alpaca 데이터 세트 간에 RFT 결과에 상당한 차이가 있음을 확인할 수 있으며 모델은 Alpaca 데이터 세트에서 더 나은 성능을 나타냅니다. 저자는 차이점이 있는 이유는 Alpaca 데이터 세트의 작업이 기본 작업에 더 가깝기 때문이라고 생각합니다.
가장 큰 LLAMA-2 70B 모델의 경우 30%를 잘라내고 RFT를 수행한 후 Alpaca 데이터 세트의 최종 평균 정확도는 74.3%이고 원래 밀도 모델의 정확도는 76.6%입니다. 맞춤형 모델 LLAMA-2 70B는 약 51.6B 매개변수를 유지하며 처리량이 크게 향상되었습니다.
저자는 또한 Phi-2가 WikiText-2 데이터 세트의 정리된 모델에서 원래 정확도를 복원할 수 없었지만 Alpaca 데이터 세트에서는 몇 퍼센트의 정확도를 복원할 수 있다는 사실을 발견했습니다. 25% 잘리고 RFT된 Phi-2는 Alpaca 데이터세트에서 평균 65.2%의 정확도를 가지며, 원래 Dense 모델의 정확도는 72.2%입니다. 잘린 모델은 2.2B 매개변수를 유지하고 2.8B 모델 정확도의 90.3%를 유지합니다. 이는 작은 언어 모델이라도 효과적으로 정리할 수 있음을 보여줍니다.
벤치마크 처리량
기존 가지치기 방법과 달리 SliceGPT는 행렬 X에 (구조화된) 희소성을 도입합니다. 전체 열 X가 잘려 임베딩 차원이 줄어듭니다. 이 접근 방식은 SliceGPT 압축 모델의 계산 복잡성(부동 소수점 연산 수)을 향상시키고 데이터 전송 효율성을 향상시킵니다.
80GB H100 GPU에서 시퀀스 길이를 128로 설정하고 시퀀스 길이를 일괄적으로 두 배로 늘려 GPU 메모리가 소진되거나 처리량이 떨어질 때까지 최대 처리량을 찾습니다. 저자는 25% 및 50% 정리된 모델의 처리량을 80GB H100 GPU의 원래 밀도 모델과 비교했습니다. 25% 트리밍된 모델은 최대 1.55배의 처리량 향상을 달성했습니다.
50% 클리핑으로 가장 큰 모델은 단일 GPU를 사용하여 3.13x 및 1.87x의 처리량을 크게 증가시킵니다. 이는 GPU 개수가 고정되면 가지치기 모델의 처리량이 원래 밀집 모델에 비해 각각 6.26배와 3.75배에 도달함을 보여줍니다.
50% 정리 후 WikiText2의 SliceGPT가 유지하는 복잡성은 SparseGPT 2:4보다 나쁘지만 처리량은 SparseGPT 방법을 훨씬 초과합니다. 13B 크기의 모델의 경우 더 적은 메모리를 사용하는 소비자 GPU의 더 작은 모델에 대한 처리량도 향상될 수 있습니다.
Inference time
저자는 SliceGPT를 사용해 압축된 모델의 종단 간 실행 시간도 연구했습니다. 표 2는 Quadro RTX6000 및 A100 GPU에서 OPT 66B 및 LLAMA-2 70B 모델에 대한 단일 토큰을 생성하는 데 필요한 시간을 비교합니다. RTX6000 GPU에서는 모델을 25% 줄인 후 추론 속도가 16~17% 증가한 반면, A100 GPU에서는 속도가 11~13% 증가한 것을 확인할 수 있습니다. LLAMA-2 70B의 경우 RTX6000 GPU를 사용하는 데 필요한 계산 노력이 원래 밀도 모델에 비해 64% 감소했습니다. 저자는 이러한 개선이 SliceGPT의 원래 가중치 행렬을 더 작은 가중치 행렬로 대체하고 다른 가지치기 방식으로는 달성할 수 없는 조밀한 커널을 사용했기 때문이라고 생각합니다.
저자는 이 글을 쓰는 시점에서 기본 SparseGPT 2:4로는 엔드투엔드 성능 향상을 달성할 수 없다고 밝혔습니다. 대신 변환기 계층에서 각 작업의 상대적 시간을 비교하여 SliceGPT를 SparseGPT 2:4와 비교했습니다. 그들은 대형 모델의 경우 SliceGPT(25%)가 속도 향상 및 복잡성 측면에서 SparseGPT(2:4)와 경쟁적이라는 것을 발견했습니다.
계산 비용
모든 LLAMA-2, OPT 및 Phi-2 모델은 단일 GPU에서 1~3시간 내에 분할할 수 있습니다. 표 3에서 볼 수 있듯이 Recovery Fine-Tuning을 통해 모든 LM을 1~5시간 내에 압축할 수 있습니다.
자세한 내용은 원문을 참고해주세요.
위 내용은 대형 모델도 슬라이스할 수 있으며 Microsoft SliceGPT는 LLAMA-2의 계산 효율성을 크게 높입니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!