생각보다 파인튜닝을 하는 사람들 중 그정도의 사양을 갖춰놓고 Local에서 돌리는 사람이 있었다.
이때 사용하는 Tool은 axolotl, deepspeed 등을 이용하는 것 같았다.
그 외에는 colab이나 kaggle, jupyter notebook 등으로 학습한다.
Fine-tuning 중 방법인 full-finetuning(가중치 전체 변경), lora, glora, gptq 등 peft의 여러 방법을 지원하는 라이브러리다.
Full-finetuning은 말 그대로 모든 파라미터를 미세조정하는 방식이다.
딥러닝의 모델의 크기가 증가함에 따라, 모델 튜닝에 있어서 시간과 자원이 부족해 full-finetuning이 불가능해지고 있다.
이에 파라미터를 효율적으로 Fine-tuning하는 방법인 PEFT를 연구하기 시작했다.
PEFT는 full-finetuning의 문제를 해결하기 위해 학습에 필요한 계산량, 모델의 크기를 줄이는 것을 목표로 하는 finetuning방법론이다.
PEFT의 장점
1.필요한 계산량의 감소 : 모델 크기를 줄이고 중복된 파라미터를 제거해 정밀도를 낮춰 연산량을 줄임
2.추론 속도 향상 : 계산 복잡도가 줄어듬에 따라 추론속도가 감소해 실시간 app에 적합해짐
3.리소스가 제한된 디바이스에서의 배포 개선 : 제한적인 리소스에 배포가 용이해짐
4.비용절감 : finetuning 및 추론에 드는 비용 절감
5.선응 유지, 향상 : 다운스트림 태스크에서의 성능을 유지하거나 향상하는 것이 가능
지식을 크고 성과가 좋은 모델에서 더 작은 모델로 전달하는 기술.
student 모델 입장에서 방대한 지식을 얻을 뿐만 아니라 일반화를 잘할 수 있으며 정규화에 도움을 줄 수 있다는 특징이 있다.
모델의 가중치의 정밀도를 낮춰 메모리 및 계산 요구사항을 낮추는 기술.
기존 딥러닝 모델의 매개변수가 32비트 부동소수점의 형태라면, 양자화를 통해 8비트 정수와 같이 낮은 비트 정밀도로 표현 가능하다. 학습 후 양자화하는 post-training quantization(GPTQ)과 양자화를 염두에 두고 학습하는 quantization-aware training 으로 나뉜다.
양자화의 장점
1.학습 시간과 하드웨어 비용을 고려했을 때, 정확도가 떨어지는 것에 비해 더 많은 비용을 절감 가능(가성비...!)
2.거대 LLM의 경우 가정의 단일 GPU,CPU에서 돌아갈 수 없지만, 양자화를 통해 돌아가도록 할 수 있음
+)가중치를 양자화해서 바로 추론하는 것보다 QAT방법으로 파인튜닝 후 양자화 모델 만들어 추론
돌리는게 정확도가 높게 나온다고 함...!(아닐수도)
사전학습된 모델의 가중치 행렬을 row-rank 행렬로 근사화하는 기술.
가중치 행렬을 저순위 구성요소로 분해해 모델의 매개변수 수와 계산 복잡도를 줄일 수 있다.
SVD(단수 값 분해)와 텐서 인수분해와 같은 방법을 통해, 태스크에서 가장 중요한 정보를 유지하는 low-rank 근사치를 찾는다. 이 기술은 합리적인 성능을 달성하며 효율적인 미세조정 옵션을 제공한다.
Low-rank factorization 방법을 활용해 LLM의 linear layer에 대한 업데이트를 근사화하는 기술. 이는 LLM 특화 PEFT 방법론으로, 훈련 가능한 매개 변수의 수를 크게 줄이고 모델의 최종 성능에 거의 영향을 주지 않으면서 훈련 속도를 높일 수 있다는 특징이 있다.
LoRA 논문에 따르면 다양한 벤치마크에서 적은 개수의 LoRA 파라미터 튜닝만으로 조금 더 나은 결과를 얻을 수 있었다고 한다. 0.002% 수준의 미세조정 만으로 전체 파라미터 파인튜닝보다 더 나은 성능을 얻을 수 있었다는 결과만으로도 Fine-tuning의 중요성을 알 수 있다!
사전 학습된 LLM을 4bit로 양자화하는 기술.
QLoRA를 사용하면 규모가 큰 모델을 GPU하나로 Fine-tuning할 수 있다.
4-bit NormalFloat, DoubleQuantization(DQ), Paged Optimizer를 사용한다는 특징이 있다.
LLM의 fine-tuning 중 가장 쉽고 직접적으로 모델을 수정할 수 있는 방법이다.
LLM이 특정 태스크를 수행하도록 자연어로 설명한 'Prompt'를 입력 후 입력데이터를 붙여서 넣는 Prompt Engineering이다. 지시하는 태스크가 복잡해짐에 따라 엔지니어링이 복잡해진다는 어려움이 있다.
다양한 LLM 기반 한글 베이스 모델이 있지만, 찾아본 결과 아직까지는 Llama2 7b 13b가 가장 성능이 좋은것 같다.
(synatra mistral gemma polyglot eeve 등과 비교, 다른 자료 있을 수 있음)
-> 자료 검색 시 우리의 상황에 맞게 자료를 잘 찾아봐야할 것 같다...!
기존에 선정했던 beomi 분의 한글베이스 모델 중에서도 beomi/llama-2-koen은 잘 돌아가는 반면, beomi/open-solar-ko 과 같이 솔라베이스의 모델은 동어반복이나 의미불명한 답변을 하는 현상이 발생한다고 한다.
Fine-tuning을 하게된다면, QLoRA를 사용하는 게 가장 자료가 많아 보인다...
QLoRA를 선택 시 기본 1000건, 몇천K의 단위…의 데이터가 필요한 것 같다.