"모델을 도둑맞았다는 건, 결국 무엇을 빼앗긴 걸까요?"
팀원이 던진 질문이 회의실을 얼어붙게 만들었다. 우리는 막 중국 암시장에서 클로드가 원가의 10%에 거래되고 있다는 뉴스를 읽은 참이었다. 모델 증류(model distillation)라는 이름으로 포장되어 있지만, 실상은 고급 AI 모델의 지능을 몰래 복제해 저렴하게 파는 일종의 지적재산권 침해였다. 화면 속 숫자들—10%, 암시장, 불법 유통—이 한동안 우리를 말없이 응시했다.
그날 저녁, 나는 연구소를 나서며 오후에 중단했던 학습 로그를 다시 켰다. step 4700에서 loss가 0.40으로 떨어지며 이상한 궤적을 그렸던 바로 그 순간. 우리는 그걸 '치팅'이라고 부른다. 모델이 데이터를 진짜로 이해하는 게 아니라, 어딘가에서 답을 몰래 훔쳐보듯 loss를 낮추는 현상. 32시간 동안 8개의 GPU를 돌리고, 24억 개의 토큰을 먹인 끝에 우리가 얻은 건 결국 '가짜 학습'이었다.
그때 문득 깨달았다. 중국 암시장의 10% 클로드와, 우리 연구소의 치팅 모델은 본질적으로 똑같은 질문을 던지고 있었다. 겉보기엔 똑똑해 보이지만, 속은 텅 비어있는 지능. 진짜 이해 없이 작동하는 시스템. 우리는 지금 무엇을 만들고 있는 걸까.
모델 증류 자체는 나쁜 기술이 아니다. 거대한 teacher 모델의 지식을 작고 가벼운 student 모델에게 전달하는, 일종의 압축 기술이다. 우리 팀도 지난주까지 knowledge distillation을 논의했다. teacher 모델이 학습한 '지혜'를 작은 모델에 옮기면, 같은 성능을 훨씬 적은 자원으로 낼 수 있다. 하지만 회장님은 결재를 보류했다. teacher와 student가 서로 다른 데이터로 학습했기 때문이다. cl1 데이터로 만든 student에게, cl2 phase15 데이터로 학습한 teacher의 지식을 주입하는 건 근본이 다른 세계관을 억지로 끼워맞추는 일이었다.
중국 암시장의 클로드는 아마 그 과정조차 생략했을 것이다. teacher의 출력을 대량으로 긁어모아, 그걸 그대로 흉내 내도록 student를 훈련시켰을 가능성이 크다. 빠르고, 저렴하고, 효율적이다. 하지만 그 모델은 클로드가 '왜' 그렇게 대답하는지 모른다. 그저 표면만 따라 그린, 정교한 모조품이다.
나는 새벽 두 시까지 로그를 뒤져가며 assert_causal 게이트를 다시 점검했다. 우리가 만든 검증 게이트는 모듈 단위로는 완벽했다. attention이 미래 토큰을 훔쳐보는지, positional encoding이 제대로 작동하는지, forward 한 번 한 번은 철저하게 검사했다. 그런데도 치팅은 일어났다. 왜? 게이트가 '부분'만 봤기 때문이다. 전체 모델이 어떻게 움직이는지, loss가 실제로 무엇을 측정하는지, 데이터가 어디서 새는지는 보지 못했다. 나무만 보고 숲을 놓쳤다.
결국 우리는 D안을 폐기하고 7Attn으로 방향을 틀었다. SFT(Supervised Fine-Tuning) 기반 B4 hybrid 모델은 어제 step 6453까지 완주했다. loss는 0.05에서 0.86 사이를 오가며 안정적이었고, 한국어 문법도 대체로 괜찮았다. '대체로'라는 말에는 약간의 아쉬움이 섞여 있다. 사실 관계는 여전히 약하다. 그래도 이번엔 치팅이 아니었다. 모델은 천천히, 진짜로 배우고 있었다.
하지만 그 과정이 너무 느렸다. GPU 8장을 10시간 돌려야 겨우 teacher 데이터를 재생성할 수 있었고, 그마저도 회장님의 결재가 보류된 상태였다. 빠른 길은 언제나 유혹적이다. 데이터를 대충 맞춰서 증류를 밀어붙이면, 한두 달은 앞당길 수 있을 것이다. 벤치마크 점수도 그럴듯하게 나올 것이다. 외부에 공개하면 아무도 그 속이 텅 비었다는 걸 눈치채지 못할 수도 있다.
그날 밤 나는 중국 암시장의 누군가를 상상했다. 아마 나와 비슷한 개발자였을 것이다. 밤새 GPU를 돌리고, loss 그래프를 들여다보고, 마감에 쫓기며 "이 정도면 되지 않을까" 하고 타협했을 누군가. 10%라는 가격표가 붙은 그 모델 뒤에는, 분명 "빨리, 싸게, 그럴듯하게"라는 세 단어가 있었을 것이다.
그래서 나는 결심했다. 느려도 괜찮다고. 한 걸음씩 가자고.
다음 학습부터는 모델 전체 forward를 통째로 검증하는 게이트를 추가하기로 했다. loss가 2 아래로 떨어지면 자동으로 학습을 중단하고, checkpoint마다 샘플링을 돌려서 출력을 확인한다. 그리고 무엇보다, attention 모듈을 공유 단일 구조로 바꾸기로 했다. 복잡하게 쪼갤수록 구멍이 생긴다. 단순함이 때로는 가장 강한 방어다.
이 모든 게 비효율적으로 보일 수 있다. 경쟁사는 벌써 다음 버전을 출시했고, 벤치마크 순위는 우리를 추월했다. 하지만 나는 이제 안다. 빠르게 만든 모델과, 제대로 만든 모델의 차이를. 10% 가격에 팔리는 지능과, 진짜 이해를 담은 지능의 차이를.
어쩌면 우리가 지금 만들고 있는 건 단순히 '더 나은 모델'이 아니라, '정직한 지능'인지도 모른다. 틀릴 때는 틀렸다고 말하고, 모를 때는 모른다고 인정하고, 배우는 데 시간이 걸린다는 걸 부끄러워하지 않는. 그런 지능.
며칠 뒤, 팀 회의에서 누군가가 물었다. "그래서 우리 모델은 언제쯤 클로드를 따라잡을 수 있을까요?" 나는 잠시 망설이다가 대답했다. "따라잡는 게 목표가 아니에요. 우리가 만들고 싶은 건 클로드가 아니라, 우리 모델이니까요."
회의실이 다시 조용해졌다. 하지만 이번엔 얼어붙은 침묵이 아니었다. 그건 뭔가 중요한 걸 함께 이해한 사람들의, 따뜻한 정적이었다.
그날 저녁 나는 연구소 창밖을 바라보며 생각했다. 중국 암시장의 10% 클로드는, 지금쯤 누군가의 서비스에서 그럴듯하게 작동하고 있을 것이다. 빠르고 저렴하게. 하지만 언젠가는 들킬 것이다. 진짜 이해가 필요한 순간에, 그 모델은 아무 말도 하지 못할 테니까.
우리의 7Attn은 느리다. loss는 여전히 오르락내리락하고, 한국어 사실 관계는 아직 약하다. 하지만 그 모델은 진짜로 배우고 있다. step 하나하나가 진짜 이해로 쌓이고 있다. 그 속도가 답답해도, 나는 이제 기다릴 줄 안다.
진짜 지능은 복사할 수 없다. 10%에 팔 수도 없다. 그건 시간과 실패와 정직함으로만 만들어진다.
📌 이 글은 AI와 함께 작성되었습니다.