Jak korzystać z CUDA z NVIDIA Prime

10

Znalazłem w Internecie pół tuzina postów, ale żaden z nich tak naprawdę nie odpowiedział na to pytanie.

Chcę skonfigurować mój procesor graficzny nvidia do wykonywania tylko obliczeń, a nie obsługiwać ekran. Ale kiedy przestawię się na używanie procesora graficznego Intel w konfiguracji nvidia-prime, nie mogę już załadować modułu nvidia.

modprobe: ERROR: could not insert 'nvidia_352': No such device

Bez modułu CUDA oczywiście nie działa.

Więc co dokładnie robi nvidia-prime, co uniemożliwia załadowanie modułu? To nie jest na czarnej liście. Nie ma pliku xorg.conf, więc skąd system wie, że używa procesora graficznego Intel zamiast dyskretnego?

Korzystam z Dell 5510 Precision z fabrycznie zainstalowanym systemem Ubuntu 14.04, a moim GPU jest Quadro M1000M.

Niektórzy sugerują użycie trzmiela, ale nie powinno to być konieczne w przypadku czystych obciążeń obliczeniowych.

Również najwyraźniej trzmiel jest w stanie załadować moduł. Co to właściwie robi?

Aktualizacja: Więc dlaczego zawsze wydaje się, że znajduję odpowiedź, kiedy w końcu publikuję pytanie, po wielu godzinach próbowania go znaleźć. To tylko częściowa odpowiedź, ale mam coś do zrobienia.

Do tej pory ustaliłem, że liczba pierwsza wykonuje co najmniej dwie rzeczy:

  • Wyłącz GPU za pomocą przełącznika bbswitch.
  • Zmienia alternatywy dla /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf.

Używając przełącznika bbswitch do ponownego włączenia GPU, mogę teraz załadować moduł NVIDIA.

Pozostaje jednak pytanie: jaki jest najlepszy sposób skonfigurowania systemu do używania karty NVIDIA tylko do obliczeń?

Czy powinienem ustawić nvidia-prime na korzystanie z procesora graficznego Intel i spróbować ręcznie rozwiązać problem z uruchomieniem CUDA?

Jak upewnić się, że system nadal korzysta z procesora graficznego Intel do wyświetlania?

Jak powinienem po prostu wyłączyć NVIDIA Prime i skonfigurować to wszystko ręcznie?

A może powinienem się poddać i używać Bumblebee i optirun? Jakie są tego wady, jeśli w ogóle?

Jakieś rekomendacje?

orodbhen
źródło
Czy możesz wyłączyć wyświetlanie na GPU w aplikacji Ustawienia serwera NVIDIA X?
Roger Dahl,
Narzędzie NVIDIA pozwala jedynie wybierać między procesorami graficznymi Intel i NVIDIA. Nie zapewnia precyzyjnych ustawień, takich jak karta, która ma być używana do wyświetlania.
orodbhen

Odpowiedzi:

5

W moim przypadku stwierdziłem, że karta NVidia nie została faktycznie wyłączona, a jedyne, co musiałem zrobić, aby uruchomić kod CUDA, to:

export LD_LIBRARY_PATH=/usr/lib/nvidia-352

w powłoce, w której chcę go uruchomić (zakładam, że globalna zmiana ustawienia alternatyw spowodowałaby uszkodzenie compiz itp.)

Aby dojść do tego punktu (na Dell Optiplex 7010, z Ubuntu 14.04, CUDA 7.5 i GTX 980), uważam, że kroki były następujące:

  1. Użyj karty Profile PRIME, aby wybrać Intel
  2. Uruchom ponownie i wybierz Intel jako domyślny w BIOS
  3. Wyłącz komputer
  4. Podłącz monitory do wbudowanego wideo :)

Wygląda na to, że do tej pory wszystko działało dobrze (nvidia-smi widzi kartę, uruchamia próbki cuda, theano używa karty itp.)

David Huggins Daines
źródło
1
Tak, niestety wydaje się, że nie ma spójnego rozwiązania, dlatego naprawdę chciałem zrozumieć, co się dzieje pod maską.
orodbhen
2

Wydaje mi się, że znalazłem przynajmniej pobieżne rozwiązanie tego problemu, jak opisano w aktualizacji mojego oryginalnego postu. Naprawdę znalazłem dwa rozwiązania, choć jestem pewien, że są inne.

1 - W trybie Prime w trybie Intel ponownie włącz kartę NVIDIA za pomocą przełącznika bbswitch , a następnie uruchom, modprobe nvidiaaby załadować moduł i utworzyć węzły urządzenia.

2 - Użyj Birblebee optirun, aby uruchomić sesję bash, z której możesz zrobić wszystkie swoje rzeczy z CUDA.

Oba te rozwiązania pozwalają na wykorzystanie wbudowanej grafiki do wyświetlania, przy użyciu karty NVIDIA do obliczeń obciążenia. Rozwiązanie optirun wydaje się bardziej uniwersalne, ale wolę pierwsze ze względu na minimalizm.

Mam nadzieję, że ktoś z większym zrozumieniem poprawi tę odpowiedź.

orodbhen
źródło
czy możesz wyjaśnić pierwszą opcję jaśniej? Jak włączać i wyłączać kartę za pomocą przełącznika bbswitch?
Abonec
Właściwie to wymyśliłem, jak sprawić, by trzmiel działał dobrze i zaktualizuję swoją odpowiedź, kiedy będę miał czas. Zasadniczo śledziłem to . To frustrujące, że te rzeczy są tak słabo udokumentowane, ponieważ są naprawdę bardzo proste.
orodbhen
2

Używam karty NVIDIA tylko do wykonywania CUDA i sprawdzam to podejście:

Cały czas używam karty Intel i jest to potwierdzone przez polecenie lspci | grep -E "VGA|3D":

00:02.0 VGA compatible controller: Intel Corporation Skylake Integrated Graphics (rev 06)
01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev ff)

W odpowiednim wierszu dla karty NVIDIA powinieneś zobaczyć, (rev ff)że została wyłączona.

Aby włączyć kartę i używać jej do obliczeń CUDA, używam dwóch następujących poleceń:

sudo prime-select nvidia
sudo prime-switch

Po tym lspci | grep -E "VGA|3D"raporcie polecenia :

00:02.0 VGA compatible controller: Intel Corporation Skylake Integrated Graphics (rev 06)
01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev a2)

Zauważ (rev a2), że nie (rev ff)w odpowiednim wierszu. Karta jest teraz gotowa do obliczeń.

Po obliczeniach używam akcji wstecz:

sudo prime-select intel
sudo prime-switch

I lspci | grep -E "VGA|3D"raporty:

00:02.0 VGA compatible controller: Intel Corporation Skylake Integrated Graphics (rev 06)
01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev ff)
Abonec
źródło
Zasadniczo więc musisz zalogować się ponownie tylko po przełączeniu z liczbą pierwszą, jeśli chcesz zmienić, który procesor graficzny wyświetla ekran? Nie myślałem o tym, ale ma to sens. Oczywiście musisz się ponownie przełączyć przed wylogowaniem lub ponownym uruchomieniem.
orodbhen
Używam tego podejścia. Loguję się przy aktywnym profilu Intel, więc Xorg i Firefox nie używają GPU. Następnie przełączam się na profil nvidia i cała moja praca nad CUDA idzie na GPU i nie muszę konkurować z firefoxem i Xorgiem o pamięć :)!
John
0

Jeśli po wykonaniu czynności podanych w odpowiedzi ktoś nadal znajdzie problemy, spróbuj wykonać następujące czynności:

echo "install bbswitch /bin/true" > /etc/modprobe.d/blacklist-bbswitch.conf
update-initramfs -u

Całkowicie wyłączy bbswitch. Wadą jest to, że nie będziesz w stanie wyłączyć karty NVIDIA w celu oszczędzania energii (Xorg nadal używa zintegrowanej grafiki, o ile prime-select intel).

Huazuo Gao
źródło
0

Używam 1070 Ti z Thinkpad T420 w egpu skonfigurowanym do wydobywania kryptowaluty podczas pracy. GPU teoretycznie zwróci się w ten sposób po kilku miesiącach.

Odkryłem, że z nvidią 387 eksport LD_LIBRARY_PATH = / usr / lib / nvidia-387 działał z ethminer przy użyciu cuda.

Jednak jedynym sposobem, w jaki mogłem sprawić, by system działał po „prime-select intel” było, gdybym miał drugi monitor podłączony do karty, kiedy dokonałem wyboru i wylogowałem się. W przeciwnym razie pojawia się błąd „System działa w trybie niskiej grafiki” lub ciągły pusty ekran. Oczywiście, kiedy loguję się z uruchomioną grafiką Intel, monitor podłączony do GPU nie wyświetla nic, więc muszę go odłączyć od GPU i podłączyć z powrotem do systemu (wyjście stacji dokującej DVI), aby uruchomić konfigurację monitora pojedynku .

Wierzę, że dzieje się tak, ponieważ gpu-manager wykrywa, że ​​bbswitch nie działa, a następnie usuwa konfigurację xorg.

Zamieszczam to, aby pokazać obejście dla nielicznych, którzy mogą znajdować się w podobnej sytuacji, ale również, aby sprawdzić, czy ktoś ma pomysł, aby temu zapobiec, ponieważ przesuwanie tego kabla przy każdym ponownym uruchomieniu jest trochę niedogodność.

log_file: /var/log/gpu-manager.log

last_boot_file: / var / lib / ubuntu-drivers-common / last_gfx_boot new_boot_file: / var / lib / ubuntu-drivers-common / last_gfx_boot nie może uzyskać dostępu do pliku / run / udc-fglrx-was-load Szukanie modułów fglrx w / lib /modules/4.4.0-104-generic/updates/dkms Szukasz modułów nvidia w /lib/modules/4.4.0-104-generic/updates/dkms Znaleziono moduł nvidia: nvidia_387_drm.ko Czy nvidia jest załadowana? tak Czy NVIDIA została rozładowana? nie Czy NVIDIA jest na czarnej liście? tak Czy załadowano fglrx? nie Czy fglrx został rozładowany? nie Czy fglrx jest na czarnej liście? nie Czy dane Intel są załadowane? tak Czy ładowany jest Radeon? nie Czy Radeon jest na czarnej liście? nie Czy załadowano amdgpu? nie Czy amdgpu jest na czarnej liście? nie Czy załadowano nouveau? nie Czy nowa secesja jest na czarnej liście? tak Czy dostępny jest moduł jądra fglrx? nie Czy moduł jądra nvidia jest dostępny? tak Identyfikator dostawcy / urządzenia: 8086: 126 BusID „PCI: 0 @ 0: 2: 0” Czy boot vga? tak Identyfikator dostawcy / urządzenia: 10de: 1b82 BusID "PCI: conf Bieżąca podstawowa alternatywa: (null) Bieżąca alternatywa egl: /usr/lib/nvidia-387-prime/ld.so.conf Czy nvidia jest włączona? nie Czy nvidia egl jest włączona? nie Czy fglrx jest włączony? nie Czy mesa jest włączona? nie Czy mesa egl jest włączona? nie Czy pxpress jest włączony? nie Czy liczba pierwsza jest włączona? tak Czy włączona jest funkcja prime egl? tak Czy nvidia jest dostępna? tak Czy dostępna jest nvidia egl? nie Czy Fglrx jest dostępny? nie Czy dostępny jest rdzeń fglrx? nie Czy mesa jest dostępna? tak Czy mesa egl jest dostępna? tak Czy pxpress jest dostępny? nie Czy liczba pierwsza jest dostępna? tak Czy dostępna jest pierwsza wersja egl? nie wykryto Intel IGP System hybrydowy Intel Wykryto wersję 387.34 sterownika Nvidia / sys / class / dmi / id / product_version = "ThinkPad T420" / sys / class / dmi / id / product_name = "4236L23" Pierwsza próba: bbswitch bez dziwactwa Ładowanie bbswitch z Parametry „load_state = -1 unload_state = 1” Błąd: można ” t open / proc / acpi / bbswitch Usuwanie xorg.conf. Ścieżka: /etc/X11/xorg.conf nie może uzyskać dostępu /usr/share/gpu-manager.d/hybrid-power-saving Nie trzeba zmieniać obecnego stanu przełącznika

Jeśli po tym nano xorg.conf jest pusty. Publikuję to po wykonaniu sztuczki polegającej na zmianie monitora, z kopaniem w tle, a mój plik xorg.conf jest nadal pusty. Domyślam się więc, że z jakiegoś powodu, kiedy monitor jest podłączony do GPU przy ponownym uruchomieniu lightdm, nie ma znaczenia, że ​​mój plik xorg.conf został usunięty. Jakieś pomysły?

nhorning
źródło
Również ... Mam bbswitch na czarnej liście, jak sugerowano powyżej, ponieważ dostałbym ciągły błąd podczas uruchamiania. Byłem w stanie uruchomić się w trybie Intel raz lub dwa przy użyciu nvidii-384, ale miałem problem z wydobyciem z tym i pomyślałem, że może tak być, ponieważ dodano obsługę 1070 ti z nvidią-387.
nhorning