Chuyển đến nội dung chính
Hướng dẫn AI

Học Kỹ thuật Suy luận LLM từ Những Nguyên lý Đầu tiên

Theo lộ trình học tập ưu tiên triển khai, đi qua tokenization, prefill, giải mã, bộ nhớ đệm KV, lập lịch, gom nhóm, quản lý bộ nhớ và các thành phần nội bộ của công cụ suy luận. Hướng dẫn này giải thích cách bắt đầu với chương đầu tiên hiện có trong kho mã, đồng thời chuẩn bị cho các bài học xây dựng runtime dự kiến.

Học Kỹ thuật Suy luận LLM từ Nguyên lý Đầu tiên

Inference Engineering Zero to Hero là gì?

Inference Engineering Zero to Hero là một khoá học thực hành giúp tìm hiểu các hệ thống thời gian chạy phía sau việc phục vụ mô hình ngôn ngữ lớn. Thay vì tập trung vào việc huấn luyện hoặc cải thiện chất lượng mô hình, khoá học xem xét những gì xảy ra sau khi một yêu cầu đến LLM.

Dự án bắt đầu từ những thao tác suy luận hữu ích nhỏ nhất và từng bước tiến tới một runtime suy luận gọn nhẹ. Lộ trình dự kiến là:

tokenization → prefill → decode → KV cache → sampling → request state → scheduling → continuous batching → memory management → serving-engine internals

Cách tiếp cận ưu tiên triển khai nhấn mạnh việc trực tiếp kiểm tra tensor, đầu ra được sinh, trạng thái bộ nhớ đệm và mức sử dụng bộ nhớ. Điều này giúp kết nối các thao tác của mô hình với những vấn đề thực tế khi phục vụ như độ trễ, thông lượng, mức sử dụng GPU và mức tiêu thụ bộ nhớ.

Bạn sẽ học được gì

Khoá học được thiết kế để xây dựng mô hình tư duy định hướng hệ thống về suy luận LLM. Các chủ đề chính bao gồm:

  • Tokenization: cách một prompt được chuyển thành các ID token mà mô hình tiếp nhận.
  • Prefill: cách mô hình xử lý prompt ban đầu và tạo trạng thái cần thiết cho việc sinh văn bản.
  • Decode: cách các token tiếp theo được sinh từng bước một.
  • KV caching: cách trạng thái attention tăng lên và tránh phải tính toán lại không cần thiết.
  • Sampling: cách chọn một token từ các điểm số đầu ra của mô hình.
  • Request state: cách runtime theo dõi prompt, các token đã sinh và trạng thái hoàn tất.
  • Scheduling: cách engine quyết định những yêu cầu nào sẽ được xử lý.
  • Continuous batching: cách kết hợp hiệu quả các yêu cầu đang hoạt động khi chúng vào và rời khỏi hệ thống.
  • Memory management: bộ nhớ GPU được sử dụng ở đâu và cách tổ chức cache ảnh hưởng đến dung lượng.
  • Serving-engine internals: cách các hệ thống hỗ trợ việc thực thi mô hình để cải thiện hiệu quả.

Trạng thái và cấu trúc khoá học

Kho lưu trữ được chia thành các cấp độ Beginner, Intermediate và Advanced. Hiện tại, lộ trình Beginner đang được phát triển. Nội dung Intermediate và Advanced chưa có sẵn.

Chương đã có

  • Chapter 01: Manual LLM Inference From First Principles — có sẵn tại beginner/01_manual_llm_inference/.

Các chương Beginner dự kiến

  1. Sampling
  2. Request State
  3. Simple Scheduler
  4. Continuous Batching
  5. KV Cache Management
  6. Paged or Block KV Cache
  7. Prefix Caching
  8. Benchmarking Inference

Lộ trình được thiết kế linh hoạt. Các chương có thể được thêm, xoá, tách hoặc sắp xếp lại khi quá trình triển khai phát hiện những vấn đề mới.

Cài đặt và thiết lập

README của kho lưu trữ không cung cấp lệnh cài đặt dependency cố định hoặc đặc tả môi trường. Hãy bắt đầu bằng cách tải xuống hoặc clone kho lưu trữ, sau đó kiểm tra các tệp và hướng dẫn đi kèm Chapter 1 trước khi cài đặt hoặc chạy bất kỳ thứ gì.

  1. Lấy một bản sao cục bộ của kho lưu trữ GitHub.
  2. Mở thư mục kho lưu trữ trong terminal, trình soạn thảo hoặc môi trường notebook.
  3. Đi tới beginner/01_manual_llm_inference/.
  4. Đọc mọi hướng dẫn dành riêng cho chương và xác định notebook trong thư mục đó.
  5. Chỉ cài đặt các dependency được tài liệu của chương yêu cầu.
  6. Mở notebook và thực thi các cell theo đúng thứ tự.
beginner/01_manual_llm_inference/

Vì README không nêu chính xác phiên bản package, yêu cầu phần cứng hoặc lệnh cài đặt, hãy sử dụng notebook của chương làm nguồn tham chiếu chính thức cho thiết lập runtime.

Cách sử dụng cơ bản: Thực hành suy luận thủ công

Chapter 1 là điểm bắt đầu được khuyến nghị. Mục đích của chương là xem xét suy luận LLM thủ công từ các nguyên lý đầu tiên, thay vì ẩn quá trình sinh văn bản phía sau một API phục vụ hoàn chỉnh.

Bước 1: Làm việc tuần tự với notebook

Chạy notebook từ đầu đến cuối. Tránh bỏ qua các cell thiết lập hoặc kiểm tra, vì những thao tác phía sau có thể phụ thuộc vào các đối tượng mô hình, đầu vào đã token hóa hoặc trạng thái cache được tạo trước đó.

Bước 2: Theo dõi prompt

Quan sát cách prompt đầu vào thay đổi khi đi qua quá trình suy luận. Một luồng khái niệm hữu ích là:

prompt text
→ token IDs
→ prompt processing or prefill
→ next-token scores
→ selected token
→ updated sequence
→ repeated decoding

Ghi lại kích thước tensor và số lượng token bất cứ khi nào notebook hiển thị chúng. Điều này giúp dễ nhận thấy sự khác biệt giữa việc xử lý toàn bộ prompt và việc sinh thêm một token.

Bước 3: Phân biệt Prefill và Decode

Prefill xử lý prompt và thiết lập trạng thái cần thiết cho việc sinh văn bản. Decode sinh thêm các token theo từng bước. Việc xem đây là hai giai đoạn riêng biệt rất quan trọng vì chúng có đặc điểm tính toán và bộ nhớ khác nhau.

Trong khi chạy notebook, hãy tự hỏi:

  • Có bao nhiêu token đầu vào được xử lý trong giai đoạn prefill?
  • Đầu vào nào được truyền vào ở mỗi bước decode?
  • Những tensor nào thay đổi sau khi một token mới được sinh?
  • Trạng thái nào có thể được tái sử dụng thay vì tính toán lại?

Bước 4: Kiểm tra trực tiếp đầu ra

So sánh ID token với văn bản đã giải mã và kiểm tra các đầu ra trung gian ở những nơi notebook cho phép. Mục tiêu không chỉ là tạo ra văn bản, mà còn hiểu chuỗi thao tác chịu trách nhiệm tạo ra văn bản đó.

Tìm hiểu mô hình runtime

Một cách hữu ích để tiếp cận kho lưu trữ là xem quá trình sinh văn bản như một vòng lặp có trạng thái thay vì một lần gọi mô hình đơn lẻ:

chuẩn bị yêu cầu
xử lý prompt
lưu trạng thái có thể tái sử dụng
chọn token tiếp theo
cập nhật trạng thái yêu cầu
lặp lại cho đến khi hoàn tất

Góc nhìn này giúp bạn chuẩn bị cho các chương sau. Việc lấy mẫu quyết định token nào được chọn, trạng thái yêu cầu theo dõi từng lần sinh, bộ lập lịch chọn công việc cần xử lý, còn batching liên tục kết hợp công việc từ nhiều yêu cầu đang hoạt động.

Mẹo Học Nâng Cao

Theo Dõi Đồng Thời Shape, Trạng Thái và Bộ Nhớ

Đừng kiểm tra các tensor một cách riêng lẻ. Với mỗi phép toán quan trọng, hãy ghi lại shape đầu vào, shape đầu ra, độ dài chuỗi, trạng thái cache và mức tăng bộ nhớ dự kiến. Điều này kết nối việc thực thi mô hình về mặt toán học với hành vi của hệ thống.

So Sánh Độ Dài Prompt và Độ Dài Decode

Khi chương cho phép bạn thay đổi đầu vào, hãy so sánh cả prompt ngắn và dài, cũng như các lần sinh ngắn và dài. Quan sát chi phí nào phát sinh trong giai đoạn prefill và chi phí nào tích lũy trong quá trình decode. Đừng giả định các kết luận benchmark vượt quá những gì phép đo của bạn chứng minh.

Xây Dựng Bảng Trạng Thái Yêu Cầu

Trước khi chương chuyên biệt về trạng thái yêu cầu được phát hành, bạn có thể sắp xếp các quan sát bằng những trường như:

  • ID token đầu vào
  • ID token được sinh
  • Độ dài chuỗi hiện tại
  • Trạng thái cache
  • Trạng thái sinh

Đây là một kỹ thuật học tập, không phải tính năng được kho mã hiện tại cam kết cung cấp. Nó giúp làm rõ vì sao các engine suy luận cần có cả một hệ thống bao quanh chính mô hình.

Đo Lường Trước Khi Tối Ưu

Lộ trình có một chương dự kiến về benchmark suy luận. Cho đến khi chương đó được phát hành, hãy kiểm soát chặt chẽ các thí nghiệm: mỗi lần chỉ thay đổi một đầu vào hoặc một điều kiện sinh, ghi lại các quan sát và phân biệt hành vi đã đo được với các giả định.

Ôn Lại Các Chương Trước

Khi các chương về lấy mẫu, lập lịch, batching và quản lý cache được bổ sung, hãy quay lại với phần suy luận thủ công. Liên hệ mỗi abstraction mới với vòng lặp sinh token ban đầu để các tối ưu hóa luôn gắn với việc thực thi mô hình thực tế.

Giới Hạn Hiện Tại

Hiện chỉ có chương Beginner đầu tiên được liệt kê là khả dụng. Lấy mẫu, bộ lập lịch, batching liên tục, các chiến lược quản lý cache, benchmark cùng các lộ trình Intermediate và Advanced vẫn đang được lên kế hoạch. Vì vậy, kho mã nên được xem là một khóa học đang phát triển thay vì một framework engine suy luận hoàn chỉnh.

Kết Luận

Inference Engineering Zero to Hero mang đến một lộ trình thực tiễn để tiếp cận khía cạnh runtime của LLM. Hãy bắt đầu với beginner/01_manual_llm_inference/, chạy notebook theo đúng thứ tự và tập trung vào cách prompt, token, tensor cùng trạng thái có thể tái sử dụng di chuyển qua quá trình sinh. Nền tảng này sẽ giúp bạn dễ hiểu hơn các bài học dự kiến về lập lịch, batching, bộ nhớ và nội bộ của engine phục vụ.