CubeCL: Giải pháp lập trình GPU đa nền tảng của Rust ngày càng phát triển bất chấp thiếu hụt tài liệu

BigGo Editorial Team
CubeCL: Giải pháp lập trình GPU đa nền tảng của Rust ngày càng phát triển bất chấp thiếu hụt tài liệu

Hệ sinh thái Rust tiếp tục mở rộng khả năng trong lĩnh vực điện toán hiệu năng cao với CubeCL, một phần mở rộng ngôn ngữ điện toán đa nền tảng cho phép các nhà phát triển viết mã GPU trực tiếp bằng Rust. Mặc dù dự án đã tạo ra sự quan tâm đáng kể, các cuộc thảo luận cộng đồng cho thấy cả sự nhiệt tình về tiềm năng của nó lẫn những lo ngại về tài liệu và cách trình bày tính năng hiện tại.

Các tính năng nâng cao bị ẩn sau tài liệu tối thiểu

Mặc dù CubeCL có những khả năng ấn tượng, nhiều thành viên cộng đồng đã chỉ ra rằng tệp README của dự án không thể hiện được các tính năng mạnh mẽ nhất. Các ví dụ hiện tại chủ yếu tập trung vào các phép toán đơn giản theo từng phần tử, điều này không thể hiện đầy đủ tiềm năng của thư viện cho các tác vụ điện toán GPU nâng cao.

Chúng tôi hỗ trợ các phép toán warp, barriers cho Cuda, atomics cho hầu hết các backend, cũng như hướng dẫn tensor cores. Chỉ là những điều này chưa được tài liệu hóa tốt trong readme!

Một trong những tác giả chính của dự án đã thừa nhận hạn chế này, xác nhận rằng CubeCL thực sự hỗ trợ các kỹ thuật lập trình GPU phức tạp bao gồm các phép toán warp (được gọi là Plane Operations trong CubeCL), barriers, atomics, và thậm chí cả hướng dẫn tensor core. Nhóm thậm chí đã triển khai các hướng dẫn TMA (Tensor Memory Accelerator) cho CUDA, nhưng những khả năng nâng cao này không được nêu bật trong tài liệu.

Yêu cầu của cộng đồng về các ví dụ phức tạp hơn

Một số nhà phát triển đề xuất rằng dự án sẽ được hưởng lợi từ việc trình bày các ví dụ phức tạp hơn, đặc biệt là các phép nhân ma trận với độ chính xác hỗn hợp - một yêu cầu phổ biến trong các công việc AI. Một người bình luận đặc biệt khuyến nghị thay thế ví dụ theo từng phần tử hiện tại bằng một bản demo GEMM có biến thể sẽ minh họa tốt hơn tính hữu ích của CubeCL cho các ứng dụng AI.

Nhóm CubeCL đã phản hồi tích cực với những đề xuất này, với một người đóng góp đề cập rằng hỗ trợ cho các kiểu dữ liệu mới hơn như FP8 và FP4 đang được lên kế hoạch như dự án tiếp theo của họ. Tuy nhiên, họ lưu ý rằng hạn chế về phần cứng hiện đang là nút thắt cổ chai, vì chỉ có một người đóng góp có quyền truy cập vào thiết bị cần thiết để kiểm tra các kiểu mới hơn này.

Vị trí trong hệ sinh thái lập trình GPU

Các cuộc thảo luận cộng đồng cũng đề cập đến việc CubeCL so sánh với các giải pháp lập trình GPU khác. Một số người bình luận đã vẽ ra sự tương đồng với Halide, OpenCL và SYCL, với sự quan tâm đặc biệt đến cách tính năng comptime của CubeCL khiến nó khác biệt so với các giải pháp thay thế này.

Hệ thống comptime cho phép các nhà phát triển thực thi mã tùy ý trong các kernel tại thời điểm biên dịch, cung cấp tính linh hoạt hơn so với các generics truyền thống. Điều này cho phép phân nhánh tự nhiên trên các cấu hình thời điểm biên dịch để chọn thuật toán tối ưu cho các mục tiêu phần cứng khác nhau.

Một số người dùng đặt câu hỏi tại sao OpenCL không được bao gồm như một backend cùng với WGPU, CUDA và ROCm/HIP. Một người đóng góp của CubeCL giải thích rằng mặc dù trình biên dịch SPIR-V có cơ sở hạ tầng để nhắm mục tiêu cả OpenCL và Vulkan, việc triển khai runtime OpenCL sẽ đòi hỏi công việc bổ sung. Họ cũng bày tỏ sự quan tâm đến việc hiểu đặc điểm hiệu suất của OpenCL trên CPU so với các triển khai bản địa hơn.

Các Runtime được CubeCL hỗ trợ:

  • WGPU (đa nền tảng: Vulkan, Metal, DirectX, WebGPU)
  • CUDA (GPU của NVIDIA)
  • ROCm/HIP (GPU của AMD) - Đang phát triển
  • Dự kiến: Runtime CPU JIT với các lệnh SIMD thông qua Cranelift

Tính năng chính:

  • Tự động vector hóa
  • Comptime (tối ưu hóa thời gian biên dịch)
  • Tự động tinh chỉnh
  • Hỗ trợ cho các hoạt động warp, barriers, atomics, tensor cores
  • Nhân ma trận với hỗ trợ Tensor Core

Kết nối với Framework Burn

Một bối cảnh quan trọng xuất hiện từ các bình luận là mối quan hệ của CubeCL với Burn, một framework học sâu được phát triển bởi cùng một nhóm. CubeCL đóng vai trò là backend tính toán cho Burn, xử lý các phép toán tensor trong khi Burn quản lý chức năng học máy cấp cao hơn như vi phân tự động, fusion phép toán và đồ thị tính toán động.

Nhu cầu về CubeCL phát sinh cụ thể từ các yêu cầu của Burn: khả năng viết thuật toán GPU bằng ngôn ngữ lập trình đầy đủ tính năng trong khi cho phép biên dịch thời gian chạy để fusion phép toán, tất cả trong khi duy trì khả năng tương thích đa nền tảng và hiệu suất tối ưu. Theo các nhà phát triển, không có công cụ hiện có nào đáp ứng tất cả các yêu cầu này trong hệ sinh thái Rust.

Mối quan hệ giữa CubeCL và Burn giải thích nhiều quyết định thiết kế đằng sau thư viện, bao gồm sự tập trung vào hiệu suất và khả năng tương thích đa nền tảng. Nó cũng định vị CubeCL như một thành phần quan trọng trong hệ sinh thái học máy dựa trên Rust đang phát triển.

Khi dự án trưởng thành, cộng đồng dường như háo hức đón nhận tài liệu và ví dụ toàn diện hơn để thể hiện tốt hơn khả năng đầy đủ của CubeCL. Với kế hoạch hỗ trợ các kiểu dữ liệu mới hơn và sự phát triển liên tục, CubeCL dường như đang sẵn sàng lấp đầy một khoảng trống quan trọng trong lĩnh vực điện toán GPU của Rust, đặc biệt là cho các ứng dụng học máy.

Tham khảo: cubecl/cubecl