Model Finetuning - 나만의 데이터로 학습 시키면서 겪은 문제#1

회사에서 요즘 LLM을 사용하기 위해 다양한 테스트 코드도 작성해보고, 리서치를 진행 하고 있다.

그러던 중 LLM 모델을 파인튜닝 해볼 기회가 생겼다. 그 과정에서 겪은 문제들을 중점으로 기록하고자 한다.

 

오늘은 모델 파인튜닝을 진행하기전에 고려해야할 사항, 파인튜닝 기법에 대해 설명하고자 한다.

 

1. 컴퓨터 환경

LLM 모델을 파인튜닝하기 위해서는 반드시 필요한 것이 GPU 사양이다. 

회사에서 Nvidia A6000 48GB 2개를 지원해주셨고, Cuda 또한 설치되어 있는 상황이었다.

 

2. 어떤 LLM 모델을 파인튜닝 해볼 것인가?

Nvidia A6000 48GB 2개로 돌릴 수 있는 모델은 아무래도 한정적일 수밖에 없었다. 

영어로 뛰어난 성능을 가진 모델이 많은 것으로 알고 있다.

그래서 일단, 한글 모델의 성능이 어느정도인지를 테스트해봤다.

hugging face에 올라온 open-ko-llm-leaderboard의 23.10.10일 기준 1위 모델인 kyujinpy/KoT-platypus2-13B 를 테스트 해봤을 때, 한글 성능이 나름 괜찮게 나오는 것 같았다.

해당 모델을 테스트 해보고 우리가 한글 모델을 파인튜닝 하면 조금 더 좋은 성능을 낼 수 있지 않을까? 하는 희망을 가지게 되었다. (후에 이게 매우 큰 자만임을 알게 되었다.)

 

3. 어떤 데이터셋을 사용해서 학습시킬건데?

허깅페이스에 올라온 데이터셋 중에 한국어이면서, Base Model로 사용하기로 한 KoT-platypus2-13B 학습에 사용되지 않은 데이터를 찾다 보니, 성균관대학교 산학협력프로젝트 과정에서 한국어 llm 모델 SFT 학습을 위해 구축한 데이터셋인 korean_rlhf_dataset 이 있었다. 이 데이터를 모두 학습시키고자 하니까 시간이 너무 오래 걸리기 때문에 이 중 2000개의 데이터를 추출해서 학습시키기로 하였다. 또한, KoT-platypus2-13B에 korean_rlhf_dataset이 학습이 안되어 있긴 하지만 혹시 몰라 자체 데이터 50개를 추가해서 총 2050개의 데이터를 학습시켜보기로 하였다.

 

다음 글에서는 모델을 파인튜닝하는 과정에 대해서 소개하고, 그 과정에서 겪었던 문제에 대해서 설명할 예정이다.

 

4. 모델을 파인튜닝하기 위해 어떤 기법이 있는데?(간단하게 알아보자)

기존의 GPT, t5, bert와 같은 트랜스포머 기반 거대 언어 모델의 기존의 패러다임은 거대한 단위의 웹 데이터를 사전학습(pre-train)하고, 다운스트림 테스크(downstream task)에 따라 파인튜닝을 진행했다. 

 

그러나 요즘 모델이 점점 커지면서 모델 전체를 파인튜닝하는 것은 사실상 불가능해져가고 있다.

 

이때 등장한 개념이 모든 매개변수를 조정하는 것을 피하고, 더 적은 데이터와 인프라 리소스만으로 모델을 튜닝하는PEFT(Parameter Efficient Fine Tuning)이다.

 

PEFT에는 여러가지 방법들이 있다. 이 중 Low Rank Parameter(LoRA 및 QLoRA)가 가장 널리 사용된다.

 

LoRA는 고정된 weights를 갖는 pretrained model에 학습이 가능한 rank decomposition 행렬을 삽입한 것이다.

QLoRA는 4-bit로 양자화된(Quantized) 모델을 LoRA 기법을 사용해서 학습하는 방법이다.

 

해당 내용에 대해 더 자세히 알고 싶다면, devocean 테크블로그 를 참조하길 바란다.

 

 

다음글에서는 실제 로컬 환경에서 파인튜닝하는 과정에 대해서 알아볼 것이다.

 

참고

https://discuss.pytorch.kr/t/qlora-48gb-gpu-65b/1682

https://abvijaykumar.medium.com/fine-tuning-llm-parameter-efficient-fine-tuning-peft-lora-qlora-part-1-571a472612c4

https://4n3mone.tistory.com/7