게이트키퍼도 양자화할 수 있을까: 하이브리드 스킬 라우터 임베딩 압축의 정확도-비용 실험
에이전트 하네스에 스킬을 1,600~2,000개쯤 물려 두고 매 턴 하이브리드 라우터(어휘 점수 + 임베딩 유사도)로 어떤 스킬을 부를지 고른다면, 이 글에서 그 라우터의 숨은 비용 구조를 짚어봅니다. 문서 검색 인덱스와 달리 라우터의 임베딩 모델은 오프라인에서 한 번 인코딩하고 끝나는 게 아니라 사용자가 말을 걸 때마다 다시 돌아갑니다. 그 절반을 양자화하면 정확도는 얼마나 깎이고 속도는 얼마나 버는지, 프로덕션 라우터에서 직접 재서 확인한 결과를 정리합니다.
검색 인덱스와 라우터는 비용 구조가 다릅니다
문서 검색에서 임베딩 비용은 코퍼스를 한 번 인코딩해 두면 그 뒤로는 저장된 벡터를 조회하는 값싼 연산으로 상환됩니다. 라우터는 그렇지 않습니다. 카탈로그는 작고 느리게 바뀌지만, 사용자의 질의는 매번 새로 인코딩해야 합니다. 즉 임베딩 모델은 다운스트림 추론이 시작되기도 전에 메모리를 계속 물고 지연을 더하는, 상시 대기 중인 컴포넌트입니다.
그런데 압축 연구는 이 두 역할을 비대칭적으로 다뤄 왔습니다. 생성 모델을 양자화하는 문헌은 두텁습니다. 반면 그 생성 모델로 가는 문을 지키는 검색 모델의 압축은 벡터 검색 커뮤니티가 별도로 다뤄 왔고, 그마저도 인덱스 크기와 재현율(recall)을 기준으로 삼을 뿐 라우팅 결정 자체를 기준으로 삼지 않습니다. 스킬 라우팅 문헌 쪽에서도 사정은 비슷합니다. 리트리버는 입력을 다듬고 출력을 리랭킹하고 실패를 벤치마킹하는 대상이었을 뿐, 그 가중치 자체를 설계 변수로 다룬 연구는 찾기 어렵습니다. 이 논문은 그 갈라진 두 갈래를 라우터 지점에서 처음으로 잇습니다.
융합 가중치가 압축 위험을 스스로 줄여 줍니다
핵심 관찰은 생각보다 단순한 대수에서 나옵니다. 하이브리드 라우터의 점수는 어휘 점수와 임베딩 코사인 유사도를 가중합으로 섞습니다. 여기서 어휘 점수는 토큰 통계로만 계산되므로 임베딩을 양자화해도 비트 하나 바뀌지 않습니다. 양자화 오차가 들어올 수 있는 통로는 오직 임베딩 항 하나뿐이고, 그 항은 융합 가중치 $(1-\alpha)$만큼만 최종 점수에 반영됩니다.
1차 섭동(perturbation) 분석으로 이 관계를 정리하면, 점수 오차의 상한이 $2(1-\alpha)\varepsilon(b)$라는 닫힌 형태로 떨어집니다. 여기서 $\varepsilon(b)$는 비트 예산 $b$에서 임베딩 벡터가 얼마나 흔들리는지를 나타내는 값입니다. 결론은 명확합니다. 어휘 점수에 많이 기대는 라우터일수록 임베딩을 압축해도 구조적으로 더 안전하고, 순수 밀집 검색기($\alpha=0$)는 그 오차를 고스란히 다 뒤집어씁니다. 이 감쇠 효과는 인코더나 양자화 방식, 코퍼스의 성질과 무관하게 오직 융합식의 형태 자체에서 나온다는 점이 흥미롭습니다.
개념 예시로, 실측이 아니라 관찰 2(위험이 1-α에 비례한다는 선형 관계)를 도식화한 것입니다. 6장 실측 데이터로부터 계산된 그래프는 아닙니다.
여기서 한 걸음 더 나가면 실무에 바로 쓸 수 있는 진단법이 나옵니다. 어떤 질의든 1등 후보와 2등 후보의 점수 차이(마진)를 이미 라우터가 계산해 놓고 있으므로, 그 마진이 $4(1-\alpha)\varepsilon(b)$보다 크기만 하면 양자화된 인코더를 돌려 보지 않고도 그 질의의 1등 판정이 절대 뒤집히지 않는다고 증명할 수 있습니다. 골든셋 전체에 대해 이 조건을 만족하지 못하는 질의의 비율을 $p_{\mathrm{risk}}(b)$라 부르면, 압축 인코더를 단 한 번도 돌리지 않고 압축 위험의 상한을 사전에 인증할 수 있습니다. 값이 0이면 hit@1이 그 비트 폭에서 절대 바뀌지 않는다는 뜻입니다. 다만 이 인증은 $\varepsilon(b)$가 실제로 유효한 상한일 때만 성립한다는 전제가 붙습니다.
압축이 정말 이득인지 재는 손익분기 조건
정확도가 조금 떨어질 위험이 있다고 해서 압축이 무조건 손해는 아닙니다. 예상 정확도 손실(오분류로 이어질 확률 × 오분류 비용)이 지연과 메모리에서 절약되는 값보다 작으면 압축은 그 자체로 이득입니다. 이 손익분기 부등식에서 흥미로운 함의가 하나 나옵니다. 메모리 절약은 요청이 오든 안 오든 발생하는 상시 비용이라 트래픽 규모 $N$이 커질수록 우변이 커지는데, 좌변(정확도 손실)은 요청당 위험이라 $N$과 무관합니다. 즉 트래픽이 많은 라우터일수록 오히려 압축의 손익분기를 더 쉽게 넘깁니다. “바쁜 시스템일수록 잃을 게 많다”는 직관과는 반대입니다.
이 논문 시리즈의 이전 두 편(온라인 밴딧으로 융합 가중치를 재조정하는 시도, 모델 티어 앙상블 투표)은 둘 다 “정확도를 더 얻어야 본전”이라는 개선 목표형 손익분기였고 둘 다 답이 신통치 않았습니다. 압축은 구조가 다릅니다. 이득은 트래픽에 비례해 구조적으로 발생하고, 정당화해야 할 것은 정확도 이득이 아니라 정확도 손실입니다. 즉 손익분기가 개선 목표가 아니라 운영자가 직접 정하는 위험 허용치가 된다는 것이 이 논문의 핵심 주장입니다.
프로덕션 라우터에서 실제로 재 보니
이론이 맞는지 확인하려고 실제로 도는 스킬 라우터의 카탈로그 1,910개 항목과 회귀 골든셋 63쌍 중 정답 스킬이 카탈로그에 실제로 남아 있는 36쌍을 골라 검증했습니다. 인코더는 두 개를 붙였습니다. 하나는 다국어 인코더 paraphrase-multilingual-MiniLM-L12-v2입니다. 여기서 분명히 해 둘 것이 있습니다. 이 모델은 프로덕션 인코더가 아니라 그 자리를 대신 세운 대역입니다. 실제 라우터가 서빙하는 것은 EmbeddingGemma-300M(embeddinggemma-300M-qat-Q4_0.gguf)이고, GGUF 추론 서버로 돕니다. 이번에 쓴 양자화 도구가 그 모델을 건드릴 수 없어서 대역을 세웠습니다. torch.quantization.quantize_dynamic은 PyTorch nn.Linear 모듈을 바꿔치기하는 방식인데, GGUF 파일에는 그런 모듈이 없습니다. 역할(다국어·문장 단위·같은 융합 라우터의 임베딩 레인)은 맞췄지만 같은 모델은 아니고, 이건 결과를 읽을 때 감안해야 할 한계입니다, 다른 하나는 대조군으로 붙인 영어 전용 소형 인코더(all-MiniLM-L6-v2)입니다. 둘 다 PyTorch의 동적 INT8 양자화로 nn.Linear 모듈만 압축했습니다.
다국어 대역 인코더는 어휘 레인과 융합하면 hit@1이 그대로 유지되는 반면 임베딩 단독 레인은 떨어집니다. 그런데 대조군 인코더는 융합 후 오히려 반대 패턴을 보입니다. (2026-08-19/20 로컬 맥북, repo .venv, CPU에서 수동 재실행 측정, GPU 미사용.)
결과는 절반만 이론을 따랐습니다. 다국어 대역 인코더에서는 임베딩 단독 레인의 hit@1이 0.1667에서 0.1389로(36개 중 1개 질의만큼) 떨어지고 MRR도 0.0215 낮아졌지만, 어휘 레인과 융합한 하이브리드 레인은 hit@1과 hit@3이 정확히 그대로였고 MRR도 0.0024만 움직였습니다. 임베딩 단독 변화폭의 10분의 1 수준입니다. 융합 가중치가 감쇠기로 작동한다는 예측과 방향이 일치합니다.
그런데 영어 전용 대조군 인코더에서는 정반대였습니다. 임베딩 단독 레인의 hit@1은 아예 움직이지 않았는데, 융합한 하이브리드 레인의 hit@1은 0.25에서 0.1944로(두 질의만큼) 떨어졌고 hit@3도 한 질의만큼 낮아졌습니다. 융합이 위험을 줄이기는커녕 오히려 키운 셈입니다. 표본이 36개라 확정적으로 말하긴 이르지만, 압축 전 임베딩 순위가 어휘 순위와 얼마나 일치하는지가 관건일 가능성이 있습니다. 두 레인이 이미 합의하는 지점에서는 흔들린 밀집 순위가 흔들리지 않은 어휘 순위로 교정되지만, 두 레인이 애초에 다른 답을 가리키는 지점에서는 밀집 레인의 오차가 그대로 융합 결과에 전달됩니다.
이 CPU 백엔드에서는 두 인코더 모두 동적 INT8 양자화 후 단일 질의 인코딩이 오히려 느려져, 손익분기 조건의 지연 항을 통과하지 못했습니다. (2026-08-19/20 로컬 맥북, repo .venv, CPU에서 수동 재실행 측정, GPU 미사용.)
더 실무적으로 뼈아픈 결과는 지연 쪽에서 나왔습니다. 라우터의 실제 작업 부하와 같은 배치 크기 1 조건에서, 대역 인코더는 질의당 인코딩 시간이 8.29ms에서 11.15ms로, 대조군은 5.31ms에서 6.72ms로 오히려 늘어났습니다. 1,910개 전체 카탈로그를 배치 32로 한 번에 인코딩하는 시간도 7.772초에서 21.015초로 늘었습니다. 이번에 사용한 범용 PyTorch 동적 양자화 백엔드가 이 하드웨어(Apple Silicon, qnnpack 커널)에서는 압축의 전제 자체를 깨뜨린 것입니다. 메모리 절약도 기대에 못 미쳤습니다. INT8은 이론상 4배를 압축하지만 이 백엔드는 선형 계층만 양자화하고 임베딩 테이블은 그대로 둬서, 실제로는 대역 인코더 1.16배, 대조군 1.55배만 줄었습니다. 손익분기 부등식의 좌변(정확도 위험)은 애초에 계산하지 않았습니다. 마진 값을 따로 저장해 두지 않아 $p_{\mathrm{risk}}(b)$를 실측 검증할 수는 없었고, 우변은 지연 항이 아예 음수로 나온 셈이니 이번 조합에서는 압축을 정당화하기 어렵다는 결론이 됩니다.
36개 질의라는 표본 크기도 짚어 둘 필요가 있습니다. 대역 인코더에서 융합 후 1등 판정이 뒤집힌 사례가 0건이었지만, 룰-오브-스리(rule of three)로 계산하면 36번 시행에서 사건 0건이 관측됐을 때 95% 신뢰수준에서 세울 수 있는 상한은 약 8.3%에 불과합니다. “1등이 절대 안 바뀐다”고 단정할 근거는 아니라는 뜻입니다.
이 실험이 남긴 세 갈래 의미
회사 관점에서는 실제로 노출된 스킬 1,978개를 다루는 우리 하이브리드 스킬 라우터의 임베딩 컴포넌트를 압축해 매 세션 라우팅 지연과 메모리 오버헤드를 줄이면서도 hit@1/hit@3/MRR을 지킬 수 있는지 실측하고, 안전하게 배포할 수 있는 정밀도 하한을 가늠하는 근거를 남겼습니다. 이번 조합(범용 PyTorch 동적 양자화 + 이 CPU 백엔드)에서는 지연이 오히려 늘었다는 사실 자체가 “그냥 양자화 도구를 얹으면 빨라진다”는 가정을 검증 없이 채택하면 안 된다는 신호입니다.
사회적으로는 대형 생성 모델이 아니라 검색·라우팅에 쓰이는 소형 임베딩 모델의 압축 비용-정확도 트레이드오프를 실증했다는 의미가 있습니다. GPU 없이도 에이전트 하네스를 저비용으로 운영할 수 있는 경로를 검토할 때, 압축 대상을 생성 모델로만 국한하지 않고 라우팅 계층까지 넓혀 볼 근거가 됩니다.
과학적으로는 기존 양자화 문헌이 거의 전부 생성 모델의 정확도-비용 트레이드오프를 다루는 반면, 검색·라우팅 전용 임베딩 모델의 양자화가 하이브리드(어휘+임베딩) 융합 점수에 미치는 영향은 따로 측정된 사례가 드물다는 공백을 메웁니다. 특히 융합 가중치가 압축 위험을 구조적으로 흡수한다는 관찰과, 계산 비용을 전혀 들이지 않고 랭크 안정성을 사전에 인증하는 진단법은 이 논문이 새로 내놓은 것입니다.
무엇을 더 확인해야 하는가
가장 큰 한계는 이번 실측이 논문이 제안한 진단법($p_{\mathrm{risk}}(b)$)을 검증하지 못했다는 점입니다. 마진 값을 저장해 두지 않아서 사후에 계산할 수 없었고, 그래서 이 논문의 중심 기여인 “float32 점수만으로 랭크 안정성을 사전에 인증한다”는 주장은 여전히 이론 위에만 서 있습니다. 다음 단계는 명확합니다. 마진을 남기고 $p_{\mathrm{risk}}(b)$ 곡선을 실제로 그려 보는 것입니다.
두 번째 한계는 골든셋 자체의 편향 가능성입니다. 이 36개 질의에서는 어휘 레인 단독(hit@1 0.5278)이 두 하이브리드 arm보다도 앞섰습니다. 즉 애초에 임베딩 레인이 기여하는 몫이 작았을 수 있고, “카탈로그에 정답이 실제로 존재하는 쌍만 골랐다”는 선정 기준 자체가 어휘 레인이 이미 잘 처리하는 방향으로 표본을 치우치게 했을 가능성도 있습니다. 회귀 테스트용으로 조립된 골든셋은 균형 잡힌 검색 벤치마크가 아닙니다. 여기에 더해 이번 실험은 양자화 백엔드 하나, 비트 폭 하나, 하드웨어 하나, 배치 크기 하나에 국한됐습니다. 양자화 인식 학습(QAT)이나 이진화 후 전체 정밀도 재점수화, Matryoshka 절단 같은 다른 압축 경로에서는 지연 항의 부호 자체가 뒤집힐 가능성이 남아 있습니다.
논문 상세 페이지는 여기에서 볼 수 있습니다: https://huggingface.co/datasets/thaki-AI/daily-paper-2026-08-20-quantized-embedding-skill-router
최초 공개본은 위 다국어 인코더를 “프로덕션 인코더”라고 적었습니다. 사실이 아니어서 2026-08-20에 바로잡았습니다. 라우터·카탈로그 1,910개·골든셋 36쌍은 실제 운영 중인 것이 맞고, 인코더만 대역이었습니다. 덧붙이면 실제 프로덕션 인코더는 이미 QAT INT4로 양자화되어 돌고 있습니다. 그래서 이 글의 질문은 우리 배포본에 대해서는 이미 답이 나와 있고, 여기서 잰 것은 그보다 싼 사후 양자화 경로가 같은 값을 하는지였습니다. 지연 축에서는 하지 못했습니다.