Gemini가 후임 모델을 9달러에 스스로 훈련했다
개발자가 취미용 스크래퍼의 댓글 단위 AI 결제를 줄이려고, Gemini에 라벨을 한 번만 맡기고 오픈소스 NER 모델 GLiNER로 이식했다. 총비용은 라벨 9달러+GPU 2.5달러이고 결과는 검증셋 0.83 F1. 작은 파인튜닝 일감의 실제 비용과 삽질을 솔직하게 공개한 HN 인기글이다.
댓글 하나에 API 한 번, 그 비용이 문제였다
요리에 빠지다 보니 고급 주방칼에 꽂힌 개발자 피터 비제(Peter Vijeh) 씨의 이야기예요. 그는 레딧에서 칼 얘기가 오가는 댓글마다 브랜드·모델·강철 소재를 뽑아내는 도구를 운영하고 있어요. 어디서 어떤 칼이 언급되는지 긁어 보려는 거예요.
처음 선택은 댓글마다 Gemini 3.1 Pro를 한 번씩 호출하는 방식이었어요.
"새로 산 마자키, 흰색 2번(white #2)이 옛 피브록스보다 낫더라"는 댓글에서 마자키는 브랜드, 피브록스는 모델, white #2는 소재로 정확히 짚어내는 식이에요. 동작은 완벽했지만, 잡는 댓글이 늘수록 청구 금액이 통제 불능이 됐어요. 예산을 맞추기 위해 댓글을 건너뛰는 게 유일한 대책이었죠.
여기서 그가 던진 질문은 이거예요. "똑똑한 모델에게 라벨을 한 번만 달아두면, 오픈소스의 작고 싼 모델에게 그걸 가르쳐 같은 실력을 만들 수 있지 않을까?"
이 실험이 전 세계 개발자들의 관심을 받은 건, 그 답이 번들번들한 데모가 아니라 아주 낯익은 현실이었기 때문이에요.
문장에서 이름 골라내기, NER은 왜 어려운가
본문에서 상품 이름을 골라내는 작업을 named-entity recognition, 줄여서 NER이라고 불러요. 문장 안에서 브랜드·모델·소재 같은 정해진 범주의 실체를 찾아내는 자연어 처리 과제예요. 사실 NER은 10년 넘게 소형 모델로 해온 오래된 작업이라 특별할 게 없어요.
문제는 정밀도예요. 제로샷(zero-shot)으로 돌린 오픈소스 GLiNER는 비용이 0인 대신 Gemini 대비 약 0.65 F1으로 성능이 떨어져요.
댓글당 과금을 다는 Gemini는 정확하지만 비싸고, 공짜인 GLiNER는 흐릿해요. 그 사이 공백을 메우는 게 이 글의 출발점이었어요. 핵심 아이디어는 Gemini가 한 번만 그리면 GLiNER가 그 선을 따라 제 역할을 하게 만드는 거예요.
라벨은 9달러 한 번, 실행은 내 GPU로
Gemini는 OpenRouter를 거쳐 온도 0으로 25분 만에 4,290개 댓글에 라벨을 달았어요. 비용은 9달러, 댓글당 약 0.0021달러.
프롬프트 설계의 핵심 비결은 "문자 오프셋(offset)을 요구하지 않는다"였어요. LLM은 문자를 세는 걸 아주 서툴러서 위치를 달라고 하면 두세 칸씩 어긋나거든요. 그래서 정확한 부분 문자열과 라벨만 받고, 어긋남 계산은 코드(타입스크립트)가 담당하게 했어요.
훈련셋의 약 30%는 일부러 "제품 없는 댓글"로 채웠어요. gyuto나 carbon, handle처럼 오탐을 부르기 쉬운 단어가 있는데 실제 제품은 없는 댓글을 부정 예제(negative)로 넣어 "없으면 없다"고 말하게 만든 거예요.
두 번째 실행 전에 225개 검증셋을 먼저 떼어놓고 이후로는 절대 건드리지 않았고요. 전체 훈련 예제는 2,250개(훈련 2,029 + 검증 225)이고, 개체 스팬은 3,907개(브랜드 1,720·모델 1,345·소재 스펙 842)였어요.
삽질의 절반 이상은 모델이 아니라 코드였다
열 번의 훈련 중 다섯 번은 쓸 수 있는 모델이 전혀 안 나왔어요. 처음 세 번은 설정 문제였어요. HF Trainer와 GLiNER를 함께 쓰면 누구나 마주치는 함정들이었죠.
가장 아팠던 건 다섯 번째 실행이었어요.
words_mask라는 텐서 하나 때문에 손실(loss)이 130에서 70 사이로 평평하게 머물렀어요. 크래시도 NaN도 없어서 범인을 찾기가 무척 어려웠어요.
GLiNER의 훈련 코드를 직접 파보니 words_mask는 이름과 달리 마스크가 아니었어요. attention_mask 옆에 붙어 있고 모양도 같아서 "진짜 토큰은 1, 패딩은 0"이라고 착각하기 쉬운데, 실제로는 단어 인덱스였어요.
특수·프롬프트·패딩 토큰은 0, 그리고 각 실제 단어의 첫 서브토큰에 1, 2, 3을 매기는 형태예요. 1로 가득 채우면 댓글 전체가 "한 단어" 취급을 받아, 스팬 스코어링 헤드가 하나의 거대한 토큰 안에서 브랜드와 소재를 찾으려다 벙 찌는 거예요.
인덱스를 고치자 6번째 실행부터 학습이 됐어요. 이후는 검증셋을 기준으로 조정이었고요.
중간 크기 209M 모델은 0.800, 큰 459M 모델은 검증셋에서 0.83 F1에 도달했어요.
소재 재현율은 라벨 종류별로 임계값을 따로 주자 0.787에서 0.911로 올랐어요.
스틸 이름들(MagnaCut, S35VN, HAP40)이 브랜드보다 확신도가 낮아 단일 컷오프로는 놓쳤던 게 원인이었죠.
저자는 이렇게 정리해요. 작은 파인튜닝 일감에서 문제는 대개 데이터나 모델이 아니라 그 사이의 코드다. 그리고 손실이 평평하면 입력 텐서부터 의심하라는 조언을 남겨요.
0.83 F1은 무슨 뜻인가
최종 성적은 검증셋 225개에서 0.83 F1이에요.
이긴 실행은 T4에서 24분, 총 비용은 라벨 9달러에 GPU 약 2.5달러였어요. 댓글당 과금이 사라지니 이익선은 대략 4,291번째 댓글부터예요.
모델은 "carbon steel"이 소재가 아니라 범주라는 것, 그리고 PM2가 스파이더코 팔라미터리 2 모델을 뜻할 수도 있고 그냥 글자일 수도 있다는 뉘앙스까지 익혔어요.
여기서 저자가 가장 강조하는 한계가 있어요. 이 모든 점수는 "정답"이 아니라 Gemini의 라벨을 기준으로 잰 거예요.
검증셋을 사람이 직접 확인하지 않았으니, Gemini가 틀린 곳에서는 모델이 그 오류를 복사하면 오히려 정답으로 쳐요. 즉 0.83은 "Gemini를 얼마나 잘 따라했는지"를 보여줄 뿐, 실제 정확도를 보여주지는 않아요.
그래도 시사점은 분명해요. 댓글 단위 과금이 부담되는 워크로드라면, 큰 모델로 라벨을 한 번 만들고 오픈소스 소형 모델로 이식하는 게 현실적인 대안이 돼요.
이 원문이 해커 뉴스에서 화제가 된 이유도, 실리콘밸리식 선전이 아니라 한 개발자가 직접 겪은 비용과 삽질의 기브스를 솔직하게 공개했기 때문이에요. 모델과 데이터가 다 좋아도 그 사이 코드 한 줄이 하루를 잡아먹을 수 있다는, 꽤 값진 교훈이죠.
참고 링크
- 원문: I had Gemini train its own replacement for $9
- 이 모델이 구동되는 사이트: New Knife Day
- 원문 해커 뉴스 토론: Hacker News
Related posts
NewsAnthropic, 평가자를 사내 상주시키는 실험을 시작해요
Anthropic이 Accenture와 손잡고 프런티어 AI의 독립 평가 체계를 만들기 시작했어요. 평가자가 회사 내부에 상주하며 직원급 접근권으로 모델 훈련과 배포 과정을 지켜보는 '내장 평가'의 첫 실험인데, 양사는 5년간 각각 최소 10억 달러를 투자할 계획이에요.
News코드 리뷰 비용 45배 줄인 Jev, 정확도는 어떤가
TypeSafe의 System One 모델 Jev를 Gemini 3.8 Flash·Claude Fable 5.1과 같은 Python 코드 리뷰 과업에 넣고 비용·속도·정확도·일관성을 비교한 벤치마크예요. Jev가 비용을 45~274배 아끼고 응답도 4~5배 빠르지만, 정확도 98%로 소폭 손해를 봐요.
News앱 마케팅 이미지를 AI 에이전트에게 맡기는 시대가 왔어요
Show HN에 오픈소스 '에이전트 스킬'이 올라왔어요. 앱 스크린샷과 화면 녹화만 넘겨주면 App Store·Play 스토어용 스크린샷, 소셜 카드, 3D 디바이스 목업과 프로모 영상을 로컬에서 자동 생성해 줍니다. Claude Code·Codex·Cursor·Gemini CLI에서 동작해요.
Curated, fact-checked, and edited by a single operator before publishing.