QLoRA: 48GB GPU로 65B 모델의 미세조정(파인튜닝)이 가능하다고요?

지난 주의 Drag Your GAN에 이어, 오늘은 QLoRA: Efficient Finetuning of Quantized LLMs를 들고 왔습니다!


지난 주에 SNS 상에서 많은 분들께서 언급해주셨고, HuggingFace에서도 관련 글이나 자료들이 나왔었는데요,

저희 게시판에서도 @yblee 님께서 데일리 뉴스로 소개를 해주시기도 하였고, TLDR AI 뉴스레터에서도 소개되어...
봐야지... 봐야지... 하고 생각만 하다가 (연휴 내내 뒹굴거리느랴 바빠서) 이제서야 김 굽듯이 대애추웅 살펴보게 되었습니다 :sweat_smile:


소개

LLM은 학습은 꿈도 못 꾸고, 파인튜닝(미세조정) 시에도 엄청난 시간과 비용이 소모됩니다.

지난 주에 KoAlpaca 개발자이신 이준범님께서 발표 때 말씀해주신 내용으로는,
Polyglot-Ko 12.8B 모델을 파인튜닝하는데 대략 A100(80G) 4대로 12시간 가량 걸렸다고 하십니다.

더 큰 모델이라면.... :thinking:

LoRA

그래서 이렇게 큰 모델의 경우 모델의 전체 파라매터/가중치가 아닌, 일부 가중치만 파인튜닝하는 PEFT(Parameter-Efficient Fine-Tuning)라는 방법론을 사용하는데요,

이 중 전체 가중치는 고정시킨 상태에서 별도의 (원래 모델보다 훨씬 적은 양의) 파라매터들을 각 Transformer의 Layer들에 추가하고, 해당 파라매터들만 학습시키는 Low-Rank Adaptation, LoRA라는 불리는 방법이 주로 사용되었습니다.


LoRA에 대한 자세한 설명은 아래 영상과 글을 참고해주세요~

딥러닝 논문 읽기 모임의 LoRA 논문 리뷰

eagle705님의 PEFT - LoRA 설명 글

+ 양자화(Quantization) :atom_symbol:

또한, 추론 시에는 양자화(quantized)를 사용하여 파라매터를 16-bit float (또는 bfloat) 보다 더 작은 4-bit로 만들어
더 작은 VRAM을 소모하면서, 더 적은 GPU에서 살행할 수 있었지만, 학습 시에는 이것이 어려웠습니다.

QLoRA = Q+LoRA = 4-bit Quantized language model into Low Rank Adapters (LoRA)

QLoRA는 양자화된(Quantized) 모델을 LoRA 기법을 사용해서 학습하는 방법입니다.

즉, QLoRA는 4-bit로 양자화된 모델을 가져와서 LoRA 기법을 활용해 파인튜닝하는 방법으로
NF4(4-bit NormalFloat) + 이중 양자화(Double Quantized) + 페이지드 옵티마이저(Paged Optimizer) 등을 사용하여 메모리 소모를 크게 줄였습니다.

뿐만 아니라, 성능도 제법 잘 나온다는 것을 밝혔습니다.


더불어 HuggingFace에서는 이렇게 4-bit(NF4 또는 FP4)로 양자화된 모델을 불러오거나 실행하는 등의 기능을

:hugs: transformers 라이브러리에 추가하였습니다!

이에 대한 더 자세한 내용은 논문 저자와 HuggingFace에서 작성한 아래 블로그 글을 읽어보시기를 권해드립니다! :smiley:

참고 링크

논문

GitHub 저장소 (코드 + 데모)

QLoRA + HuggingFace transformers 소개 글

Guanaco 65B과 ChatGPT 모델의 생성 결과 샘플 코드 (Google Colab)

(어떤 모델이 생성했는지 모르는 상태에서 결과 보고 맞춰보기)

Guanaco-7B 모델 실행 데모 (Google Colab)

사전 학습된 모델들의 가중치

8-bit CUDA 커널

3개의 좋아요