Đây là một bài giải thích minh họa, dễ hiểu. Độc giả không cần có kiến thức chuyên sâu về suy luận để đọc bài viết này: mọi ý tưởng đều được trình bày trước tiên dưới dạng phép ẩn dụ đời thường (một mô hình nhỏ đoán, một mô hình lớn đánh giá; một nhà kho, một chiếc xe tải và một xưởng làm việc) và sau đó là dưới dạng toán học – đồng thời, mỗi công thức xuất hiện đều có bản dịch tiếng Anh đơn giản ngay bên cạnh. Ở một vài chỗ, tôi cố tình đơn giản hóa để giữ cho trực giác được ưu tiên hàng đầu; sự chặt chẽ được chú thích trong các tài liệu tham khảo. Nếu bạn đã từng gặp khó khăn với các bài báo gốc, đây chính là điểm khởi đầu.
🔑 Một câu duy nhất mở khóa mọi thứ
Đây là một bài giải thích minh họa, dễ hiểu. Độc giả không cần có kiến thức nền tảng về suy luận để đọc bài viết này: mọi ý tưởng đều được trình bày trước tiên dưới dạng phép ẩn dụ đời thường (một mô hình nhỏ đoán, một mô hình lớn chấm điểm; một nhà kho, một xe tải và một xưởng), sau đó là dưới dạng toán học – và mọi công thức xuất hiện đều có bản dịch tiếng Anh đơn giản ngay bên cạnh. Ở một vài chỗ, tôi cố tình đơn giản hóa để giữ cho trực giác được ưu tiên hàng đầu; sự chặt chẽ có chú thích là dành cho các bài báo trong danh mục tài liệu tham khảo. Nếu bạn đã từng gặp khó khăn với các bài báo gốc, đây chính là điểm khởi đầu.
🔑 Một câu nói mở khóa mọi thứ
Tại sao suy luận LLM (mô hình ngôn ngữ lớn) lại chậm, và tại sao giải mã suy đoán lại làm cho nó nhanh? Tất cả gói gọn trong một câu: việc làm cho các ma trận lớn hơn sẽ thêm nhiều phép nhân hơn cho GPU (bộ xử lý đồ họa) – nhưng bất kể ma trận lớn đến đâu, một phép nhân ma trận chỉ tải trọng số đúng một lần. Nhiều phép tính hơn không có nghĩa là tải nhiều hơn. Và trong suy luận LLM, việc tải (di chuyển trọng số từ bộ nhớ GPU vào các đơn vị tính toán) chiếm gần như toàn bộ thời gian, trong khi tính toán gần như miễn phí. Vì vậy, xử lý thêm một vài token (mã thông báo) gần như không tốn thêm thời gian thực tế. Đây không phải là một thủ thuật thuật toán – đây là một sự thật vật lý của phần cứng GPU. Mọi chút tăng tốc mà giải mã suy đoán mang lại đều là việc tận dụng lợi ích phần cứng này.
Một ví dụ cụ thể: câu “the cat sat on the red mat” (con mèo ngồi trên tấm thảm đỏ) là một ma trận. Mỗi token đầu tiên được biến thành một hàng số (embedding của nó, giả sử d chiều). Xếp chồng 7 hàng và bạn sẽ có một ma trận 7 × d là X:
┌ ┐
the │ 0.12 -0.83 0.05 0.47 … │
cat │ -0.31 0.22 0.68 -0.10 … │
sat │ 0.55 0.09 -0.42 0.33 … │
on │ -0.07 0.61 0.18 -0.25 … │
the │ 0.12 -0.83 0.05 0.47 … │
red │ 0.29 -0.14 0.52 0.40 … │
mat │ 0.44 0.37 -0.20 0.08 … │
└ ┘
= ma trận X (7 hàng × d cột)
Các hàng = các token (7 ở đây). Một câu dài hơn có nghĩa là nhiều hàng hơn và nhiều phép nhân hơn – nhưng nhân toàn bộ khối X này với ma trận trọng số W sẽ tải W từ bộ nhớ đúng một lần. Đó là ý nghĩa của “nhiều phép tính hơn, không nhiều tải hơn” trong thực tế. (Lưu ý nhỏ: hai hàng “the” giống hệt nhau – cùng một token, cùng một hàng embedding, trước khi cơ chế attention được áp dụng.)
Bối cảnh: Đây là phần chuyên sâu về kỹ thuật trong một chuỗi bài gồm hai phần. Phần 1 đã lập luận rằng giải mã suy đoán là một trong những kỹ năng bị đánh giá thấp nhất đối với các vai trò suy luận LLM vào năm 2025–2026, và giới thiệu ý tưởng cốt lõi (“một mô hình nhỏ đoán, một mô hình lớn chấm điểm”). Phần này bao gồm toàn bộ toán học (bao gồm cả chứng minh lấy mẫu từ chối), các hướng nghiên cứu chính trong hai năm qua và danh sách các câu hỏi phỏng vấn thực tế.
Cách đọc bài viết này: Phần 1 là nền tảng. Phần 2 là toán học (các công thức, nhưng mỗi công thức đều có giải thích bằng tiếng Anh đơn giản). Phần 3 phác thảo bối cảnh nghiên cứu (sử dụng nó như một lộ trình học tập). Phần 4 là một cái nhìn sâu sắc nổi bật trong các cuộc phỏng vấn. Phần 5 là lộ trình học tập và ngân hàng câu hỏi phỏng vấn.
1. Tại sao suy luận LLM chậm: Hai nút thắt cổ chai độc lập
Để hiểu tại sao giải mã suy đoán hoạt động, trước tiên bạn phải thấy rõ tại sao suy luận lại chậm. Phần này chưa đề cập đến thuật toán, nhưng nó là nền tảng cho mọi thứ sau này – và việc giải thích rõ ràng trong một cuộc phỏng vấn sẽ ngay lập tức phân biệt bạn với những ứng viên chỉ đơn thuần ghi nhớ thuật toán.
1.1 Nút thắt cổ chai A: Sự phụ thuộc tuần tự của việc tạo sinh tự hồi quy
Các LLM chính thống là các Transformer nhân quả [15] tạo sinh tự hồi quy:
Mỗi token được điều kiện hóa bởi tất cả các token trước đó – việc tạo sinh vốn dĩ là tuần tự.
Mỗi token cần tất cả các token trước đó làm đầu vào. Việc tạo 100 token đồng nghĩa với 100 lượt gọi mô hình nối tiếp.
Bản chất nối tiếp này tồn tại ở cấp độ thuật toán và không thể bỏ qua nếu không thay đổi mô hình hóa – đây chính là nơi xuất phát của các phương pháp tiếp cận triệt để hơn như Lookahead Decoding và các mô hình ngôn ngữ khuếch tán.
1.2 Nút thắt cổ chai B: Giới hạn băng thông bộ nhớ (điểm quan trọng)
Điều này có vẻ phản trực giác và là một chủ đề phỏng vấn được ưa thích: nút thắt cổ chai của suy luận LLM không phải là tính toán GPU (FLOPs) – mà là băng thông bộ nhớ.
Bộ nhớ GPU có cấu trúc phân cấp:
Hệ thống phân cấp bộ nhớ GPU: trọng số nằm ở dưới cùng, các phép toán diễn ra ở trên cùng.
Các lõi tính toán GPU chỉ có thể hoạt động từ SRAM. Trong mỗi lượt chuyển tiếp, tất cả trọng số mô hình phải được truyền từ HBM vào SRAM để tham gia vào quá trình tính toán – điều này được quy định bởi vật lý GPU; không có lớp phần mềm nào có thể bỏ qua nó.
Để định lượng: một mô hình 70B ở định dạng FP16 có trọng số khoảng 140 GB. Với băng thông HBM khoảng 3 TB/s của H100, thời gian tối thiểu cho một lượt chuyển tiếp duy nhất là khoảng 47 ms – giới hạn vật lý thấp nhất về độ trễ trên mỗi token.
Nhưng thực tế quan trọng hơn là: chi phí truyền 140 GB đó hầu như không thay đổi với số lượng token bạn xử lý. Một token: tải mọi thứ một lần. Bảy token: vẫn tải mọi thứ một lần. Xử lý thêm một vài vị trí hầu như không làm tăng thời gian của lượt chuyển tiếp đó.
Tại sao "một vài vị trí bổ sung" lại gần như miễn phí? Thao tác cốt lõi của một lượt chuyển tiếp là phép nhân ma trận Y = X · W: đầu vào X có dạng [N, d] (N vị trí, mỗi vị trí d chiều), trọng số W có dạng [d, d']. Khi GPU đã chuyển W từ HBM vào SRAM, nó nhân cùng một bản sao của W với tất cả N hàng của X.
Nói chính xác: việc tăng từ 1 hàng lên 7 hàng làm tăng FLOPs của GPU – sáu hàng nhân-tích lũy bổ sung không phải là công việc bằng không. Điều quan trọng là một phép nhân ma trận tải W chính xác một lần, và khối lượng tải không phụ thuộc vào số lượng hàng. Vì suy luận LLM bị giới hạn bởi bộ nhớ – tính toán dồi dào và băng thông là yếu tố hạn chế – nên tính toán bổ sung được ẩn trong thời gian tải trọng số: các lõi tính toán đã ở trạng thái chờ W đến, vì vậy việc nhân thêm một vài hàng hầu như không tốn thêm thời gian thực. "Tính toán bổ sung là miễn phí" không có nghĩa là tính toán thực sự không tốn gì – đó là hệ quả trực tiếp của đặc tính tính toán ≫ băng thông của GPU.
1.3 Kết hợp hai nút thắt cổ chai: Vấn đề cốt lõi
Nút thắt cổ chai A (thuật toán): N lượt chuyển tiếp nối tiếp là bắt buộc. Nút thắt cổ chai B (phần cứng): e
Nguồn tin: Medium Towards AI — Tác giả: Borui. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.