- Mendukung beragam CPU dan tokenizer yang umum dipakai, serta menjadi alternatif untuk Tiktoken dan HuggingFace Tokenizers yang memproses teks pada skala GB/s
- Pra-tokenisasi yang biasanya ditangani mesin regex dioptimalkan dengan SIMD, sambil mengurangi percabangan, komunikasi antar-thread, dan interaksi Python, serta meng-cache pemetaan token untuk kata yang sudah pernah dilihat secara efisien
- Pada benchmark OpenWebText 11.9GB, throughput GPT-2 mencapai 24.53GB/s di AMD EPYC 9565, 8.79GB/s di Apple M4 Max, dan 6.27GB/s di Ryzen 7 9800X3D
- Mode kompatibel HuggingFace dan Tiktoken memungkinkan kode lama tetap hampir tidak berubah, tetapi performanya turun karena biaya penyamaan output; Gigatoken API yang membaca file langsung dari Rust memberi paralelisme maksimum dan kecepatan tertinggi
- WordPiece dan output ke file belum didukung, sementara optimasi SentencePiece dan verifikasi Windows masih kurang matang, sehingga saat ini lebih cocok untuk tokenizer BPE dan lingkungan Linux·macOS atau WSL
Cakupan dukungan dan cara penggunaan
- Gigatoken adalah tokenizer berkecepatan tinggi untuk model bahasa, ditujukan untuk CPU x86·ARM modern dan hampir semua tokenizer umum
- Instal dengan
pip install gigatokendan tersedia API sendiri serta mode kompatibel untuk HuggingFace Tokenizers dan Tiktoken - Mode kompatibel membungkus tokenizer yang ada dan mengubahnya dengan
.as_hf()atau.as_tiktoken()- Diterapkan cukup banyak penyesuaian agar outputnya benar-benar identik dengan HuggingFace Tokenizers
- Penanganan kompatibilitas punya biaya performa yang tidak bisa diabaikan, jadi tidak mencapai percepatan sekitar 1.000x seperti API asli, tetapi secara umum tetap lebih cepat daripada implementasi yang ada
- API aslinya menerima nama model HuggingFace seperti
"Qwen/Qwen3-8B"danTextFileSourceuntuk mengenkode file secara langsung- Implementasi Rust membaca data langsung sehingga melewati overhead yang tidak perlu dan memaksimalkan paralelisme
- Jika yang diberikan adalah struktur data Python, biaya pembacaan data di Python tetap ada
Implementasi yang meningkatkan kecepatan
- Peningkatan terbesar biasanya datang dari pengoptimalan langsung berbasis SIMD untuk pra-tokenisasi yang umumnya diserahkan ke mesin regex
- Percabangan diminimalkan, dan cache pemetaan pra-token untuk mencari token hasil encoding dari kata yang sudah pernah dilihat dioptimalkan secara intensif
- Cache cepat membesar dan distribusi pra-token berbentuk long-tail sehingga sulit ditangani
- Interaksi dengan Python dan komunikasi antar-thread dikurangi untuk memperoleh performa tambahan
- Implementasinya tidak disetel hanya untuk satu CPU atau satu tokenizer tertentu; kombinasi berbagai tokenizer dengan CPU x86·ARM modern dioptimalkan masing-masing, dan hasilnya juga konsisten di berbagai CPU dan tokenizer
Benchmark OpenWebText 11.9GB
- Pada lingkungan AMD EPYC 9565 144-core, throughput GPT-2 mencapai 24.53GB/s, yaitu 989x lebih cepat daripada 24.8MB/s milik HuggingFace Tokenizers dan 681x lebih cepat daripada 36.0MB/s milik Tiktoken
- Keluarga BPE utama umumnya mencatat sekitar 15.49~24.00GB/s
- Item berbasis SentencePiece relatif lebih lambat, sekitar 2.51~4.82GB/s
- Di Apple M4 Max 16-core, GPT-2 mencapai 8.79GB/s, yaitu 1.268x dibanding HuggingFace dan 140x dibanding Tiktoken
- OLMo 2/3 mencatat 1.299x dibanding HuggingFace, dan Qwen 2/2.5 mencatat 1.105x
- Di AMD Ryzen 7 9800X3D 16-core, GPT-2 mencapai 6.27GB/s, yaitu 106x dibanding HuggingFace dan 68x dibanding Tiktoken
- Keluarga BPE utama berada di kisaran 4.21~6.09GB/s, sedangkan keluarga yang relatif kurang dioptimalkan berada di kisaran 1.12~2.84GB/s
Kondisi pengukuran dan interpretasi
- OWT (OpenWebText) dipilih sebagai data benchmark karena dianggap cukup mewakili teks yang diperoleh setelah mengekstrak dokumen Common Crawl
- Gigatoken memproses tanpa membagi seluruh file terlebih dahulu, sehingga pencarian batas pemisahan dan paralelisasi otomatis juga ditangani sendiri
- Objek pembanding memproses data yang telah dibagi sebelumnya berdasarkan
<|endoftext|>- HuggingFace
encode_batch_fastmenggunakan 100MB pertama - Tiktoken
encode_ordinary_batchmenggunakan 1GB pertama - Karena kedua implementasi tidak melakukan caching dan kecepatan prosesnya cenderung tetap, kondisi perbandingan ini digunakan
- HuggingFace
- Hasil Tiktoken hanya disertakan untuk tokenizer yang didukung secara resmi
- Setiap baris mewakili satu tokenizer unik dengan vocabulary, merge, dan pra-tokenizer yang sama
- Berbagai versi dan model turunan dari keluarga Llama, Qwen, DeepSeek, GLM, Nemotron, Kimi, Phi, dan Gemma digabung dalam baris tokenizer yang sama
- Item yang paling lambat adalah tokenizer berbasis SentencePiece yang di Gigatoken belum cukup dioptimalkan
Verifikasi dukungan dan pemrosesan skala besar
- Tanpa instalasi, tokenisasi repositori model HuggingFace bisa diverifikasi dan diukur waktunya dengan perintah
uvx --with tokenizers gigatoken bench - Dalam contoh verifikasi GPT-2, output dari 20.401 dokumen cocok sepenuhnya
- Di Apple M4 Max, 11,920.51MB diproses dalam 1.432 detik pada 8,327.05MB/s, 1.353,13x lebih cepat daripada HuggingFace
- Di AMD EPYC 9565, data yang sama diproses dalam 0.486 detik pada 24,532.45MB/s, 989,21x lebih cepat
- Dengan laju pemrosesan EPYC, seluruh Common Crawl berskala 130 triliun token bisa ditokenisasi dalam kurang dari 6,5 jam
- Contohnya memakai sampel OWT Stanford CS336, dan CLI secara default menggunakan 100MB pertama file untuk verifikasi serta perbandingan dengan HuggingFace
- Pada eksekusi pertama di macOS, kode Rust bisa melambat karena pemeriksaan keamanan, jadi untuk pengukuran yang akurat perintah mungkin perlu dijalankan dua kali
- Ketidakcocokan output atau kasus lambat diminta untuk dilaporkan melalui GitHub Issue
Batasan yang diketahui
- Pemrosesan iterasi Python dilakukan di Rust, tetapi menggunakan ABI3 yang lebih lambat daripada API internal CPython per versi
- Ada rencana spesialisasi per versi Python, dan dalam eksperimen awal kasus yang didominasi overhead menjadi 2x lebih cepat
- File output sink belum diimplementasikan di Gigatoken API
- WordPiece tidak didukung
- Tokenisasi berbasis SentencePiece memiliki tingkat optimasi yang lebih rendah daripada BPE umum
- Prioritasnya saat ini juga rendah karena terutama digunakan oleh model Google dan keluarga BERT
- Pengujian Windows belum memadai, sehingga saat ini disarankan memakai WSL
Cakupan penggunaan AI
- Sebagian besar codebase ditulis langsung tanpa AI, dan hal ini bisa dikonfirmasi lewat riwayat Git proyek
- Pada tahap akhir proyek, AI digunakan untuk tugas berikut
- Implementasi API untuk pengguna
- Generalisasi·porting pra-tokenizer dan perluasan kompatibilitas untuk lebih banyak tokenizer
- Dukungan padding, truncation, dan normalisasi Unicode
- Porting strategi SIMD di antara AVX512·AVX2·NEON
- Sekitar peningkatan performa 4x terakhir melalui penghapusan percabangan dan perbaikan hierarki cache pra-token
- Refactoring dan peningkatan reuse kode
1 komentar
Opini Hacker News
Katanya, “sebagian besar kode ditulis langsung tanpa AI, dan itu bisa diverifikasi di riwayat Git”, jadi klaim pemrograman manusia sudah berakhir terasa jadi tidak meyakinkan
Ini bukan sekadar dioptimalkan berlebihan untuk satu CPU dan satu tokenizer tertentu, melainkan untuk seluruh kombinasi x86·ARM modern dan berbagai tokenizer agar menghasilkan performa yang konsisten
Pra-tokenisasi yang biasanya diserahkan ke regex engine dioptimalkan langsung dengan SIMD sambil meminimalkan percabangan, dan cache pemetaan pra-token juga diperbaiki agar hasil encoding untuk kata yang sudah pernah dilihat bisa ditemukan dengan cepat. Cache di bidang ini cepat membesar dan ekor distribusinya panjang, jadi sulit ditangani
Interaksi dengan Python dan komunikasi antarthread juga diminimalkan
Mengingatkan pada simdjson, yang menghasilkan kecepatan yang sulit dipercaya lewat pemrograman kreatif. Kalau dipakai luas, ini bisa sangat mengurangi listrik·biaya·emisi karbon, jadi akan bagus kalau ada crate Rust juga, dan kalau perlu saya ingin ikut membantu
Jika memikirkan efisiensi ekonomi dan lingkungan, batching request memberi dampak yang jauh lebih besar. Masalah termahal adalah turunnya utilisasi GPU, dan jika pekerjaan disesuaikan ke bentuk batch, bahkan di OAI saat ini bisa menghemat 50%. Jika tidak semua jawaban harus langsung tersedia, sebagian bisa menunggu beberapa hari, tool call tidak mengalami timeout, dan bagi LLM sendiri tidak ada waktu dinding
Saya meng-clone repositorinya dan melihat-lihat, dan penggantian regex pra-tokenisasi serta optimasi cache adalah pendekatan yang berguna secara umum. Ini pekerjaan yang sangat bagus sampai-sampai seluruh komunitas tokenisasi pasti ingin belajar rahasia peningkatan kecepatan seperti ini
Hasil yang keren, tapi tokenisasi biasanya kurang dari 0,1% dari total waktu inferensi. Meski begitu, ini akan sangat berguna untuk aplikasi yang memang membutuhkan tokenisasi itu sendiri
Efeknya makin besar pada model kecil atau GPU yang lebih cepat, dan perlu validasi tambahan sebelum dimasukkan ke README. Sumber benchmark-nya adalah fastokens
Sumber: https://www.gartner.com/en/newsroom/press-releases/2026-07-2...
Ini tampak lebih berguna untuk persiapan data pra-pelatihan offline daripada saat inferensi. Saat menokenisasi teks berukuran beberapa terabyte untuk korpus pelatihan, ini bisa menghemat waktu dan biaya, sekaligus mempersingkat siklus iterasi saat menyesuaikan dataset
Mencurahkan kemampuan rekayasa untuk membuat bagian yang hanya mengambil 0,1% dari total waktu eksekusi menjadi 1.000 kali lebih cepat justru terasa seperti perilaku paling khas seorang pengembang perangkat lunak
https://x.com/mitchellh/status/2074225453217505494
LLM jauh lebih dekat ke batas peningkatan 1.000 kali, tetapi operasi dasar PyTorch pun sering 2 kali lebih lambat daripada penulisan ulang sederhana, dan algoritme penjadwalan yang lebih baik kadang memberi peningkatan 5~10 kali. Tokenisasi cepat juga bisa membuka fitur lain yang selama ini diabaikan karena dianggap mustahil diwujudkan
Performanya sulit dipercaya sampai saya harus menatap angka-angka di grafik cukup lama untuk memahaminya
Ini juga tepat fungsi yang dibutuhkan ClickHouse, jadi akan dicoba di https://github.com/ClickHouse/ClickHouse/issues/108247
Akan lebih baik kalau README lebih menekankan performa per core, dan saya penasaran apakah pencocokan perfect hash table akan membantu algoritme nyatanya
Jadi penasaran, di bagian lain dari pipeline inferensi masih ada berapa banyak peluang optimasi 1.000 kali yang tersisa