Dự án Rust CUDA khởi động lại sau nhiều năm ngưng hoạt động, đối mặt với sự cạnh tranh từ Cudarc

BigGo Editorial Team
Dự án Rust CUDA khởi động lại sau nhiều năm ngưng hoạt động, đối mặt với sự cạnh tranh từ Cudarc

Dự án Rust CUDA, một sáng kiến đầy tham vọng nhằm biến Rust thành ngôn ngữ hạng nhất cho điện toán GPU sử dụng bộ công cụ CUDA của NVIDIA, đã được khởi động lại sau nhiều năm ngưng hoạt động. Sự phát triển này diễn ra vào thời điểm cộng đồng Rust đang tìm kiếm các giải pháp đáng tin cậy cho lập trình GPU, với kết quả khác nhau từ các dự án khác nhau.

Dự án này nhằm cung cấp công cụ để biên dịch Rust sang mã PTX và các thư viện để sử dụng các thư viện CUDA hiện có. Tuy nhiên, các cuộc thảo luận trong cộng đồng cho thấy những thách thức đáng kể và các giải pháp cạnh tranh đã xuất hiện trong thời gian dự án không hoạt động.

Lịch sử và tình trạng hiện tại của dự án

Dự án Rust CUDA đã có một lịch sử không suôn sẻ theo nhận xét của người dùng. Trong nhiều năm, nó vẫn ở trong trạng thái mà người dùng mô tả là không sử dụng được và không được bảo trì, yêu cầu các phiên bản cụ thể, cũ vài năm của cả trình biên dịch Rust (rustc) và CUDA để hoạt động đúng. Thông báo khởi động lại gần đây báo hiệu một nỗ lực hồi sinh dự án, mặc dù dường như chưa có bản phát hành chính thức nào hoạt động với các phiên bản hiện tại của Rust và CUDA.

Thời gian không hoạt động này đã tạo ra một khoảng trống trong hệ sinh thái mà các dự án khác đã cố gắng lấp đầy. Cấu trúc của dự án khá rộng, bao gồm nhiều crate như rustc_codegen_nvvm (một backend rustc nhắm đến NVVM IR), cuda_std (cho các chức năng phía GPU), cudnn (cho mạng thần kinh sâu), và cust (cho các tính năng CUDA phía CPU), cùng với các crate khác.

Sự cạnh tranh từ Cudarc

Trong khi dự án Rust CUDA không hoạt động, một thư viện khác có tên là Cudarc đã thu hút được sự chú ý đáng kể trong cộng đồng. Nhiều người dùng báo cáo đã sử dụng thành công Cudarc trong môi trường chuyên nghiệp, khen ngợi khả năng tương thích của nó với các phiên bản Rust và CUDA gần đây.

Tóm lại, từ một người sử dụng CUDA trên rust trong nhiều dự án: Thư viện Cudarc được bảo trì tích cực và hoạt động tốt. Tuy nhiên, nó không cho phép bạn chia sẻ cấu trúc dữ liệu giữa host và device; bạn sẽ phải [giải]mã hóa dưới dạng luồng byte, sử dụng các hàm mà thư viện cung cấp. Hoạt động trên bất kỳ phiên bản CUDA nào (ít nhất là trong vài năm gần đây) và GPU.

Sự khác biệt chính dường như là Cudarc yêu cầu tuần tự hóa giữa cấu trúc dữ liệu host và device, trong khi dự án Rust CUDA nhằm cho phép chia sẻ kiểu dữ liệu giữa host và GPU. Sự khác biệt này thể hiện một sự đánh đổi cơ bản giữa khả năng sử dụng ngay lập tức và trải nghiệm lập trình liền mạch hơn.

Quan ngại về tính độc lập nền tảng

Một cuộc tranh luận đáng kể trong cộng đồng xoay quanh việc dự án tập trung độc quyền vào CUDA của NVIDIA. Một số người dùng cho rằng việc gắn lập trình GPU của Rust vào công nghệ của một nhà cung cấp duy nhất tạo ra một ngõ cụt hạn chế việc áp dụng rộng rãi hơn trên các nền tảng phần cứng khác nhau.

Những người ủng hộ CUDA chỉ ra hệ sinh thái công cụ vượt trội của nó, bao gồm tích hợp IDE, gỡ lỗi đồ họa và các thư viện mở rộng. Họ lập luận rằng các giải pháp thay thế như OpenCL, Vulkan compute shaders và SYCL thiếu sự hỗ trợ đa ngôn ngữ và trải nghiệm phát triển mà CUDA cung cấp.

Những người khác ủng hộ các phương pháp độc lập với nền tảng, có thể hoạt động trên phần cứng của NVIDIA, AMD, Intel và Apple, gợi ý rằng Rust nên nhắm đến một biểu diễn trung gian có thể được biên dịch cho các kiến trúc GPU khác nhau. Phương pháp này sẽ ưu tiên khả năng tương thích đa nền tảng hơn là các tối ưu hóa chuyên biệt mà CUDA cung cấp.

Các Tùy Chọn Chính Cho Điện Toán GPU Bằng Rust

  • Dự án Rust CUDA

    • Trạng thái: Gần đây được khởi động lại sau nhiều năm ngưng hoạt động
    • Mục tiêu: Cho phép chia sẻ cấu trúc dữ liệu giữa máy chủ và GPU
    • Thành phần: rustc_codegen_nvvm, cuda_std, cudnn, cust, gpu_rand, optix
    • Giấy phép: Cấp phép kép theo Apache 2.0 và MIT
  • Cudarc

    • Trạng thái: Đang được duy trì tích cực
    • Tương thích: Hoạt động với các phiên bản Rust và CUDA mới nhất
    • Hạn chế: Yêu cầu tuần tự hóa giữa dữ liệu máy chủ và thiết bị
    • GitHub: https://github.com/coreylowman/cudarc
  • Các Dự Án Liên Quan Khác

    • rust-gpu: Backend trình biên dịch để biên dịch Rust sang SPIR-V cho shaders
    • glassful (2016): Tập con của Rust có thể biên dịch sang GLSL
    • inspirv-rust (2017): Trình biên dịch thử nghiệm Rust MIR -> SPIR-V
    • nvptx (2018): Sử dụng backend LLVM PTX
    • accel (2020): Thư viện cấp cao hơn sử dụng cơ chế nvptx
    • risl (2020): Trình biên dịch thử nghiệm Rust -> SPIR-V

Áp dụng trong ngành và triển vọng tương lai

Cuộc thảo luận cộng đồng tiết lộ những hiểu biết thú vị về sự quan tâm tiềm năng của NVIDIA đối với Rust. Một người dùng đề cập đến cuộc trò chuyện với một người từ đội CUDA Core Compute Libraries, người này gợi ý rằng trong 5 năm tới, NVIDIA có thể hỗ trợ Rust như một ngôn ngữ để lập trình GPU CUDA. Một người khác lưu ý rằng NVIDIA đã sử dụng Rust trong Dynamo, framework suy luận thông lượng cao độ trễ thấp của họ, mặc dù API công khai dựa trên Python.

Câu hỏi tại sao NVIDIA chưa đầu tư mạnh hơn vào hệ sinh thái Rust vẫn còn bỏ ngỏ, với một số người gợi ý rằng công ty có thể đang chờ đợi giá trị kinh doanh đủ lớn trước khi cam kết nguồn lực.

Khi dự án khởi động lại, những người bảo trì đang tích cực tìm kiếm người đóng góp, thừa nhận rằng có rất nhiều công việc phía trước và tất cả họ đều có công việc hàng ngày. Sự thành công của việc hồi sinh này có thể phụ thuộc vào việc xây dựng đủ động lực cộng đồng để vượt qua các thách thức kỹ thuật đã làm trì trệ dự án trước đây.

Đối với các nhà phát triển cần khả năng tính toán GPU trong Rust ngay hôm nay, sự đồng thuận của cộng đồng dường như ủng hộ Cudarc cho các ứng dụng thực tế, trong khi vẫn theo dõi tiến trình của dự án Rust CUDA hướng tới các mục tiêu tham vọng hơn về tích hợp liền mạch giữa host và device.

Tham khảo: The Rust CUDA Project