블로그 목록
IT 뉴스 & 트렌드

Gemini가 후임 모델을 9달러에 스스로 훈련했다

개발자가 취미용 스크래퍼의 댓글 단위 AI 결제를 줄이려고, Gemini에 라벨을 한 번만 맡기고 오픈소스 NER 모델 GLiNER로 이식했다. 총비용은 라벨 9달러+GPU 2.5달러이고 결과는 검증셋 0.83 F1. 작은 파인튜닝 일감의 실제 비용과 삽질을 솔직하게 공개한 HN 인기글이다.

2026년 9월 19일 5분 읽기

댓글 하나에 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를 얼마나 잘 따라했는지"를 보여줄 뿐, 실제 정확도를 보여주지는 않아요.

그래도 시사점은 분명해요. 댓글 단위 과금이 부담되는 워크로드라면, 큰 모델로 라벨을 한 번 만들고 오픈소스 소형 모델로 이식하는 게 현실적인 대안이 돼요.

이 원문이 해커 뉴스에서 화제가 된 이유도, 실리콘밸리식 선전이 아니라 한 개발자가 직접 겪은 비용과 삽질의 기브스를 솔직하게 공개했기 때문이에요. 모델과 데이터가 다 좋아도 그 사이 코드 한 줄이 하루를 잡아먹을 수 있다는, 꽤 값진 교훈이죠.

참고 링크

#Gemini#GLiNER#파인튜닝#NER#소형 모델
Robeedau

발행 전 운영자가 직접 큐레이션·검수·편집합니다.