Một dự án mang Cuda đến GPU không phải NVIDIA đang đạt được tiến bộ lớn
ZLUDA, một lớp chuyển đổi CUDA suýt đóng cửa năm ngoái nhưng đã được cứu bởi một bên không rõ danh tính, tuần này đã chia sẻ cập nhật về tiến triển kỹ thuật và mở rộng đội ngũ trong quý vừa qua, theo Phoronix. Dự án tiếp tục phát triển khả năng chạy các tác vụ CUDA trên GPU không phải Nvidia, hiện tập trung nhiều vào AI hơn là các lĩnh vực khác. Bên cạnh đó, họ cũng đã bắt đầu làm việc để hỗ trợ PhysX 32-bit, cần thiết cho tính tương thích với các trò chơi cũ dựa trên CUDA.
Điều quan trọng nhất của dự án ZLUDA là đội ngũ phát triển đã tăng từ một lên hai lập trình viên toàn thời gian. Lập trình viên thứ hai, Violet, gia nhập chưa đầy một tháng và đã mang lại nhiều cải tiến quan trọng, đặc biệt trong việc hỗ trợ tải công việc của mô hình ngôn ngữ lớn LLM thông qua dự án llm.c. Một cộng đồng đóng góp tên Groowy đã bắt đầu công việc ban đầu để kích hoạt hỗ trợ 32-bit PhysX trong ZLUDA bằng cách thu thập nhật ký CUDA chi tiết, nhanh chóng phát hiện ra một số lỗi.
Một số vấn đề này có thể ảnh hưởng đến chức năng CUDA 64-bit, vì vậy việc khắc phục đã được đưa vào kế hoạch chính thức. Tuy nhiên, việc hoàn thiện hỗ trợ PhysX 32-bit vẫn cần sự giúp đỡ thêm từ các nhà phát triển mã nguồn mở.
Các nhà phát triển ZLUDA đang thực hiện một dự án thử nghiệm mang tên llm.c, là một chương trình mẫu nhằm chạy mô hình GPT-2 bằng CUDA. Mặc dù đây không phải là một thử nghiệm lớn, nhưng nó quan trọng vì là lần đầu tiên ZLUDA xử lý cả các hàm CUDA thông thường lẫn các thư viện đặc biệt như cuBLAS cho các phép toán nhanh. Chương trình thử nghiệm này thực hiện 8,186 cuộc gọi riêng biệt đến các hàm CUDA, trải dài qua 44 API khác nhau.
Ban đầu, ZLUDA gặp sự cố ngay ở lần gọi đầu tiên. Nhờ những cập nhật từ Violet, giờ đây nó có thể hoạt động đến lần gọi thứ 552 trước khi gặp lỗi. Nhóm đã hoàn thành hỗ trợ cho 16 trong số 44 chức năng cần thiết, tiến gần hơn đến việc thực hiện thành công toàn bộ bài kiểm tra. Khi điều này thành công, nó sẽ giúp ZLUDA hỗ trợ các phần mềm lớn hơn như PyTorch trong tương lai.
Cải thiện độ chính xác của ZLUDA có mục tiêu chính là chạy các chương trình CUDA tiêu chuẩn trên GPU không phải của Nvidia, đồng thời tái tạo hành vi của phần cứng Nvidia một cách chính xác nhất có thể. Điều này có nghĩa là mỗi lệnh phải cho kết quả giống hệt nhau từng bit hoặc nằm trong giới hạn sai số nghiêm ngặt so với phần cứng Nvidia. Các phiên bản trước của ZLUDA, trước khi có sự thay đổi mã lớn, thường thỏa hiệp về độ chính xác bằng cách bỏ qua một số bộ điều chỉnh lệnh hoặc không duy trì độ chính xác đầy đủ.
Triển khai hiện tại đã đạt được tiến bộ đáng kể trong việc khắc phục vấn đề này. Để đảm bảo độ chính xác, nó thực hiện các bài kiểm tra PTX sweep — kiểm tra hệ thống bằng ngôn ngữ GPU trung gian của Nvidia — nhằm xác nhận rằng mọi kết hợp lệnh và bộ điều chỉnh đều tạo ra kết quả chính xác trên tất cả các đầu vào, điều này chưa từng được sử dụng trước đây. Việc chạy các kiểm tra này đã phát hiện ra một số khiếm khuyết của trình biên dịch, và chúng đã được khắc phục sau đó.
📢 Liên hệ quảng cáo: 0919 852 204
Quảng cáo của bạn sẽ xuất hiện trên mọi trang!
ZLUDA thừa nhận rằng không phải tất cả các lệnh đều đã hoàn thành việc xác thực nghiêm ngặt, nhưng nhấn mạnh rằng một số trường hợp phức tạp nhất, như lệnh cvt, đã được xác nhận chính xác từng bit. Để cải thiện việc ghi log, việc có được thông tin về cách phần mềm dựa trên CUDA hoạt động trên ZLUDA — cho dù đó là trò chơi, ứng dụng 3D hay khung ML — là rất quan trọng, bao gồm việc theo dõi các cuộc gọi API trực tiếp, các phần không tài liệu của runtime hoặc driver CUDA, và việc sử dụng các thư viện hiệu suất chuyên biệt.
Với bản cập nhật gần đây, hệ thống ghi log của ZLUDA đã được nâng cấp đáng kể. Phiên bản mới ghi lại nhiều hoạt động hơn trước, bao gồm các dấu vết chi tiết về hành vi nội bộ, chẳng hạn như khi cuBLAS phụ thuộc vào cuBLASLt hoặc cách cuDNN tương tác với API Driver cấp thấp. Tính tương thích của trình biên dịch thời gian chạy: Các framework GPU hiện đại như CUDA, ROCmHIP, ZLUDA và OpenCL cần biên dịch mã thiết bị động trong khi ứng dụng đang chạy để đảm bảo rằng các chương trình GPU cũ vẫn có thể được xây dựng và thực thi đúng trên các thế hệ phần cứng mới mà không cần thay đổi mã gốc.
Trong hệ sinh thái ROCmHIP của AMD, việc biên dịch tức thì phụ thuộc vào thư viện comgr (ROCm-CompilerSupport), một thư viện nhỏ gọn với khả năng xử lý nhiều tác vụ như biên dịch, liên kết và giải mã mã lệnh, có sẵn trên cả Linux và Windows. Với phiên bản ROCmHIP 6.4, có sự thay đổi quan trọng trong giao diện nhị phân ứng dụng (ABI) khi các mã số đại diện cho các hành động đã được sắp xếp lại trong ABI v3 mới.
Việc này khiến ZLUDA gọi nhầm các thao tác, như cố gắng liên kết thay vì biên dịch, dẫn đến lỗi. Tình hình tồi tệ hơn trên Windows, nơi thư viện báo là phiên bản 2.9 nhưng thực chất sử dụng ABI v3, gây ra sự pha trộn hành vi. Các vấn đề này đã được đội ngũ ZLUDA giải quyết gần đây. Hãy theo dõi Toms Hardware trên Google News để nhận tin tức, phân tích và đánh giá mới nhất.
Hãy nhớ nhấn nút Theo dõi.
Nguồn: www.tomshardware.com/software/a-project-to-bring-cuda-to-non-nvidia-gpus-is-making-major-progress-zluda-update-now-has-two-full-time-developers-working-on-32-bit-physx-support-and-llms-amongst-other-things