GigaToken: 1000x 더 빠른 언어 모델 토큰화 달성

GigaToken: 1000x 더 빠른 언어 모델 토큰화 달성

GigaToken은 고성능 토큰화 라이브러리로, HuggingFace와 Tiktoken과의 드롭인 교체를 목표로 설계되었으며, 고급 CPU 하드웨어에서 최대 24 GB/s의 처리량을 달성합니다. 이는 대규모 데이터셋 처리 시간을 크게 줄여, 듀얼 소켓 AMD EPYC 시스템에서 약 6.5시간 이내에 전체 Common Crawl 데이터셋(약 130조 토큰)의 토큰화를 가능하게 할 수 있습니다.

기술 구현 및 성능 향상

// GigaToken은 토큰화 과정에서 가장 계산 비용이 높은 부분에 집중하여 속도를 달성합니다. 구체적으로 사전 토큰화와 캐싱입니다.

SIMD 및 사전 토큰화

대부분의 토크나이저는 사전 토큰화를 Regex 엔진에 아웃소싱합니다. GigaToken은 SIMD(Single Instruction, Multiple Data)를 사용하고 분기를 최소화한 altamente 최적화된 구현으로 이를 대체합니다. 이 접근 방식은 라이브러리가 x86 및 ARM 아키텍처 모두에서 바이트 수준에서 극도로 효율적으로 텍스트 데이터를 처리할 수 있게 합니다.

최적화된 캐시 계층 구조

사전 토큰 매핑 캐시는 사전 토큰 분포가 긴 꼬리 형태를 띠고 캐시가 빠르게 증가할 수 있기 때문에 성능 병목의 주요 원인입니다. GigaToken은 이전에 본 단어에 대한 인코딩된 토큰을 효율적으로 조회할 수 있는 특수화된 캐시 계층 구조를 구현하여 중복 계산을 줄입니다.

런타임 오버헤드 최소화

처리량을 최대화하기 위해 GigaToken은 Python 런타임과의 상호작용을 최소화하고 스레드 간 통신을 피합니다. 핵심 로직을 Rust로 구현하고 Rust 구현이 파일로부터 데이터를 직접 읽도록 함으로써 Python 데이터 구조를 전달하는 데 따른 오버헤드를 우회합니다.

벤치마크 및 하드웨어 성능

GigaToken의 성능 향상은 네이티브 API를 사용할 때 가장 두드러집니다. 이는 최대 병렬 처리와 직접 파일 읽기를 허용하기 때문입니다.

고성능 서버 하드웨어 (AMD EPYC 9565)

듀얼 소켓 144코어 AMD EPYC 9565 프로세서에서 GigaToken은 일반적인 토크나이저에 대해 다음과 같은 처리량을 달성합니다:

토크나이저 GigaToken 처리량 HuggingFace 대비
GPT-2 24.53 GB/s 989x
Phi-4 24.00 GB/s 801x
Llama 3 / 3.1 / 3.2 22.15 GB/s 457x
DeepSeek V3 / R1 / V4 19.69 GB/s 750x
Qwen 2 / 2.5 19.12 GB/s 19.12 GB/s

소비자 하드웨어 (Apple M4 Max)

16코어 Apple M4 Max에서 GigaToken은 유사한 규모의 속도 향상을 보여줍니다:

토크나이저 GigaToken 처리량 HuggingFace 대비
GPT-2 8.79 GB/s 1,268x
OLMo 2 / 3 7.56 GB/s 1,299x
Llama 3 / 3.1 / 3.2 7.60 GB/s 676x
Phi-4 7.76 GB/s 1,012x

데스크톱 하드웨어 (AMD Ryzen 7 9800X3D)

16코어 AMD Ryzen 7 9800X3D에서 처리량은 GPT-2 기준 6.27 GB/s에서 Gemma 3 기준 1.12 GB/s까지 범위를 보입니다.

사용법 및 호환성

GigaToken은 기존 워크플로에 통합하는 두 가지 주요 방법을 제공합니다:

호환 모드

이 모드는 GigaToken이 HuggingFace 또는 Tiktoken과의 드롭인 교체로 작동하도록 허용합니다. 정확한 출력 일치를 보장하지만, 호환성을 유지하는 오버헤드로 인해 성능 비용이 발생합니다. 사용자는 상당한 속도 향상을 기대할 수 있지만, 네이티브 API에서 보이는 전체 1000x gain은 달성하지 못합니다.

네이티브 GigaToken API

최대 성능을 위해 네이티브 API를 사용합니다. 이 API는 HuggingFace 모델 이름을 받아들이고、TextFileSource를 활용하여 Rust에서 데이터를 직접 읽어 Python 오버헤드를 건너뜁니다.

import gigatoken as gt

tokenizer = gt.Tokenizer("Qwen/Qwen3-8B
)
file_source = gt.TextFileSource(["owt_train.txt"], separator=b"<|endoftext|>
)
tokens = tokenizer.encode_files(file_source)

제한 사항 및 알려진 문제

BPE 토크나이저에 대해 altamente 최적화되었지만, GigaToken에는 몇 가지 알려진 제한 사항이 있습니다:

  • SentencePiece: SentencePiece 기반 모델(예: Google 모델 또는 BERT 스타일 모델)의 토큰화는 altamente 최적화되지 않아 처리량이 느려집니다.
  • WordPiece: WordPiece 토큰화는 아직 지원되지 않습니다.
  • OS Support: Windows 지원은 테스트되지 않았으며, Windows 사용 시 WSL을 권장합니다.
  • Python ABI: 현재 구현은 ABI3를 사용하며, 저자는 각 Python 버전에 특화하여 오버헤드가 제한된 경우의 속도를 두 배로 높일 계획입니다.

커뮤니티 토론

업계 전문가들은 토큰화가 일반적으로 총 추론 시간의 작은 비율(종종 <0.1%)을 차지한다고 지적하지만, 훈련 데이터의 대규모 사전 토큰화가 필요한 동일한 애플리케이션에서는 중요합니다.

"이것은 awesome하지만, 토큰화는 일반적으로 총 추론 시간의 <0.1%를 차지합니다. presumably 토큰화만 필요한 많은 애플리케이션이 존재하며, 이는 그런 경우에 매우 유용할 것입니다!"

Sources