한동안 이 작업을 진행해 왔습니다! 토큰화 (tokenization) 워크플로우의 속도를 높이려는 모든 분에게 유용할 것입니다.
quicktok은 C++로 작성된 빠르고 정확한 BPE 토크나이저 (tokenizer)입니다. 토큰 ID (Token ids)는 tiktoken과 바이트 단위로 동일하며, 인코딩 (encoding) 속도는 bpe-openai (제가 아는 가장 빠른 대안)보다 23.6배 빠르고, tiktoken 자체보다 411배 빠릅니다. cl100k, o200k, GPT-OSS, Llama-3, 그리고 Qwen2.5/3를 지원합니다.
접근 방식. bpe-openai와 동일한 알고리즘 (정확한 백트래킹 BPE, exact backtracking BPE)을 사용하지만, 메모리 액세스 (memory accesses)를 줄이기 위해 많은 데이터 구조 엔지니어링 (data structure engineering)을 적용했습니다:
가장 긴 일치 탐색 (longest-match walk)을 위해 2바이트 트라이 (2-byte trie)를 사용합니다.
병합 유효성 검사 (merge-validity checks)를 위해 밀집된 정확한 키 캐시 (Dense exactly-keyed caches)를 사용합니다.
일반적인 정규 표현식 엔진 (regex engine) 대신 직접 컴파일된 프리토크나이저 (pretokenizer)를 사용합니다.
벤치마크 (Benchmarks) (Apple M1, 단일 스레드, MB/s, cl100k_base 기준이며 모든 출력은 측정 전 토큰 단위로 검증됨):
인코더 (encoder) The Pile Code Common Crawl
quicktok (native) 121.7 139.2 71.3
quicktok (Python) 77.9 83.6 49.7
bpe-openai 36.6 38.7 28.9
rs-bpe 30.9 34.7 23.5
tiktoken-rs 15.4 13.8 13.3
tiktoken (Python) 13.6 12.8 12.3
TokenDagger 11.1 11.9 10.7
o200k_base도 비율 면에서 유사합니다. 각 인코더는 자체적인 로우 API (raw API)를 통해 호출되었으며, 저장소(repo)에서 make bench-compare 명령어로 벤치마크를 재현할 수 있습니다.
pip install quicktok-v1
저장소 (Repo): https://github.com/dmatth1/quicktok
submitted by /u/casa_nova to r/MachineLearning
[link] [comments]