Dies ist nützlich, wenn verschiedene Versionen von CUDA auf einem einzelnen Computer gleichzeitig vorhanden sein sollen. Stellen Sie sicher, dass sich nvidia-smi
im Container so verhält, als hätten Sie nvidia-smi
unter host-seitigem Linux ausgeführt. Angenommen, Sie haben bereits einen Container in LXC erstellt und ausgeführt. (Leicht aktualisierter Artikel für nicht privilegierte Container und Ubuntu 20.04). Wenn Sie einen Container als allgemeinen Benutzer (Nicht-Root-Benutzer) [hier] erstellen möchten (https://qiita.com/kakinaguru_zo/items/8c82954a1bb0a1ef9a40#lxc%E3%81%AB%E3%82%88%E3%82%8B) % E9% 9D% 9E% E7% 89% B9% E6% A8% A9% E3% 82% B3% E3% 83% B3% E3% 83% 86% E3% 83% 8A)
Wenn Sie nvidia-smi auf der Hostseite ausführen, sieht es so aus
# nvidia-smi
Tue Feb 4 10:52:19 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.48.02 Driver Version: 440.48.02 CUDA Version: 10.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce RTX 208... Off | 00000000:08:00.0 Off | N/A |
| 30% 31C P8 25W / 250W | 18MiB / 11016MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 GeForce RTX 208... Off | 00000000:09:00.0 Off | N/A |
| 29% 32C P8 20W / 250W | 1MiB / 11019MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 1262 G /usr/lib/xorg/Xorg 16MiB |
+-----------------------------------------------------------------------------+
Erstellen Sie zunächst einen Ubuntu-Container mit dem Namen lxc-create -n container -t download --- d ubuntu -r focal -a amd64. Wenn sich "/ var / lib / lxc" in BTRFS befindet, können Sie "-B btrfs" hinzufügen, und die Zeit, die benötigt wird, um den Container später mit "lxc-copy -n alter Container -N neuer Container" zu duplizieren, ist dramatisch. Wird kürzer.
Verwenden Sie dann lxc-execute -n Containername- / bin / passwd
, um das entsprechende Passwort für root festzulegen.
Fügen Sie die folgenden Einstellungen hinzu
/var/lib/lxc/Containername/Zur Konfiguration hinzufügen
lxc.mount.entry = /dev/nvidiactl dev/nvidiactl none bind,rw,create=file 0 0
lxc.mount.entry = /dev/nvidia-modeset dev/nvidia-modeset none bind,rw,create=file,optional 0 0
lxc.mount.entry = /dev/nvidia-uvm dev/nvidia-uvm none bind,rw,create=file 0 0
lxc.mount.entry = /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,rw,create=file 0 0
lxc.mount.entry = /dev/nvidia0 dev/nvidia0 none bind,rw,create=file 0 0
lxc.mount.entry = /dev/nvidia1 dev/nvidia1 none bind,rw,create=file,optional 0 0
#Folgendes ist nicht erforderlich, wenn es sich um einen nicht privilegierten Container handelt und wenn es sich bei dem Host-Linux um eine Distribution handelt, die CGroup2 wie Fedora 31 verwendet
#Ersetzen Sie cgroup durch cgroup2
lxc.cgroup.devices.allow = c 195:* rwm
lxc.cgroup.devices.allow = c 235:* rwm
Zum Schluss starten Sie den Container mit lxc-start -F -n Containername
. Melden Sie sich als root an, wenn Sie dazu aufgefordert werden. ** Um von einem nicht privilegierten Container aus auf die NVIDIA-GPU zuzugreifen, hosten Sie den Eigentümer oder die Gruppe der Dateien unter '/ dev'above vor dem Root (normalerweise 100000) im Container mit' chown oder
chgrp`. Es muss seitlich gewechselt werden **.
apt-get --no-install-recommends install software-properties-common
add-apt-repository ppa:graphics-drivers/ppa
#Die beiden oben genannten Zeilen sind für Ubuntu Focal nicht erforderlich
apt-get --no-install-recommends install nvidia-utils-440
Beachten Sie, dass das letzte "nvidia-utils-440" zu einem Fehler führt und "nvidia-smi" nur funktioniert, wenn es genau mit der NVIDIA-Treiberversion des Host-Linux identisch ist. Wenn Sie dies bisher tun und nvidia-smi
im Container ausführen
# nvidia-smi
Tue Feb 4 02:01:33 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.48.02 Driver Version: 440.48.02 CUDA Version: 10.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce RTX 208... Off | 00000000:08:00.0 Off | N/A |
| 30% 31C P8 26W / 250W | 18MiB / 11016MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 GeForce RTX 208... Off | 00000000:09:00.0 Off | N/A |
| 29% 32C P8 20W / 250W | 1MiB / 11019MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
+-----------------------------------------------------------------------------+
Wird sein.
/var/lib/lxc/Containername/Zur Konfiguration hinzufügen
lxc.mount.entry = /home home none bind,rw 0 0
Im Fall eines nicht privilegierten Containers Mit der oben beschriebenen Methode wird der Eigentümer aller Dateien unter "/ home" zu "niemandem" und es kann nicht ordnungsgemäß darauf zugegriffen werden. Um die Unannehmlichkeiten zu beseitigen, wird beispielsweise angenommen, dass die UID der Datei, die Sie lesen und schreiben möchten, 1000 ist. Die Zeile "lxc.idmap", die die Konvertierungsmethode von UID / GID in der Containereinstellungsdatei angibt, lautet beispielsweise wie folgt. Es ist gut, umzuschreiben.
$HOME/.local/share/lxc/Containername/Konfiguration ändern
lxc.idmap = u 0 100000 1000
lxc.idmap = g 0 100000 1000
lxc.idmap = u 1000 1000 1
lxc.idmap = g 1000 1000 1
lxc.idmap = u 1001 101001 64535
lxc.idmap = g 1001 101001 64535
Durch Umschreiben wie oben werden UID 1000 und GID 1000 des Home-Verzeichnisses auf der Host-Seite auch innerhalb des Containers UID 1000 und GID 1000 zugewiesen, sodass der Benutzer mit UID 1000 die Dateien in diesem Home-Verzeichnis bearbeiten kann.
Fügen Sie der Einstellungsdatei den folgenden Inhalt hinzu. Die folgenden Einstellungen können keinen Fehler verursachen, es sei denn, Sie starten "lxc-start" von root aus (der Container kann nicht privilegiert sein).
/var/lib/lxc/Containername/Zur Konfiguration hinzufügen
lxc.net.0.type = macvlan
lxc.net.0.link = enp6s0 #Dieser Name ist"ip l"Der Name der Ethernet-Schnittstelle, die in angezeigt wird
lxc.net.0.flags = up
lxc.net.0.name = eth0
Recommended Posts