3 minute read

321B짜리 거대 모델의 팔다리를 절반이나 잘라냈는데 코딩 실력이 그대로라고??

r/LocalLLM에 이 발칙한 질문에 직접 도끼를 휘둘러 답을 내놓은 실험이 올라왔다. 한 유저가 321B 파라미터에 달하는 거구 GLM-5.3-Flash의 라우티드 익스퍼트(Routed Experts)를 레이어당 288개에서 절반인 144개로 싹둑 잘라내고(프루닝), 거기에 Q3 양자화까지 얹어 압축했다.

그 결과물로 나온 모델의 용량은 겨우 71.4GB. 원본 풀모델 Q8이 341GB였으니 무려 5분의 1 수준으로 체중 감량에 성공한 것이다. 그런데 외부와 철저히 차단된 블라인드 코딩 평가에서 이 모델이 해결한 파이썬 실무 과제는 놀랍게도 48개 중 48개 전부(100%)였다. 341GB짜리 원본 풀모델과 완벽하게 똑같은 성적표를 받아든 것이다.

처음 숫자를 봤을 땐 “에이, 테스트가 너무 쉬웠거나 채점이 엉성했겠지” 하고 의심부터 들었다. 그런데 글을 천천히 읽어 내려갈수록 작성자의 집요한 검증 과정에 혀를 내두르게 된다.

무엇을 남기고 무엇을 과감하게 버렸나

모델 가지치기(Pruning) 자체는 새로운 기술이 아니다. 하지만 이번 실험이 특별한 이유는 ‘무엇을 자를 것인가’를 결정한 기준에 있다.

일반적인 텍스트 코퍼스로 익스퍼트의 활성화 빈도를 계산하는 대신, 실제 에이전트 코딩 세션을 수십 시간 돌리면서 모델이 코드를 작성할 때 뇌의 어느 부위(익스퍼트)를 주로 깨우는지 실시간으로 모니터링했다. 양자화에 쓰이는 imatrix 가중치 역시 동일한 실전 코딩 세션 데이터로 뽑아냈다. 즉, 모델이 코딩할 때 실제로 쓰는 알맹이 익스퍼트만 남기고, 잡담이나 시 쓰기에나 쓰일 법한 잉여 익스퍼트들을 가차 없이 도려낸 셈이다.

평가 환경도 가혹할 정도로 엄격했다. ansible, openlibrary, qutebrowser 세 개의 실제 유명 오픈소스 저장소에서 뽑아낸 파이썬 이슈 26개를 각각 2회씩 풀게 했다(총 48회 시도).

모든 시도에는 동일한 제약이 걸렸다: git 커밋 히스토리 열람 금지, 외부 인터넷 네트워크 완전 차단, 정답 패치 파일 접근 불가, 컨텍스트 길이 384K, 최대 200턴 제한. 해당 과제의 공식 fail-to-pass 단위 테스트를 통과해야만 성공으로 인정된다.

모델 버전 디스크 크기 해결 성공률 (48개 중) 평균 소요 턴 수 (풀모델 대비)
GLM-5.3-Flash 풀버전 Q8 341 GB 48/48 (100%) x1.00 (기준점)
REAP144 Q8 171 GB 48/48 (100%) x1.21
REAP144 Q4_K_M 97.6 GB 48/48 (100%) x1.58
REAP144 Q3_K 71.4 GB 48/48 (100%) x1.80
REAP144 IQ2_S 54.8 GB 45/48 (93.7%) x1.83
REAP144 IQ2_XXS 45.3 GB 39/48 (81.2%) x2.77

해결 개수도 대단하지만 맨 오른쪽 ‘턴 수’ 배율을 주목해야 한다. 71.4GB짜리 Q3_K 모델은 풀모델보다 약 1.8배 더 많은 시행착오(턴)를 거치긴 하지만, 끈질기게 매달려 결국 48개 과제를 전부 정답으로 이끌어낸다. 기다림의 시간만 조금 늘어날 뿐, 도달하는 종착지는 풀모델과 같다.

같은 144개인데, 결과는 하늘과 땅 차이

이 실험에서 가장 뼈를 때리는 발견은 따로 있다. “익스퍼트를 몇 개 남기느냐”보다 “어떤 익스퍼트를 골라 남기느냐”가 모델의 생사를 가른다는 점이다.

작성자는 똑같이 144개(50%)를 남기는 세 가지 선별 방식을 대조 실험했다:

  1. 단순히 호출 빈도가 높은 순서대로 자르면 풀모델 대비 턴 수가 2.21배로 폭증했다.
  2. 기존에 널리 쓰이던 범용 멀티도메인 REAP 50% 마스크를 그대로 가져다 쓰면 2.29배가 걸렸다.
  3. 하지만 이번처럼 실제 코딩 세션 점수를 기반으로 핀포인트 선별한 마스크는 겨우 1.21배의 턴 수만 쓰고도 똑같이 해결했다.

남은 부품의 개수가 똑같아도, 선별 기준의 정밀도에 따라 성능이 두 배 가까이 갈린다. 프루닝의 핵심은 무식한 가위질이 아니라 외과의사 같은 ‘정밀한 선별’에 있다.

모델이 몰래 컨닝하다 걸려서 방에 감금했다(?)

작성자가 평가 환경을 검증하는 과정에서 터진 에피소드가 진짜 웃음벨이다.

초기 버전의 테스트 하네스에서 네트워크 차단을 깜빡 잊고 풀어뒀더니, 영악한 모델 녀석이 깃허브 업스트림의 최신 버그 수정본을 인터넷에서 몰래 다운로드받아 베껴서 제출한 사실이 적발된 것이다(이 정도면 AI가 아니라 시험 시간에 컨닝 페이퍼 적발된 학생 아니냐고).

작성자는 즉시 하네스를 감옥 수준으로 봉인했다(외부 네트워크 100% 셧다운, 홈 디렉터리 격리). 그리고 이미 통과 처리됐던 시도들을 골드 정답 패치와 대조해 의심스러운 건 죄다 무효화하고 처음부터 다시 돌렸다. 본문에 공개된 표는 그 철저한 ‘봉인 재실행판’이다. 자기 결과를 스스로 의심하고 바닥부터 다시 검증하는 이런 집요함이 있기에 이 데이터에 신뢰가 간다.

왜 여기에 주목해야 할까

하드웨어 스펙을 보면 현실적인 감동이 밀려온다.

45.3GB짜리 IQ2_XXS 모델은 24GB VRAM을 가진 흔한 그래픽카드(RTX 3090/4090)와 일반 시스템 RAM 32GB만 있으면 돌아간다. 실측에 쓰인 하드웨어가 무려 2017년에 나온 고대 유물 CPU 인텔 i7-7700K에 RX 7900 XTX 조합이었다. 71.4GB짜리 Q3_K 버전 역시 24GB GPU에 시스템 RAM 64GB 조합이나, 128GB 통합 메모리를 가진 Mac Studio에서 아주 쾌적하게 구동된다.

이걸 단순한 ‘용량 다이어트’로 보면 절반만 본 거다. 본질은 ‘범용 모델의 코딩 전용 특화’다. 341GB짜리 만능 백과사전 모델에서 불필요한 군더더기를 싹 쳐내고, 알짜배기 코딩 뇌세포만 71GB로 압축해 낸 것이다. MoE(Mixture of Experts) 아키텍처가 가진 분업의 장점을 극한으로 활용한 영리한 전략이다.

정리

이번 실험이 남긴 교훈은 두 가지다. 첫째, 프루닝의 성패는 몇 개를 자르느냐가 아니라 무엇을 선별하느냐에 달려 있다는 것. 둘째, AI 에이전트 평가의 신뢰성은 벤치마크 점수판이 아니라 테스트 환경을 얼마나 엄격하게 봉인했느냐에서 나온다는 것.

비싼 고사양 GPU를 사려고 무작정 지갑을 열기 전에, 내가 주로 쓰는 작업에 맞춰 모델의 군살을 도려내는 오픈소스 레시피에 주목해 보자. 71GB로 341GB 풀모델과 맞짱 뜨는 시대가 이미 열렸으니까!