gigatoken 소개
대규모 언어 모델을 학습할 때는 수십 기가바이트에서 수 테라바이트에 이르는 텍스트를 토큰으로 변환해야 합니다. 이 토큰화 단계는 GPU 학습만큼 눈에 띄지는 않지만, 데이터가 커질수록 전체 파이프라인에서 무시할 수 없는 시간을 차지합니다. HuggingFace tokenizers나 tiktoken이 이미 멀티스레드 Rust로 구현되어 있는데도, 대용량 코퍼스를 한 번 토큰화하는 데 상당한 시간이 드는 이유입니다.
gigatoken은 이 토큰화를 초당 기가바이트(GB/s) 단위로 처리하는 것을 목표로 하는 Rust 기반 토크나이저입니다. 개발자는 이를 "~1000x faster than HuggingFace's tokenizers, drop-in replacement" 라고 소개하며, 언어 모델링을 위한 가장 빠른 토크나이저라고 설명합니다. 다양한 CPU 하드웨어를 지원하고, 널리 쓰이는 대부분의 토크나이저와 호환됩니다.
gigatoken이 강조하는 점은 이것이 기존 도구를 완전히 대체하는 별개의 방식이 아니라 드롭인 교체(drop-in replacement) 라는 것입니다. 기존 HuggingFace나 tiktoken 코드에 최소한의 변경만으로 끼워 넣을 수 있고, 더 빠른 속도가 필요하면 gigatoken 고유 API로 전환할 수 있습니다.
gigatoken의 처리량
아래 그림은 Apple M4 Max(16 스레드) 에서 12GB 텍스트(owt_train.txt) 를 GPT-2 토크나이저로 처리했을 때의 처리량을 비교한 것입니다. gigatoken의 막대가 GB/s 단위인 반면, tiktoken과 HuggingFace tokenizers는 MB/s 단위에 머무릅니다.
저장소의 벤치마크는 같은 12GB 코퍼스를 여러 토크나이저와 CPU에서 측정한 수치를 함께 제공합니다. 아래는 AMD EPYC 9565(144 코어) 기준 일부 발췌입니다.
| 토크나이저 | gigatoken | HF tokenizers | HF 대비 |
|---|---|---|---|
| GPT-2 | 24.53 GB/s | 24.8 MB/s | 989× |
| Qwen 3 | 22.16 GB/s | 34.2 MB/s | 648× |
| Llama 3 / 3.1 / 3.2 | 22.15 GB/s | 48.5 MB/s | 457× |
| DeepSeek V3 / R1 | 19.69 GB/s | 26.2 MB/s | 750× |
| Gemma 3 | 3.43 GB/s | 357.2 MB/s | 9.6× |
수치에서 보이듯 배속은 토크나이저마다 크게 다릅니다. GPT-2 계열에서는 약 1000배에 가까운 차이가 나지만, Gemma 계열처럼 한 자릿수 배속에 머무는 경우도 있습니다. 배속 비교 대상인 HF tokenizers와 tiktoken 역시 이미 멀티스레드 Rust로 동작한다는 점을 함께 고려해서 읽는 것이 좋습니다.
gigatoken 설치 및 사용법
gigatoken은 pip로 설치합니다.
pip install gigatoken
가장 간단한 사용법은 호환 모드입니다. 기존 HuggingFace나 tiktoken 토크나이저를 감싸면, 원래 쓰던 것과 같은 방식으로 쓰면서 더 빠른 속도를 얻습니다.
import gigatoken as gt
# HuggingFace 호환 모드
tokenizer = gt.Tokenizer(hf_tokenizer).as_hf()
tokens = tokenizer.encode_batch(["This is a test string", "And here is another"])
# tiktoken 호환 모드
tokenizer = gt.Tokenizer(tiktokenizer).as_tiktoken()
tokens = tokenizer.encode_batch(["This is a test string", "And here is another"])
개발자는 호환 모드가 HuggingFace tokenizers와 출력을 정확히 일치시키는 데 상당한 공을 들였으며, 그 대신 일부 성능 손해가 있다고 밝힙니다. 최대 속도가 필요하면 gigatoken 고유 API로 파일을 직접 읽게 해 오버헤드를 줄입니다.
import gigatoken as gt
tokenizer = gt.Tokenizer("Qwen/Qwen3-8B") # HF 모델 이름을 그대로 받음
file_source = gt.TextFileSource(["owt_train.txt"], separator=b"<|endoftext|>")
tokens = tokenizer.encode_files(file_source)
이 방식은 Rust 구현이 데이터를 직접 읽어 병렬성을 최대한 활용합니다. 다만 파이썬 자료구조를 이 API로 넘기면 파이썬에서 읽어 오는 오버헤드는 여전히 발생합니다.
gigatoken의 라이선스
gigatoken은 MIT 라이선스로 공개되어 있어 개인 및 상업적 목적으로 자유롭게 사용할 수 있습니다.
gigatoken 프로젝트 GitHub 저장소
더 읽어보기
-
BLT(Byte Latent Transformer): 토큰화 대신 바이트 데이터를 직접 처리하는 아키텍처에 대한 연구 (feat. MetaAI)
-
LLM Internals: 토크나이저부터 Flash Attention까지, LLM 내부 구조를 단계별로 학습하는 오픈소스 교육 자료
이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. ![]()
파이토치 한국 사용자 모임
이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일
로 보내드립니다! 텔레그램(Telegram)이나 Slack/Discord/Teams/Dooray/GoogleChat 등으로도 새 글 알림을 받으실 수 있습니다. ![]()
아래
쪽에 좋아요
를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ ![]()

