Cơ chế kiểm định chấp nhận/từ chối Speculative Decoding
Quy trình:
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ủ đề
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ểuTuple[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ế.
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.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
