Tôi đã Benchmark Speculative Decoding — a = 3.5 là chưa đủ
Speculative Decoding (SD) dựa trên một quy tắc toán học đơn giản: a > 1 + α + β
Độ dài chấp nhận (a) phải lớn hơn 1 cộng với tỷ lệ tính toán (α) và chi phí xác thực bổ sung (β). Nếu đạt được, SD sẽ hiệu quả. Nếu không, nó sẽ thất bại.
Tôi đã kiểm chứng lý thuyết này trên một máy thực tế. Tôi sử dụng CPU Intel thế hệ thứ 12 với 64GB RAM. Tôi đã kết hợp một mô hình draft nhỏ Qwen2.5-0.5B với một mô hình target lớn hơn Qwen2.5-1.5B.
Kết quả thật đáng ngạc nhiên. SD chậm hơn từ 49% đến 62% so với việc tạo văn bản thông thường (raw generation).
Dưới đây là sự thay đổi của độ dài chấp nhận (a) theo từng tác vụ:
• JSON (Cấu trúc): a = 3.50. Mô hình draft dự đoán định dạng rất tốt. • Code (Bán cấu trúc): a = 3.00. Khá tốt, nhưng các mẫu đặt tên có sự thay đổi. • Story (Sáng tạo): a = 2.11. Mô hình draft gặp khó khăn trong việc lựa chọn từ ngữ.
Ngay cả khi "a" ở mức cao, SD vẫn thất bại trên CPU. Tại sao?
Vấn đề lớn nhất là tỷ lệ chấp nhận bằng không (zero-accept rate). Có khoảng 15% đến 30% số vòng lặp không chấp nhận được token nào.
Trong những vòng này, mô hình draft vẫn chạy, mô hình target vẫn xác thực, nhưng bạn chẳng nhận được gì mới. Bạn đã phải trả chi phí cho hai lần chạy chỉ để lấy được một token. Điều này khiến SD tốn kém gấp đôi cho cùng một kết quả đầu ra.
Điều này làm nổi bật lý do tại sao SD là một sự tối ưu hóa dành cho GPU.
Trên GPU, mô hình draft gần như không tốn kém. Tỷ lệ tính toán (α) là cực kỳ nhỏ. Trên CPU, mô hình draft phải cạnh tranh băng thông bộ nhớ. Nó không hề miễn phí. Bất đẳng thức này bị phá vỡ trên CPU.
Nếu bạn định dùng SD trên CPU, đừng làm vậy. Các con số không cho thấy hiệu quả.
Những lưu ý quan trọng cho việc triển khai của bạn:
- Hãy tự đo lường giá trị "a" của riêng bạn. Đừng tin vào những tuyên bố của nhà cung cấp.
- Phân loại dữ liệu theo loại tác vụ. Code và chat có tỷ lệ chấp nhận khác nhau.
- Theo dõi tỷ lệ chấp nhận bằng không. Sự biến động cao sẽ phá hủy độ trễ p99 của bạn.
- Sử dụng SD trên GPU, nơi mà chi phí cho mô hình draft là tối thiểu.
Sự tối ưu hóa tốt nhất chính là biết khi nào nên tắt nó đi.
Source: https://dev.to/zxpmail/i-benchmarked-speculative-decoding-a-35-wasnt-enough-1geb
Optional learning community: https://t.me/GyaanSetuAi
