파인튜닝은 언제 하고, 언제 하지 말아야 하나
앞 글(토크나이저)에 이어서 쓴다. 이번에도 직접 파인튜닝을 돌려 본 후기가 아니라 논문과 자료를 읽고 정리한 글이다. 이 점은 미리 밝혀 둔다.
먼저, 정말 파인튜닝이 필요한가
"우리 도메인에 맞게 파인튜닝하자"는 말은 자주 나오는데, 내 생각에는 대부분 그 전에 해볼 게 남아 있다.
- 모델이 모르는 최신 정보나 사내 문서가 문제라면 RAG가 먼저다. 지식은 학습시키는 것보다 찾아서 넣어 주는 편이 갱신하기 쉽다.
- 출력 형식이나 말투 문제라면 프롬프트와 예시(few-shot)로 먼저 해결되는 경우가 많다.
- 그래도 안 되는 건 보통 행동 방식을 바꿔야 하는 경우다. 일관된 스타일, 특정 형식의 안정적 출력, 작은 모델로 비용을 줄이는 것 같은 목적이다.
기존 글에서도 같은 맥락을 다뤘다. AX 교육의 AI 모델 편에는 프롬프트, RAG, 컨텍스트 엔지니어링, 파인튜닝을 비교한 표가 있다. 파인튜닝은 비용과 유지보수 부담이 크니 신중해야 한다는 결론이다. 나도 동의한다.
파인튜닝이라는 말이 가리키는 것
사전 학습된 모델에 추가 데이터로 학습을 더 시키는 것이 파인튜닝이다. 가장 기본형은 SFT(지도 미세조정)로, 입력과 바람직한 출력의 쌍을 모아 그대로 따라 하게 학습시킨다.
문제는 모델 전체를 다시 학습시키면 메모리와 저장 공간이 엄청나게 든다는 점이다. 그래서 일부만 학습시키는 방법이 나왔다.
LoRA와 QLoRA
LoRA(Hu 등, 2021, arXiv 2106.09685)는 사전 학습 가중치를 얼려 두고, 각 층에 학습 가능한 저랭크 행렬을 끼워 넣는다. 초록에 따르면 GPT-3 175B를 Adam으로 풀 파인튜닝하는 것과 비교해 학습 파라미터를 1만 배 줄이고 GPU 메모리를 3배 줄이면서, 품질은 동등하거나 더 낫다고 한다. 어댑터와 달리 추론 지연이 늘지 않는다는 점도 강조한다.
QLoRA(Dettmers 등, 2023, arXiv 2305.14314)는 거기에 양자화를 얹었다. 초록 기준으로 65B 모델을 48GB GPU 한 장에서 16비트 파인튜닝 성능을 유지하며 파인튜닝할 수 있고, 4비트 NormalFloat, 이중 양자화, 페이지드 옵티마이저를 쓴다. 이렇게 만든 Guanaco가 단일 GPU 24시간 학습으로 ChatGPT 대비 99.3% 수준이라고 보고한다. 다만 이 비교는 논문의 평가 설정에서의 이야기이고, 내 서비스에서도 그렇게 나온다는 뜻은 아니다.
그래서 기존 스킬트리 글에 쓴 것처럼 소비자급 GPU에서도 가능해졌다. 다만 "가능하다"와 "잘 된다"는 다른 이야기다.
데이터가 전부다
QLoRA 초록에도 작고 품질 좋은 데이터셋이면 최고 수준 결과가 나온다는 문장이 있다. 반대로 말하면 데이터가 나쁘면 아무리 좋은 기법을 써도 소용이 없다. 파인튜닝 작업의 대부분은 학습 코드가 아니라 데이터를 만들고 거르는 일일 거라고 생각한다. 이건 논문에서 확인한 사실이 아니라 내 추측이다.
그리고 앞 글과 이어지는 부분이 있다. 학습 데이터는 해당 모델의 토크나이저와 채팅 템플릿에 맞춰 만들어야 한다. 토큰으로 변환된 형태가 학습 대상이기 때문이다.
파인튜닝하지 않는 편이 나은 경우
- 지식이 자주 바뀐다: RAG가 낫다.
- 데이터가 수십 건뿐이다: few-shot 프롬프트부터.
- 평가 방법이 없다: 좋아졌는지 알 수 없다. 파인튜닝 전에 평가셋부터 만들어야 한다.
- 모델 버전이 계속 바뀐다: 새 모델이 나올 때마다 다시 해야 할 수 있다.
아직 고민 중인 부분
호스팅형 API의 파인튜닝 서비스와 오픈 모델을 직접 튜닝하는 것 중 어느 쪽이 실무에 맞는지는 아직 정하지 못했다. 가격과 지원 모델이 자주 바뀌어서 이 글에는 구체적인 수치를 넣지 않았다.
사람의 선호를 반영하는 단계는 파인튜닝의 다음 단계다. 다음 글에서 이어진다: RLHF, SFT 다음에 일어나는 일
참고
- Hu 등, "LoRA: Low-Rank Adaptation of Large Language Models" (arXiv 2106.09685)
- Dettmers 등, "QLoRA: Efficient Finetuning of Quantized LLMs" (arXiv 2305.14314)
