Tìm hiểu hệ thống suy luận LLM trên Apple Silicon
Đường dẫn bài viết: https://github.com/skyzh/tiny-llm Đường dẫn bình luận: https://news.ycombinator.com/item?id=50302361 Điểm: 2 Số bình luận: 1
tiny-llm
tiny-llm là khóa học thực hành dành cho các kỹ sư hệ thống có nhu cầu tìm hiểu toàn diện quy trình suy luận mô hình ngôn ngữ lớn (LLM). Khóa học có thể được xem là một hợp phần phục vụ LLM (LLM-serving) tương ứng với dự án Needle của CMU: xây dựng quy trình tải mô hình Qwen3, chuyển đổi các token thành logit và tạo văn bản.
Khóa học bắt đầu với các phép toán mảng và ma trận, sau đó giới thiệu các kernel cùng cơ chế vận hành hệ thống phục vụ theo nhu cầu thực tế của mô hình. Việc duy trì quy mô triển khai đủ gọn để có thể đọc hiểu toàn bộ mã nguồn giúp người học liên kết trực tiếp các phương trình lý thuyết với lưu lượng bộ nhớ, mức độ chiếm dụng kernel, sự gia tăng KV-cache, kỹ thuật xử lý theo lô (batching) và điều phối yêu cầu.
Khóa học được xây dựng trên mảng MLX và môi trường thực thi mở rộng của MLX mà không sử dụng các tầng mạng nơ-ron bậc cao. Khi một chương giới thiệu một toán tử, bài làm yêu cầu lập trình toán tử đó bằng Python, C++ hoặc Metal thay vì gọi các thao tác tối ưu hóa sẵn có của MLX. MLX đóng vai trò là chuẩn đối chiếu tính chính xác và mốc cơ sở về hiệu năng.
Lộ trình học tập
Khóa học được thiết kế theo lộ trình học tập kéo dài bốn tuần:
Tuần 1: Từ phép nhân ma trận đến văn bản. Xây dựng mô hình Qwen3 trực tiếp từ các phép toán mảng mlx.core: attention, RoPE, GQA, RMSNorm, MLP, lấy mẫu (sampling) và vòng lặp tự hồi quy.
Tuần 2: Tối ưu hóa tốc độ xử lý yêu cầu đơn lẻ. Ngày 1 bổ sung kv-cache và capacity-cache giới hạn theo yêu cầu; Ngày 2 duy trì đóng gói các trọng số chiếu W4 qua mốc kiểm tra quantized-matvec. Ngày 3 bổ sung tiền điền (prefill) ma trận SIMD tại simd-matmul. Ngày 4 bổ sung các mốc kiểm tra RMSNorm tích lũy, RoPE và SwiGLU. Ngày 5 bổ sung tiled-prefill và vận hành mô hình hoàn chỉnh được lựa chọn.
Tuần 3: Xây dựng hệ thống vLLM thu nhỏ. Áp dụng kỹ thuật xử lý lô liên tục (continuous batching) và tiếp nhận phân đoạn (chunked admission), sau đó thiết lập cấu trúc paged KV làm bố cục phục vụ tiêu chuẩn. Các cơ chế decode attention và FlashAttention được cấu hình để đọc trực tiếp các trang bộ nhớ, giúp bộ điều phối không phải tái dựng lịch sử dày đặc ở mỗi bước.
Tuần 4: Xây dựng tác tử lập trình (Coding Agent). Bắt đầu với vòng lặp tác tử có giới hạn và được kiểm định, sau đó kết nối vào một không gian làm việc nhỏ. Khóa học công bố từng mốc kiểm tra đã qua rà soát; từ Ngày 1 đến Ngày 9 hiện bao gồm việc kiểm tra, các chỉnh sửa đã phê duyệt, một lệnh kiểm định, biên nhận kết quả thực thi đơn giản, một ranh giới kiểm tra-tiếp tục hiển thị, nén ngữ cảnh dựa trên biên nhận, một điểm dừng kiểm tra-điều hướng hiển thị, đánh giá xác định các kết quả quan sát được, tái sử dụng tokenizer/tiền tố KV cho hai nhánh điều hướng độc lập và lựa chọn rõ ràng dựa trên bằng chứng, tiếp theo là bằng chứng giới hạn phạm vi truy xuất cho kết quả công cụ vượt kích thước.
Lý do lựa chọn MLX và Qwen3
Nền tảng Apple silicon cung cấp môi trường cục bộ thực tế với không gian bộ nhớ chia sẻ thống nhất và khả năng truy cập trực tiếp vào các Metal kernel. Học viên có thể kiểm tra toàn bộ quy trình trên một thiết bị thay vì phụ thuộc vào hệ thống GPU CUDA tốn kém.
Qwen3-4B có kích thước đủ lớn để bộc lộ các chi phí thực tế về băng thông trọng số, attention và bộ nhớ đệm, song cũng đủ nhỏ gọn để triển khai lặp lại trên máy cục bộ. Cơ chế grouped-query attention, chuẩn hóa QK, kích hoạt BF16 và trọng số 4-bit của mô hình này cũng giúp các bài thực hành bám sát thực tế triển khai mô hình hiện nay.
Hướng dẫn bắt đầu
Tài liệu được phát hành tại skyzh.github.io/tiny-llm. Người học có thể bắt đầu bằng việc thiết lập môi trường, hoặc kiểm tra mã nguồn hiện có bằng các câu lệnh:
pdm install -v
pdm run check-installation
pdm run test-refsol -- -- -k week_1
Gói tiny_llm là nơi học viên thực hiện các bài tập. Gói tiny_llm_ref chứa mã nguồn tham khảo được sử dụng cho các bài kiểm tra và phụ lục đo điểm chuẩn (benchmark). Mục lục tài liệu liệt kê thứ tự các chương; tiến độ triển khai, kiểm thử và mức độ sẵn sàng phát hành được theo dõi dưới đây.
Lộ trình phát triển
Bảng theo dõi tiến độ triển khai mã nguồn (Code), kiểm thử (Test), kết xuất tài liệu chương (Doc) và đánh giá của Chi đối với học liệu dành cho học viên (Audit). Tuần 4 hiện phát hành theo tiến độ rà soát từng ngày; các Ngày từ 1 đến 9 đã được mở cho học viên tiếp cận. Cột Đánh giá (Audit) phản ánh khâu biên tập độc lập của Chi đối với nội dung khóa học đã phát hành, tách biệt với trạng thái hoàn thiện của mã nguồn, kiểm thử hay tài liệu.
Ngày 3 có thể gửi nội dung tệp tới mô hình, sửa đổi tệp sau khi được phê duyệt và thực thi chính xác một lệnh đã cấu hình. Cần sử dụng một không gian làm việc dùng một lần không chứa dữ liệu nhạy cảm và đọc phần tổng quan Tuần 4 trước khi vận hành vòng lặp.
Ngày 4 thiết lập điểm kiểm tra (checkpoint) cho một ranh giới công cụ - quan sát hoàn chỉnh cùng siêu dữ liệu bộ nhớ đệm giả lập của mô hình dạng kịch bản, sau đó khôi phục một mô hình mới mà không chạy lại thao tác chỉnh sửa hoặc câu lệnh đã hoàn thành.
Ngày 5 nén các tác vụ cũ đã hoàn thành trong bản ghi hiển thị với mô hình, trong khi chứng từ (receipts) chi tiết vẫn lưu trữ đầy đủ hành động, kết quả và các cấu phần thay đổi.
Ngày 6 kiểm tra một điểm kiểm tra quan sát hoàn chỉnh, bổ sung một chỉ thị vận hành hiển thị và tái khởi động một mô hình mới mà không chạy lại tác vụ đã hoàn thành.
Ngày 7 đánh giá một lượt chạy hoàn chỉnh dựa trên các dữ kiện đã khai báo về trạng thái cuối, tệp, kết quả và chứng từ xác nhận mà không chấm điểm quá trình suy luận ẩn hay cấu trúc chính xác của bản ghi.
Ngày 8 tái sử dụng một điểm kiểm tra tokenizer/KV thực tế cho hai nhánh xử lý tiếp nối riêng biệt, được định hướng khác nhau, đánh giá cả hai bằng bộ khung kiểm thử của Ngày 7 và đưa ra một lựa chọn đạt chuẩn rõ ràng mà không giả định việc đảo ngược các tác vụ đã hoàn tất.
Ngày 9 lưu trữ chính xác các byte kết quả công cụ vượt kích thước bên ngoài prompt của mô hình, hiển thị quan sát có giới hạn gồm định danh/bản tóm lược (digest)/phần đầu - cuối, đồng thời cho phép mô hình truy xuất một dải byte xác định thông qua vòng lặp hiện có.
Tuần + Chương
Chủ đề
Code
Test
Doc
Audit
1.1
Attention
✅
✅
✅
✅
1.2
RoPE
✅
✅
✅
✅
1.3
Grouped Query Attention
✅
✅
✅
✅
1.4
RMSNorm và MLP
✅
✅
✅
✅
1.5
Tải mô hình (Load the Model)
✅
✅
✅
✅
1.6
Tạo phản hồi (hay Giải mã - Decoding)
✅
✅
✅
✅
1.7
Lấy mẫu (Sampling)
✅
✅
✅
✅
2.1
Bộ nhớ đệm và Đo lường (kv-cache, capacity-cache)
🚧
🚧
✅
🚧
2.2
Duy trì đóng gói W4 (quantized-matvec)
🚧
🚧
✅
🚧
2.3
Điền trước ma trận SIMD (simd-matmul)
🚧
🚧
✅
🚧
2.4
Các thành phần cơ bản của mô hình hợp nhất (rmsnorm, rope, swiglu)
🚧
🚧
✅
🚧
2.5
Tiled Dense Prefill Attention (tiled-prefill, selected)
🚧
🚧
✅
🚧
3.1
Continuous Batching
✅
✅
✅
🚧
3.2
Chunked Prefill
✅
✅
✅
🚧
3.3
Paged KV Cache
✅
✅
✅
🚧
3.4
Direct Paged Attention
✅
✅
✅
🚧
3.5
Paged FlashAttention
✅
✅
✅
🚧
3.6 (tùy chọn)
MoE (Mixture of Experts)
✅
✅
✅
🚧
3.7 (tùy chọn)
Speculative Decoding
✅
✅
✅
🚧
4.1
Validated Agent Loop
✅
✅
✅
🚧
4.2
Kiểm tra không gian làm việc (Inspect a Workspace)
✅
✅
✅
🚧
4.3
Chỉnh sửa, Xác thực và Ghi lại (Edit, Validate, and Record)
✅
✅
✅
🚧
4.4
Thiết lập điểm kiểm tra một
Nguồn tin: Hacker News LLM — Tác giả: bretpiatt. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.