ai-215Đọc toàn bộ đề miễn phí

Cơ chế kiểm định chấp nhận/từ chối Speculative Decoding

Quy trình:

AINâng cao30 phút

Tiến độ của tôi ở bài này

Điểm được lưu vào tài khoản sau khi chấm bài.

Đang tải điểm của bạn…

Kiến thức và chủ đề

speculative-decodingrejection-samplinginference-accelerationllm-serving

Kiến thức tiên quyết: next-token-probability-distribution, temperature-scaled-sampling.

Nội dung đề bài

Mô tả bài toán

Speculative Decoding (Leviathan et al., 2023 / Chen et al., 2023) là kỹ thuật đột phá giúp tăng tốc suy luận LLM gấp 2–3 lần mà bảo toàn 100% phân phối đầu ra của mô hình lớn:

Quy trình:

  • Mô hình nhỏ (Draft Model Q) sinh nhanh K token nháp: [x1, x2, …, xK].
  • Mô hình lớn (Target Model P) chạy song song trong một forward pass duy nhất để tính phân phối xác suất tại từng vị trí: p1, p2, …, pK.
  • Cơ chế kiểm định (Rejection Sampling):
  • Tại mỗi vị trí i ∈ {1, …, K}, xét token nháp xi:
  • Tỷ lệ chấp nhận: α = min(1.0, pi(xi)qi(xi)).
  • Sinh biến ngẫu nhiên ri ∼ U(0, 1). Nếu ri < α: Chấp nhận xi và xét tiếp vị trí i+1.
  • Nếu ri ≥ α: Từ chối xi. Dừng kiểm tra nháp và lấy mẫu token thay thế từ phân phối hiệu chỉnh:

p'i(v) = max(0, pi(v) - qi(v))∑w max(0, pi(w) - qi(w))

Hãy viết hàm verify_draft_sequence(draft_tokens: list[int], draft_probs: np.ndarray, target_probs: np.ndarray, random_uniforms: list[float]) -> tuple[list[int], int]:

  • draft_tokens: danh sách K token được sinh bởi draft model.
  • draft_probs: mảng 2D (K, V) chứa phân phối xác suất của draft model tại mỗi bước.
  • target_probs: mảng 2D (K, V) chứa phân phối xác suất của target model tại mỗi bước.
  • random_uniforms: danh sách K số ngẫu nhiên trong khoảng [0, 1) dùng cho kiểm định.
  • Trả về tuple (accepted_tokens, num_accepted):
  • accepted_tokens: danh sách các token được chấp nhận. Nếu có token bị từ chối, phần tử cuối cùng là token thay thế được chọn bằng argmax(p').
  • num_accepted: số lượng token nháp gốc được chấp nhận (0 ≤ num_accepted ≤ K).

Input

  • Hàm verify_draft_sequence(draft_tokens, draft_probs, target_probs, random_uniforms): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng.

Output

  • Hàm verify_draft_sequence: Trả về kết quả kiểu Tuple[List[int], int] theo đúng đặc tả kỹ thuật và kích thước quy định.

Ràng buộc

  • Thời gian chạy tối đa: 6000ms.
  • Giới hạn bộ nhớ: 512MB.
  • Dữ liệu đầu vào hợp lệ theo đúng kiểu dữ liệu và miền giá trị được mô tả.

Ví dụ 1

Input

draft_tokens = [1, 2]
draft_probs = np.array([[0.1, 0.6, 0.3], [0.2, 0.1, 0.7]])
target_probs = np.array([[0.1, 0.8, 0.1], [0.1, 0.1, 0.8]])
random_uniforms = [0.5, 0.5]
accepted, count = verify_draft_sequence(draft_tokens, draft_probs, target_probs, random_uniforms)

Output

([1, 2], 2)

Giải thích

Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.

Ví dụ 2

Input

draft_tokens = [0]
draft_probs = np.array([[0.9, 0.1]])
target_probs = np.array([[0.1, 0.9]])
random_uniforms = [0.5]
accepted, count = verify_draft_sequence(draft_tokens, draft_probs, target_probs, random_uniforms)

Output

([1], 0)

Giải thích

Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.