VUDA: Triển khai Vulkan của CUDA
(github.com/jgbit)- VUDA là một thư viện header-only dựa trên Vulkan, cung cấp giao diện CUDA Runtime API để viết các ứng dụng tăng tốc GPU
- Các tính năng tuân theo đặc tả CUDA runtime trong phạm vi có thể, và với cách sử dụng thông thường có thể tham khảo tài liệu CUDA Runtime API của NVIDIA
- Có thể truy cập mọi tính năng bằng cách include
vuda.hppvà sử dụng namespacevuda::, cònvuda_runtime.hppsẽ bao bọc và chuyển hướng các tính năng CUDA - Quy trình làm việc ví dụ sử dụng các lệnh gọi CUDA Runtime API như
cudaSetDevice,cudaMalloc,cudaMemcpy,cudaFree, và khi không dùng NVCC thì thực thi Vulkan shader module bằngvuda::launchKernel("add.spv", "main", ...) - Các mục tài liệu gồm Change List, Setup and Compilation, Deviations from CUDA, Implementation Details
1 bình luận
Ý kiến trên Hacker News
Đây không phải là triển khai của CUDA mà là triển khai của CUDA Runtime API
API này được dùng để cấu hình card, cấp phát/sao chép bộ nhớ và chạy kernel
Điều quan trọng là với nó bạn không thể viết mã kernel thực sự chạy trên GPU
Nếu không thì với nhiều workload, thậm chí còn chưa thể bắt đầu
Cũng có wrapper API Modern C++ cung cấp kiểm tra lỗi tự động, quản lý tài nguyên bằng RAII, v.v.: https://github.com/eyalroz/cuda-api-wrappers
Nhân tiện, tôi là tác giả của nó
Để làm được các việc như cô lập context hay thêm động các JIT kernel mới biên dịch thành module thì việc triển khai Driver API mới là quan trọng
Chỉ riêng việc bao phủ toàn bộ API cốt lõi của CUDA, tức driver, runtime, NVTX, CUDA-C++ và biên dịch JIT PTX, đã mất hơn 14.000 dòng
Tôi tò mò chuyện này liên quan thế nào đến mục tiêu mà George Hotz từng nói tới: làm cho machine learning khả thi trên chip AMD và phá vỡ sự thống trị của Nvidia
Tôi không phải chuyên gia, nhưng cách tiếp cận này trông có vẻ mạnh mẽ và quan trọng
Chỉ là hệ thống quá phức tạp nên tôi nghi ngờ liệu một cá nhân có thể làm được không, và có vẻ để bắt đầu thì cần tài trợ từ doanh nghiệp
Có lẽ AMD cũng có thể quan tâm tới việc trực tiếp chi trả kỹ sư để lặp lại và cải tiến dần dần
Giờ tôi thấy nhẹ lòng hơn đôi chút về hành trình dùng AMD của mình
Có vẻ driver GPU thực sự có vấn đề lớn, và hóa ra không chỉ mình tôi gặp vậy
Nếu bạn đang dùng GPU AMD trên Windows và muốn huấn luyện hoặc chạy mô hình machine learning, có thể nên xem torch-directml và tensorflow-directml
CUDA và DirectX dường như quá low-level để làm API tương thích trên những phần cứng rất khác nhau như AMD và Nvidia mà không phải hy sinh nhiều hiệu năng
cuDNN ở mức cao hơn, nên có nhiều dư địa hơn để cung cấp tính tương thích mà không mất hiệu năng bằng cách có các triển khai kernel riêng phù hợp cho phần cứng AMD và Nvidia
Nhưng phần lớn công việc mà các framework như PyTorch làm không chỉ dựa vào cuDNN mà còn dựa trên custom kernel
Lựa chọn tốt nhất cho AMD có vẻ là một API low-level vững chắc, ổn định, cùng với hỗ trợ cho các trình biên dịch machine learning tối ưu hóa ở mức cao để các nhà cung cấp framework như PyTorch, TensorFlow và JAX dễ xây hỗ trợ bên trên
Rốt cuộc bên hưởng lợi từ điều đó là các nhà cung cấp framework, nên AMD cần hợp tác rất chặt chẽ với họ
Việc AMD trong nhiều năm dường như xem nhẹ hỗ trợ machine learning là điều khá lạ
Có thể họ nghĩ thị trường machine learning tiêu dùng quá nhỏ so với thị trường đồ họa/game nên không đáng đầu tư, nhưng như Nvidia đã cho thấy, đây là con đường dẫn tới các hợp đồng datacenter có lợi nhuận cao hơn nhiều
Lần cuối tôi thử DirectML thì hỗ trợ còn kém và phần mềm hỗ trợ nó cũng ít
Hiệu năng cũng không có vẻ tốt lắm
Hiện giờ tôi dùng bản cài đặt Linux, nơi ROCm cho phép tôi dùng các công cụ phổ biến như Automatic111 webui và oobabooga
Nếu AMD ra một GPU có giá hợp lý mà đánh bại Nvidia trong machine learning, tôi có thể sẽ mua GPU mới
GPU Nvidia tử tế quá đắt, rất khó để biện minh cho việc mua
Trông như một dự án đã chết
Commit cuối cùng là vào tháng 2 năm 2022
Phần lớn mã đều là từ 3 đến 5 năm trước
Tôi chưa từng tự lập trình GPU nên hỏi thật, cái này so với HIP thì thế nào?
Nó có thể là một lớp trừu tượng hiệu quả trên cả GPU Nvidia lẫn AMD không?
Nó chuyển mã nguồn CUDA thành cây cú pháp trừu tượng, các matcher chuyển đổi sẽ duyệt qua cây đó rồi xuất ra mã nguồn HIP
Ngoài ra, danh sách CUDA API mà hipify-clang hỗ trợ có ở đây: https://rocm.docs.amd.com/projects/HIPIFY/en/latest/supporte...
Tôi không kỳ vọng gì ở AMD
Họ đáng lẽ phải làm các công cụ tương thích từ lâu rồi
Những dự án kiểu này xuất hiện khá thường xuyên nhưng không tạo được động lực, và tôi vẫn đang dùng GPU Nvidia
Có lẽ cái này cũng sẽ không khác mấy
Khá thú vị
Vậy điều đó có nghĩa là chương trình tăng tốc CUDA của tôi lẽ ra phải chạy được trên cả thiết bị AMD và Intel sao?