1 poin oleh GN⁺ 2024-04-13 | Belum ada komentar. | Bagikan ke WhatsApp

Menambahkan dukungan P2P ke driver NVIDIA Linux Open GPU

Proyek ini melakukan fork pada driver NVIDIA untuk menambahkan dukungan P2P ke GPU 4090.

  • Instalasi mudah dengan menjalankan ./install.sh
  • Mungkin perlu menghapus driver yang ada terlebih dahulu dari DKMS
  • Sistem memerlukan dukungan Large BAR dan IOMMU harus dimatikan
  • Belum ada kepastian semua flush cache sudah benar, jadi mohon laporkan jika menemukan isu
  • Ini bukan peretasan, melainkan implementasi sesuai spesifikasi PCIe, dan jika dirapikan dengan baik ada kemungkinan bisa diupstream

Cara kerjanya

Masalah pada P2P NVIDIA yang ada saat ini

  • Sebelumnya, transfer memori antar-GPU dilakukan menggunakan antarmuka perangkat keras bernama MAILBOXP2P
  • Pada 4090, perangkat keras ini tidak ada atau dinonaktifkan, sehingga P2P tidak berfungsi
  • Pada driver awal dilaporkan bekerja dengan salah, tetapi sebenarnya data ditransfer melalui bus PCIe
  • Namun karena tidak ada perangkat keras mailbox, hasil salinan tidak menuju lokasi yang benar dan dapat menyebabkan sistem crash

Menambahkan dukungan Large BAR

  • NVIDIA menambahkan dukungan Large BAR pada sebagian 3090 dan semua 4090
  • Pada H100, ditambahkan mode PCIe bernama BAR1P2P yang menggunakan BAR secara langsung alih-alih mailbox
  • Untuk mengaktifkan ini pada 4090, HAL harus dilewati dan metode GH100 dipanggil secara langsung
    • Memetakan seluruh VRAM ke BAR1 dengan metode seperti kbusEnableStaticBar1Mapping_GH100
    • Pada fungsi MapAperture, penggunaan area tersebut juga harus dinonaktifkan

Kesulitan dalam mengaktifkan P2P

  • Bahkan setelah VRAM dipetakan, terjadi galat MMU saat menjalankan cuda-samples ./simpleP2P
    • GMMU_APERTURE_PEER digunakan sebagai tipe pemetaan, tetapi tidak didukung pada 4090
    • Tipe yang didukung pada 4090 hanya GMMU_APERTURE_VIDEO, GMMU_APERTURE_SYS_NONCOH, GMMU_APERTURE_SYS_COH
  • GMMU_APERTURE_PEER diubah menjadi GMMU_APERTURE_SYS_NONCOH
    • Karena konsistensi dengan cache L2 CPU tidak diperlukan, tetapi data tetap harus keluar melalui bus PCIe
  • Field alamat peer fldAddrPeer diubah menjadi fldAddrSysmem
  • Alamat berbasis BAR1 ditetapkan pada field fabricBaseAddress

Verifikasi operasi

  • ./simpleP2P dipastikan berjalan normal
    • P2P beroperasi pada kecepatan 24GB/s antara GPU0 dan GPU1
  • Bandwidth dua arah diperiksa dengan p2pBandwidthLatencyTest
    • Terukur bandwidth lokal 920GB/s dan bandwidth P2P 51GB/s
  • Kompatibilitas diverifikasi dengan pengujian NCCL
    • Dengan 6 GPU 4090, tercapai rata-rata bandwidth bus 24.5GB/s

Opini GN⁺

  • Karena sebagian besar driver NVIDIA telah dirilis sebagai open source, komunitas pengembang tampaknya bisa melakukan eksperimen seperti ini. Semoga lebih banyak bagiannya dibuka sebagai open source ke depannya.
  • Jika performa kuat 4090 bisa dimanfaatkan dengan menghubungkan banyak unit sekaligus, maka pengembang individu atau lab kecil pun akan dapat melatih model AI berskala sangat besar.
  • Namun fakta bahwa pengembang masih harus menyentuh bagian yang sangat bergantung pada perangkat keras dan rumit seperti ini juga menjadi bukti bahwa NVIDIA belum benar-benar menuntaskan dukungan untuk 4090.
  • Selain itu, ini terbatas pada driver Linux, dan pemanfaatan komersial di Windows tampaknya masih jauh. Dukungan resmi dari NVIDIA diharapkan bisa segera hadir.
  • Karena 4090 memang perangkat keras yang sangat baru, tampaknya sulit mengharapkan kompatibilitas sempurna dari library atau framework ML seperti CUDA, PyTorch, dan Tensorflow. Sepertinya perlu menunggu hingga lebih stabil.

Belum ada komentar.

Belum ada komentar.