- Áp dụng Autoresearch của Karpathy vào tối ưu hóa GPU kernel
- Công cụ nghiên cứu tự động cho GPU kernel tự động tối ưu Triton hoặc CUDA C++ kernel khi đưa mô hình PyTorch vào làm đầu vào
- Cung cấp pipeline tự động hoàn toàn để profile, trích xuất, tối ưu hóa và xác minh các kernel nút thắt cổ chai của mô hình
- Điều phối ưu tiên bằng orchestration dựa trên định luật Amdahl, mỗi thử nghiệm mất khoảng 90 giây nên có thể lặp lại hàng trăm lần qua đêm
- Tích hợp với KernelBench để thực hiện 50~300 lần thử nghiệm lặp lại cho hơn 250 bài toán, cho phép khám phá có hệ thống thay vì tạo sinh một lần
- Hỗ trợ tối ưu hóa kernel hiệu quả và có thể tái lập với backend kép Triton và CUDA C++, xác minh ưu tiên độ chính xác, và cấu trúc chỉnh sửa một tệp duy nhất
Cách hoạt động
- AutoKernel nhận mô hình PyTorch làm đầu vào và thực hiện các bước sau
- Xác định các GPU kernel là nút thắt cổ chai bằng profiling
- Trích xuất và tách chúng thành các Triton hoặc CUDA C++ kernel độc lập
- Lặp lại việc sửa đổi, benchmark, giữ lại hoặc hoàn tác thông qua vòng lặp tối ưu hóa tự động
- Xác minh độ chính xác rồi báo cáo mức cải thiện tốc độ tổng thể
- Dựa trên các chỉ dẫn trong
program.md, hệ thống chỉnh sửa kernel.py và thực hiện kiểm tra độ chính xác 5 bước cùng phân tích roofline thông qua bench.py
- Mỗi thử nghiệm mất khoảng 90 giây, tương đương khoảng 40 lần mỗi giờ và khoảng 320 lần trong một đêm
Thực thi và các thành phần
- Môi trường bắt buộc: NVIDIA GPU (H100/A100/RTX 4090), Python 3.10+, gói
uv
- Cấu thành các script chính
profile.py: xếp hạng kernel theo thời gian GPU
extract.py: trích xuất các kernel nút thắt cổ chai hàng đầu
bench.py: benchmark hiệu năng và độ chính xác 5 bước
orchestrate.py: lập lịch đa kernel dựa trên định luật Amdahl
verify.py: xác minh toàn bộ mô hình và báo cáo mức tăng tốc
program.md bao gồm chiến lược tối ưu hóa 6 bước, xử lý xung đột và khung ra quyết định để có thể tự động chạy trong thời gian dài
Các kernel được hỗ trợ và mô hình ví dụ
- Hỗ trợ 9 loại kernel: matmul, softmax, layernorm, rmsnorm, flash_attention, fused_mlp, cross_entropy, rotary_embedding, reduce
- Mỗi kernel đi kèm triển khai tham chiếu theo PyTorch (
reference.py) và phiên bản Triton/CUDA ban đầu (kernels/, kernels/cuda/)
- Mô hình ví dụ: GPT-2, LLaMA (bao gồm 7B), BERT-base, mô hình tự định nghĩa
- Có thể tích hợp cả mô hình HuggingFace bằng
uv sync --extra models
Tích hợp KernelBench
- Tích hợp với KernelBench (Stanford Scaling Intelligence Lab) để thực hiện benchmark tiêu chuẩn cho GPU kernel do AI tạo ra
- AutoKernel thực hiện 50~300 lần thử nghiệm lặp lại cho mỗi bài toán để khám phá không gian tối ưu hóa một cách có hệ thống
- Các công cụ chính
bridge.py: tải bài toán và tạo kernel ban đầu
bench_kb.py: đánh giá độ chính xác và hiệu năng
scorer.py: tính điểm toàn bộ level
program_kb.md: chỉ dẫn agent dành riêng cho KernelBench
Xuất lên HuggingFace Hub
- Có thể xuất các kernel đã tối ưu lên HuggingFace Hub và gọi lại dễ dàng bằng
get_kernel()
export_hf.py hỗ trợ xuất và tải lên CUDA kernel
Nguyên tắc thiết kế
- Backend kép Triton + CUDA C++: Triton cho lặp nhanh, CUDA cho hiệu năng cao nhất
- Ưu tiên độ chính xác: nếu không khớp với kết quả PyTorch thì hoàn tác ngay
- Xác định ưu tiên theo mức đóng góp hiệu năng tổng thể bằng orchestration dựa trên định luật Amdahl
- Cấu trúc chỉnh sửa một tệp (
kernel.py) giúp dễ theo dõi thay đổi và khôi phục
- Log TSV (
results.tsv) ghi lại kết quả thử nghiệm theo cách đơn giản và dễ đọc
Định dạng ghi kết quả
results.tsv ghi lại số thứ tự, loại kernel, thông lượng (TFLOPS), độ trễ, tỷ lệ so với đỉnh GPU, mức tăng tốc so với PyTorch, độ chính xác, mức dùng VRAM, mô tả của từng thử nghiệm
Bối cảnh dự án
- Lấy cảm hứng từ khái niệm autoresearch của Andrej Karpathy, áp dụng cấu trúc AI agent tự trị dành cho nghiên cứu LLM vào tối ưu hóa GPU kernel
- Việc tích hợp KernelBench dựa trên nghiên cứu của Stanford Scaling Intelligence Lab, và AutoKernel thực hiện tối ưu hóa lặp lại thay vì tạo sinh một lần
- Dự án được phát triển bởi nhóm Forge của RightNow AI và phát hành theo giấy phép MIT
1 bình luận
Ý kiến trên Hacker News
Dự án này thật sự rất tuyệt
Tôi cũng đã làm thứ gì đó tương tự trong vài tuần qua, nhưng là một phiên bản tổng quát hơn nhiều và bị thiết kế quá mức
Cách tiếp cận này, tập trung vào Triton và chỉ một số kernel cụ thể, vừa đơn giản vừa hiệu quả
Tuy nhiên biểu đồ tiến độ khá khó hiểu. Nó trông giống benchmark matmul fp16 4096x4096x4096, nhưng dù nói là cải thiện 1,31 lần so với cuBLAS, nó chỉ cho thấy 187 TFLOPS, tức 18,9% mức tận dụng đỉnh
cuBLAS cho hiệu năng gần mức đỉnh hơn nhiều, nên có lẽ là do overhead CPU hoặc một nút thắt cổ chai khác
Benchmark thực sự rất khó, nhưng tôi nghĩ lĩnh vực này sẽ cực kỳ hứa hẹn trong 6 tháng tới
Nếu thứ này hoạt động được trong những nơi như llama.cpp thì có lẽ lợi ích còn lớn hơn nhiều
Có rất nhiều kernel lượng tử hóa và cấu hình phần cứng khác nhau, lại có nhiều người dùng cá nhân, nên biên độ cải thiện hiệu quả sẽ rất lớn
Sẽ thật tốt nếu dự án này tham gia đóng góp vào đó
llama.cpp có nhiều CUDA kernel được tinh chỉnh thủ công như Q4_K_M, Q5_K_S, Q8_0, và mỗi cái nhắm tới một hồ sơ phần cứng khác nhau
Nếu có thể tự động tối ưu theo từng GPU thì sẽ là một thay đổi cực lớn
Hiện tại, ngay cả cùng một định dạng lượng tử hóa, chênh lệch hiệu năng giữa RTX 3090 và 5070 Ti vẫn rất lớn
Những môi trường có độ đa dạng phần cứng cao như llama.cpp chính là nơi khám phá kernel tự động tỏa sáng nhất
Tuyệt vời!
Tôi cũng đang thêm tính năng tương tự cho Apple Silicon
Trong dự án autoresearch-everywhere của mình, tôi đang biến autoresearch thành một công cụ nghiêm túc
Có gì đó không ổn
Nếu lấy GEMM fp16 4kx4kx4k làm chuẩn thì cutlass nhanh hơn khoảng 3 lần
Tôi tò mò không biết họ đã benchmark so sánh với auto-scheduling như Ansor của TVM chưa
Đây mới chỉ là khởi đầu
Để tham khảo, Google đã làm điều tương tự từ hai thế hệ mô hình trước rồi
Trong bài blog tháng 5/2025 AlphaEvolve, họ công bố đã tăng tốc 23% kernel cốt lõi của kiến trúc Gemini bằng cách chia phép nhân ma trận lớn thành các bài toán con nhỏ hơn, từ đó giảm thời gian huấn luyện 1%
Giờ đây đã đến thời kỳ mà những kỹ thuật như vậy cũng có thể làm được “ngay tại nhà”
Đặc biệt khi gần đây có nhiều huấn luyện dựa trên RL, cải thiện tốc độ suy luận sẽ trực tiếp dẫn tới cải thiện tốc độ huấn luyện
Tôi tự hỏi đến bao giờ những runtime ngôn ngữ mã nguồn mở như Swift hay Rust cũng sẽ có các tối ưu kiểu này để vắt ra giọt hiệu năng cuối cùng