L3 · Device code
Các hàm tính toán hiệu năng cao trên thiết bị
Các hàm tính toán cấp thấp chạy trực tiếp trên hàng nghìn nhân của GPU để thực hiện nhân ma trận, attention và chuẩn hóa.
1Định nghĩa
Kernel là hàm tính toán cấp thấp chạy trực tiếp trên các đơn vị xử lý song song của GPU, được runtime gọi liên tục ở từng lớp của mô hình. Mỗi bước suy luận thực chất là một chuỗi lời gọi kernel nối tiếp nhau: nhân ma trận (GEMM), tính Attention, chuẩn hóa vector và hàm kích hoạt.
Để đạt hiệu năng cao, các kernel hiện đại (viết bằng CUDA hoặc Triton) chia dữ liệu thành từng khối nhỏ (tiling) nạp vào bộ nhớ đệm siêu nhanh trên chip (SRAM/shared memory), tính toán song song rồi gộp luôn các bước phụ tại chỗ (kernel fusion) trước khi ghi kết quả cuối cùng ra bộ nhớ HBM.
Ví dụ đời thường: Mỗi kernel giống như một đội thợ chuyên môn hóa cao cùng đồng thanh thực hiện một thao tác trên sàn xưởng (như đội chuyên cắt thép hoặc đội chuyên hàn điểm). Khi có lệnh, hàng nghìn người thợ trong đội chia nhau từng mảnh nhỏ nằm ngay trên bàn thao tác trước mặt để làm song song cùng một lúc, thay vì một người làm lần lượt từng chiếc.
2Luồng
- Tensor đầu vào
Có shape, dtype và layout cụ thể.
- Đọc dữ liệu theo tiles
Đưa phần cần dùng tới bộ nhớ gần compute.
- Tính và ghi kết quả
Nhân ma trận hoặc attention theo thuật toán.
- Đưa vào phép toán kế
Tránh tạo trung gian dư nếu fusion phù hợp.
Mã Mermaid
flowchart TD
step1["Tensor đầu vào"]
step2["Đọc dữ liệu theo tiles"]
step3["Tính và ghi kết quả"]
step4["Đưa vào phép toán kế"]
step1 --> step2
step2 --> step3
step3 --> step4 3Giải pháp
Attention kiểu IO-aware dùng cách tính giảm số lần đọc ghi, còn kernel normalization thường cần tối ưu memory traffic. Chọn kernel theo shape thực tế, không chỉ một benchmark thuận lợi.
Ghép nhiều phép toán có thể tiết kiệm traffic nhưng tăng register pressure. Khi tài nguyên mỗi thread quá cao, fusion có thể làm chậm.
4Profiling
- Latency theo shape
Đo nhiều kích thước và kiểu số sau warmup; kiểm tra sai số cùng lúc.
- Bandwidth và compute
Xem số byte truyền, hoạt động phần tính toán và spills để xác định giới hạn.
Mẹo đo lường: ghim số liệu trên workload thật, ghi cả p50/p95/p99 thay vì chỉ trung bình, và luôn ghi lại điều kiện chạy (batch, cache, đồng thời, phần cứng) trước và sau khi tối ưu. Số đo thiếu điều kiện chạy thì không so sánh được.
5Ví dụ
Chuẩn hóa vector
Ghép normalization với phép cộng residual có thể bớt một vòng đọc ghi.
Attention context dài
Tiled attention giảm nhu cầu materialize ma trận điểm số đầy đủ; lợi ích phụ thuộc backend.
6Thuật ngữ
- General Matrix Multiply
- Phép nhân ma trận tổng quát, thường viết tắt là GEMM.
- Tiling
- Chia phép tính thành các ô để tái dùng dữ liệu trong bộ nhớ gần phần tính toán.
- Kernel fusion
- Gộp các thao tác để giảm đọc ghi và launch overhead.
Glossary (13)
- Graphics Processing Unit
- Bộ xử lý đồ họa, thường dùng cho phép tính tensor song song.
- Data type
- Kiểu dữ liệu của tensor, quyết định cách biểu diễn số.
- Tensor
- Mảng số nhiều chiều, như một vector, ma trận hoặc nhóm ma trận.
- Vector
- Danh sách các số biểu diễn một token hoặc đặc trưng.
- Model weights
- Các tham số số học được học và lưu trong checkpoint.
- Runtime
- Phần mềm quản lý việc thực thi, buffers và phụ thuộc giữa phép toán.
- Latency
- Thời gian chờ để nhận một kết quả hoặc một bước kết quả.
- Warmup
- Chạy chuẩn bị để hoàn tất khởi tạo, compilation/capture hoặc ổn định execution trước đo.
- Host
- Phần chương trình điều khiển thiết bị, thường chạy trên bộ xử lý trung tâm.
- Forward pass
- Tính kết quả model từ đầu vào theo weights hiện tại.
- Backward pass
- Tính gradients ngược qua các phụ thuộc của forward graph.
- Context
- Chuỗi token trước vị trí hiện tại mà model được phép sử dụng.
- Tensor shape
- Kích thước các chiều của tensor; ảnh hưởng layout, kernel và memory.