Gigatoken, 24.53 GB/s의 속도로 토큰화: HuggingFace보다 최대 989배 빠름
요약
Rust 기반의 초고속 토크나이저인 Gigatoken이 공개되었습니다. HuggingFace Tokenizers 대비 최대 989배, tiktoken 대비 681배 빠른 처리 속도를 기록하며 텍15개 이상의 모델 제품군을 지원합니다.
핵심 포인트
- GPT-2 기준 최대 24.53 GB/s의 압도적인 토큰화 속도 구현
- HuggingFace 및 tiktoken과 호환되는 drop-in replacement 제공
- Llama 3, DeepSeek V3 등 15개 이상의 토크나이저 제품군 지원
- pip install을 통해 Linux, macOS, Windows에서 간편하게 설치 가능
개발자 marcelroed가 GitHub에 공개한 gigatoken 토크나이저는 전체 OpenWebText 코퍼스(11.9 GB)를 0.5초 미만 만에 처리합니다. 동일한 서버에서 HuggingFace Tokenizers가 24.8 MB/s를 기록한 것에 비해, GPT-2 기준으로 24.53 GB/s의 속도를 보여줍니다. HuggingFace Tokenizers와 tiktoken이 이미 순수 멀티스레드 Rust 기반으로 동작하고 있음에도 불구하고, 이 차이는 거의 1,000배에 달합니다.
TL;DR
- Gigatoken은 144코어의 AMD EPYC 9565에서 GPT-2를 토큰화할 때 24.53 GB/s에 도달하며, 이는 HuggingFace Tokenizers보다 989배 빠릅니다.
- OpenAI의 라이브러리인 tiktoken과 비교하면 681배의 차이가 납니다 (tiktoken의 36.0 MB/s 대비 gigatoken의 24.53 GB/s).
- 16코어 Apple M4 Max에서는 GPT-2로 8.79 GB/s에 도달하며, 동일한 기기에서 HuggingFace보다 1,268배 빠릅니다.
- Llama 3, Qwen 3, DeepSeek V3, GLM 5, Kimi K2, GPT-OSS, Nemotron 3 등 15개 이상의 토크나이저 제품군을 지원합니다.
- Rust를 수동으로 컴파일할 필요 없이
pip install gigatoken을 통해 Linux, macOS, Windows에 동일하게 설치할 수 있습니다. - 기존 코드를 변경하지 않고 토크나이저를 교체할 수 있도록 직접 호환 모드(
as_hf()및as_tiktoken())를 제공합니다. - 속도 향상이 균일하지는 않습니다: Gemma 4 및 Mistral 7B v0.3과 같은 제품군은 1,000배에 가까운 성능이 아니라 약 7~14배 정도만 더 빠릅니다.
gigatoken 소개
Gigatoken은 Python 바인딩을 포함한 Rust 기반의 오픈 소스 프로젝트로, HuggingFace Tokenizers 및 tiktoken의 직접적인 대체제(drop-in replacement)로 제시됩니다. 사용자 marcelroed가 관리하는 이 저장소는 main 브랜치에 1,200개의 별(stars), 46개의 포크(forks), 357개의 커밋(commits)을 보유하고 있습니다. 이 프로젝트의 핵심 약속은 간단합니다: 토큰화의 최종 결과물은 바꾸지 않으면서, 텍스트를 메가바이트(MB) 단위가 아닌 기가바이트(GB) 단위의 속도로 토큰화하는 것입니다.
이 프로젝트는 src/ 내의 코드 외에도 저장소 루트에 design_doc.md 및 pretokenizer_optimization_log.md와 같은 파일을 포함하고 있으며, 이는 프리토크나이저(pretokenizer)의 각 단계를 어떻게 최적화했는지에 대해 단계별로 문서화된 개발 과정을 시사합니다.
gigatoken 토크나이저에 무슨 일이 일어났는가
프로젝트의 README에는 두 개의 완전한 벤치마크 표가 게시되어 있습니다. 하나는 듀얼 소켓(144 코어) AMD EPYC 9565 서버에서 실행된 결과이고, 다른 하나는 Apple M4 Max(16 코어) 노트북에서 실행된 결과입니다. 두 테스트 모두 11.9 GB의 평문(plain text)으로 구성된 OpenWebText의 owt_train.txt 코퍼스(corpus)를 사용하며, GPT-2, Llama 3, Qwen 3, DeepSeek V3, GLM 5, Kimi K2, GPT-OSS를 포함한 15개 이상의 다양한 어휘 사전(vocabulary)으로 해당 파일을 인코딩할 때 각 토크나이저가 초당 몇 바이트를 처리하는지 측정합니다.
EPYC 서버에서 gigatoken은 GPT-2를 24.53 GB/s의 속도로 토큰화합니다. 동일한 기계와 동일한 파일로 평가된 HuggingFace Tokenizers는 24.8 MB/s에 도달합니다. 즉, gigatoken이 989배 더 빠릅니다. OpenAI의 공식 라이브러리인 tiktoken과 비교하면 그 차이는 681배입니다 (tiktoken의 36.0 MB/s 대비 gigatoken의 24.53 GB/s).
gigatoken은 144 코어의 EPYC에서 11.9 GB의 텍스트를 1초 미만으로 처리합니다.
배경 및 역사
토큰화(Tokenization)는 모든 언어 모델 학습 파이프라인(pipeline)의 첫 번째 단계입니다. 이는 가공되지 않은 텍스트를 신경망이 소비하는 숫자 식별자(numerical identifiers) 시퀀스로 변환합니다. 학습 데이터셋이 수백 기가바이트 또는 테라바이트에 달할 때, 이 첫 번째 단계는 데이터를 기다리느라 GPU 연산이 몇 시간 동안 지연되는 병목 현상(bottleneck)이 될 수 있습니다.
Transformers 생태계의 참조 라이브러리인 HuggingFace Tokenizers는 이미 Rust로 작성되어 있으며 멀티스레드(multithreaded)를 지원합니다. 즉, 순수 Python으로 구현된 단순한 방식이 아닙니다. GPT 제품군의 어휘 사전을 위한 OpenAI의 라이브러리인 tiktoken도 마찬가지입니다. gigatoken의 README 자체도 이를 초기에 명시하고 있습니다: "HF tokenizers와 tiktoken 모두 이미 멀티스레드 Rust로 실행되고 있음에 유의하십시오!". 따라서 성능 격차는 Python을 Rust로 바꾼 데서 오는 것이 아니라(그것은 이미 이루어졌습니다), 그 아래의 다른 최적화 계층에서 발생합니다.
💭 핵심 요약: HuggingFace Tokenizers와 tiktoken은 이미 Rust 기반의 멀티스레드 (multithread) 방식입니다. gigatoken의 이점은 더 빠른 언어로 다시 작성한 데서 오는 것이 아니라, 토큰화 (tokenization) 핵심부 주변의 오버헤드 (overhead)를 줄인 데서 옵니다.
gigatoken 토크나이저의 기술적 세부 사항 및 성능
gigatoken은 두 가지 사용 방식을 제공합니다. 호환성 모드 (compatibility mode)는 기존의 HuggingFace 또는 tiktoken 토크나이저를 as_hf() 또는 as_tiktoken()으로 감싸서, 현재 코드가 변경 없이 작동하면서도 원래 토크나이저의 출력을 정확히 재현할 수 있게 합니다. 프로젝트 자체에서도 이 모드는 자체 네이티브 API (native API)에 비해 무시할 수 없는 성능 비용이 발생한다고 경고하지만, 어떤 시나리오에서도 기존 라이브러리보다는 훨씬 빠릅니다.
gigatoken의 네이티브 API는 gt.Tokenizer와 TextFileSource를 사용하여 Rust 코드가 텍스트 문자열을 Python/Rust 경계(boundary)를 통해 전달하지 않고 디스크에서 직접 파일을 읽을 수 있게 합니다. 호환성 모드에서는 바로 이 경계에서 시간이 낭비됩니다. 이것이 표에 나타난 수치 뒤에 숨겨진 구조적 차이입니다.
| 토크나이저 | gigatoken | HF Tokenizers | tiktoken | vs HF |
|---|---|---|---|---|
| GPT-2 | 24,53 GB/s | 24,8 MB/s | 36,0 MB/s | 989× |
| Phi-4 | 24,00 GB/s | 29,9 MB/s | 801× | |
| GPT-OSS | 23,96 GB/s | 49,7 MB/s | 42,8 MB/s | 482× |
| Llama 3 / 3.1 / 3.2 | 22,15 GB/s | 48,5 MB/s | 457× | |
| DeepSeek V3 / R1 / V4 | 19,69 GB/s | 26,2 MB/s | 750× | |
| GLM 5 | 20,97 GB/s | 74,8 MB/s | 280× | |
| Gemma 4 | 4,82 GB/s | 334,1 MB/s | 14× | |
| Mistral 7B v0.3 | 3,57 GB/s | 354,7 MB/s | 10× |
EPYC의 전체 표에는 20개의 토크나이저 제품군이 포함되어 있으며, 모든 곳에서 동일한 패턴이 반복됩니다. GPT-2, Llama, DeepSeek 또는 Qwen과 같은 클래식 BPE (Byte Pair Encoding) 유형의 어휘 토크나이저는 400배에서 990배 더 빠르게 작동하는 반면, Gemma 또는 Mistral과 같이 더 무거운 사전 토큰화 (pre-tokenization) 규칙을 가진 제품군은 7배에서 14배 범위에 머뭅니다. 이는 실질적인 차이이긴 하지만, "1000배"라는 헤드라인과는 거리가 있습니다.
소비자용 하드웨어인 16코어 Apple M4 Max에서, gigatoken은 GPT-2를 8.79 GB/s의 속도로 토큰화합니다. 이는 6.9 MB/s에 도달하는 HuggingFace Tokenizers보다 1,268배 빠르며, 62.8 MB/s에 도달하는 tiktoken보다 140배 빠릅니다. Qwen 2 / 2.5의 경우, HuggingFace의 5.8 MB/s와 비교하여 6.37 GB/s를 달성하며, 이는 M4 Max 전체 표에서 가장 큰 차이인 1,105배의 성능 향상을 보여줍니다.
flowchart TD
A["텍스트 파일 (owt_train.txt)"] --> B["Rust의 TextFileSource"]
B --> C["Gigatoken 토큰화 코어"]
...
시작하기
Gigatoken은 코어가 Rust로 이미 컴파일된 Python 패키지로 배포되기 때문에 세 플랫폼 모두에서 동일하게 설치됩니다:
# Linux / macOS (bash 또는 zsh)
pip install gigatoken
...
패키지가 설치되면, 호환성 모드(compatibility mode)를 통해 나머지 파이프라인(pipeline)을 건드리지 않고 기존 토크나이저(tokenizer)를 교체할 수 있습니다:
import gigatoken as gt
from transformers import AutoTokenizer
...
모든 성능을 최대한 끌어내려면, 네이티브 API(native API)를 사용하여 Python 객체를 거치는 중간 단계를 생략해야 합니다:
import gigatoken as gt
tokenizer = gt.Tokenizer("Qwen/Qwen3-8B")
...
이것은 Python/Rust 경계를 통해 데이터를 전달할 때 발생하는 오버헤드(overhead)를 방지하는 경로입니다. 파일은 사용 가능한 코어 간의 최대 병렬성(parallelism)을 활용하여 Rust 측에서 직접 읽힙니다.
💡 팁: 전체 파이프라인을 마이그레이션하기 전에, 작은 배치(batch)에 대해 호환성 모드를 실행하고 현재 사용 중인 토크나이저의 출력과 토큰 단위로 비교해 보세요. 이 프로젝트는 해당 출력을 HuggingFace Tokenizers와 바이트 단위(byte-to-byte)로 일치시키기 위한 특정 작업을 문서화하고 있습니다.
영향 및 분석
수백 기가바이트(GB) 규모의 코퍼스(corpus)를 사용하여 자체 모델을 학습하거나 파인튜닝(fine-tuning)하는 팀에게, 라이브러리가 GPU가 작동하기 전 데이터를 준비하는 데 몇 분 또는 몇 시간이 걸린다면 토큰화(tokenization) 단계는 더 이상 사소한 단계가 아닙니다. 초당 메가바이트(MB/s) 단위에서 초당 기가바이트(GB/s) 단위로 전환되면, 나머지 파이프라인(디스크 읽기, 샤드(shard) 믹싱, 결과 토큰 쓰기)이 새로운 병목 현상(bottleneck)이 되지 않는 한 대규모 데이터셋에서 이 단계는 몇 시간에서 몇 초로 단축됩니다.
가장 솔직한 제한 사항은 벤치마크 표 자체에 나타나 있습니다. 성능 향상이 균일하지 않다는 점입니다. 더 복잡한 전처리(pre-tokenization) 규칙을 가진 Gemma 4, Mistral 7B v0.3 또는 Gemma 1과 같은 모델 제품군(families)은 1,000배에 가까운 것이 아니라 7배에서 14배 정도 더 빠르게 작동합니다. 자신의 어휘집(vocabulary)에 대해 gigatoken을 평가하려는 사용자라면, 표에 있는 가장 큰 수치를 맹신하기 전에 특정 토크나이저(tokenizer)로 직접 벤치마크를 실행해 보아야 합니다.
gigotoken의 이점은 토크나이저 제품군에 따라 7배에서 989배까지 다양합니다.
고려해야 할 또 다른 비용은 호환 모드(compatibility mode)입니다. HuggingFace Tokenizers 또는 tiktoken의 출력을 정확하게 재현하려면 네이티브 API(native API)에 비해 성능을 저하시키는 추가 로직이 필요합니다. 이미 해당 라이브러리들을 기반으로 성숙한 파이프라인을 구축한 팀에게는, 표의 가장 높은 수치를 제공하지 않더라도 호환 모드가 합리적인 진입점이 될 것입니다.
향후 계획
해당 리포지토리(repository)는 README에 코드 외의 공개적인 로드맵(roadmap)을 게시하고 있지 않습니다. 다만 리포지토리 트리에서 확인할 수 있는 design_doc.md 및 pretokenizer_optimization_log.md와 같은 파일들은, 프로젝트가 새로운 토크나이저 제품군에 대한 지원을 추가함에 따라 내부적으로 최적화 결정을 문서화하고 있음을 시사합니다. 현재 목록에는 이미 GLM 5, Qwen 3.5/3.6 및 Nemotron 3와 같은 최신 세대 모델들이 포함되어 있으며, 이는 초기 출시 이후에도 활발한 유지보수가 이루어지고 있음을 나타냅니다.
README 자체에 따르면, 아직 공개적으로 문서화되지 않은 부분은 전체 평문 파일의 토큰화(tokenization) 이외의 워크로드에서의 동작 방식입니다. 즉, 점진적 스트리밍(incremental streaming), 총 처리량(throughput)보다 요청당 지연 시간(latency per request)이 더 중요한 추론 시점의 토큰화(tokenization at inference time), 또는 Parquet나 WebDataset과 같은 데이터셋 형식에 대한 지원 여부 등이 이에 해당합니다.
📖 Telegram 요약: 요약 보기
직접 테스트해보세요: pip install gigatoken을 실행하고, 무엇인가를 프로덕션(production)으로 이전하기 전에 본인의 코퍼스(corpus)에 대해 현재 사용 중인 토크나이저(tokenizer)와 비교해 보십시오.
자주 묻는 질문 (FAQ)
gigatoken이란 무엇인가요?
GitHub의 개발자 marcelroed가 공개한 Rust로 작성된 언어 모델용 토큰화(tokenization) 라이브러리로, Python 바인딩(bindings)을 제공합니다. 이 라이브러리의 목표는 나머지 코드를 변경하지 않고 HuggingFace Tokenizers 또는 tiktoken을 대체하는 것입니다.
HuggingFace Tokenizers와 비교했을 때 얼마나 빠른가요?
AMD EPYC 9565 서버에서 GPT-2를 대상으로 실시한 벤치마크(benchmark) 결과, HuggingFace Tokenizers가 24.8 MB/s를 기록한 반면 gigatoken은 24.53 GB/s에 도달하여 989배의 차이를 보였습니다. Apple M4 Max에서는 8.79 GB/s에 도달하여, 동일한 기기에서 HuggingFace보다 1.268배 더 빠릅니다.
모든 HuggingFace 토크나이저와 호환되나요?
호환 모드(as_hf())는 기존의 HuggingFace 토크나이저를 래핑(wrap)하여 정확히 동일한 출력을 재현하도록 설계되었습니다. README에는 Llama 3, Qwen 3, DeepSeek V3, GLM 5, GPT-OSS, Kimi K2를 포함하여 15개 이상의 모델 제품군에 대한 명시적인 지원이 문서화되어 있습니다.
gigatoken은 어떻게 설치하나요?
Linux, macOS, Windows 모두에서 pip install gigatoken으로 설치할 수 있습니다. Rust로 작성된 핵심(core) 부분이 이미 Python 패키지 내에 컴파일되어 포함되어 있기 때문입니다.
호환 모드는 네이티브 API만큼 빠른가요?
아니요. 프로젝트 자체에서도 HuggingFace 또는 tiktoken과의 호환 모드는 gigatoken의 네이티브 API와 비교했을 때 무시할 수 없는 성능 비용이 발생한다고 경고합니다. 네이티브 API는 Python/Rust 경계를 통해 데이터를 전달하는 과정을 피하기 때문입니다.
Gigatoken이 OpenAI의 tiktoken을 대체할 수 있을까요?
Gigatoken은 직접적인 대체제로 사용할 수 있는 as_tiktoken() 모드를 제공합니다. EPYC 프로세서 기반의 GPT-2 벤치마크에서 gigatoken은 36.0 MB/s를 처리하는 tiktoken보다 681배 더 빠릅니다.
참고 문헌
- GitHub의 gigatoken 저장소 (Repository): 소스 코드, 전체 벤치마크 및 사용 문서.
- HuggingFace Tokenizers: gigatoken과 비교 대상이 되는 참조 라이브러리.
- tiktoken: 벤치마크에서 두 번째 비교 대상으로 사용된 OpenAI의 토크나이저 (Tokenizer).
- Transformers 문서 (Documentation): 토크나이저가 학습 파이프라인 (Pipeline)에 어떻게 통합되는지에 대한 문맥 정보.
📱 이 콘텐츠가 마음에 드시나요? 기술, AI 및 개발 분야의 가장 중요한 소식을 매일 게시하는 저희 Telegram 채널 @programacion에 참여하세요. 빠른 요약과 매일 새로운 콘텐츠를 제공합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기