본문 바로가기
AI · 인공지능/AI 뉴스

적은 GPU 메모리로 대규모 언어 모델을 트레이닝 하는 기법 「QLoRA」가 등장

by 두우우부 2023. 6. 7.
반응형

 

GPT-1은 1억 1,700만 개의 파라미터를 가지는 언어 모델로,
GPT-2에서는 15억,
GPT-3에서는 1,750억 개로 파라미터 수가 증가함에 따라 언어 모델 성능이 좋아지고 있습니다. 
그러나 파라미터의 수가 증가함에 따라 교육에 필요한 데이터 수와 교육에 사용되는 메모리 양도 증가하여 교육 비용이 크게 증가합니다.

그런 가운데, 메모리의 소비량을 격감시키면서 적은 데이터로 트레이닝할 수 있는 기법 「QLoRA」가 등장했습니다.

[2305.14314] QLoRA: Efficient Finetuning of Quantized LLMs
https://arxiv.org/abs/2305.14314


artidoro/qlora: QLoRA: Efficient Finetuning of Quantized LLMs

GitHub - artidoro/qlora: QLoRA: Efficient Finetuning of Quantized LLMs

QLoRA: Efficient Finetuning of Quantized LLMs. Contribute to artidoro/qlora development by creating an account on GitHub.

github.com



ChatGPT와 같은 대규모 언어 모델을 만들 때는 먼저, 대량의 텍스트 데이터를 이용해 모델에게 「문자의 취급 방법」을 학습시킵니다. 이렇게 만들어진 모델이 「사전 학습된 모델」로, 대표적으로 LLaMa 나 RedPajama-INCITE가 있습니다.

그 후, 잘 작성된 Q&A의 표본 데이터 등 고품질 데이터를 이용하여 목적에 맞는 출력을 얻을 수 있도록, 추가로 파인 튜닝이라 불리는 트레이닝을 실시하는 것이 일반적입니다. 

파인 튜닝만으로도 상당히 인간다운 대답을 할 수 있게 됩니다만, 보다 성능을 올리기 위해 인간으로부터의 평가를 모델에 피드백하는 「인간의 피드백에 의한 지도 학습(RLHF)」을 실시하는 경우도 있습니다.



모델의 파라미터 수는 최초의 사전 학습을 실시하는 단계에서 정해져 버리기 때문에, 파인 튜닝 등의 이후 단계에서는 변경할 수 없습니다. 일반 기업에서는 사전 학습 시에 필요한 엄청난 컴퓨팅 비용을 지불할 수 없으므로, 제공된 사전 학습 모델 중에서 파라미터 규모를 선택합니다. 일반적으로 파라미터 수가 많을수록 성능이 높아지지만, 동시에 파인 튜닝 비용도 점점 높아지는 문제가 발생합니다.

파인 튜닝 시에는 모델 전체를 메모리에 배치할 필요가 있으며, 트레이닝 대상의 파라미터마다 조정을 위한 계산 결과를 메모리에 보존할 필요가 있어, 모든 파라미터를 조정 대상으로 하는 기존의 미세 조정은 원래 모델의 몇 배의 메모리가 필요합니다.

예를 들면, 650억(65B) 파라미터 모델이라면, 파라미터 1개당 16bit로 양자화하면 모델을 메모리에 로드하는 것만으로 650억 ×16bit인 130GB분의 메모리를 소비해 버리며, 트레이닝 기법에 따라 650GB 정도의 계산 결과를 저장할 필요가 있어, 파인 튜닝을 위해서는 합계 780GB분의 GPU 메모리가 필요합니다.

이러한 메모리 소비 문제를 해결하기 위해 고안된 것이 LoRA라는 파인 튜닝 기법입니다. LoRA는 원래 모델의 파라미터 행렬의 저 차원 근사치(row rank approximation)로 새로운 행렬을 훈련 대상으로 함으로써 교육에 필요한 메모리 소비를 줄입니다.

[2106.09685] LoRA: Low-Rank Adaptation of Large Language Models
https://arxiv.org/abs/2106.09685



행렬을 저 차원 근사함으로써, 거대한 행렬을 비교적 작은 행렬 2개로 분해 가능합니다. 만약 원래 모델의 파라미터 행렬의 사이즈가 [d]×[d] 였을 경우, 저 차원 근사한 행렬은 랭크수를 [r]로서 [d]×[r]과 [r]×[d]라는 두 개의 행렬이 됩니다. 이렇게 하면 트레이닝 대상의 파라미터 수를 d의 제곱개에서 2×d×r개 까지 줄일 수 있습니다. LoRA의 논문에서는, GPT-3의 파인 튜닝으로 트레이닝 대상의 파라미터수를 1만 분의 1로 줄이고, 메모리의 소비량도 3분의 1로 줄였다고 적고 있습니다.

LoRA는 적은 컴퓨팅 자원으로도 효율적으로 트레이닝할 수 있기 때문에, 개인 유저의 개발 의욕이 높은 이미지 생성 분야에서 활발히 이용되고 있었습니다. 예를 들어 Stable Diffusion에서는 특정 도안이나 캐릭터, 배경 등을 LoRA로 학습시킴으로써 그 학습 내용에 따른 이미지를 생성할 수 있습니다.



또한, 언어 모델의 개발에 있어서도, 컴퓨팅 자원에서 우위를 점하고 있는 Google 내부에서는 LoRA를 경계하는 목소리가 나오고 있었던 것이 밝혀지고 있습니다.

https://www.semianalysis.com/p/google-we-have-no-moat-and-neither

Google "We Have No Moat, And Neither Does OpenAI"

Leaked Internal Google Document Claims Open Source AI Will Outcompete Google and OpenAI

www.semianalysis.com



이번 논문에서는 이 LoRA를 베이스로, 추가로 3개의 테크닉을 이용하는 것으로 650억(65B) 파라미터의 모델을 메모리가 겨우 48GB인 GPU로 트레이닝 가능하도록 한 데다가, 24시간의 트레이닝만에 ChatGPT의 99.3%에 필적하는 성능을 이끌어내는 데 성공했습니다.


논문에서 사용된 세 가지 기술은 다음과 같습니다.

・NF4에서의 양자화
일반적으로 언어 모델의 양자화는 16bit로 행해지고, 파라미터 1개당 16bit의 정보가 포함되어 있습니다만, QLoRA에서는 4bit로 양자화를 실시하고 있다는 것. 정보량이 줄어든 만큼 정밀도는 떨어집니다만, 통상, 사전 학습이 끝난 모델의 파라미터는 평균이 0인 정규 분포가 되기 때문에 정규 분포 베이스로 양자화를 실시하는 「NormalFloat(NF)」형식으로 하는 것으로 정밀도의 저하를 억제하고 있습니다.

・이중 양자화
양자화에 사용하는 정수에 대해서도 양자화를 실시함으로써, 1 파라미터당 0.5bit 필요했던 메모리 소비량을 0.127bit로 저하시켰습니다.

・페이지 최적화
GPU 메모리가 상한에 도달했을 때에, 일반 메모리에 데이터를 저장시켜 계산에 필요한 메모리를 확보하는 기법을 이용하는 것으로, 파라미터를 갱신하는 피크 타임의 GPU 메모리 사용량을 억제할 수 있었습니다.

Guanaco 33B를 QLoRA로 훈련한 모델은 Hugging Face에서 체험해 볼 수 있습니다. 영어로만 답변하지만, 꽤 좋은 답변을 반환하는 것 같습니다.


QLoRA 논문에 사용된 코드는 GitHub에 공개되어 있습니다.
https://github.com/artidoro/qlora

GitHub - artidoro/qlora: QLoRA: Efficient Finetuning of Quantized LLMs

QLoRA: Efficient Finetuning of Quantized LLMs. Contribute to artidoro/qlora development by creating an account on GitHub.

github.com


반응형