Xây dựng với AI

Cách vLLM giải quyết tình trạng kém hiệu quả của GPU bằng continuous batching và PagedAttention

vLLM cải thiện thông lượng suy luận LLM bằng cách thay thế static batching bằng continuous batching và sử dụng PagedAttention để quản lý bộ nhớ một cách hiệu quả.

Minh họa các block bộ nhớ PagedAttention trên bảng mạch GPU
Minh họa được tạo riêng cho bài viết này

Được dịch tự động từ bản gốc tiếng Anh.

Các mô hình ngôn ngữ lớn (LLM) là công cụ dự đoán, không phải máy chủ, điều này tạo ra sự không khớp cơ bản khi xử lý khối lượng yêu cầu lớn. Việc chạy các mô hình này theo từng yêu cầu một khiến phần lớn sức mạnh tính toán của GPU bị nhàn rỗi, làm tăng chi phí và hạn chế khả năng mở rộng cho các nhà phát triển xây dựng sản phẩm AI.

Bối cảnh vấn đề

Thách thức trong việc phục vụ các mô hình có trọng số mở (open-weight models) ở quy mô lớn đã thúc đẩy các kỹ sư áp dụng vLLM, một máy chủ và framework suy luận được thiết kế đặc biệt cho môi trường thông lượng cao. Bắt nguồn từ Sky Computing Lab của UC Berkeley vào năm 2023, vLLM giải quyết những điểm kém hiệu quả cốt lõi của việc triển khai LLM tiêu chuẩn bằng cách tái tư duy về cách gom nhóm yêu cầu (batching) và cách quản lý bộ nhớ trên GPU.

Các phương pháp suy luận truyền thống gặp khó khăn vì chúng xử lý các yêu cầu tuần tự hoặc sử dụng static batching, nơi các nhóm yêu cầu bắt đầu và kết thúc cùng lúc. Cách tiếp cận này không tính đến độ dài biến đổi của phản hồi LLM, dẫn đến lãng phí đáng kể chu kỳ tính toán khi các yêu cầu nhanh phải chờ các yêu cầu chậm hơn hoàn tất. vLLM giới thiệu continuous batching và một kỹ thuật quản lý bộ nhớ mới gọi là PagedAttention để giữ cho GPU luôn hoạt động hết công suất.

Framework này đã trở thành giải pháp ưu tiên cho các môi trường sản xuất, nơi hiệu quả chi phí và thông lượng là yếu tố then chốt. Bằng cách tách rời việc hoàn thành yêu cầu khỏi quá trình thực thi batch, vLLM đảm bảo rằng mỗi lần forward pass đều thực hiện công việc hữu ích, giúp tăng đáng kể số lượng token được tạo ra mỗi giây mà không cần thêm phần cứng.

Cơ chế hoạt động

Suy luận LLM bao gồm hai giai đoạn: prefill, nơi mô hình xử lý prompt đầu vào, và decode, nơi nó tạo ra các token đầu ra từng cái một. Trong các thiết lập tiêu chuẩn, giai đoạn decode kém hiệu quả vì GPU phải tải toàn bộ trọng số mô hình cho mỗi lần tạo một token đơn lẻ. Static batching cải thiện điều này đôi chút bằng cách xử lý nhiều yêu cầu đồng thời, nhưng nó chịu ảnh hưởng của hiệu ứng straggler, nơi các phản hồi ngắn chặn các phản hồi dài hơn bắt đầu batch mới.

vLLM thay thế static batching bằng continuous batching. Thay vì chờ tất cả các yêu cầu trong một batch hoàn tất, scheduler sẽ chèn ngay các yêu cầu mới vào lần forward pass tiếp theo ngay khi bất kỳ yêu cầu hiện có nào hoàn thành. Điều này giữ cho GPU luôn bận rộn, tối đa hóa thông lượng. Tuy nhiên, continuous batching đòi hỏi quản lý bộ nhớ hiệu quả vì mỗi yêu cầu đang hoạt động đều duy trì một cache Key-Value (KV) phát triển với mỗi token được tạo ra.

Để giải quyết vấn đề phân mảnh bộ nhớ, vLLM sử dụng PagedAttention. Các framework truyền thống dành sẵn bộ nhớ cho trường hợp xấu nhất đối với cache KV của mỗi yêu cầu, dẫn đến lãng phí lớn. PagedAttention xử lý cache KV giống như bộ nhớ ảo trong hệ điều hành, lưu trữ nó trong các block không liên tục. Điều này cho phép hệ thống cấp phát bộ nhớ động và chia sẻ các block giữa các yêu cầu khi có thể, đảm bảo rằng bộ nhớ GPU chỉ được sử dụng cho dữ liệu đang hoạt động chứ không phải cho tiềm năng đã dành trước.

Chi tiết chính

  • vLLM được giới thiệu trong một bài báo năm 2023 bởi các nhà nghiên cứu tại Sky Computing Lab của UC Berkeley.
  • Framework sử dụng continuous batching để thêm các yêu cầu mới vào các lần forward pass ngay khi các yêu cầu trước đó hoàn tất.
  • PagedAttention quản lý bộ nhớ cache KV trong các block không liên tục, tương tự như paging bộ nhớ ảo của OS.
  • Static batching tiêu chuẩn lãng phí tài nguyên tính toán bằng cách buộc các yêu cầu nhanh phải chờ các yêu cầu chậm trong cùng một batch.
  • Cache KV lưu trữ các cặp key và value cho mọi token, phát triển qua mỗi bước sinh văn bản.
  • vLLM cung cấp endpoint API tương thích OpenAI để dễ dàng tích hợp vào các ứng dụng hiện có.

Tại sao điều này quan trọng

Đối với các kỹ sư phần mềm và nhà sáng lập kỹ thuật, mức độ sử dụng GPU gắn liền trực tiếp với chi phí hạ tầng. Khi một mô hình chạy từng yêu cầu một, phần cứng đắt tiền vẫn phần lớn nhàn rỗi trong giai đoạn decode. Bằng cách áp dụng vLLM, các đội ngũ có thể phục vụ số lượng người dùng lớn hơn đáng kể với cùng ngân sách phần cứng, giúp các mô hình có trọng số mở trở nên khả thi cho các ứng dụng sản xuất đòi hỏi độ trễ thấp và khả năng đồng thời cao.

Sự chuyển dịch từ static sang continuous batching cũng cải thiện trải nghiệm người dùng bằng cách giảm thời gian chờ đợi. Trong các hệ thống static, một người dùng gửi truy vấn ngắn có thể bị trì hoãn bởi một batch trước đó chứa một yêu cầu dài và phức tạp. Continuous batching đảm bảo rằng không có yêu cầu nào ngồi nhàn rỗi trong khi các yêu cầu khác hoàn tất, dẫn đến hiệu suất API ổn định và phản hồi nhanh hơn. Độ tin cậy này rất cần thiết cho các tính năng AI hướng tới người dùng cuối, nơi tốc độ cảm nhận ảnh hưởng đến mức độ tương tác.

Hơn nữa, hiệu quả bộ nhớ do PagedAttention mang lại loại bỏ một rào cản lớn đối với việc mở rộng quy mô. Nếu không có nó, các kỹ sư phải cấp phát dư thừa bộ nhớ để xử lý độ dài trong kịch bản xấu nhất, điều này hạn chế số lượng yêu cầu đồng thời mà một GPU đơn lẻ có thể xử lý. Việc cấp phát động của vLLM cho phép triển khai mật độ cao hơn, đơn giản hóa việc lập kế hoạch dung lượng và giảm nhu cầu tối ưu hóa thủ công phức tạp kích thước batch.

Bạn có thể làm gì

  • Thay thế các pipeline Hugging Face tiêu chuẩn bằng vLLM cho bất kỳ triển khai mô hình có trọng số mở nào đòi hỏi thông lượng cao.
  • Cấu hình máy chủ suy luận của bạn để sử dụng continuous batching thay vì static batching nhằm giảm thời gian GPU nhàn rỗi.
  • Giám sát việc sử dụng cache KV để hiểu áp lực bộ nhớ và điều chỉnh các cài đặt độ dài mô hình tối đa cho phù hợp.
  • Sử dụng endpoint API tương thích OpenAI do vLLM cung cấp để giảm thiểu thay đổi trong mã phía client.
  • Benchmark cấu hình static batching hiện tại của bạn so với vLLM để định lượng cải thiện về số token mỗi giây.
  • Đảm bảo ứng dụng của bạn xử lý tốt các thời gian phản hồi biến đổi, vì continuous batching có thể thay đổi hồ sơ độ trễ.
  • #vllm
  • #llm inference
  • #gpu optimization
  • #continuous batching
  • #pagedattention

Công cụ từ cửa hàng Bytechap

$89

DocBento

Hệ thống quản lý tài liệu tự host, có khả năng đọc mọi bản quét và trả lời kèm trích dẫn trang cụ thể.

Demo trực tiếp

Đọc tiếp

Tất cả bài viết