첫 소형 언어 모델(SLM) 학습 성공
Trained my first small language model
핵심 요약
Gemini Flash의 지연 시간을 해결하기 위해 50MB 규모의 소형 모델을 직접 학습시켜 0.06초 만에 추론하는 데 성공함.
- 모델 학습 — 2,500개의 샘플을 활용해 15분 만에 50MB 크기의 모델 학습 완료
- 성능 최적화 — 기존 Gemini Flash 대비 정확도는 97%로 유지하면서 추론 속도를 0.06초로 대폭 단축함
- 배포 계획 — 서버 측 배포를 우선 고려 중이며, 향후 브라우저 기반의 클라이언트 측 추론도 검토 중임
Gemini Flash에 최소한의 사고 예산(thinking budget)을 할당해서 요약 작업을 돌리는 툴을 하나 쓰고 있는데, 이게 진짜 빠름. 보통 0.9~1.2초면 끝나거든. 근데 팀 내부용 앱을 쓸 때 사람들이 자꾸 엉뚱한 걸 선택하는 UX 문제가 생기더라고.
Gemini Flash가 사용자가 뭘 해야 할지 파악해서 다음 단계를 딱 짚어줄 순 있는데, 사람들이 워낙 광클을 해대니까 0.9초라는 시간도 너무 길게 느껴지는 거지. 0.9초가 별거 아닌 거 같아도 하루에 앱을 천 번씩 쓰다 보면 그냥 생각 없이 클릭, 클릭, 클릭하게 되잖아.
프롬프트는 대충 "'문자열 a'와 '문자열 b'가 '특정 방식'으로 연관되어 있는가?" 이런 식이었고, 답은 불리언(boolean) 값이었음.
결정론적(deterministic) 파이썬이나 자바스크립트로 돌리면 몇 밀리초 만에 답이 나오긴 하는데, 정확도가 66%를 겨우 넘기는 수준임.
반면 Gemini Flash는 정확도가 99%나 됨.
처음엔 모델 새로 학습시키는 게 빡셀 거 같아서 좀 망설였는데, 걍 상용 AI 툴에서 하라는 대로 따라 해봤음.
기존에 쓰던 예시 케이스가 550개 정도 있었는데, 최신 모델 두 개를 써서 비슷한 예시들을 더 뽑아내니까 총 2,500개 정도 되더라고. 학습은 내 RTX A6000 16GB GPU로 돌렸고, 한 15분 걸림.
결과물은 50MB 정도 되는 작은 모델이 나왔음. 이걸 로컬에서 돌려보니까 정확도는 97%고, CPU(구형 스레드리퍼, 3.1GHz)에서 돌려도 0.06초 만에 응답함.
99%랑 97%면 이 정도 차이는 충분히 감수할 만하지. 일단 서버 사이드에 배포할 생각인데, 그럼 지연 시간이 조금 더 생기겠지만 내 워크스테이션보다는 아마 살짝 느릴 듯. 정확도랑 비교 데이터도 계속 로그로 남겨서 나중에 평가하고 학습 데이터 보강할 생각임.
이론상으로는 브라우저 클라이언트 사이드에서도 돌릴 수 있긴 함. 주말에 배포할 건데, 0.1~0.2초 정도 지연 시간이면 굳이 복잡하게 클라이언트 사이드 추론까지 안 가도 충분히 빠를 거 같음. 그래도 뭐, 해보면 재밌긴 하겠네.


