[{"data":1,"prerenderedAt":4},["ShallowReactive",2],{"readme:gigatoken":3},"\u003Ch1>Gigatoken\u003C\u002Fh1>\n\u003Cdiv align=\"center\">\u003Cp>~1000x faster than HuggingFace's tokenizers, drop-in replacement.\u003C\u002Fp>\n\u003Cp>\u003Cem>Tokenize your text data at GB\u002Fs!\u003C\u002Fem>\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fmarcelroed\u002Fgigatoken\u002Fmain\u002Fassets\u002Fthroughput_owt_train_gpt-2.svg\" alt=\"GPT-2 Speedup\" \u002F>\u003C\u002Fp>\n\u003Cp>Note that both HF tokenizers and tiktoken are already running multithreaded Rust!\u003C\u002Fp>\n\u003C\u002Fdiv>\u003Ch2>What is Gigatoken?\u003C\u002Fh2>\n\u003Cp>Gigatoken is the fastest tokenizer for language modeling.\nIt supports a wide range of CPU hardware, and nearly all commonly used tokenizers.\nSee the \u003Ca href=\"#benchmarks\" rel=\"nofollow ugc noopener\">Benchmarks\u003C\u002Fa> section for detailed throughput numbers across tokenizers and CPUs.\u003C\u002Fp>\n\u003Ch2>Installation\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-bash\">pip install gigatoken\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>Usage\u003C\u002Fh2>\n\u003Cp>Gigatoken can be used with its own API, or in compatibility mode with HuggingFace Tokenizers or Tiktoken.\u003C\u002Fp>\n\u003Ch3>Compatibility Mode (Easiest)\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-python\">import gigatoken as gt\n\n# Minimum change from existing HuggingFace tokenizers usage (compatibility mode)\nhf_tokenizer = ...\ntokenizer = gt.Tokenizer(hf_tokenizer).as_hf()\n\n# tokenizer can be used in the same contexts as hf_tokenizer\ntokens = tokenizer.encode_batch([\"This is a test string\", \"And here is another\"])\n\n# OR with tiktoken\ntiktokenizer = ...\ntokenizer = gt.Tokenizer(tiktokenizer).as_tiktoken()\n\n# Now works like existing tiktoken tokenizers\ntokens = tokenizer.encode_batch([\"This is a test string\", \"And here is another\"])\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>A substantial amount of effort has been put into making sure the outputs match exactly with what you would get with HuggingFace Tokenizers in this setting, but this is at a non-negligible cost to performance.\nYou can still expect way faster performance across the board, but not quite the 1000x you will get with the Gigatoken API.\u003C\u002Fp>\n\u003Ch3>Gigatoken API (Fastest)\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-python\">import gigatoken as gt\n\ntokenizer = gt.Tokenizer(\"Qwen\u002FQwen3-8B\")  # Accepts HF model names\nfile_source = gt.TextFileSource([\"owt_train.txt\"], separator=b\"&lt;|endoftext|&gt;\")\ntokens = tokenizer.encode_files(file_source)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Using the Gigatoken API lets the Rust implementation read data directly, and skips as much overhead as possible while allowing for maximum parallelism.\nKeep in mind that passing Python data structures through this API still incurs the overhead of reading from Python.\u003C\u002Fp>\n\n\u003Ch2>Benchmarks\u003C\u002Fh2>\n\u003Cdetails open>\n\u003Csummary>\u003Cb>Encoding throughput on owt_train.txt (11.9 GB) — AMD EPYC 9565 72-Core Processor x 2 sockets (144 cores)\u003C\u002Fb>\u003C\u002Fsummary>\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Tokenizer\u003C\u002Fth>\n\u003Cth align=\"right\">gigatoken\u003C\u002Fth>\n\u003Cth align=\"right\">HF tokenizers\u003C\u002Fth>\n\u003Cth align=\"right\">tiktoken\u003C\u002Fth>\n\u003Cth align=\"right\">vs HF\u003C\u002Fth>\n\u003Cth align=\"right\">vs tiktoken\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>GPT-2\u003C\u002Ftd>\n\u003Ctd align=\"right\">24.53 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">24.8 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">36.0 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">989×\u003C\u002Ftd>\n\u003Ctd align=\"right\">681×\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Phi-4\u003C\u002Ftd>\n\u003Ctd align=\"right\">24.00 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">29.9 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">801×\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>GPT-OSS\u003C\u002Ftd>\n\u003Ctd align=\"right\">23.96 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">49.7 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">42.8 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">482×\u003C\u002Ftd>\n\u003Ctd align=\"right\">560×\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>OLMo 2 \u002F 3\u003C\u002Ftd>\n\u003Ctd align=\"right\">23.06 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">27.7 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">833×\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Nemotron 3\u003C\u002Ftd>\n\u003Ctd align=\"right\">22.79 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">49.4 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">462×\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Qwen 3\u003C\u002Ftd>\n\u003Ctd align=\"right\">22.16 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">34.2 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">648×\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Llama 3 \u002F 3.1 \u002F 3.2\u003C\u002Ftd>\n\u003Ctd align=\"right\">22.15 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">48.5 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">457×\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>GLM 5\u003C\u002Ftd>\n\u003Ctd align=\"right\">20.97 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">74.8 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">280×\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Llama 3.3\u003C\u002Ftd>\n\u003Ctd align=\"right\">20.82 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">48.3 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">431×\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Llama 4\u003C\u002Ftd>\n\u003Ctd align=\"right\">20.77 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">72.7 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">286×\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>GLM 4\u003C\u002Ftd>\n\u003Ctd align=\"right\">20.61 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">72.3 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">285×\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Phi-4-mini\u003C\u002Ftd>\n\u003Ctd align=\"right\">20.05 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">27.6 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">726×\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>DeepSeek V3 \u002F R1 \u002F V4\u003C\u002Ftd>\n\u003Ctd align=\"right\">19.69 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">26.2 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">750×\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Qwen 2 \u002F 2.5\u003C\u002Ftd>\n\u003Ctd align=\"right\">19.12 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">27.7 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">691×\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Kimi K2\u003C\u002Ftd>\n\u003Ctd align=\"right\">18.85 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Qwen 3.5 \u002F 3.6\u003C\u002Ftd>\n\u003Ctd align=\"right\">15.49 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">27.7 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">558×\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Gemma 4\u003C\u002Ftd>\n\u003Ctd align=\"right\">4.82 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">334.1 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">14×\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>ModernBERT\u003C\u002Ftd>\n\u003Ctd align=\"right\">4.18 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">26.9 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">155×\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Mistral 7B v0.3\u003C\u002Ftd>\n\u003Ctd align=\"right\">3.57 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">354.7 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">10×\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>TinyLlama \u002F Phi-3 (Llama 2)\u003C\u002Ftd>\n\u003Ctd align=\"right\">3.48 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">323.6 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">11×\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>CodeLlama\u003C\u002Ftd>\n\u003Ctd align=\"right\">3.47 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">347.4 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">10.0×\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Gemma 3\u003C\u002Ftd>\n\u003Ctd align=\"right\">3.43 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">357.2 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">9.6×\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Gemma 1\u003C\u002Ftd>\n\u003Ctd align=\"right\">2.51 GB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">342.2 MB\u002Fs\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003Ctd align=\"right\">7.3×\u003C\u002Ftd>\n\u003Ctd align=\"right\">—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003C\u002Fdetails>\n\u003Cdetails>\n\u003Csummary>\u003Cb>Encoding throughput on owt_train.txt (11.9 GB) — Apple M4 Max (16 cores)\u003C\u002Fb>\u003C\u002Fsummary>\u003Cp>| Tokenizer | gigatoken | HF tokenizers | tiktoken | vs HF | vs tiktoken |\n|---|---:\u003C\u002Fp>\n\u003C\u002Fdetails>",1785125871430]