5 điểm bởi GN⁺ 2025-07-01 | 1 bình luận | Chia sẻ qua WhatsApp
  • Trình tokenizer hiệu năng cao tương thích 100% với TikToken của OpenAI, cung cấp thông lượng cao hơn hơn 2 lần và tốc độ token hóa mã nhanh hơn 4 lần khi xử lý văn bản quy mô lớn
  • Công cụ phân tích cú pháp biểu thức chính quy tốc độ cao dựa trên PCRE2 giúp tối đa hóa tốc độ khớp mẫu token
  • Thuật toán BPE được đơn giản hóa giúp giảm thiểu suy giảm hiệu năng khi xử lý số lượng lớn special token
  • Trong benchmark thực tế, token hóa mã nhanh hơn hơn 4 lần, và có thể thay thế trực tiếp mã đang dùng TikToken hiện có để sử dụng
  • Hỗ trợ Python 3.8+, có thể cài đặt đơn giản qua PyPI bằng pip install tokendagger và phụ thuộc vào PCRE2

1 bình luận

 
GN⁺ 2025-07-01
Ý kiến trên Hacker News
  • Tôi nghĩ trong ngắn hạn vẫn còn rất nhiều dư địa tối ưu hiệu năng trong hạ tầng AI/ML bằng cách xử lý các nút thắt cổ chai cốt lõi bằng C++, không phải viết lại toàn bộ bằng C++, mà những đánh đổi kỹ thuật thông minh thường thực sự dẫn tới cải thiện hiệu năng, đặc biệt tôi có cảm giác các kỹ sư Trung Quốc làm kiểu việc này rất giỏi
    • Người cố vấn của tôi từng dạy một góc nhìn về phát triển phần mềm như sau: bước 1 là làm cho nó chạy được, bước 2 là làm cho nó nhanh, bước 3 là làm cho nó đẹp; transformer và LLM giờ đã tới giai đoạn khá “chạy được” rồi, nên tôi có cảm giác đây là thời điểm các tiến bộ lớn nhất đang diễn ra ở phía cải thiện hiệu năng
    • Về dài hạn, tôi nghĩ việc rời xa trọng tâm Python sẽ có ý nghĩa, nếu chỉ dùng vì các kỹ sư ML đã quen thì không thực sự mang tính hướng tới tương lai
    • Thực ra TikToken được viết bằng Rust, nên tôi cũng tò mò liệu cải tiến lần này có thực sự đến từ việc chuyển sang C++ hay không
    • Thực tế tokenizing không phải là nút thắt lớn nhất, và phần lớn tính toán xảy ra ở việc chạy các CUDA kernel thực sự, overhead của Python là rất nhỏ (VLLM cũng chủ yếu được viết bằng Python), nên viết lại bằng C++ gần như luôn có nghĩa là viết lại CUDA kernel sao cho hiệu quả hơn
  • Tôi thấy việc tạo ra một bản thay thế drop-in cho hệ thống hiện có mà vẫn cải thiện hiệu năng đáng kể là một điều rất đẹp, làm tôi nghĩ tới ScyllaDB
    • Thực ra nếu không phải kiểu thay thế như vậy thì tôi nghĩ sẽ chẳng ai dùng
  • Tôi tò mò tokenizer quan trọng tới mức nào đối với hiệu năng tổng thể của LLM, tôi có quan tâm tới tối ưu tokenizer nhưng vẫn chưa tự đo đạc, tôi đoán phần lớn chi phí đến từ matmul, nhưng nhìn phản hồi trong phần bình luận thì có vẻ tokenizer cũng đáng kể
    • Tokenizing thường được xử lý trên CPU và hiếm khi trở thành nút thắt trong training hay inference, phần lớn thời gian nằm ở GPU kernel và chỉ những mô hình rất nhỏ mới là ngoại lệ, độ trễ của tokenizer cũng có thể được “che giấu” bằng cách để CPU chuẩn bị batch tiếp theo
    • Hiệu năng tokenizing hơi phức tạp, nhưng các tổ chức thực sự có năng lực và tài nguyên thì thường tự viết tokenizer cực nhanh, SentencePiece và tiktoken là ví dụ điển hình cho việc chấp nhận độ phức tạp và gánh nặng triển khai để đổi lấy điều đó, các chuyên gia thực sự sẽ dùng flame graph để xem nút thắt, trong các lần chạy quy mô lớn thì đôi khi còn tokenizing trước, và tôi cũng cảm nhận được sự căng thẳng trong ngành khi C++ đang nổi lên trở lại, trái với câu chuyện về Rust, mong là có thêm lý do hoặc góc nhìn mới
    • Cũng như các bình luận khác, trên thực tế tokenizer không phải nút thắt, chỉ là đây là bước đầu tiên trong pipeline suy luận nên người ta làm trước thôi
    • Tokenizing văn bản thực sự chỉ chiếm một phần rất nhỏ trong toàn bộ tính toán, nhưng khi xử lý dữ liệu ở quy mô petabyte thì chỉ cần nhanh hơn một chút cũng luôn là điều tốt
  • Để khớp với tiktoken thì cần chuyển đổi định dạng vocab, nếu yêu cầu này cũng được loại bỏ thì nó sẽ là một bản thay thế drop-in hoàn toàn tương thích và dùng sẽ tiện hơn, ngoài ra cũng sẽ hay nếu có ví dụ hai chiều cho phép khởi tạo tiktoken rồi khởi tạo tokendagger để kiểm tra xem kết quả có giống nhau không
    • Từ phiên bản 0.1.1 thì nó đã trở thành bản thay thế drop-in thực sự, và chúng tôi dự định sớm bổ sung ví dụ
    • Bạn nêu đúng trọng tâm nên tôi đã cập nhật ngay
  • Tôi cũng tò mò dự án này so với BPE crate như thế nào, điểm mạnh của crate đó là có thể retokenize văn bản theo kiểu tăng dần và nhanh hơn tiktoken
    • Tiếp theo tôi định thêm tính năng retokenize tăng dần và cũng sẽ benchmark với crate đó
  • Tôi muốn biết có cách nào lấy tokenizer cục bộ cho các LLM khác không, ví dụ Gemini chỉ công khai API từ xa, tôi không rõ đây có phải thứ độc quyền hay có cách suy ra ánh xạ token bằng cách gọi API hàng loạt hay không
    • Gemini dùng SentencePiece và chia sẻ cùng tokenizer vocabulary với Gemma (tham chiếu1, tham chiếu2, tham chiếu3), trong các phòng lab lớn thì chỉ Anthropic dùng Claude 3 trở lên là không có tokenizer cục bộ
    • Tokenizer theo từng mô hình phần lớn dùng chung các thuật toán lõi như SentencePiece hoặc Byte-pair encoding (BPE), chỉ khác ở tầng wrapper như xử lý special token, tiktoken và TokenDagger cũng là các triển khai BPE, nếu thư viện phản ánh được các đặc điểm theo từng mô hình thì sẽ có chút cải thiện hiệu năng và tích hợp cũng dễ hơn, đây không phải việc lớn nên việc theo kịp các mô hình mới cũng không quá nặng nề, ví dụ tham khảo là tokenizer.py của llama, tokenizer của Mistral
    • Tôi cũng biết Gemini dùng SentencePiece SentencePiece
  • Tôi từng thử làm thứ tương tự trước đây: tokie, trên thực tế phần lớn chi phí khi chạy tokenizer đến từ pre-tokenizing (regex), có vẻ bạn đã tìm ra một cách regex nhanh hơn, nên tôi tò mò liệu bạn có thử so sánh thay đổi hiệu năng trong trường hợp chỉ thay regex engine còn BPE vẫn giữ nguyên như tiktoken không, nếu có thì biết đâu còn có thể đóng góp upstream
    • Dự án rất tuyệt, tôi đã liên hệ với người quản lý tiktoken rồi
  • Tôi cũng muốn thấy so sánh hiệu năng với Huggingface tokenizers, benchmark trong readme của tiktoken theo tôi là thông tin quá cũ rồi
    • Cá nhân tôi thấy tiktoken luôn chậm hơn huggingface tokenizers, dù tôi vẫn chưa đào sâu để biết vì sao, nhưng với tư cách người dùng tokenizer Rust của HF thì tôi có cảm giác như vậy
  • Tôi cũng muốn thấy WASM binding cho tiktoken, hoặc tò mò không biết các cải thiện hiệu năng từ “b” có thể áp dụng cho bản triển khai thuần js hay không
  • Dự án thực sự rất tuyệt, bên tôi cũng đang dùng tiktoken, nếu vừa tương thích drop-in vừa cải thiện hiệu năng thì tôi rất tò mò tác động sẽ ra sao, lựa chọn theo hướng drop-in là rất xuất sắc