OpenArchLabOpen Architecture — From Models to Systems

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.

LESSON ID scheduler GROUP Kiến trúc Inference
Mục lục bài học

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

Sơ đồ luồng (4 bước)
  1. Chờ được chọn

    Request hợp lệ vào hàng đợi.

  2. 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.

  3. Chạy nhóm request

    Thực hiện prefill hoặc decode tương ứng.

  4. 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.

7Bài liên quan

8Nguồn