LLM의 INT8 양자화와 QLoRA 파인튜닝

LLM 훈련 및 추론에 엄청난 GPU 메모리가 요구된다. 추론 단계만 해도, 모델 파라미터 수 x 자료형 x 1.2 정도의 용량이 필요하다. 예를 들어, 40B 크기의 모델을 4바이트 자료형으로 구동하면 대략 190GB의 메모리가 필요하다. (여기서 1.2는 어텐션 캐시나 토큰 생성과 같은 추가 메모리 요구를 고려한 배수이다.)

이러한 메모리 요구 사항을 줄이려면 자료형을 조정하는 양자화 기법을 사용할 수 있다. 그에 대한 Tim Dettmers 논문 2편을 정리해보았다. 이 기법들은 bitsandbytes 라이브러리에 구현되어 있고 허깅페이스의 트랜스포머 라이브러리와 잘 통합되어 있어 실제 프로젝트에서 널리 사용된다.

들어가기 앞서 잡담으로, 나는 딥러닝의 양자화(Quantization)라는 용어를 처음 들었을 때, 양자역학의 양자(Quantum)를 떠올렸고, 둘 사이의 어떤 연관성을 찾을 수 없었다. 그때는 그냥 잘못 직역된 용어일 것이라고 생각했다. 그러나 나중에 알게 된 것은 양자화의 '양자'가 양자역학과 관련이 있다는 것이었다. 양자역학에 따르면, 거시적인 세계는 연속적이지만 미시적인 세계는 이산화된 형태에 가까워서, 분절된 행렬 값으로 표현하기 적절하다고 한다. 딥러닝에서의 양자화란, 연속적인 형태의 정보를 이산화된 형태로 변환하여 의미를 유지하면서 정보 크기를 압축하는 기법을 말한다. 그러므로 그 어원은 양자역학에서 온 것이다.

👉 LLM.int8(): 8-Bit Matrix Multiplication for Transformers at Scale(https://arxiv.org/abs/2208.07339)

자료형을 조정할 때 고려해야 할 몇 가지 옵션은 다음과 같다. 먼저, FP32(32비트 = 4바이트, 완전 정밀도) 및 FP16(16비트 = 2바이트, 반 정밀도)과 같은 일반적인 자료형이 있다. 더 나아가, BF16(같은 16비트이되, 범위 확장 및 정밀도 축소) 및 TF32(19비트로 범위는 BF16과 같지만 정밀도는 FP16와 같음)와 같이 딥러닝을 위해 특별히 설계된 자료형도 있다. 모델을 FP16 또는 BF16로 양자화하고 서빙하는 것은 메모리 사용량을 대폭 줄일 수 있는 흔한 방법 중 하나이다.

INT8(8비트 = 1바이트, 0 ~ 255 또는 -128 ~ 127의 정수)로 메모리를 더 줄여보는건 어떨까? 이렇게 단순하게 자료형을 줄이면 모델의 성능이 급격하게 감소할 수 있다. 이것은 양자화로 인한 오차가 층 별로 전파되면서 누적되기 때문이다. 특히 Tim Dettmers는 6B 이상의 트랜스포머 기반 모델에서 단순한 양자화 방식이 실패함을 발견했으며, 이는 이상값으로 인해 발생하는 문제와 관련이 있다. 그는 이러한 이상값을 특정 임계값을 갖는 패턴으로 정의하고 이를 '이머전트 피처'라고 명명하였다.

먼저 벡터를 INT8로 단순히 양자화하는 방법을 설명해야겠다. 최대 절대값 양자화 방법으로써, 다음과 같이 동작한다.

1. 먼저, 벡터의 모든 요소 중에서 절대값이 가장 큰 값을 찾는다.
2. 이 최대 절대값을 INT8 범위의 최대값(예: 127)으로 나누어 양자화 상수를 계산한다. 이 양자화 상수를 벡터의 모든 요소에 곱한다.
3. 이제, 벡터의 모든 요소에 양자화 상수를 곱한 후, 결과를 소수점 올림하여 가장 가까운 정수로 반올림한다. 이로써 INT8 값으로 양자화된 벡터를 얻을 수 있다.
4. 만약 역-양자화를 수행하려면, INT8로 양자화된 벡터를 양자화 상수로 나누면 된다.

이 방법의 장점 중 하나는 0 값이 오차 없이 그대로 정수로 변환된다는 것이다. 즉, 0 값은 양자화 과정에서 정보 손실이 발생하지 않는다. 이러한 특성은 특히 희소한 벡터 또는 행렬을 다룰 때 유용할 수 있다.

이것에 더하여 논문이 제안한 방법은 행렬 곱 연산에서 이상값 패턴을 고려하여 양자화하는 방식으로, 다음과 같이 동작한다.

1. 행렬 곱 연산 C = AB에서, 행렬 A는 행 별로, 행렬 B는 열 별로 INT8 최대 절대값 양자화를 적용한다.
2. 임계값(예: 6)을 사용하여 이상값이 있는 벡터와 그렇지 않은 벡터를 구분한다.
3. 이상값이 있는 벡터 간의 곱셈 연산은 FP16(16비트 실수)로 수행하고, 그렇지 않은 벡터 간의 곱셈 연산은 INT8(8비트 정수)로 수행한다.
4. FP16 결과 값을 그대로 유지하고, INT8 결과 값을 16비트로 역 양자화하여 이후의 연산에 사용한다.

이러한 방식을 적용하면, 이상값이 있는 부분은 더 높은 정밀도인 FP16로 처리되어 정확도를 유지하면서 메모리 요구 사항을 줄일 수 있다. 이에 따라 LLM 성능의 하락이 16비트 양자화와 비교했을 때 거의 없다고 한다. 다만 크기가 작은 모델에서는 추론 속도가 어느정도 하락할 수 있다.

👉 QLoRA: Efficient Finetuning of Quantized LLMs(https://arxiv.org/abs/2305.14314)

다시 자료형으로 돌아가, FP8은 범위(Exponent)와 정밀도(Mantissa)에 할당되는 비트 수에 따라 E4M3과 E5M2로 구분될 수 있다. E4M3은 순전파 과정에 적합하며, E5M2는 역전파 과정에 더 적절하다고 한다. 한편, FP4는 부호 1비트 + 범위 2비트 + 정밀도 1비트로 구성되어 있다.

앞서 언급한 최대 절대값 양자화 방식, 즉 양자화 상수를 사용한 정규화 접근 방식을 적용하는데, 이로 인해 발생하는 이상값 문제는 전체 행렬을 대상으로 양자화하는 대신 블록 별로 독립적으로 양자화를 적용함으로써 완화될 수 있다.

LoRA는 LLM 파인튜닝 기법 중 하나로, 기존 행렬의 가중치를 동결하고 추가로 학습할 때 증분만을 따로 학습하면서, 이 증분 행렬을 두 개의 저차원 행렬 곱으로 표현하여 전체 모델의 용량을 줄이는 방법이다.

논문이 제안한 QLoRA 기법은 LoRA와 관련된 기법 중 하나로, 다음과 같이 진행된다.

1. 가중치 저장: QLoRA에서는 LoRA의 가중치들을 4비트로 양자화하여 저장한다. 이때, 일반 FP4가 아닌 NormalFloat라는 특수한 자료형을 사용한다. 이 자료형은 정보처리 이론적인 관점에서 특수하게 설계되었으며, 비대칭 분포와 비선형적인 간격을 가지며, -1부터 1까지의 범위를 나타낸다.

2. 그래디언트 연산: 학습 중에 순전파, 역전파 연산을 수행할 때, QLoRA는 4비트 양자화된 값을 BF16로 역 양자화하여 처리한다.

이것이 QLoRA의 핵심 아이디어이다. 이외에도 QLoRA 논문에서 제안된 두 가지 추가적인 사항이 있다.

첫 번째로, 이중 양자화이다. 이는 블록 별 양자화 상수들을 한 번 더 양자화하여 저장하는 방법을 의미한다. 이 과정을 통해 파라미터 당 약 0.37비트를 절약할 수 있다.

두 번째로, 페이징 옵티마이저이다. 전통적인 GPU 메모리 절감 기법 중 하나인 그래디언트 체크포인팅 기법은 긴 시퀀스 미니 배치를 처리할 때 메모리 스파이크를 일으킬 수 있는데, 페이징 옵티마이저는 엔비디아 통합 메모리를 활용하여 옵티마이저 상태를 페이지 메모리에 할당한 후 GPU 메모리 초과 시 CPU RAM으로 자동 이동시킴으로써 이러한 이슈를 피할 수 있다.

결론적으로 QLoRA 기법은 FP4 또는 INT4로 단순하게 양자화된 모델 성능을 능가하며, 16비트 LoRA 또는 풀 파인튜닝에 준하는 성능을 달성할 수 있다고 한다.

참고:
- A Gentle Introduction to 8-Bit Matrix Multiplication for Transformers at Scale Using Hugging
Face Transformers, Accelerate and Bitsandbytes(https://huggingface.co/blog/hf-bitsandbytes-integration)
- LLM.int8() and Emergent Features(https://timdettmers.com/2022/08/17/llm-int8-and-emergent-features/)
- Making LLMs Even More Accessible with Bitsandbytes, 4-Bit Quantization and QLoRA(https://huggingface.co/blog/4bit-transformers-bitsandbytes)
- QLoRA: Efficient Finetuning of Quantized LLMs 논문 요약(https://github.com/daekeun-ml/genai-ko-LLM/tree/main/fine-tuning)
- QLoRA 기법으로 Falcon-40B 및 기타 대규모 모델(LLM)을 Amazon SageMaker Studio 노트북의 대화형 환경에서 파인튜닝하기(https://aws.amazon.com/ko/blogs/tech/interactively-fine-tune-falcon-40b-and-other-llms-on-amazon-sagemaker-studio-notebooks-using-qlora/)

A Gentle Introduction to 8-bit Matrix Multiplication for transformers at scale using transformers, accelerate and bitsandbytes

Huggingface

A Gentle Introduction to 8-bit Matrix Multiplication for transformers at scale using transformers, accelerate and bitsandbytes

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2023년 10월 8일 오전 2:56

 • 

저장 31조회 3,145

댓글 3