facts

초당 기가바이트(GB/s) 단위의 텍스트 처리를 지원하는 GigaToken이 공개됐다. 이 도구는 기존 허깅페이스(HuggingFace) 토크나이저 대비 최대 1000배 빠른 속도를 구현하며, 언어 모델 학습을 위한 데이터 전처리 단계의 병목을 줄이는 데 집중한다. AMD EPYC CPU 환경에서 측정했을 때, 약 130조 개의 토큰으로 구성된 커먼크롤(Common Crawl) 전체 데이터를 토큰화하는 데 소요되는 시간은 6.5시간 미만으로 확인됐다.

허깅페이스 토크나이저와 tiktoken을 대체하는 드롭인(Drop-in) 교체 방식으로 설계되어 기존 워크플로우에 즉시 적용할 수 있다. 운영 모드는 두 가지로 나뉜다. GigaToken 전용 API를 사용할 경우 Rust 구현체가 데이터를 직접 읽어 오버헤드를 최소화하고 병렬성을 극대화해 최대 성능을 낸다. 반면 허깅페이스나 tiktoken과의 호환 모드에서는 출력 결과의 정확한 일치를 보장하는 대신 성능 손실이 발생하며, 이 경우 전용 API만큼의 1000배 가속 효과는 기대하기 어렵다.

how-it-works

정규표현식(Regex) 엔진에 의존하던 전처리(Pretokenization) 과정을 SIMD(Single Instruction, Multiple Data)를 활용해 최적화한 것이 핵심이다. 분기(Branching)를 최소화하는 기법을 적용하고, 이전에 등장한 단어의 인코딩 토큰을 효율적으로 찾는 프리토큰 매핑 캐싱(Caching) 구조를 고도화했다. 특히 프리토큰 분포가 롱테일(Long-tail) 형태를 띠어 캐시 크기가 빠르게 증가하는 특성을 해결하는 데 집중했다. 또한 파이썬(Python)과의 상호작용을 줄이고 스레드 간 통신을 최소화해 처리 지연을 낮췄다.

성능 측정에는 커먼크롤 문서 추출 데이터와 유사한 OWT(OpenWebText) 데이터셋이 사용됐다. GigaToken은 파일을 분할하지 않고 전체를 인코딩하며 분할 경계를 자동으로 찾아 병렬화하는 방식을 취했다. 비교 대상인 허깅페이스의 `encode_batch_fast`는 첫 100MB를, tiktoken의 `encode_ordinary_batch`는 첫 1GB를 처리했으며 두 도구 모두 `<|endoftext|>` 기준으로 사전 분할된 상태에서 측정됐다. 벤치마크 결과는 최신 x86 및 ARM CPU 전반에서 일관되게 나타났다.

상대적으로 처리 속도가 낮은 구간은 SentencePiece 기반 토크나이저다. GigaToken 내에서 해당 구조에 대한 최적화가 충분히 이루어지지 않아 다른 토크나이저 대비 낮은 처리량을 보였다. 하지만 전반적인 처리 속도는 기존 Rust 기반 멀티스레드 구현체인 허깅페이스와 tiktoken을 상회하는 것으로 나타났다.

implementation-impact

별도의 설치 과정 없이 CLI 명령어로 특정 허깅페이스 모델 저장소의 토큰화 속도를 검증하고 시간을 측정할 수 있다.

bash
uvx gigatoken bench <model_repo>

실제 운영 환경에서 고려해야 할 제약은 데이터 전달 방식이다. GigaToken API를 사용하더라도 파이썬 데이터 구조를 통해 데이터를 전달하면 파이썬 읽기 오버헤드가 발생하므로, 최대 성능을 위해서는 Rust 구현체가 직접 데이터를 읽도록 구성해야 한다. macOS 환경에서는 첫 실행 시 보안 스캔으로 인해 Rust 코드 실행 속도가 저하될 수 있으므로, 정확한 벤치마크를 위해서는 두 번 이상 실행해 측정하는 것이 권장된다.

대규모 데이터셋을 구축하는 개발자는 기존 허깅페이스 토크나이저의 출력값과 100% 일치해야 하는 엄격한 검증 단계에서는 호환 모드를 사용하고, 단순 처리량 증대가 우선인 전처리 파이프라인에서는 전용 API로 전환해 인프라 비용과 시간을 절감하는 선택이 필요하다.