Bỏ qua tới nội dung chính
OpenArchLabOpen Architecture — From Models to Systems

Giới thiệu khóa học

Inference Engineering: hệ thống phục vụ một LLM từ yêu cầu của người dùng đến chip GPU

Sau khi một mô hình ngôn ngữ lớn (LLM) được huấn luyện, nó chưa trả lời được ai. Cần một hệ thống phục vụ nhận yêu cầu, đổi chữ thành token (mảnh văn bản đã được đổi thành số), xếp lịch, chạy mô hình trên GPU (chip tính toán song song) và gửi từng token về cho người dùng. Suy luận (inference) là việc chạy mô hình đã huấn luyện để sinh văn bản; Inference Engineering là cách thiết kế hệ thống đó để trả lời đủ nhanh, đủ chính xác và với chi phí chấp nhận được.

Khóa này dùng một sơ đồ 5 tầng với 21 ô để bạn thấy mỗi quyết định làm đổi hai thước đo chính. TTFT (time to first token) là thời gian từ lúc gửi yêu cầu đến token đầu tiên. TPOT (time per output token) là thời gian trung bình giữa hai token liên tiếp sau token đầu. Bạn cần khóa này để biết vì sao cùng một mô hình có thể nhanh hay chậm, tốn hay rẻ tùy hệ thống bao quanh nó.

Khóa học gồm

  • Một sơ đồ 21 ô chia thành 5 tầng L0 đến L4, từ yêu cầu của người dùng xuống phần cứng; mỗi ô mở một bài học, trong tổng số 33 bài, gồm cả các bài nền tảng hệ thống như lập trình GPU với CUDA, hệ điều hành, lý thuyết hàng đợi, độ chính xác số học và backend.
  • L0 điều khiển và quan sát (kho trọng số và phiên bản mô hình, tự thêm bớt bản chạy, tức các bản sao của dịch vụ mô hình, và đo TTFT cùng TPOT) và L1 cổng vào (xác thực và từ chối bớt tải, chọn bản chạy phù hợp, đổi chữ thành token, gửi token về dạng luồng).
  • L2 lõi engine: bộ lập lịch, prefill (đọc cả prompt một lượt), decode (sinh từng token), chồng Transformer, bộ chọn token, KV cache (bộ nhớ giữ key và value của các token đã xử lý) và lượng tử hóa (lưu số bằng ít bit hơn).
  • L3 biên dịch, runtime và kernel (biến mô hình thành các hàm chạy hiệu quả trên GPU) và L4 phần cứng: GPU, HBM (bộ nhớ băng thông cao gắn trên GPU) và mạng nối nhiều GPU.
  • Bốn thẻ xuyên suốt dưới sơ đồ: quan sát và chẩn đoán, benchmark và SLO (mục tiêu đo được mà dịch vụ phải đạt, như ngưỡng thời gian trả lời), cổng chất lượng khi đưa bản mới vào chạy, và chi phí cùng dung lượng.
  • Tab 02 là một bài lab NumPy theo dõi một yêu cầu qua 13 khối của đường ống phục vụ thu nhỏ.

Học xong, bạn có thể

  • Kể đường đi của một yêu cầu: cổng, bộ định tuyến, token hóa, lập lịch, prefill, decode, lấy mẫu, rồi luồng token trả về.
  • Giải thích prefill khác decode ở đâu: prefill đọc cả prompt song song và bị giới hạn bởi tốc độ tính (compute-bound), decode sinh từng token và bị giới hạn bởi tốc độ đọc bộ nhớ (memory-bound).
  • Nói KV cache là trạng thái của mỗi yêu cầu, tăng theo số token, và vì sao dung lượng HBM là tài nguyên hữu hạn.
  • Dùng các nút Trọng tâm TTFT, TPOT, Memory, Scale để chọn nhóm ô cần xem khi gặp triệu chứng: token đầu chậm, các token sau chậm, hết bộ nhớ hay cần thêm GPU.
  • Phân biệt các bước nối tiếp với các lựa chọn thay thế hay tùy chọn, và giải thích vì sao phải đo điểm nghẽn trước khi đổi cách thực thi.

Phạm vi: sơ đồ là kiến trúc tham chiếu cho mô hình sinh văn bản kiểu GPT (decoder-only, chỉ nhìn các token trước để sinh token kế tiếp), không vẽ bộ mã hóa riêng cho ảnh hay âm thanh và không đại diện cho hệ thống nội bộ của một hãng cụ thể. Tùy mô hình và engine, một số khối có thể gộp hoặc đổi; khóa dạy suy luận, còn huấn luyện nằm ở LLM Training (Text).

Cách đọc sơ đồ kiến trúc

  1. Đọc từ trên xuống theo tầng: L0 (điều khiển, quan sát), L1 (cổng vào), L2 (lõi engine), L3 (compiler, runtime, kernel), L4 (phần cứng). Mũi tên đi xuống giữa các tầng cho biết tầng trên dựa vào tầng dưới để chạy. Mã ô có dạng L2·3: tầng 2, ô thứ 3.
  2. Ở L1, mũi tên ngang đi từ trái sang phải: L1·1 Gateway, L1·2 Router, L1·3 Tokenizer đưa yêu cầu vào engine. Ô L1·4 Streaming được vẽ cuối hàng nhưng chạy sau cùng: nó nhận token do L2 sinh ra rồi gửi về người dùng.
  3. L2 là vùng đông nhất. L2·1 Scheduler (cột trái) chọn việc cho mỗi bước và đưa vào L2·3 Prefill; L2·3 và L2·4 Decode nối nhau bằng mũi tên hai chiều và cùng dùng L2·5 Transformer; kết quả đi xuống L2·6 Sampler để chọn token. L2·7 KV cache và L2·8 Quantization (cột phải) là nơi các ô giữa đọc và ghi trạng thái. L2·2 Speculative là lựa chọn thêm để đoán nháp nhiều token.
  4. Ở L3 và L4, theo mũi tên ngang: L3·1 Compiler, L3·2 Runtime, L3·3 Kernels; rồi các mũi tên đi xuống từ L3 sang L4, nơi mũi tên ngang nối L4·1 GPU, L4·2 HBM và L4·3 Parallelism và mạng. Đây là cách phép tính của L2 thật sự chạy trên chip.
  5. Dải L0 trên cùng không nằm trên đường đi của từng token: nó quản lý trọng số (L0·1), số bản chạy (L0·2) và đo đạc (L0·3) cho cả hệ thống.
  6. Di chuột, hoặc nhấn Tab, lên một ô để đọc pop-over mô tả ngắn; bấm ô hoặc tiêu đề trong pop-over để mở bài học. Nút Trọng tâm làm sáng nhóm ô liên quan tới TTFT, TPOT, Memory hay Scale. Tắt overlay (cạnh Vừa khung) ẩn các khung ô và pop-over để đọc ảnh gốc, bấm lại để bật.

Ô cùng hàng không phải lúc nào cũng nối tiếp nhau: L2·5 Transformer được cả Prefill và Decode dùng. Dưới sơ đồ còn phần Topology khác, tách prefill và decode thành hai cụm riêng.

Core owners · chịu trách nhiệm đường thực thi

Inference SystemsGPU PerformanceCompiler / Runtime

Allied owners · chất lượng và vận hành

Model ResearchInfra / SREProduct / Capacity
Trọng tâm:
100%
Sơ đồ thể hiện colocated prefill/decode. Chọn khối để đọc sâu; đường màu xanh lá nối vòng sinh token.
CROSS-CUTTING · Measurement, correctness & production operations

Tối ưu GPT-style model: đi từ mục tiêu tới bottleneck

TTFT → queue, prefill, cache reuse. TPOT → decode, KV bandwidth, launch overhead. Memory → weights, KV, workspace. Scale → partition, communication và placement. Các nút trên sơ đồ tô sáng những thành phần liên quan.

Topology khác: tách prefill / decode

Router → prefill pool → KV transfer → decode pool. Scale hai pha độc lập, nhưng phải tính network cost và state management. Xem cơ chế P/D split ↗

Nguồn công khai & phạm vi kiến trúc

Framework tổng hợp cơ chế từ tài liệu dưới đây. Hình thể hiện quan hệ chức năng, không khẳng định một implementation duy nhất. Các tối ưu là lựa chọn cần benchmark theo workload.

Open Architecture — From Models to Systems OpenArchLab
Danh sách bài học (33)
  1. Cổng tiếp nhận và kiểm soát yêu cầu
  2. Chọn bản sao mô hình để xử lý yêu cầu
  3. Chuyển văn bản thành đơn vị mà mô hình hiểu
  4. Lập lịch tính toán theo từng bước sinh token
  5. Xử lý prompt trước khi bắt đầu sinh câu trả lời
  6. Sinh câu trả lời theo vòng lặp token
  7. Chọn token từ điểm số và xuất văn bản
  8. Bộ nhớ đệm key và value của attention
  9. Đề xuất token trước, rồi để mô hình chính xác minh
  10. Mô hình transformer biến token thành dự đoán như thế nào
  11. Tầng thực thi nối bộ điều phối với thiết bị tính toán
  12. Trình biên dịch tối ưu mô hình cho thiết bị đích
  13. Các hàm tính toán hiệu năng cao trên thiết bị
  14. Dùng ít bit hơn để lưu và tính các giá trị của mô hình
  15. Phần tính toán của accelerator và giới hạn hiệu năng
  16. Lập ngân sách bộ nhớ trên accelerator
  17. Chia mô hình hoặc công việc trên nhiều thiết bị
  18. Trao đổi dữ liệu giữa các worker
  19. Tách máy xử lý prompt khỏi máy sinh token
  20. Quản lý vòng đời các bản sao mô hình
  21. Checkpoint, artifact và việc nạp mô hình
  22. Theo dõi và tìm nguyên nhân request chậm
  23. Thiết kế phép đo để so giải pháp công bằng
  24. Tính chi phí trên công việc thực sự hữu ích
  25. Kiểm tra tính đúng và chất lượng sau tối ưu
  26. Cô lập người dùng và quản lý dữ liệu trong cache
  27. Giữ dịch vụ ổn định khi tải tăng hoặc worker lỗi
  28. Biến một ý tưởng tối ưu thành kết quả kiểm chứng được
  29. Viết kernel với tư duy dữ liệu và tính toán song song
  30. Concurrency, hàng đợi và vòng đời dữ liệu ở host
  31. Vì sao hàng đợi tăng mạnh khi gần hết capacity
  32. Hiểu precision và sai số trong phép tính
  33. Đưa operator của mô hình lên accelerator mới