5 puan yazan GN⁺ 2025-07-01 | 1 yorum | WhatsApp'ta paylaş
  • OpenAI'nin TikToken'ı ile %100 uyumlu yüksek performanslı bir tokenizer olup, büyük ölçekli metin işlemede 2 kattan fazla throughput ve kod tokenizasyonunda 4 kat daha hızlı hız sunar
  • PCRE2 tabanlı yüksek hızlı düzenli ifade ayrıştırma motoru sayesinde token desen eşleme hızı en üst düzeye çıkarılır
  • Basitleştirilmiş BPE algoritması ile çok sayıda özel token işlenirken performans düşüşü en aza indirilir
  • Gerçek benchmark'larda kod tokenizasyonu 4 kattan fazla daha hızlıdır ve mevcut TikToken kullanan kodlar doğrudan değiştirilmeden yerine kullanılabilir
  • Python 3.8+ destekler, PyPI üzerinden pip install tokendagger ile kolayca kurulabilir ve PCRE2 bağımlılığı vardır

1 yorum

 
GN⁺ 2025-07-01
Hacker News görüşleri
  • Kısa vadede AI/ML altyapı yığınında, bu örnekte olduğu gibi temel darboğazları C++ ile çözerek yapılabilecek çok fazla performans optimizasyonu alanı olduğunu düşünüyorum; mesele her şeyi baştan sona C++ ile yeniden yazmak değil, akıllı mühendislik trade-off'larının çoğu zaman gerçek performans artışına dönüşmesi. Özellikle Çinli mühendislerin bu tür işlerde iyi olduğu hissi var
    • Mentorümün bana öğrettiği bir yazılım geliştirme bakış açısı vardı: 1. adım çalışsın, 2. adım hızlı olsun, 3. adım güzel olsun. Transformer'lar ve LLM'ler artık oldukça iyi çalışır hale geldi, bu yüzden şu an en büyük ilerlemenin performans iyileştirmeleri tarafında yaşandığı bir dönemdeyiz gibi geliyor
    • Uzun vadede Python merkezli yaklaşımdan uzaklaşmanın anlamlı olacağını düşünüyorum; sırf ML mühendisleri buna alışık diye kullanmak geleceğe dönük bir tercih değil
    • Aslında TikToken Rust ile yazılmış, bu yüzden bu iyileştirmenin gerçekten C++ portu sayesinde mi geldiğini merak ediyorum
    • Aslında tokenization en büyük darboğaz değil; hesaplamanın çoğu gerçek CUDA kernel çalıştırmasında oluyor. Python overhead'i çok düşük (vLLM de büyük ölçüde Python ile yazılmıştır). C++ ile yeniden yazmak neredeyse her zaman CUDA kernel'larını daha verimli biçimde yeniden yazmak anlamına gelir
  • Mevcut sistemin yerine geçebilen ve performansı ciddi biçimde artıran bir drop-in replacement üretmenin oldukça zarif bir iş olduğunu düşünüyorum; bana ScyllaDB'yi hatırlattı
    • Aslında böyle bir drop-in alternatif olmasa kimsenin kullanmayacağını düşünüyorum
  • Bir LLM'nin genel performansında tokenizer'ın ne kadar önemli olduğunu merak ediyorum. Tokenizer optimizasyonuyla ilgileniyorum ama henüz gerçek ölçüm yapmadım. Maliyetlerin çoğunun matmul kaynaklı olduğunu varsayıyordum, ama yorumlara bakınca tokenizer'ın da anlamlı bir etkisi var gibi görünüyor
    • Tokenization genelde CPU'da yapılır ve training ya da inference'ta darboğaz olması nadirdir; zamanın çoğu GPU kernel'larında harcanır ve sadece çok küçük modeller istisnadır. Tokenizer gecikmesi, CPU'nun bir sonraki batch'i hazırlaması sayesinde "gizlenebilir"
    • Tokenization performansı biraz karmaşık bir konu, ama gerçekten yetenek ve kaynağa sahip kurumlar çok hızlı tokenizer'ları kendileri yazar. SentencePiece ve tiktoken, karmaşıklık ve dağıtım yüküne rağmen bu yüzden tercih edilir. Gerçek uzmanlar darboğazları flame graph ile inceler; büyük ölçekli eğitimlerde önceden tokenization da yapılır. Ayrıca, Rust anlatısının aksine C++'ın yeniden yükselişe geçmesine dair sektörde bir gerilim hissi de var; umarım burada yeni bir gerekçe ya da içgörü vardır
    • Diğer yorumlarda da dendiği gibi tokenizer aslında gerçek darboğaz değil; sadece inference pipeline'ının ilk adımı olduğu için önce buna odaklanılmış
    • Metin tokenization'ı toplam hesaplamanın gerçekten çok küçük bir kısmını oluşturur. Yine de petabyte ölçeğinde veri işliyorsanız, biraz daha hızlı olması bile kesinlikle iyidir
  • tiktoken ile uyumlu olmak için vocab format dönüşümü gerekiyor, bu gereksinim de ortadan kalkarsa kullanımı daha da iyi olan tamamen uyumlu bir drop-in replacement olurdu. Ayrıca tiktoken'i başlatıp ardından tokendagger'ı başlatarak sonuçların aynı olduğunu doğrulayabilen iki yönlü bir örnek de olsa güzel olurdu
    • 0.1.1 sürümünden itibaren gerçek bir drop-in replacement oldu, yakında örnek de eklemeyi planlıyorum
    • Tam isabet bir noktaya değindin, hemen güncelledim
  • Bu projenin BPE crate ile kıyaslamasının nasıl olduğunu da merak ediyorum; o crate'in güçlü yanı metni artımlı olarak yeniden tokenize edebilmesi ve tiktoken'dan daha hızlı olması
    • Sonraki adımda artımlı retokenization özelliği eklemeyi ve o crate ile benchmark yapmayı planlıyorum
  • Diğer LLM'ler için yerel tokenizer bulmanın bir yolu var mı merak ediyorum. Örneğin Gemini yalnızca uzak API sunuyor. Bunun proprietery bir şey olup olmadığını ya da API'yi yoğun biçimde çağırarak token eşlemesini tahmin etmenin mümkün olup olmadığını merak ediyorum
    • Gemini, SentencePiece kullanıyor ve Gemma ile aynı tokenizer vocabulary'sini paylaşıyor (referans1, referans2, referans3); büyük laboratuvarlar arasında yalnızca Anthropic, Claude 3 ve sonrası için yerel tokenizer sunmuyor
    • Modele özgü tokenizer'lar çoğunlukla SentencePiece veya Byte-pair encoding (BPE) gibi temel algoritmaları paylaşır; fark genelde wrapper seviyesinde, özel token işleme gibi konulardadır. tiktoken ve TokenDagger da BPE uygulamalarıdır. Kütüphane düzeyinde modele özgü özellikler yansıtılırsa küçük performans kazanımları ve daha kolay entegrasyon sağlanabilir. Büyük bir iş değil, bu yüzden yeni modellere uyarlamak da çok zahmetli olmaz. Örnek için bkz. llama'nın tokenizer.py dosyası, Mistral tokenizer'ları
    • Gemini'nin SentencePiece kullandığını biliyordum SentencePiece
  • Geçmişte benzer bir şey denemiştim: tokie. Pratikte tokenizer çalışma maliyetinin büyük kısmı pre-tokenization'dan (regex) geliyor. Daha hızlı bir regex yaklaşımı bulmuş gibisin; gerçekten sadece regex engine'i değiştirip BPE'yi tiktoken ile aynı bıraktığında performansın nasıl değiştiğini de karşılaştırdın mı merak ediyorum. Öyleyse upstream katkı da mümkün olabilir
    • Harika bir proje, tiktoken'ı yöneten kişiye ulaştım
  • Huggingface tokenizers ile performans karşılaştırması da görmek isterdim; tiktoken readme'sindeki benchmark'a göre verilen bilgiler artık çok eski
    • Kendi deneyimimde tiktoken, huggingface tokenizers'dan hep daha yavaştı; nedenini henüz derinlemesine incelemedim ama HF Rust tokenizer kullanıcısı olarak hissim bu yönde
  • tiktoken için WASM binding'lerini de görmek isterdim; ya da saf JS implementasyonunda "b" tarafındaki performans artışlarının uygulanıp uygulanamayacağını merak ediyorum
  • Gerçekten harika bir proje; biz de tiktoken kullanıyoruz, drop-in uyumlulukla birlikte performans artışı geliyorsa etkisinin ne olacağını merak ediyorum. Drop-in yaklaşımını seçmeleri çok iyi olmuş