5 poin oleh GN⁺ 2025-07-01 | 1 komentar | Bagikan ke WhatsApp
  • Tokenizer berperforma tinggi yang 100% kompatibel dengan TikToken milik OpenAI, menawarkan throughput lebih dari 2x dan kecepatan tokenisasi kode 4x lebih cepat untuk pemrosesan teks skala besar
  • Melalui mesin parsing regular expression berkecepatan tinggi berbasis PCRE2, kecepatan pencocokan pola token dimaksimalkan
  • Dengan algoritme BPE yang disederhanakan, penurunan performa saat menangani special token dalam jumlah besar diminimalkan
  • Pada benchmark nyata, tokenisasi kode lebih dari 4x lebih cepat, dan dapat digunakan sebagai pengganti langsung untuk kode yang sebelumnya memakai TikToken
  • Mendukung Python 3.8+, mudah dipasang melalui PyPI dengan pip install tokendagger, dan memiliki dependensi pada PCRE2

1 komentar

 
GN⁺ 2025-07-01
Opini Hacker News
  • Dalam jangka pendek, tampaknya masih ada banyak ruang untuk optimasi performa di struktur infrastruktur AI/ML dengan cara menyelesaikan bottleneck inti seperti ini memakai C++, bukan menulis ulang semuanya ke C++, tetapi trade-off rekayasa yang cerdas sering kali benar-benar menghasilkan peningkatan performa, terutama rasanya para engineer Tiongkok sangat mahir dalam pekerjaan seperti ini
    • Ada sudut pandang tentang pengembangan perangkat lunak yang diajarkan mentor saya: tahap 1 buat dulu agar berjalan, tahap 2 buat cepat, tahap 3 buat indah, dan transformer serta LLM sekarang sudah sampai pada tahap cukup berjalan dengan baik, jadi rasanya ini memang periode ketika kemajuan terbesar terjadi di sisi peningkatan performa
    • Dalam jangka panjang, menurut saya ada artinya untuk menjauh dari pendekatan yang berpusat pada Python, jika dipakai hanya karena para ML engineer terbiasa dengannya maka itu tidak terlalu berorientasi ke masa depan
    • Sebenarnya TikToken ditulis dalam Rust, jadi saya penasaran apakah peningkatan kali ini benar-benar berkat porting ke C++
    • Faktanya tokenisasi bukan bottleneck terbesar, dan sebagian besar komputasi terjadi saat eksekusi kernel CUDA yang sebenarnya, overhead Python sangat kecil (VLLM juga sebagian besar ditulis dengan Python), menulis ulang ke C++ hampir selalu berarti menulis ulang kernel CUDA agar lebih efisien
  • Menurut saya ada sesuatu yang sangat indah dalam membuat sistem yang sudah ada menjadi pengganti drop-in dengan peningkatan performa besar, ini mengingatkan saya pada ScyllaDB
    • Sebenarnya kalau bukan pengganti seperti ini, saya rasa tidak akan ada yang memakainya
  • Saya penasaran seberapa penting tokenizer dalam performa keseluruhan LLM, saya tertarik pada optimasi tokenizer tetapi belum benar-benar mengukurnya, saya mengira sebagian besar biaya datang dari matmul, tetapi melihat respons komentar, tokenizer tampaknya memang berarti
    • Tokenisasi biasanya diproses di CPU dan jarang menjadi bottleneck untuk training atau inferensi, sebagian besar waktu dipakai di kernel GPU dan hanya model yang sangat kecil yang menjadi pengecualian, latensi tokenizer juga bisa “disembunyikan” lewat cara CPU menyiapkan batch berikutnya
    • Performa tokenisasi agak rumit, tetapi organisasi yang benar-benar punya kemampuan dan sumber daya biasanya menulis tokenizer sangat cepat sendiri, SentencePiece dan tiktoken adalah contoh yang tetap dipilih meskipun kompleksitas dan beban distribusinya tinggi, para praktisi sungguhan memeriksa bottleneck lewat flame graph, dan pada pelatihan skala besar tokenisasi kadang dilakukan terlebih dahulu, juga terasa ada ketegangan industri soal C++ yang kembali naik daun, berbeda dengan narasi Rust, saya berharap ada alasan atau insight baru di balik ini
    • Seperti komentar-komentar lain, tokenizer memang bukan bottleneck sebenarnya, hanya saja ini tahap pertama dalam pipeline inferensi sehingga dikerjakan lebih dulu
    • Tokenisasi teks benar-benar hanya mengambil porsi sangat kecil dari keseluruhan komputasi, tetapi untuk pemrosesan data skala petabyte, sedikit lebih cepat pun tetap selalu baik
  • Untuk menyamai tiktoken perlu konversi format vocab, dan kalau kebutuhan ini juga bisa dihilangkan maka ini akan jadi pengganti drop-in yang sepenuhnya kompatibel dan lebih enak dipakai, juga akan bagus kalau ada contoh dua arah yang menginisialisasi tokendagger setelah tiktoken untuk memeriksa apakah hasilnya sama
    • Sejak versi 0.1.1 ini sudah menjadi pengganti drop-in yang sesungguhnya, dan kami berencana segera menambahkan contohnya
    • Poinnya sangat tepat jadi kami langsung memperbaruinya
  • Saya juga penasaran bagaimana proyek ini dibandingkan dengan BPE crate, kekuatan crate tersebut adalah kemampuan melakukan retokenisasi teks secara inkremental dan lebih cepat daripada tiktoken
    • Selanjutnya kami berencana menambahkan fitur retokenisasi inkremental dan juga melakukan benchmark dengan crate tersebut
  • Saya penasaran bagaimana cara mendapatkan tokenizer lokal untuk LLM lain, misalnya Gemini hanya membuka API jarak jauh, apakah ini sesuatu yang proprietari atau adakah cara menebak pemetaan token dengan memanggil API dalam jumlah besar
    • Gemini menggunakan SentencePiece dan berbagi tokenizer vocabulary yang sama dengan Gemma (referensi1, referensi2, referensi3), di antara lab besar hanya Anthropic yang memakai Claude 3 ke atas yang tidak punya tokenizer lokal
    • Tokenizer per model umumnya berbagi algoritme inti seperti SentencePiece atau Byte-pair encoding(BPE), sementara perbedaannya kebanyakan hanya di tingkat wrapper seperti penanganan token khusus, tiktoken dan TokenDagger juga merupakan implementasi BPE, jika karakteristik khusus per model dicerminkan di tingkat library maka bisa ada sedikit peningkatan performa dan integrasi jadi lebih mudah, ini bukan pekerjaan besar jadi bebannya juga kecil untuk menyesuaikan dengan model baru, contoh referensi: tokenizer.py milik llama, tokenizer Mistral
    • Saya memang tahu Gemini memakai SentencePiece SentencePiece
  • Saya pernah mencoba hal serupa sebelumnya: tokie, pada praktiknya sebagian besar biaya eksekusi tokenizer berasal dari pre-tokenizing(regex), tampaknya mereka menemukan pendekatan regex yang lebih cepat, jadi saya penasaran apakah mereka juga membandingkan perubahan performa ketika hanya mengganti mesin regex sementara BPE tetap memakai tiktoken apa adanya, kalau begitu mungkin kontribusi upstream juga memungkinkan
    • Proyek yang keren, kami sudah menghubungi pengelola tiktoken
  • Saya juga ingin ada perbandingan performa dengan Huggingface tokenizers, benchmark berdasarkan readme tiktoken sudah terlalu lama
    • Secara pribadi tiktoken selalu terasa lebih lambat daripada huggingface tokenizers, saya belum menyelami tiktoken cukup dalam untuk tahu alasannya, tetapi sebagai pengguna tokenizer Rust milik HF, begitulah kesan saya
  • Saya juga ingin melihat binding WASM untuk tiktoken, atau setidaknya penasaran apakah peningkatan performa dari "b" pada implementasi JS murni juga bisa diterapkan
  • Proyek yang benar-benar keren, kami juga memakai tiktoken, dan jika kompatibel secara drop-in sambil memberi peningkatan performa, saya penasaran seberapa besar efeknya, pilihan pendekatan drop-in ini sangat bagus