1 điểm bởi GN⁺ 2023-07-03 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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.hpp và sử dụng namespace vuda::, còn vuda_runtime.hpp sẽ 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ằng vuda::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

 
GN⁺ 2023-07-03
Ý 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

    • Ban đầu tôi hơi hy vọng điều này có nghĩa là có thể chạy mã CUDA trên GPU AMD, nhưng đọc mô tả thì không phải vậy
    • Vậy thì tôi tò mò nó hữu ích ở điểm nào
    • Nếu muốn tự nhận là lựa chọn thay thế CUDA thì cần hỗ trợ PTX và hỗ trợ phát triển cho nhiều ngôn ngữ
      Nếu không thì với nhiều workload, thậm chí còn chưa thể bắt đầu
    1. Đây là triển khai của một API kiểu C khá thô
      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ó
    2. Việc triển khai Runtime API không phải là lựa chọn phù hợp
      Để 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
    3. Dự án này chưa đến 3000 dò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

    • Hotz đang nói không chỉ về thư viện user-space mà còn về driver

      The software is terrible! There’s kernel panics in the driver. You have to run a newer kernel than the Ubuntu default to make it remotely stable. I’m still not sure if the driver supports putting two cards in one machine, or if there’s some poorly written global state. When I put the second card in and run an OpenCL program, half the time it kernel panics and you have to reboot.
      Anh ấy có nói tới phần user-space, nhưng rõ ràng anh ấy nhìn thấy rất nhiều chỗ cần chỉnh sửa trong toàn bộ stack ở cả trên lẫn dưới các thư viện như thế này

    • Tôi tìm thấy https://www.youtube.com/watch?v=Mr0rWJhv9jUhttps://geohot.github.io/blog/jekyll/update/2023/06/07/a-div...
      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-directmltensorflow-directml

    • Tôi không rõ DirectML có hợp lý hơn việc AMD theo đuổi tương thích CUDA bằng ROCm/MiOpen/HIP hay không
      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
    • Tôi tò mò nó hoạt động thực tế ra sao
      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
    • Thật sự làm được à?
      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

    • Mà commit đó cũng chỉ là thêm một dòng thôi
      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?

  • 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?