Hugging Face출처 게시일

SLM의 어휘를 특화하는 것이 실제 애플리케이션에서 추론 비용을 77% 줄일 수 있는 방법

Qwen이나 Gemma 같은 범용 오픈소스 모델을 파인튜닝하여 특정 도메인이나 작업에 특화시킨 모델은 여러 도메인과 범용 애플리케이션을 위해 만들어진 어휘를 그대로 물려받습니다.

Qwen이나 Gemma 같은 범용 오픈소스 모델을 파인튜닝하여 특정 도메인이나 작업에 특화시킨 모델은 여러 도메인과 범용 애플리케이션을 위해 만들어진 어휘를 그대로 물려받습니다.

우리가 운영 중인 에세이 채점기에서 그 어휘는 모델이 가장 많이 작성하는 텍스트를 수많은 토큰으로 분할했습니다. 이 글은 곧 발표할 VocabX 논문의 일부 결과를 미리 소개합니다: 토큰의 빈도가 아닌 각 토큰의 비용을 기준으로 어휘를 특화하여 베이스 모델을 변경하지 않고도 측정된 추론 비용을 77% 절감한 방법입니다.

토크나이저는 보통 베이스 모델의 고정된 속성으로 취급되어, 물려받은 채 방치됩니다. 그러나 단일 도메인에 특화된 모델에서는 토크나이저가 가장 큰 비용 절감 레버 중 하나가 될 수 있으며, 이는 어떤 학습 단계보다도 앞서 설정됩니다.

우리가 운영 중인 시스템 중 하나는 Qwen3-4B를 기반으로 구축된 포르투갈어 에세이 자동 채점기입니다. 이 시스템은 에세이, 프롬프트, 보조 텍스트를 입력받아 각 역량에 대한 등급과 코멘트가 포함된 JSON 평가를 반환합니다.

모델은 이미 40억 개의 파라미터를 가진 소형 모델이었고, 이미 해당 작업에 대해 학습되어 있었습니다. 하지만 그 토크나이저는 여전히 원래의 Qwen3-4B 토크나이저로, 많은 언어와 다양한 종류의 텍스트를 위해 만들어진 것이었습니다. 채점기에서는 단일 언어인 포르투갈어와 단일 응답 형식에만 사용되었습니다. 이로 인해 두 가지 비용이 발생했습니다: 채점기가 매 요청마다 작성하는 텍스트가 필요 이상으로 많은 토큰을 차지했고, 생성되는 모든 토큰마다 모델은 이 작업에서 거의 사용되지 않는 항목들을 포함한 151,669개의 어휘 항목에 대한 점수를 계산했습니다.

우리는 동일한 베이스 모델, 동일한 데이터, 동일한 학습 레시피를 유지하면서 VocabX라고 부르는 방법으로 그 어휘를 재구축했습니다. 이 글의 수치는 아직 심사 중인 논문의 현재 버전에서 나온 것이며, 출판 전에 변경될 수 있습니다.

모두를 위한 어휘

선도적인 언어 모델은 토큰 단위로 읽고 쓰며, 토크나이저가 텍스트가 어떻게 토큰이 되는지를 결정합니다. 선도적인 범용 모델들의 토크나이저는 소스 코드부터 계약서, 중국어까지 여러 도메인과 언어의 대규모 텍스트 컬렉션으로 학습됩니다. 범용 모델에게는 그 선택이 타당합니다.

그러나 단일 도메인에서 사용되는 모델에게는 그것이 두 가지 낭비를 동시에 만들어냅니다.

첫 번째는 파편화입니다. 토크나이저는 해당 도메인이 가장 많이 반복하는 것을 정확히 여러 조각으로 분할합니다. 채점기에서는 모든 응답이 동일한 JSON 봉투, 동일한 역량 이름, 동일한 평가 문구로 시작합니다. 계약서에서는 상투적 조항이고, 코드에서는 식별자입니다. 이러한 각 시퀀스는 토큰 하나면 충분한 곳에서 여러 토큰의 비용을 발생시키며, 모델은 매 요청마다 그 전부를 부담합니다.

두 번째는 과잉입니다. 어휘에는 해당 도메인이 절대 사용하지 않는 수만 개의 항목이 담겨 있고, 모델은 생성하는 모든 토큰마다 그 전부에 대한 점수를 계산합니다. 미국 학교 생물학 시험 채점에 맞춰 조정된 모델은 중국어로 거의 쓰지 않지만, 매 단계마다 모든 중국어 토큰의 확률을 계산합니다. 어휘는 도메인이 가장 많이 반복하는 것을 여러 조각으로 분할하고, 도메인이 절대 사용하지 않는 항목들을 담고 있는 것입니다.

읽기는 저렴하고, 쓰기는 비싸다

자연스러운 반응은 토큰 수를 세고 그 수를 줄이려는 것입니다. 그러나 토큰 수가 곧 청구서는 아닙니다.

생성된 토큰이 왜 더 비용이 드는지 이해하려면 추론이 작동하는 방식을 살펴보는 것이 도움이 됩니다. 추론에는 두 단계가 있습니다. prefill단계에서는 모델이 전체 입력을 네트워크를 한 번 통과하며 처리합니다: GPU 메모리에서 읽어온 각 가중치는 모든 입력 토큰에 재사용되며, 병목은 연산량입니다. decode단계에서는 모델이 한 번에 하나의 토큰씩 응답을 생성하며, 각 토큰마다 네트워크를 완전히 한 번 통과해야 합니다. 각 가중치 읽기는 몇 번만 사용되고, GPU는 대부분의 시간을 메모리에서 데이터가 도착하기를 기다리며 보냅니다: 병목이 메모리 대역폭이 되는 것입니다.

이 효과는 정확히 우리가 운영하는 환경, 즉 적당한 크기의 배치로 서빙되는 소형 모델에서 가장 강하게 나타납니다. 요청을 배치로 묶으면 가중치 읽기를 여러 요청에 분산시켜 문제를 완화할 수 있지만, 해결하지는 못합니다. 매 디코드 단계에서 모델은 KV 캐시, 즉 이미 처리된 컨텍스트를 담고 그와 함께 증가하는 어텐션 메모리도 읽습니다. 우리가 측정한 사례인 채점기에서는 생성 토큰 하나의 비용이 읽는 토큰 하나의 7.4배였지만, 이 비율은 하드웨어, 문제, 배치 크기, 컨텍스트 길이 및 기타 요인에 따라 달라지며 그보다 클 수도 있습니다. 일반적으로 방향은 유지됩니다: 생성이 읽기보다 비쌉니다.

상자당 요금을 부과하되 보내는 상자에 받는 상자보다 7배 더 많이 청구하는 운송 회사를 생각해 보세요. 전체 상자 수를 줄이면 도움이 됩니다. 보내는 상자를 줄이면 7배 더 도움이 됩니다. 입력과 출력을 똑같이 압축하는 방법은 가능한 절감액의 대부분을 놓치게 됩니다.

청구서의 세 번째 구성 요소는 어휘 자체입니다. 모델의 마지막 레이어인 LM head는 내부 상태를 모든 가능한 토큰에 대한 점수로 변환합니다. 이를 위해 어휘 항목당 하나의 파라미터 행을 유지합니다. Qwen3-4B 크기의 모델에서 이 행렬은 전체 파라미터의 거의 10%를 차지합니다. 대형 모델은 이 비율을 눈치채지 못할 정도로 흡수하지만, 소형 모델에서는 부담이 됩니다.

그리고 비용은 한 번만 지불되는 것이 아닙니다. 입력 레이어는 읽고 있는 토큰의 행만 조회하지만, LM head는 생성되는 모든 토큰마다 전체 행렬을 읽어 곱셈을 수행합니다. 디코드는 이미 메모리 병목 상태이므로, 행이 하나 늘어날 때마다 매 단계마다 이동해야 할 데이터가 더 많아집니다. 해당 도메인에서 절대 사용되지 않는 항목도 빈번한 항목과 정확히 동일한 비용을 치릅니다. 바로 이 때문에 토큰을 추가하면 개수는 줄어들어도 청구 금액은 늘어나는 일이 생깁니다. VocabX는 선택 기준에 이 항목을 포함하지 않지만, 두 단계로 어휘 크기를 통제합니다: 서브워드 병합이 기본 어휘를 더 작은 도메인 특화 어휘로 대체하고, 매크로는 고정된 예산 아래에서 들어옵니다. 그레이더의 경우 출력 레이어가 약 152,000행에서 약 65,000행으로 줄었습니다.

기존 솔루션이 미흡했던 이유

모델의 어휘를 조정하는 것은 새로운 아이디어가 아닙니다. 문헌의 참조 방법들, 예컨대 fast vocabulary transfer(FVT), multi-word tokenization(MWT), 그리고 원래 어휘에서 BPE 학습을 이어가는 Liquid AI의 in-place tokenizer expansion (in-place BPE)은 이미 파편화를 줄여 왔습니다. 우리 문제에 이들을 테스트해 본 결과 두 가지 한계를 발견했습니다.

빈도가 아닌 비용으로 토큰을 선택합니다. 입력에 자주 등장하는 표현이 응답에 덜 자주 등장하는 표현보다 더 가치 있게 취급되는데, 이는 두 번째 표현이 실제로 서빙 비용이 더 비싸더라도 마찬가지입니다.

이들은 단일 레이어에서만 작동합니다. 단어를 어떻게 조각내는지 조정하거나, 아니면 전체 구문을 하나의 토큰으로 병합합니다. 이 세 가지 중 어느 것도 동일한 기준 아래에서 둘 다를 수행하지는 않습니다. 그리고 그레이더의 가장 큰 낭비는 바로 JSON 봉투 같은 길고 반복되는 구간에 있었는데, 서브워드 방식은 각 부분을 하나씩 병합한 후에야 이에 도달할 수 있습니다.

우리가 해결한 방법

VocabX는 두 가지 한계, 그리고 첫 번째를 해결하는 명백한 경로에 나타나는 세 번째 문제까지 다룹니다.

첫째, 우리는 질문 자체를 바꿨습니다. 후보 토큰이 얼마나 많은 토큰을 절약하는지 묻는 대신, 얼마나 많은 비용과 시간을 절약하는지 묻습니다. 제거된 각 토큰은 그것이 등장하는 필드의 가격으로 곱해집니다: 시스템 프롬프트, 사용자 메시지, 또는 모델 응답입니다. 우리가 측정한 사례인 그레이더의 경우, 응답에서 절약된 토큰 하나는 입력에서 절약된 토큰 하나의 7.4배 가치가 있으며, 어휘는 이에 맞춰 구축됩니다.

둘째, 우리는 두 레이어에서 동시에 작업합니다. 다시 배송 회사의 예로 돌아가면: 각 물건을 더 잘 포장해 상자를 줄일 수도 있고, 매주 동일한 12개짜리 키트가 배송된다는 것을 인식해 키트 전체를 하나의 상자로 보낼 수도 있습니다. VocabX는 둘 다 수행합니다. 서브워드 레이어에서는 도메인 단어가 어떻게 조각내지는지를 재구축합니다. 멀티워드 레이어에서는 짧은 표현부터 전체 행과 JSON 봉투에 이르기까지 반복되는 구간 전체를 찾아내어, 우리가 매크로 토큰이라 부르는 단일 토큰으로 바꿉니다. 두 레이어 모두 동일한 비용 기준 아래에서 선택되며, 각자 자신의 예산을 갖습니다.

이러한 구간을 찾기 위해, 우리는 코퍼스 전반에서 반복되는 구간을 자동으로 탐색하는 다섯 개의 마이너를 사용하며, 각각 한 종류의 반복에 특화되어 있습니다: 긴 단어, 전체 행, 표현, 완전한 문장, 그리고 JSON과 태그 같은 구두점을 포함한 구조입니다. 여덟 개 코퍼스에서 평균했을 때 마지막 것이 가장 많이 기여했으며, 코드에서는 이것 하나만으로 17.5포인트를 차지했습니다. 다섯 개가 모두 없었다면 그레이더의 토큰 감소는 55.6포인트 줄어들었을 것입니다.

셋째, 우리는 샘플이 볼 수 없는 것을 추정합니다. 비용 기준으로 토큰을 선택하려면, 이미 선택된 토큰 이후 각 후보가 얼마나 더 절약하는지 알아야 합니다. 이를 정확히 측정하려면 매 선택마다 전체 코퍼스를 다시 처리해야 하며, 그 횟수가 수만 번에 이릅니다. 대규모로 이를 수행하는 일반적인 방법은 문서 샘플에서 측정하는 것이고, 그러면 샘플에 없는 후보는 이득이 0이 됩니다.

50,000개 문서에서 37번 등장하는 표현은 400개 문서 샘플에 약 26%의 확률로만 나타납니다. 계약서 코퍼스에서는 후보의 16.6%만이 400개 문서 샘플에 나타나며, 나머지는 전혀 평가되지 않습니다.

후보의 이득은 두 부분으로 나뉩니다. 하나는 전체 코퍼스에서 얼마나 절약하는가이며, 이는 샘플 없이도 정확히 셀 수 있습니다. 다른 하나는 그 절약 중 이미 선택된 토큰들이 아직 커버하지 못한 부분이 얼마인가이며, 이 부분만 추정이 필요합니다. 샘플이 볼 수 없는 후보들에 대해서는, 0 대신 샘플이 볼 수 있는 후보들의 행동에 기반한 통계적 추정치를 사용합니다. 샘플에서는 드물지만 코퍼스에서는 빈번한 후보가 다시 후보군에 들어옵니다.

이 변화만으로, 동일한 샘플과 동일한 예산 하에서, 계약서 코퍼스의 토큰 감소가 44.7%에서 52.8%로 상승했습니다.

그레이더에서 달라진 것

실제 효과를 측정하기 위해, 우리는 동일한 베이스 모델, 동일한 데이터, 동일한 레시피, 동일한 시드로 그레이더의 7가지 버전을 학습시켰습니다. 이들 간의 유일한 차이는 토크나이저입니다. 모두 동일한 테스트 머신에서 RTX 5090 GPU와 vLLM 추론 서버로 동일한 500개 요청을 실행했으며, 비용은 측정된 런타임으로부터 계산되었습니다.

모델의 응답은 평균 350토큰에서 101토큰으로 줄었습니다. 비용은 77.0% 감소했습니다. 채점 정확도와 주제 벗어남 및 규칙 위반 에세이 걸러내기 정확도를 결합한 bench score로 측정한 품질은 0.703에서 0.810으로 상승했습니다.

그 지점에 도달하기 위해서는 경로 수정이 필요했다. 어휘의 첫 버전은 각 역량의 등급을 주변 JSON과 함께 하나의 매크로 토큰으로 융합했다. 가장 컴팩트한 옵션이었지만 품질이 떨어졌다. 벤치 점수가 0.689로, 프로덕션 채점기의 0.703보다 낮았다. 등급이 매크로 안에 들어 있으면 등급과 구조의 각 조합이 동일한 토큰의 서로 다른 변형이 되었고, 모델은 두 가지를 한 번의 스텝에서 선택해야 했다. 등급에 자체 토큰을 부여하면 응답당 2개의 추가 토큰이 들었지만 벤치 점수는 0.810으로 올랐고, 측정 결과에서는 오히려 더 저렴했다. 77.0% 절감으로, 융합 버전의 73.3%를 상회했다.

이 교훈은 채점기 너머에도 적용된다. 압축된 구간이 모델이 존재하는 이유인 바로 그 결정을 담고 있을 때, 압축에는 비용이 따른다. 목표는 가능한 한 가장 저렴한 어휘가 아니라, 중요한 토큰을 보존하는 가장 저렴한 어휘이다.

채점기를 넘어서

이 이득이 우리 사례에만 국한되는 것인지 확인하기 위해, 우리는 VocabX를 세 가지 참조 방법과 함께 다섯 개의 공개 도메인(계약서, 의학 논문, 과학 논문, 뉴스, Python 코드)과 세 가지 모델 계열(Qwen3, Llama-3.1, Gemma-3)에서 비교했다. 모든 방법은 동일한 마이닝 및 테스트 문서와 동일한 어휘 상한을 사용했다.

VocabX는 열다섯 가지 조합 모두에서 가장 강한 참조 방법보다 1.2에서 9.3 포인트 더 많이 압축했다. 추정 추론 비용에서도 VocabX의 프루닝 버전이 열다섯 가지 모두에서 앞섰으며, 평균 마진은 Qwen3에서 10.2 포인트, Llama-3.1에서 7.5 포인트, Gemma-3에서 13.6 포인트였다. 계약서 도메인에서 프루닝 버전은 113,426개의 어휘 항목으로 62.6%의 토큰 절감을 달성한 반면, 207,803개를 사용하는 최고의 인플레이스 BPE 설정은 61.8%에 그쳤다.

중요한 토큰에만 비용 지불하기

VocabX는 모델을 더 똑똑하게 만들지 않는다. 모델이 조각조각 쓸 필요 없는 텍스트에 대해 지불하는 것을 멈추게 하고, 절대 사용하지 않을 어휘를 스코어링하는 것을 멈추게 한다. 우리 채점기에서 이것은 동일한 베이스 모델과 동일한 학습 레시피로 측정된 추론 비용을 77% 절감했다.

특수화는 보통 데이터와 가중치에서 시작한다. 그보다 한 층 앞인 어휘에서 시작할 수도 있다.

전체 방법, 모든 실험의 표, 그리고 폐기된 개입들은 곧 발표할 VocabX 논문에 담길 것이다.

출처

추천 읽기

탐색하기 Hugging Face의 Dharma AI 에서 데모를 체험하고, 오픈 모델을 다운로드하고, 특수화된 AI 시스템이 실제 엔터프라이즈 애플리케이션에서 범용 모델을 능가하는 모습을 확인해 보라.

원문 출처

Hugging Face

내용 안내

원문 발행 및 권리는 출처에 있습니다.

기계 번역 · 원문을 참고하세요