Toolbox: Driver berpemilik Nvidia

Dibuat pada 16 Apr 2019  ·  16Komentar  ·  Sumber: containers/toolbox

Pertama, proyek hebat!

Jika saya menggunakan driver berpemilik Nvidia, perangkat lunak OpenGL (seperti Blender) tidak berfungsi di dalam wadah kotak peralatan. Saya mencoba menginstal driver berpemilik di dalam wadah, itu menginstal tetapi perangkat lunak OpenGL tidak berfungsi. Apakah perlu menginstal lebih banyak hal? Atau atur beberapa variabel env?

Terima kasih!

1. Bug 5. Help Wanted

Komentar yang paling membantu

Jadi agar barang-barang NVIDIA berfungsi di dalam Toolbox, saya harus melakukan ini (terinspirasi oleh https://github.com/thewtex/docker-opengl-nvidia):

1) Anda harus menambal Toolbox untuk mengikat mount /dev/nvidia0 dan /dev/nvidiactl ke Toolbox dan mengatur hal-hal X11 - lihat https://github.com/tpopela/toolbox/commit/40231e8591d70065199c0df9b6811c2f9e9d7269

2) Unduh driver berpemilik NVIDIA di host:

#!/bin/sh

# Get your current host nvidia driver version, e.g. 340.24
nvidia_version=$(cat /proc/driver/nvidia/version | head -n 1 | awk '{ print $8 }')

# We must use the same driver in the image as on the host
if test ! -f nvidia-driver.run; then
  nvidia_driver_uri=http://us.download.nvidia.com/XFree86/Linux-x86_64/${nvidia_version}/NVIDIA-Linux-x86_64-${nvidia_version}.run
  wget -O ~/nvidia-driver.run $nvidia_driver_uri
fi

3) Instal driver saat berada di dalam Toolbox:

#!/bin/sh

sudo dnf install -y glx-utils kmod libglvnd-devel || exit 1
sudo sh ~/nvidia-driver.run -a -N --ui=none --no-kernel-module || exit 1
glxinfo | grep "OpenGL version"

Semua 16 komentar

Toolbox adalah sebuah wadah, Anda harus memetakan kartu grafis Anda di dalamnya, atau melakukan hal-hal seperti yang dilakukan nvidia-docker.

@Fidarato Maksud Anda menambahkan sesuatu seperti --volume /dev/nvidia0:/dev/nvidia0 dan file /dev lainnya?

Jadi agar barang-barang NVIDIA berfungsi di dalam Toolbox, saya harus melakukan ini (terinspirasi oleh https://github.com/thewtex/docker-opengl-nvidia):

1) Anda harus menambal Toolbox untuk mengikat mount /dev/nvidia0 dan /dev/nvidiactl ke Toolbox dan mengatur hal-hal X11 - lihat https://github.com/tpopela/toolbox/commit/40231e8591d70065199c0df9b6811c2f9e9d7269

2) Unduh driver berpemilik NVIDIA di host:

#!/bin/sh

# Get your current host nvidia driver version, e.g. 340.24
nvidia_version=$(cat /proc/driver/nvidia/version | head -n 1 | awk '{ print $8 }')

# We must use the same driver in the image as on the host
if test ! -f nvidia-driver.run; then
  nvidia_driver_uri=http://us.download.nvidia.com/XFree86/Linux-x86_64/${nvidia_version}/NVIDIA-Linux-x86_64-${nvidia_version}.run
  wget -O ~/nvidia-driver.run $nvidia_driver_uri
fi

3) Instal driver saat berada di dalam Toolbox:

#!/bin/sh

sudo dnf install -y glx-utils kmod libglvnd-devel || exit 1
sudo sh ~/nvidia-driver.run -a -N --ui=none --no-kernel-module || exit 1
glxinfo | grep "OpenGL version"

@tpopela berhasil. Terima kasih!

Saya senang itu berhasil! Tetapi ada kesalahan yang dapat menyebabkan malfungsi setelah host dihidupkan ulang - Anda harus menerapkan https://github.com/tpopela/toolbox/commit/3db450a8e5762399fd81c848f311da950437dd04 di atas tambalan sebelumnya.

@tpopela Kita mungkin bisa lolos tanpa mengikat pemasangan /tmp/.x11-unix . Saat ini server X.org mendengarkan pada soket UNIX abstrak dan soket UNIX pada sistem file. Yang pertama tidak berfungsi jika Anda memiliki namespace jaringan, tetapi Toolbox tidak memilikinya (karena podman create --net host ), dan itulah mengapa aplikasi X berfungsi. Yang terakhir terletak di /tmp/.x11-unix dan digunakan oleh kontainer Flatpak karena mereka memiliki ruang nama jaringan.

Referensi:

Ah oke @debarshiray! Terima kasih atas klarifikasinya. Saya dapat mengonfirmasi bahwa tidak mengikat pemasangan /tmp/X11-unix tidak mengubah apa pun dan integrasi berfungsi (mencoba menjalankan Blender di sini).

Mungkin ada sedikit perubahan setelah kita mengikat seluruh /dev . Blender sekarang mencari nvcc (barang CUDA) di PATH dan tidak dapat menemukannya.

Dengan penggabungan https://github.com/debarshiray/toolbox/pull/119 masalah ini dapat ditutup, karena Nvidia sekarang bekerja dengan driver berpemilik. Anda hanya perlu menginstal driver nvidia sekali di dalam wadah kotak alat. @tpopela 's script membantu dengan instalasi driver. @tpopela Anda harus menginstal CUDA Toolkit . Untuk menginstalnya, saya telah melewati parameter --override dan --toolkit . Setelah menginstal CUDA Toolkit Blender, tunjukkan saya opsi untuk merender menggunakan CUDA. Tapi sayangnya CUDA tidak bekerja dengan GCC9 :(

Sebenarnya saya akan membiarkan ini terbuka (tetapi saya akan membiarkannya di Rishi) karena kami berpikir dengan @debarshiray tentang membocorkan driver host NVIDIA ke wadah, jadi tidak perlu menginstal driver secara manual di wadah. Kami memiliki solusi WIP yang berfungsi untuk itu.

Itu bagus!

kami berpikir dengan @debarshiray tentang membocorkan driver host NVIDIA ke
container, jadi tidak perlu menginstal driver secara manual di container.

Ya, saya setuju bahwa ini akan menjadi hal yang benar untuk dilakukan. Driver OpenGL memiliki modul kernel dan beberapa komponen ruang pengguna (mis., Pustaka bersama) yang berbicara satu sama lain. Dalam kasus NVIDIA, antarmuka antara kedua komponen ini tidak stabil dan karenanya bit ruang pengguna di dalam wadah harus cocok dengan modul kernel pada host. Keduanya bisa tidak sinkron jika host Anda tertinggal di belakang penampung atau sebaliknya.

Masalah dengan membocorkan file ke dalam wadah adalah mempertahankan daftar file tersebut di suatu tempat karena bervariasi dari versi ke versi. Ini akan jauh lebih sederhana jika ada direktori nvidia yang terkenal di suatu tempat di host yang dapat di-bind-mount karena kita tidak perlu khawatir tentang nama dan lokasi masing-masing file itu sendiri. Sayangnya bukan itu masalahnya.

Melihat sekeliling, saya menemukan solusi Flatpak sebagai kompromi yang masuk akal. Singkatnya, ia menciptakan dan menerapkan direktori nvidia yang terkenal ini. Ia mengharapkan distributor dari OS host untuk meletakkan semua file ruang pengguna di /var/lib/flatpak/extension/org.freedesktop.Platform.GL.host/x86_64/1.4 dan itu diimplementasikan dengan memodifikasi paket pengiriman driver NVIDIA.

Setelah itu selesai, kita perlu mencari tahu di mana menempatkan file-file ini di dalam wadah dan bagaimana mengarahkan lingkungan runtime wadah ke sana.

Nvidia memiliki solusi sendiri untuk nvidia-container-runtime-hook yang bekerja sangat baik dengan podman yang dipicu oleh oci prestart hook. Saya baru saja mengalami masalah saat menggunakan --uidmap s yang mengakibatkan kehilangan izin untuk menjalankan ldconfig :

could not start /sbin/ldconfig: mount operation failed: /proc: operation not permitted

Mungkin lebih baik bagi kotak alat untuk mencoba dan berintegrasi dengan alat yang ada ini daripada mempertahankan implementasi lain.

Masalah yang berkaitan dengan masalah izin uidmap:

https://github.com/NVIDIA/libnvidia-container/issues/49

Saya mencoba menjalankan Steam di bug kotak alat #343 Saya tidak menambal kotak alat, Steam berjalan dan opengl berfungsi tetapi vulkan sepertinya tidak berfungsi, mencoba vkmark dan Rise of Tomb Raider di Steam.

Ada ide bagaimana membuatnya bekerja?

Saya melihat bahwa Singularity ccontainer memperbaiki masalah ini tanpa libnvidia-container . Mereka menggunakan daftar file yang dibutuhkan

Lantas bagaimana status penggunaan driver GPU Nvidia dalam container di tahun 2021?
Saya dapat /dev/nvidia0 dan /dev/nvidiactl -mount.
Namun, saya tidak dapat menginstal driver Nvidia dengan sukses. Penginstalan berjalan normal tetapi memeriksa dengan modinfo -F version nvidia memberikan Kesalahan:
modinfo: ERROR: Module alias nvidia not found. .
Dan Nvidia Container Toolkit tidak didukung secara resmi di Fedora, jadi sepertinya bukan ide yang baik untuk digunakan dengan Fedora Silverblue.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat