https://arxiv.org/abs/2305.14314
Abstract.
해당 논문에서 제시하는 QLoRA는 65B 파라미터 규모의 모델(예: LLaMA 65B)을 단일 48GB GPU에서 파인튜닝할 수 있을 정도로 메모리 사용량을 크게 절감하는 효율적인 파인튜닝 기법입니다. 메모리 사용량을 줄임에도 불구하고, 16-bit 수준의 파인튜닝 성능을 그대로 유지할 수 있습니다.
QLoRA는 동결(frozen) 상태의 4-bit로 양자화된 사전학습 언어 모델에 LoRA를 추가하고, 역전파는 LoRA 파라미터로만 진행합니다.
QLoRA는 성능 저하 없이 메모리를 절약하기 위해 다음과 같은 주요 기술들을 도입했습니다:
- 4-bit NormalFloat(NF4): 정규분포(가우시안 분포) 기반 가중치에 대해 정보 이론적으로 최적화된 새로운 데이터 타입을 도입했습니다. 실제로 모델 가중치가 정규분포와 유사한 경우가 많기 때문에, 기존 양자화 방식 대비 더 높은 성능을 기대할 수도 있습니다.
- Double Quantization: 양자화 상수를 한 번 더 양자화하여 전체 메모리 사용량을 줄였습니다. 다만, 양자화가 반복될수록 정보 손실의 위험이 있기 때문에, 구현 시 정확도 저하가 크지 않은지 관찰이 필요합니다.
- Paged Optimizers: 최적화 과정에서 일시적으로 발생하는 메모리 스파이크(spikes)를 관리합니다. LLM을 파인튜닝 시, 특정 시점에 GPU 메모리 사용량이 치솟는 경우가 있습니다. Paged Optimizers는 이러한 스파이크를 지연시키거나 나눠서 처리하여, 안정적으로 훈련을 수행할 수 있도록 돕는 기법입니다.
해당 논문의 저자들은 QLoRA를 통해 1,000개 이상의 모델을 파인튜닝하며, 8가지 종류의 Instruction 데이터셋, 다양한 모델(예: LLaMA, T5), 그리고 기존 방식으로는 다루기 어려웠던 33B, 65B 등 대규모 모델에 대해서 자세한 성능 분석을 제시했습니다. 그 결과, 작은 고품질 데이터셋으로 QLoRA를 사용하면 이전 최고 성능(SOTA) 대비 더 작은 모델로도 최첨단의 결과를 낼 수 있음을 보였습니다.
Introduction.
대규모 언어 모델을 파인튜닝하는 것은 모델의 성능을 향상시키는 데 매우 효과적입니다. 하지만 매우 큰 모델을 파인튜닝하는 것은 비용이 매무 많이 듭니다. 예를 들어, LLaMA 65B 파라미터 모델을 일반적인 16-bit 정밀도로 파인튜닝하려면 780GB 이상의 GPU 메모리가 필요합니다. 이전의 양자화 기법은 LLM의 메모리 사용량을 줄일 수 있다고 알려져 있으나, 이들 기법은 추론(inference)에만 유효하며 훈련 과정에서는 잘 동작하지 않습니다. *그렇기 때문에 양자화와 LoRA를 결합한 QLoRA를 만든 것 같다.
QLoRA는 65B 파라미터 모델을 파인튜닝할 때, 기존의 16-bit FFT대비 런타임이나 예측 성능이 떨어지지 않으면서 GPU 메모리 요구량을 780GB 이상에서 48GB 미만으로 줄여줍니다. *이는 LLM 파인튜닝 접근성에 있어 상당한 변화를 뜻하며, 이제까지 공개된 가장 큰 규모의 모델들을 단일 GPU로도 파인튜닝할 수 있게 되었음을 의미합니다.
QLoRA를 이용해 저자는 Guanaco 계열 모델을 학습했으며, 그중 두 번째로 좋은 모델은 Vicuna 벤치마크에서 ChatGPT 성능의 97.8%에 도달했습니다. 이는 단일 소비자용 GPU로 12시간 미만의 학습만으로 달성 가능합니다. 또한, 전문 GPU 한 대를 24시간 가동하여 가장 큰 모델을 학습했을 때, Vicuna 벤치마크에서 99.3%에 달하는 성능을 달성함으로써 사실상 ChatGPT와의 격차를 해소합니다. *이는 QLoRA가 16-bit 정확도의 파인튜닝에 비해 성능 하락이 크지 않다는 의미입니다. (아래 표 참고)
이런 QLoRA는 성능 손실 없이 메모리 사용량을 줄이기 위해 여러 혁신을 도입했습니다:
- 4-bit NormalFloat: 정규분포 형태의 데이터에 대해 정보 이론적으로 최적화된 새로운 양자화 데이터 타입으로, 기존의 4-bit 정수나 4-bit 부동소수점보다 경험적으로 더 나은 결과를 냅니다.
- Double Quatization: 양자화 상수(Quantization Constants)를 다시 양자화하는 기법으로, 파라미터당 평균 약 0.37bit(65B 모델 기준 약 3GB)를 추가로 절약합니다.
- Paged Optimizers: NVIDIA 통합 메모리(unfied memory)를 사용해, 긴 시퀀스 길이를 가진 미니배치를 처리할 때 발생하는 기울기 체크포인팅(gradient checkpointing) 시의 메모리 급증(spike)을 피합니다. *기울기 체크포인팅이 뭔지 공부할 필요성..
해당 논문은 이 모든 방법들을 LoRA 방식에 결합하여 네트워크의 모든 레이어에 어댑터를 배치함으로써, 기존 연구에서 발생했던 정확도 절충(accuracy tradeoff)을 대부분 방지합니다. *여기서 말하는 정확도 절충이란, 메모리와 계산량 같은 자원의 절약과 모델 정확도 사이에서 벌어지는 딜레마를 말합니다.
QLoRA의 효율성 덕분에, 일반적인 파인튜닝 방식으로는 메모리 한계 때문에 불가능했던 모델 규모에서 인스트럭션 파인튜닝과 챗봇 성능을 심도 있게 연구할 수 있게 되었습니다. 이에 따라, 논문의 저자는 여러 인스트럭션 튜닝 데이터셋, 다양한 모델 구조, 80M부터 65B 파라미터 사이 규모를 아우르는 총 1,000개 이상의 모델을 학습했습니다. 큰 규모의 모델을 분석하면서 알게된 점들은 아래와 같습니다:
데이터셋의 크기보다 데이터 품질이 더 중요하다는 사실을 발견했습니다. 예를 들어, 9k 샘플로 구성된 OASST1 데이터셋은 45만 개 샘플의 FLAN v2 데이터셋보다 챗봇 성능에서 더 나은 결과를 냈습니다. 또한, MMLU(Massive Multitask Language Understanding) 벤치마크에서 높은 점수를 받는다고 해서 Vicuna 챗봇 벤치마크에서도 높은 점수를 보장하지 않는다는 사실을 확인했습니다. 즉, 어떤 태스크에 대해서는 데이터셋의 규모보다 적합성(suitability) 이 더 중요하다는 의미입니다. *MMLU 등의 일반적 평가에서 높은 점수를 받는다고 해서, Vicuna 와 같은 챗봇 태스크에서도 동일하게 높은 점수를 보장하지는 않습니다.
이와 더불어, 저자들은 인간 평가자와 GPT-4를 모두 활용한 챗봇 성능 분석도 광범위하게 수행했습니다. 즉, 여러 모델들이 동일한 프롬프트에 대해 가장 뛰어난 응답을 내놓도록 경쟁하는 토너먼트식 벤치마크를 적용하고, 각 매치의 승자는 GPT-4나 인간 평가자가 결정합니다. 그런 뒤 토너먼트 결과를 Elo 점수로 종합하여 모델 성능 순위를 정합니다. 실험 결과, GPT-4와 인간 평가자는 대체로 모델 성능 순위에 대해 비슷한 의견을 보였지만, 간혹 크게 엇갈리는 경우도 있었습니다. 따라서 모델 기반 평가가 인간 평가 대비 훨씬 저렴한 대안이 될 수 있지만, 여전히 불확실성이 존재한다는 점ㄷ에 주목해야합니다.
Background.
Block-wise k-bit Quantization
양자화(Quantization)는 정보를 많이 담은 표현에서 더 적은 정보를 담은 표현으로 입력을 이산화(discretizing)하는 과정입니다. 흔히 32-bit 부동소수점을 8-bit 정수로 바꾸는 작업을 예로 들 수 있습니다. 낮은 비트 수를 갖는 데이터 타입 범위를 충분히 활용하기 위해, 보통은 입력 텐서의 모든 요소에 대한 "절댓값 최대치(absolute max)"로 정규화하여 해당 범위 안에 재매핑(rescale)합니다. *낮은 비트수를 갖는 데이터 타입의 범위를 최대로 활용해야 높은 비트수를 갖는 데이터을 고르게 표현할 수 있기 때문입니다.
예컨대, 32-bit 부동소수점(FP32) 텐서를 [-127, 127] 범위를 갖는 Int8 텐서로 양자화할 때, 다음과 같은 식을 사용합니다:
여기서 c는 양자화 상수(Quatization Constant) 또는 스케일(scale)을 의미합니다. 한편, 역양자화(Dequantization)는 다음과 같이 진행됩니다:
이 방법(*텐서 전체를 하나의 블록으로 보는 방법)의 문제점은, 만약 입력 텐서 안에 매우 큰 값(즉, outlier;아웃라이어)이 존재하면 일부 양자화 구간(Quantization Bins)에 실제로 할당되는 값이 거의 없게 된다는 것입니다. *이는 앞서 말한 낮은 비트수를 갖는 데이터 타입의 범위를 최대로 활용하지 못하는 것입니다.
이를 방지하기 위해, 자주 사용되는 방식이 입력 텐서를 여러 블록으로 나누고, 각 블록마다 독립적으로 양자화 상수 c를 사용해 양자화하는 것입니다. 조금 더 형식적으로 표현하면, b*h 차원을 갖는 텐서 X를 일렬로 펼친 뒤, 블록 크기 B로 연속적인 구간을 나누어 총 n=b*h/B 개의 블록을 만듭니다. 그리고 식 (1)을 각 블록에 독립적으로 적용해 양자화된 텐서 n개의 양자화 상수 {ci}를 생성합니다.
Low-rank Adapters
LoRA(Low-rank Adapter) 파인튜닝은 훈련 가능한 파라미터의 일부만(어댑터, adapters) 업데이트하고, 나머지 전체 모델 파라미터는 동결(frozen) 상태로 유지함으로써 메모리 요구사항을 줄이는 기법입니다. 확률적 경사하강법(SGD) 중에 발생하는 기울기는 동결된 사전학습 모델 가중치를 거쳐 어댑터로 전달되며, 이 어댑터가 loss함수를 최적화하도록 갱신됩니다.
Memory Requirement of Parameter-Efficient Finetuning
LoRA를 훈련할 때, 어댑처터의 개수와 크기가 메모리에 미치는 영향을 고려해야 합니다. LoRA 자체는 메모리 사용량이 매우 작으므로, 어댑터를 늘려 성능을 높이더라도 전체 메모리 사용량은 크게 증가하지 않습니다. 사실, LoRA는 PEFT 기법으로 고안되었지만, LLM을 파인튜닝할 때 가장 많은 메모리를 차지하는 것은 학습 중 발생하는 활성화(activation) 기울기이지, 학습된 LoRA 파라미터가 아닙니다. *활성화 기울기는 활성화 함수의 기울기로, loss함수에서 각 layer로 역전파하는데 사용하는 기울기입니다.
예를 들어, 7B 규모의 LLaMA 모델을 FLAN v2 데이터셋과 배치 크기 1로 학습한다고 하면, LoRA 파라미터가 원본 모델 가중치의 0.2% 정도로 설정된 상황에서, LoRA 입력 기울기(input gradient)는 567MB의 메모리를 차지하지만, 정작 LoRA 파라미터 자체는 26MB밖에 되지 않습니다. 만약 기울기 체크포인팅을 적용하면, 시퀀스 하나당 입력 기울기는 평균 18MB로 줄어들어서 여전히 모든 LoRA 가중치를 합친 것보다 더 많은 메모리를 사용합니다. *각 파라미터별로 기울기를 저장해야하며, Adam이라면, 파라미터별 학습률, 가속도또한 저장해야합니다. 게다가, 해당 기울기나 학습률 등을 계산하는데 필요한 연산 공간또한 생각한다면 다음과 같은 결과가 나오는 것입니다.
한편, 4-bit로 양자화된 베이스 모델은 5,048MB를 소비합니다. 이는 기울기 체크포인팅이 중요하다는 사실을 보여줄 뿐 아니라, LoRA 파라미터를 무리하게 줄여봤자 전체 메모리 절약 효과는 미미하다는 점을 시사합니다. 따라서 이 논문에서는 더 많은 어댑터를 활용하더라도 전체 훈련 메모리 사용량을 크게 늘리지 않고, 이에 따라 16-bit 정밀도에 근접한 성능을 회복하기 위한 전략을 구사할 수도 있습니다.
QLoRA Finetuning
해당 논문에서는 4-bit NormalFloat(NF4) 양자화와 Double Quantization이라는 두 가지 기법을 통해, 고정밀의 4-bit 파인튜닝을 달성합니다. 추가로, Paged Optimizers를 도입하여, 기울기 체크포인팅시 발생하는 메모리 급증으로 인해 대규모 모델을 단일 머신에서 파인튜닝하기 어렵게 만들었던 '메모리 부족(out-of-memory)' 문제를 방지합니다.
QLoRA에서는 일반적으로 4-bit 정도의 저정밀도 저장 데이터 타입과, 보통 BFloat16을 사용하는 연산 데이터 타입을 각각 둡니다. 실제로는 QLoRA 가중치 텐서를 사용할 때마다 이 텐서를 BFloat16으로 역양자화한 뒤, 16비트로 행렬 곱셈 연산을 수행합니다. *실제 연산(학습이나 추론) 단계에서는 16-bit 정밀도로 역양자화하여, 계산의 정밀도를 확보합니다.
4-bit NormalFloat Quantization
NormalFloat(NF) 데이터 타입은 Quantile Quantization(분위수 양자화) 에 기반하며, 이는 정보 이론적 관점에서 최적의 데이터 타입으로서, 각 양자화 구간(bin) 에 입력 텐서의 값들이 동일한 개수로 할당되도록 보장합니다. 양자화할 때, 양자화 구간을 정하기 위해 경험적 누적분포함수(ECDF) 를 사용해 입력 텐서의 분위를 추정하는 방식이 Quantile Quantization입니다. *분위수를 기준으로 블록을 나눈다는 의미입니다. 이때의 블록은 앞서 봤던 block-wise quantization에서 말한 블록과 같은 의미입니다.
Quantile Quantization의 주요 한계는 분위 추정 과정이 계산 비용이 많이 든다는 점입니다. 그래서 SRAM quantile같은 빠른 분위 근사 알고리즘을 사용하기도 합니다. 하지만 이러한 근사 알고리즘의 특성상, 아웃라이어(극단값) 에 대해서는 큰 양자화 오차가 발생할 수 있는데, 이 아웃라이어들이 종종 가장 중요한 값일 때가 많습니다. *분위수를 정확하게 파악하기 위해서는 모든 파라미터를 정렬해야하지만 모든 파라미터를 정렬하는 것은 계산 비용이 너무 비쌉니다. 그렇기때문에 샘플링등의 기법들을 활용해 분위수를 계산하는 SRAM quantiles와 같은 근사 알고리즘 방법을 사용하는 것입니다.
이때 양자화 상수를 기준으로 분포가 고정된 입력 텐서라면, 비싼 분위 추정이나 근사 오차를 피할 수 있습니다. 이 경우 입력 텐서는 동일한 분위 구조를 가지므로, 분위 추정을 정확하게 수행하는 것도 계산 가능해집니다. *만약 주어지는 텐서가 일정한 분포를 갖는 데이터라면, 해당 텐서를 "직접" 정렬할 필요 없이, 해당 분포를 이용해서 분위수를 파악할 수 있을 것입니다.
사전학습된 신경망의 가중치는 보통 평균이 0이고 표준편차가 σ인 정규분포를 따릅니다(*특정한 분포를 가정함으로써 분위수 추정에서의 오차를 줄이고 비용을 낮춥니다). 따라서 모든 가중치를 단일한 고정 분포로 변환하기 위해 σ를 조정하여, 해당 분포가 데이터 타입 범위에 정확이 들어맞도록 만들 수 있습니다. 본 논문에서는 데이터 타입의 범위를 [-1,1]로 임의 설정합니다. 이에 따라, 데이터 타입과 신경망 가중치 양쪽 모두를 이 [-1,1] 범위 안에 정규화해야 합니다. *특정한 분포(여기서는 정규분포)의 범위를 [-1,1]로 맞추고, 실제 텐서의 분포를 [-1,1]로 맞추면, 실제 텐서를 특정 분포의 분위수로 매핑할 수 있습니다.
중심이 0이고 표준편차가 σ인 정규분포가 [-1,1] 범위 내에 놓일 때, 정보 이론적으로 최적의 데이터 타입을 구하는 방법은 다음과 같습니다:
- 이론적인 N(0,1) 분포에서, 총 2^k+1개의 분위를 추정하여, 정규분포에 특화된 k-bit 분위 양자화 데이터 타입을 얻습니다.
- 이렇게 얻은 데이터 타입의 값을 [-1,1] 범위 안으로 정규화합니다.
- 입력 가중치 텐서 역시, 절댓값 최대치를 활용한 재스케일링을 통해 [-1,1] 범위로 정규화한 뒤, 위 데이터 타입으로 양자화합니다.
가중치 텐서의 범위와 데이터 타입의 범위가 일치하면, 일반적인 방식으로 양자화할 수 있습니다. 여기서 (3)단계는, 곧 가중치 텐서의 표준편차를 k-bit 데이터 타입의 표준편차에 맞춰 재스케일링하는 것과 같습니다. 보다 형식적으로, 데이터 타입의 2^k개 값을 {qi}라 할 때, 다음과 같이 추정합니다:
여기서 Qx()는 표준 정규분포 N(0,1)의 분위 함수입니다. 그러나 대칭적인 k-bit 양자화에서는 0을 정확히 표현하기 어렵다는 문제가 있습니다. 0을 정확히 표현하는 것은, 예컨대 패딩(padding)이나 0값 요소를 양자화할 때 오차 없이 처리하기 위해 중요합니다.
0을 이산적(discrete)으로 표현하고, k-bit 데이터 타입의 전체 2^k 구간을 활용하기 위해, 우리는 비대칭(asymmetric) 데이터 타입을 만듭니다. 즉, 음수 구간에 대해 2^(k-1)개 분위 qi를 추정하고, 양수 구간에 대해서는 2^(k-1)+1개의 분위 qi를 추정한 다음, 이 두 집합을 합쳐서 0이 겹치는 부분을 제거합니다. 이렇게 얻어진 데이터 타입은, 각 양자화 구간에 할당되는 값들의 기대치가 동일하도록 설계되므로, 이를 k-bit NormalFloat(NFk) 라 부릅니다. 이 데이터 타입을 평균이 0인 정규분포에 대해 정보 이론적으로 최적의 성질을 지닙니다. *symmertic하게 분위를 정하면 0을 포함할 수 없기 때문에, asymmetric하게 분위를 정합니다. 또한 각 분위마다 기대값이 같아야 하기 때문에 두 집합이 겹치는 부분을 제거하고 0을 분위수로 넣어줍니다. (아래 부록 참고)
Double Quantization
해당 논문에서는 양자화 상수(Quantization Constants)를 다시 한 번 양자화하여, 추가적인 메모리 절감을 달성하는 Double Quantization(DQ) 기법을 제안합니다. 일반적으로 4-bit 양자화를 정밀하게 수행하기 위해서는 작은 블록 크기가 필요한데, 이는 상당한 메모리 오버헤드를 유발하기도 합니다. 예를 들어, W에 대해 32-bit 상수와 블록 크기 64를 사용할 경우, 양자화 상수만으로도 평균적으로 파라미터당 32/64 = 0.5bit를 추가로 차지하게 됩니다(*하나의 블록 안에 64개의 파라미터가 들어가고, 이것이 32-bit 양자화 상수로 표현할 수 있으니, 파라미터당 32/64bit가 추가로 차지됩니다). DQ는 이러한 양자화 상수가 차지하는 메모리 사용량을 줄이는 데 도움을 줍니다.
좀 더 구제적으로, Double Quantization은 첫 번째 양자화에서 사용되는 양자화 상수 c2(FP32)를 두 번째 양자화의 입력으로 간주합니다. 이 두 번째 단계에서는 양자화된 양자와 상수 c2(FP8)와, 두 번째 레벨의 양자화 상수 c1(FP32)가 생성됩니다. 이에 8-bit 부동소수점과 블록 크기 256을 사용해 두 번째 양자화를 수행합니다. 또한, c2(FP32)는 양의 값이므로, 양자화 전에 평균값을 빼서 분포가 0을 중심으로 하도록 만든 뒤, 대칭 양자화를 적용합니다.
평균적으로, 블록 크기를 64로 두었을 때, 이렇게 양자화를 진행하면 파라미터당 메모리 사용량이 0.5bit에서 8/64 + 32/64*256 = 0.127bit로 줄어들어, 파라미터당 0.373bit를 절약할 수 있습니다.
*이때 블록이란 양자화를 수행하는 단위일 뿐이지, 같은 블록안에 파라미터들은 같은 값으로 매핑되는 것이 아닙니다. 블록으로 나눠서 양자화를 하면 아웃라이어처리에 장점이 있습니다.
Paged Optimizers
paged optimizers는 NVIDIA의 unified memory기능을 사용하며, 이는 GPU에 메모리가 일시적으로 부족해질 때 CPU와 GPU 간 페이지 단위 메모리 전환을 자동으로 수행하며 GPU 처리가 중단되지 않도록 도와줍니다. 이 기능은 CPU RAM과 디스크 사이에서 이뤄지는 일반적인 메모리 페이징과 유사한 방식으로 동작합니다. 본 논문의 저자는 이 기능을 활용해 옵디마이저 상태(optimizer states)를 페이징된 메모리에 할당하며, GPU 메모리가 부족해지면 해당 상태가 자동으로 CPU RAM으로 옮겨지고, 옵디마이저 업데이트 단계에서 다시 필요해지면 GPU 메모리로 다시 불러옵니다. *추가 공부 필요
QLoRA
위에서 설명한 구성 요소들을 활용해, 양자화된 베이스 모델의 한 개 선형 레이어와 한 개의 LoRA 어댑터가 있을 때, QLoRA를 다음과 같이 정의합니다:
여기서 doubleDequant()는 다음과 같이 정의됩니다:
이때, W에는 NF4를, c2에는 FP8을 사용합니다. 또한 W에는 더 높은 양자화 정밀도를 위해 블록 크기 64를 적용하고, c2에는 메모리를 절약하기 위해 블록 크기 256을 사용합니다.
파라미터 업데이트 시에는 4-bit 가중치 ∂E/∂W에 대한 기울기는 필요하지 않고, 어댑처 가중치 Li에 대한 기울기 ∂E/∂Li만 필요합니다. 하지만 ∂E/∂Li를 구하는 과정에서 ∂X/∂W 계산이 뒤따르는데, 이는 식 (5)에 따라 저장된 W(NF4)를 연산용 데이터 타입인 W(BF16)으로 역양자화한 뒤, BFloat16 정밀도로 ∂X/∂W를 계산하는 방식으로 진행됩니다.
QLoRA vs. Standard Finetuning
QLoRA가 전체 모델 파인튜닝만큼의 성능을 낼 수 있는지 알아봅니다. 또한 NormalFloat(NF4)가 기존의 Float4에비해 어떤 영향을 미치는지 등 QLoRA의 구성 요소를 분성합니다.
Experimental setup
(실험환경에 대한 설명)
Default LoRA hyperparameters do not math 16-bit performance
LoRA를 Query와 Value 어텐션 프로젝션 행렬에만 적용하는 일반적인 방법을 사용할 경우, 대규모 베이스 모델에서 전체 파인튜닝 수준의 성능을 재현하기 어렵습니다. Alpaca 데이터셋으로 LLaMA 7B를 파인튜닝한 결과(그림 2.)에서, 가장 중요한 것은 LoRA 하이퍼파라미터는 LoRA 어댑터를 전체적으로 얼마나 많이 사용하는지이며, 트랜스포머 블록의 모든 선형 계층에 LoRA를 적용해야만 전체 파인튜닝에 필적하는 성능을 달성할 수 있음을 알 수 있습니다.
4-bit NormalFloat yields better performance than 4-bit Floating Point
4-bit NF4는 FP4와 Int4 대비 성능을 크게 개선하며, Double Quantization은 메모리 사용량을 줄이면서도 성능 저하를 일으키지 않음을 실험을 통해 증명했습니다.
k-bit QLoRA matches 16-bit full finetuning and 16-bit LoRA performance
위 표3. 을 통해서 16-bit, 8-bit, 그리고 4-bit 어댑터 방식 모두가 16비트 완전 파인튜닝과 같은 성능을 재현함을 알 수 있습니다. 이는 양자화로 인해 발생한 성능 손실을, 양자화 이후에 어댑터 파인튜닝을 통해 완전히 회복할 수 있음을 시사합니다.
위 표 4. 를 통해서는 NF4를 쓴 QLoRA는 16-bit 전체 파인튜닝 및 16-bit LoRA 파인튜닝과 동등한 성능을 달성하며, 정밀도 측면에서는 NF4가 FP4보다 우수하다는 점을 알 수 있습니다.
'[Deep daiv.] > [Deep daiv.] NLP' 카테고리의 다른 글
[Deep daiv.] NLP, 논문 리뷰 - A Survey on LLM-as-a-Judge (2) (0) | 2025.01.15 |
---|---|
[Deep daiv.] NLP, 논문 리뷰 - A Survey on LLM-as-a-Judge (1) | 2025.01.13 |
[Deep daiv.] NLP - Optimizer 정리 (0) | 2025.01.08 |
[Deep daiv.] NLP, 논문 리뷰 - LoRA: Low-Rank Adaptation of Large Language Models (0) | 2025.01.07 |
[Deep daiv.] NLP, 논문 리뷰 - AdapterFusion:Non-Destructive Task Composition for Transfer Learning (1) | 2025.01.05 |