Development··6 min read

소규모 팀의 LLM 파인튜닝 도전기

5인 팀에서 LLM 파인튜닝을 시도하고 실패하고 다시 시도한 3개월의 기록

GPU 빌리는 것부터 막혔다

사내에서 고객 문의 자동 분류 시스템을 만들겠다고 선언한 게 9월 초였다. 팀원 5명, 예산은 월 487,000원. 처음엔 OpenAI API로 충분할 줄 알았는데, 분류 정확도가 72%에서 도무지 안 올라갔다. 프롬프트를 아무리 고쳐도 한계가 있었다. (프롬프트만 47번 바꿨다. 47번째에서 포기했다.)

그래서 파인튜닝을 하기로 했다. 근데 GPU를 어디서 빌릴 건지가 첫 번째 문제였다. AWS p4d 인스턴스는 시간당 32달러. 월 예산의 절반이 하루 만에 날아가는 구조다.

결국 Colab Pro+로 시작했다

A100 한 장이면 7B 모델은 돌릴 수 있다는 계산이 나왔다. Colab Pro+가 월 49.99달러. 이게 가장 현실적이었다. (사실 팀장님한테 "이거 되겠냐"는 소리를 세 번 들었다.)

데이터 준비가 진짜 문제였다. 고객 문의 데이터 3,200건을 수작업으로 라벨링했다. 5명이서 나눠서 했는데 이틀 반 걸렸다. 라벨링 기준이 사람마다 달라서 중간에 한 번 다 엎고 기준표를 다시 만들었다. 그 삽질에 나흘이 더 날아갔다.

LoRA가 아니었으면 진작 포기했을 거다

전체 파라미터를 튜닝하는 건 메모리가 턱없이 부족했다. LoRA로 방향을 틀었다. rank 8에 alpha 16으로 시작했는데, 첫 학습에서 loss가 안 떨어졌다. learning rate를 2e-4에서 5e-5로 낮추니까 그제야 움직이기 시작했다. (이거 찾는 데 이틀 걸렸다. 로그만 째려보는 이틀.)

3 에포크 돌리는 데 4시간 23분. Colab이 중간에 한 번 끊겼다. 체크포인트를 안 저장하고 있었다. 처음부터 다시 돌렸다. 그날 저녁에 맥주를 세 캔 마셨다.

정확도는 올라갔는데 기대만큼은 아니었다

파인튜닝 후 분류 정확도가 72%에서 83%로 올랐다. 11%p 향상. 솔직히 90% 이상을 기대했는데 현실은 그랬다. 원인을 분석해보니 카테고리 간 경계가 모호한 문의들이 문제였다. "결제 오류"와 "환불 요청"이 섞인 문의 같은 것들.

두 번째 시도에서 라벨을 세분화하고 데이터를 4,800건까지 늘렸다. 정확도 87.3%. 여기까지 오는 데 2개월 반이 걸렸다.

근데 이게 처음부터 API 쓰는 거랑 비교하면 어떤가

비용을 계산해봤다. 파인튜닝에 들어간 총비용이 GPU 대여비 + 인건비 포함해서 대략 230만 원. OpenAI API를 그냥 쓰면 월 12만 원 정도인데, 정확도가 72%다. 파인튜닝 모델은 추론 비용이 거의 없으니까 6개월이면 손익분기가 맞는다.

근데 솔직히 6개월 뒤에 이 모델이 아직 쓸 만할지는 모르겠다. 고객 문의 패턴이 바뀌면 또 튜닝해야 하니까.

소규모 팀이 파인튜닝할 때 알아두면 좋은 것들

데이터 라벨링에 전체 시간의 60%가 갔다. 모델 학습은 생각보다 빨리 끝난다. 병목은 항상 데이터다.

LoRA는 진짜 혁명이다. A100 한 장으로 7B 모델 파인튜닝이 가능하다는 게 2년 전에는 상상도 못 할 일이었다. 근데 하이퍼파라미터 튜닝은 여전히 감과 경험의 영역이라서, 논문 세 편 읽는 것보다 직접 세 번 돌려보는 게 낫다.

그리고 가장 큰 후회는 초기에 평가 지표를 제대로 안 잡은 것. "정확도"만 보고 있었는데 카테고리별 precision/recall을 봤어야 했다. 특정 카테고리에서 recall이 43%밖에 안 되는 걸 뒤늦게 발견했을 때 좀 막막했다.

아무튼, 소규모 팀도 파인튜닝은 할 수 있다. 근데 "쉽다"고는 절대 안 하겠다.

관련 글