L2 · Inference engine
Lập lịch tính toán theo từng bước sinh token
Lập lịch theo từng vòng lặp của engine để gom các request đang chờ và đang sinh token vào chung đợt chạy GPU.
1Định nghĩa
Scheduler là bộ lập lịch nằm trong inference engine, quyết định những request nào được gom vào đợt tính toán (batch) ở mỗi bước chạy GPU. Thay vì khóa cứng cả batch cho tới khi câu dài nhất sinh xong (static batching), engine hiện đại dùng continuous batching để thêm request mới hoặc rút request đã xong ngay sau mỗi vòng lặp token.
Trước mỗi bước chạy, scheduler kiểm tra dung lượng KV cache còn trống trên bộ nhớ HBM, có thể cắt các prompt dài thành từng đoạn nhỏ (chunked prefill) để chạy xen kẽ với các chuỗi đang decode, rồi giao batch đó cho runtime thực thi.
Ví dụ đời thường: Scheduler giống như người điều hành xe cáp treo hoặc thang máy chở hàng thông minh. Thay vì đợi một đoàn khách đi hết hành trình rồi mới cho đoàn sau lên, cứ mỗi nhịp dừng ngắn người điều hành lại cho khách đã tới đích bước ra và ghép ngay khách mới đang chờ vào chỗ trống, miễn là tổng tải trọng cabin không vượt mức cho phép.
2Luồng
- Chờ được chọn
Request hợp lệ vào hàng đợi.
- Kiểm tra token và bộ nhớ
Chọn khối lượng công việc vừa khả năng mỗi bước.
- Chạy nhóm request
Thực hiện prefill hoặc decode tương ứng.
- Cập nhật trạng thái
Loại request xong, giữ request còn chạy rồi chọn bước tiếp theo.
Mã Mermaid
flowchart TD
step1["Chờ được chọn"]
step2["Kiểm tra token và bộ nhớ"]
step3["Chạy nhóm request"]
step4["Cập nhật trạng thái"]
step1 --> step2
step2 --> step3
step3 --> step4 3Giải pháp
Engine có thể đặt giới hạn số chuỗi và tổng token xử lý trong một bước. Khi prompt dài cản trở những chuỗi đang sinh, chia prefill thành các đoạn giúp điều phối linh hoạt hơn.
Tăng kích thước nhóm thường giúp dùng thiết bị hiệu quả hơn, nhưng cũng có thể tăng thời gian giữa các token của từng người. Chọn cấu hình bằng mục tiêu latency thực tế.
Để quan sát yêu cầu mới vào ngay khi có chỗ trống và prompt dài bị chia thành các đoạn nhỏ, hãy chạy khối 3 (Iteration scheduler) trong Bài Lab tổng hợp, nơi từng bước được liệt kê kèm số token decode và prefill.
4Profiling
- Thời gian chờ và giữa hai token
Đo theo request, đặc biệt các prompt dài và những request đến sau chúng.
- Hiệu quả nhóm xử lý
Theo dõi token mỗi bước, số chuỗi hoạt động và số lần phải tạm dừng vì thiếu bộ nhớ.
Mẹo đo lường: ghim số liệu trên workload thật, ghi cả p50/p95/p99 thay vì chỉ trung bình, và luôn ghi lại điều kiện chạy (batch, cache, đồng thời, phần cứng) trước và sau khi tối ưu. Số đo thiếu điều kiện chạy thì không so sánh được.
5Ví dụ
Chat ngắn trộn tài liệu dài
Một yêu cầu đọc tài liệu không nên làm mọi cuộc chat ngắn ngừng sinh chữ. Thử chunked prefill rồi kiểm tra cả hai nhóm.
Một request hoàn tất sớm
Continuous batching giải phóng chỗ của nó để đưa request mới vào ở bước kế tiếp, thay vì đợi cả nhóm ban đầu kết thúc.
6Thuật ngữ
- Batch
- Một nhóm công việc được tính cùng nhau trong một lần thực thi.
- Chunked prefill
- Chia việc xử lý prompt dài thành nhiều phần để có thể xen các bước sinh token của request khác.
Glossary (3)
- Runtime
- Phần mềm quản lý việc thực thi, buffers và phụ thuộc giữa phép toán.
- Latency
- Thời gian chờ để nhận một kết quả hoặc một bước kết quả.
- Context
- Chuỗi token trước vị trí hiện tại mà model được phép sử dụng.