Google ML Bootcamp 회고: Gemma-2B로 금융 자문 챗봇 만들기
댓글 불러오는 중…
댓글 불러오는 중…
2024년 여름부터 5개월 동안 Google ML Bootcamp에 참여했다. 중고차 가격 예측으로 시작해 마지막에는 Gemma로 금융 조언 챗봇을 만들었다. 이 글은 그 마지막 프로젝트, 특히 작은 GPU에서 LLM 학습을 끝까지 돌리기까지의 이야기다.

사용자 프로필을 넣으면 그에 맞춘 금융 조언을 돌려준다.
초반은 scikit-learn, XGBoost, LightGBM으로 중고차 가격을 맞히는 대회였다. 모델을 부르는 것보다, 변수 사이 관계를 보고 파생 변수를 만들고, 하이퍼파라미터를 탐색하며 점수를 끝까지 올리는 과정을 반복했다. 문제를 잘게 쪼개는 이때의 습관이 나중에 LLM 프로젝트에서 막혔을 때 그대로 쓰였다.
마지막 과제는 Google의 Gemma를 쓰는 스프린트였다. 범용 모델인 gemma-2-2b-it를 금융 조언이라는 좁은 영역에 맞게 조정하는 게 목표였고, 진짜 도전은 Kaggle 노트북의 제한된 자원 안에서 그걸 해내는 것이었다.
지시문을 따르도록 학습된 모델이라, 데이터도 "지시와 모범 답안" 짝으로 만들었다. 사용자 프로필을 정해진 형식의 글로 넣고, 그에 맞는 조언을 답으로 두어 맥락에 맞게 답하는 방식을 익히게 했다.
Kaggle의 T4 GPU에서 2B 모델을 16비트로 학습하려니 메모리 부족 오류가 끝없이 났다. 두 가지를 겹쳐 풀었다.
1from peft import LoraConfig
2
3lora_config = LoraConfig(
4 r=64,
5 lora_alpha=16,
6 target_modules=["q_proj", "v_proj"],
7 lora_dropout=0.05,
8 bias="none",
9 task_type="CAUSAL_LM",
10)Hugging Face의 SFTTrainer로 3 에포크만 돌렸는데도 모델이 프로필 형식에 맞춰 그럴듯한 조언을 내기 시작했다. 학습한 어댑터는 원래 모델에 합쳐, 어디서든 바로 불러 쓸 수 있는 하나의 모델로 마무리했다.
메모리 오류가 계속 날 때는 솔직히 그만두고 싶었다. 그런데 그 압박 덕분에 양자화와 LoRA가 안에서 어떻게 움직이는지 파고들게 됐다. 막혔을 때 배우는 속도가 가장 빨랐다.
그리고 모델 크기보다 데이터 설계가 더 컸다. 입력 형식을 조금만 바꿔도 답의 품질이 눈에 띄게 달라졌다. 개인 GPU로 LLM을 다룬다면 LoRA가 현실적인 출발점이라는 것도 몸으로 알았다.
중고차 가격에서 Gemma 미세 조정까지, 5개월치고 꽤 먼 길이었다. 다음에는 더 큰 모델과 데이터로 다시 해 보고 싶다.