Trình điều khiển GPU Nvidia 4090 đã được hack, kích hoạt P2P
(github.com/tinygrad)Thêm hỗ trợ P2P vào trình điều khiển NVIDIA Linux Open GPU
Dự án này fork trình điều khiển NVIDIA để bổ sung hỗ trợ P2P cho GPU 4090.
- Có thể cài đặt đơn giản bằng cách chạy
./install.sh - Có thể cần gỡ trình điều khiển hiện có khỏi DKMS trước
- Hệ thống cần hỗ trợ Large BAR và phải tắt IOMMU
- Không thể chắc chắn mọi thao tác flush cache đều hoàn toàn chính xác, nên nếu phát hiện vấn đề hãy báo cáo
- Đây không phải là hack mà là triển khai theo đúng đặc tả PCIe, và nếu được dọn dẹp tốt thì có thể được đưa upstream
Nguyên lý hoạt động
Vấn đề của NVIDIA P2P hiện có
- Trước đây, việc truyền bộ nhớ giữa các GPU dùng giao diện phần cứng tên là MAILBOXP2P
- Trên 4090, phần cứng này không có hoặc bị vô hiệu hóa nên P2P không hoạt động
- Trình điều khiển ban đầu báo cáo là đang hoạt động sai, nhưng thực tế dữ liệu vẫn được truyền qua bus PCIe
- Tuy nhiên do không có phần cứng mailbox, dữ liệu được sao chép không đến đúng vị trí và có thể gây crash hệ thống
Bổ sung hỗ trợ Large BAR
- NVIDIA đã thêm hỗ trợ Large BAR trên một số 3090 và toàn bộ 4090
- Trên H100, hãng đã thêm chế độ PCIe tên là BAR1P2P, dùng trực tiếp BAR thay cho mailbox
- Để kích hoạt điều này trên 4090, cần vượt qua HAL và gọi trực tiếp các phương thức của GH100
- Dùng các phương thức như
kbusEnableStaticBar1Mapping_GH100để ánh xạ toàn bộ VRAM vào BAR1 - Trong hàm
MapAperture, cần vô hiệu hóa việc sử dụng vùng đó
- Dùng các phương thức như
Khó khăn khi kích hoạt P2P
- Ngay cả sau khi ánh xạ VRAM, chạy
./simpleP2Ptrongcuda-samplesvẫn gây lỗi MMU- Nó dùng
GMMU_APERTURE_PEERlàm kiểu ánh xạ, nhưng 4090 không hỗ trợ - Các kiểu được hỗ trợ trên 4090 chỉ gồm
GMMU_APERTURE_VIDEO,GMMU_APERTURE_SYS_NONCOH,GMMU_APERTURE_SYS_COH
- Nó dùng
- Đổi
GMMU_APERTURE_PEERthànhGMMU_APERTURE_SYS_NONCOH- Vì không cần tính nhất quán với cache L2 của CPU nhưng vẫn phải đi ra qua bus PCIe
- Đổi trường địa chỉ peer
fldAddrPeerthànhfldAddrSysmem - Đặt địa chỉ cơ sở theo
BAR1vào trườngfabricBaseAddress
Xác nhận hoạt động
- Đã xác nhận
./simpleP2Phoạt động bình thường- P2P giữa GPU0 và GPU1 chạy ở tốc độ 24GB/s
- Dùng
p2pBandwidthLatencyTestđể kiểm tra băng thông hai chiều- Đo được 920GB/s băng thông cục bộ và 51GB/s băng thông P2P
- Kiểm tra khả năng tương thích bằng các bài test NCCL
- Đạt băng thông bus trung bình 24.5GB/s với 6 GPU 4090
Ý kiến của GN⁺
- Có lẽ vì phần lớn trình điều khiển NVIDIA đã được công bố mã nguồn mở nên cộng đồng phát triển mới có thể thực hiện các thử nghiệm như thế này. Hy vọng sau này sẽ có thêm nhiều phần nữa được mở mã nguồn.
- Nếu có thể tận dụng sức mạnh của nhiều chiếc 4090 kết nối với nhau, ngay cả lập trình viên cá nhân hay các phòng lab nhỏ cũng có thể huấn luyện các mô hình AI quy mô rất lớn.
- Tuy nhiên, việc lập trình viên buộc phải trực tiếp chạm vào những phần phụ thuộc phần cứng và đầy rắc rối như vậy cũng là bằng chứng cho thấy NVIDIA vẫn chưa hoàn tất hỗ trợ cho 4090.
- Ngoài ra, đây chỉ là câu chuyện giới hạn ở trình điều khiển Linux; việc ứng dụng thương mại trên Windows dường như vẫn còn rất xa. Mong rằng NVIDIA sẽ sớm có hỗ trợ chính thức.
- Dù sao 4090 vẫn là phần cứng rất mới, nên có lẽ khó thể kỳ vọng khả năng tương thích hoàn hảo với các thư viện hay framework ML như CUDA, PyTorch, Tensorflow. Có lẽ vẫn phải chờ thêm cho đến khi hệ sinh thái ổn định hơn.
Chưa có bình luận nào.