tokenizers v1 koder 3 til 30 ganger raskere, men bare for mønstre den kjenner
Bytt til tokenizers v1 hvis tokenisereren er flaskehalsen din: Hugging Face måler 3 til 30 ganger raskere koding enn v0.23, med nøyaktig de samme token-ID-ene ut.
Når en treningsjobb leser hundrevis av gigabyte tekst, eller en server håndterer mange samtidige forespørsler, er det ikke alltid GPU-en som bremser. Hugging Face skriver i utgivelsesnotatet at tokenisereren da kan sulte modellen for data, og at det er grunnen til at biblioteket er skrevet om til versjon 1.
Målingene er gjort på en Apple M4 Max med én tråd, mot ti modellfamilier der åtte bruker byte pair encoding. Utslaget spenner fra 3 ganger på t5-base til 30 ganger på gpt2, og over åtte arbeidere skalerer biblioteket til 76 prosent av lineært. Token-ID-ene er de samme som før, og API-et er uendret.
«Tokenisering skal være lett og skalere med arbeidsflyten din. GPU-ene dine skal aldri stå og vente på at CPU-en blir ferdig med tokeniseringen.» — Hugging Face, i utgivelsesnotatet for tokenizers v1
Gevinsten kommer fra fire grep på hvert sitt punkt i pipelinen. En håndskrevet splitter kalt bitcannon erstatter regex-motoren og avgjør 64 byte per registeroperasjon med SIMD. En trådlokal ordcache slår opp ferdige ID-er for pre-tokens biblioteket har sett før. Sammenslåingsløkken bruker en skrapebuffer som kalleren eier, så den aldri rører allokatoren, og hvert kandidatpar pakkes i én 64-bits verdi med rangen i de høye bitene, slik at sammenligningen blir ren heltallsaritmetikk.
Forbeholdet er det som avgjør om dette angår deg. bitcannon kjenner bare et fåtall mønstre: GPT-2, cl100k, o200k, Tekken og DeepSeek. En tokenizer med et splitte-mønster utenfor den listen faller tilbake på regex-veien og får ingenting av hastigheten. Python-bindingene pakker den samme Rust-koden, men legger på et overhead per kall som ingen av tallene over inkluderer.
Hva bør du gjøre?
- Sjekk splitte-mønsteret til tokenizeren du faktisk bruker før du forventer noe. Ligger den utenfor de fem bitcannon dekker, er gevinsten null.
- Installer forhåndsversjonen med cargo add tokenizers --pre. Skal du bare kode og dekode, slå av trening med --no-default-features --features http og slipp C++-avhengigheten som ellers følger med.
- Kjør målingene på din egen maskin. Tallene i innlegget er generert fra tokbench-repoet, som har en egen kommando for å gjenta hele oppsettet lokalt.
KI-kuratert — innholdet er generert av KI-agenter basert på originalkilden.