Show HN: TokenDagger – A tokenizer faster than OpenAI's Tiktoken (github.com)
TokenDagger is a drop-in replacement for OpenAI’s Tiktoken (the tokenizer behind Llama 3, Mistral, GPT-3.*, etc.). It’s written in C++ 17 with thin Python bindings, keeps the exact same BPE vocab/special-token rules, and focuses on raw speed.
I’m teaching myself LLM internals by re-implementing the stack from first principles. Profiling TikToken’s Python/Rust implementation showed a lot of time was spent doing regex matching. Most of my perf gains come from a) using a faster jit-compiled regex engine; and b) simplifying the algorithm to forego regex matching special tokens at all.
Benchmarking code is included. Notable results show: - 4x faster code sample tokenization on a single thread. - 2-3x higher throughput when tested on a 1GB natural language text file.
25 comments
[ 3.1 ms ] story [ 46.3 ms ] threadScyllaDB comes to mind
Does that mean there could be cases with less quality in terms of tokenization?
Or maybe even your speedups from "b" in the pure js implementation
[1] https://crates.io/crates/bpe
The takeaway I also found was that the running cost was really dominated by pretokenization (the regex). It's cool to see that you found a faster way to run the regex, but have you tried comparing the performance of just swapping out the regex engine and leaving the actual BPE to tiktoken? I wonder if that is upstreamable?
https://github.com/openai/tiktoken/blob/main/src/lib.rs#L95-...
Haven't really spent much time looking at encode and decode but I plan to incorporate these regex modifications when I do!
https://github.com/justinhj/minbpe-cc