Hiểu về LLM Inference Engine: Bên trong Nano-vLLM (Phần 1)
Kiến trúc, Lập lịch và Từ Prompt tới Token
Khi triển khai các mô hình ngôn ngữ lớn trong môi trường thực tế, inference engine trở thành một phần quan trọng. Nano-vLLM, một triển khai nhỏ gọn nhưng đạt chuẩn sản xuất, thể hiện các ý tưởng cốt lõi của vLLM, một trong những inference engine mã nguồn mở phổ biến nhất.
Luồng Chính: Từ Prompt tới Kết Quả
Điểm vào của Nano-vLLM là LLM class với phương thức generate. Bạn cung cấp các prompt và thông số đầu vào, hệ thống sẽ trả về văn bản đã tạo ra.
Từ Prompts tới Sequences
Sau khi gọi generate, mỗi chuỗi prompt được tokenizer chia nhỏ thành các token. Tokenizer biến mỗi prompt thành một sequence: cấu trúc dữ liệu nội bộ đại diện cho một mảng token IDs, là đơn vị làm việc cơ bản trong hệ thống.
Mô Hình Sản Xuất-Tiêu Thụ
Hệ thống sử dụng mô hình sản xuất-tiêu thụ với Scheduler ở trung tâm. Phương thức add_request đóng vai trò như nhà sản xuất: biến đổi prompts thành sequences và đặt vào hàng đợi của Scheduler.
Batching và Sự Đánh Đổi Giữa Throughput-Latency
Batching là quan trọng để giảm thiểu chi phí cố định của GPU. Tuy nhiên, mỗi sequence phải chờ đợi hoàn thành của batch hiện tại, điều này tạo ra sự đánh đổi giữa throughput và latency.
Prefill vs. Decode: Hai Giai Đoạn Sinh
- Prefill: Xử lý toàn bộ prompt đầu vào để xây dựng trạng thái nội bộ của mô hình.
- Decode: Sinh token đầu ra từng bước, đây là giai đoạn được nhìn thấy bởi người dùng.
Bên Trong Scheduler
Scheduler quản lý việc quyết định xử lý sequence nào và theo thứ tự nào.
Hàng Đợi Chờ và Chạy
- Hàng Đợi Chờ: Dành cho sequences đã submit nhưng chưa bắt đầu.
- Hàng Đợi Chạy: Dành cho sequences đang trong quá trình xử lý.
Xử Lý Khi Cạn Kiệt Tài Nguyên
Khi bộ nhớ GPU đầy, scheduler tạm dừng sequence không thể tiếp tục, đảm bảo tài nguyên được quản lý hiệu quả.
Block Manager: Mặt Phẳng Điều Khiển KV Cache
Block Manager phân chia sequences thành các block cố định, tối ưu hóa quản lý bộ nhớ GPU.
Từ Sequences tới Blocks
Một sequence dài có thể chiếm nhiều blocks. Tính năng hash cho phép tái sử dụng những blocks có nội dung giống nhau, tối ưu hóa điện toán và lưu trữ.
Model Runner: Thực Thi và Song Song
Model Runner thực hiện mô hình trên GPU, hỗ trợ tensor parallelism để chia mô hình trên nhiều GPU.
Giao Tiếp Tensor Parallel
Một kiến trúc lãnh đạo-công nhân được sử dụng, với Rank 0 (lãnh đạo) điều phối công việc.
Chuẩn Bị Cho Tính Toán
Chuyển dữ liệu token từ bộ nhớ CPU sang GPU cho phép chuẩn bị trước khi thực hiện tính toán.