Continuous Batching Là Gì? Giải Thích Dễ Hiểu Cho Người Mới

Câu trả lời nhanh
Continuous Batching là kỹ thuật phục vụ model AI mà server xử lý nhiều yêu cầu cùng lúc, nhưng thay vì chờ cả lô xong mới bắt đầu lô mới, nó đưa yêu cầu mới vào ngay khi một yêu cầu khác vừa hoàn thành. Giúp tăng throughput 2-10 lần so với static batching.

Continuous Batching Là Gì?

Continuous Batching (xử lý lô liên tục) là kỹ thuật phục vụ model AI mà server xử lý nhiều yêu cầu cùng lúc, nhưng thay vì chờ cả lô xong mới bắt đầu lô mới, nó lập tức đưa yêu cầu mới vào ngay khi một yêu cầu khác vừa hoàn thành.

Nói đơn giản: tưởng tượng bạn đang xếp hàng mua cafe. Thay vì chờ 8 người xếp hàng xong rồi mới mở quầy mới, barista sẽ phục vụ ngay người kế tiếp khi có người vừa nhận xong ly cafe. Không ai phải chờ không cần thiết.

Vì Sao Continuous Batching Quan Trọng?

Khi bạn chạy model AI lớn như GPT hay Llama, mỗi yêu cầu generate text có độ dài khác nhau. Câu hỏi ngắn có thể xong trong 20 token, nhưng bài essay có thể kéo dài 2.000 token.

Với cách batching truyền thống (static batching), server phải chờ yêu cầu dài nhất trong lô xong rồi mới bắt đầu lô mới. Nếu 1 trong 8 yêu cầu generate 2.000 token, 7 yêu cầu còn lại dù xong sớm vẫn phải chờ. GPU ngồi không mà vẫn tốn tài nguyên.

Continuous Batching giải quyết vấn đề này bằng cách dinamically thay đổi thành phần lô trong thời gian thực. Khi một yêu cầu xong, GPU ngay lập tức đón yêu cầu mới vào chỗ trống.

Continuous Batching Khác Gì So Với Static Batching?

Static Batching: Gom 8 yêu cầu thành 1 lô. Chờ tất cả 8 xong. Lô mới bắt đầu. Nhược điểm lớn nhất là lãng phí GPU khi các yêu cầu có độ dài chênh lệch nhau.

Dynamic Batching: Một bước tiến hơn, cho phép thêm yêu cầu vào lô đang chờ xử lý. Nhưng vẫn phải chờ lô hiện tại xong trước khi xử lý lô mới.

Continuous Batching: Không có ranh giới lô rõ ràng. Yêu cầu mới được chèn vào liên tục tại từng bước generate (iteration level). Đây là lý do nó còn được gọi là iteration-level scheduling.

Cách Continuous Batching Hoạt Động

Model AI generate text theo từng token. Mỗi lần generate 1 token được gọi là 1 iteration. Continuous Batching tận dụng điểm này:

Tại mỗi iteration, scheduler kiểm tra xem yêu cầu nào đã xong (gặp token EOS hoặc đạt max length). Những yêu cầu đã xong bị loại khỏi lô. Yêu cầu mới đang chờ được đưa vào ngay lập tức. GPU không bao giờ phải chờ.

Quá trình này lặp lại hàng nghìn lần mỗi giây, tạo ra một dòng chảy liên tục của yêu cầu vào và ra, giống như dây chuyền sản xuất thay vì chờ từng mẻ.

Ai Đang Sử Dụng Continuous Batching?

Hầu hết các inference engine hiện đại đều đã tích hợp kỹ thuật này:

vLLM của UC Berkeley là framework phổ biến nhất, kết hợp Continuous Batching với PagedAttention để đạt throughput cao gấp nhiều lần so với naive serving.

Text Generation Inference (TGI) của Hugging Face cũng sử dụng continuous batching, tối ưu cho production deployment.

TensorRT-LLM của NVIDIA implement version riêng, tối ưu sâu cho GPU architecture của họ.

SGLangDeepSpeed-FastGen là hai framework mới hơn, cải thiện thêm trên ý tưởng continuous batching với các kỹ thuật tối ưu bổ sung.

Hiệu Năng Tăng Bao Nhiêu?

Theo benchmarks công khai, Continuous Batching có thể tăng throughput từ 2 đến 10 lần so với static batching, tùy thuộc vào distribution độ dài yêu cầu và load pattern.

Đặc biệt hiệu quả khi serve nhiều user cùng lúc với độ dài yêu cầu đa dạng. Trong thực tế production, vLLM với Continuous Batching và PagedAttention có thể serve hàng trăm yêu cầu đồng thời trên 1 GPU A100.

Điều này trực tiếp giảm cost inference. Nếu trước cần 10 GPU để serve traffic, sau khi áp dụng continuous batching có thể chỉ cần 2-3 GPU.

Những Thách Thức Của Continuous Batching

Quản lý bộ nhớ phức tạp: Khi yêu cầu vào ra liên tục, cần quản lý KV cache cẩn thận. Đây là lý do PagedAttention thường đi kèm, giúp phân bổ bộ nhớ linh hoạt cho từng yêu cầu.

Overhead scheduler: Scheduler phải quyết định yêu cầu nào vào ra tại mỗi iteration. Nếu implementation không tối ưu, overhead có thể ăn mất lợi ích.

Xử lý preemption: Khi hết bộ nhớ, server phải preempt (tạm dừng) một số yêu cầu để nhường chỗ. Cần chiến lược preempt thông minh để tránh latency spike.

Continuous Batching Vs Batching Trong Training?

Nếu bạn đã quen với training model, lưu ý rằng batching trong training và continuous batching trong inference là hai khái niệm khác nhau.

Training dùng static batching vì cần gradient nhất quán across toàn bộ lô. Inference không có constraint này, nên continuous batching phát huy tối đa hiệu quả.

Nói cách khác, training cần ổn định để học đúng. Inference cần linh hoạt để serve nhanh. Mỗi mục đích một cách batching phù hợp.

Kết Luận

Continuous Batching là kỹ thuật then chốt biến model AI từ demo thành sản phẩm production. Nếu bạn đang deploy model AI serving API cho nhiều user, đây là điều bắt buộc phải có.

Khi chọn inference engine, hãy ưu tiên những framework hỗ trợ continuous batching kết hợp với PagedAttention. Hiệu năng chênh lệch quá lớn so với naive approach, đến mức không có lý do gì để bỏ qua.

ThienLv

Mình là Thien, người tạo ra blog này. Ban ngày làm marketing, ban đêm cày tiền online và chơi với AI. Blog này là nơi mình ghi lại những gì mình thử qua — tool nào xịn, chiến thuật nào chạy được, cái gì thất bại. Mình không giỏi nhất, nhưng mình thích chia sẻ thật. Chill với một ly cafe đá là lý tưởng nhất.

Xem tất cả bài viết →

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *