Ceci est utile lorsque vous souhaitez que différentes versions de CUDA coexistent sur un seul ordinateur. Faites en sorte que nvidia-smi
se comporte dans le conteneur comme si vous exécutiez nvidia-smi
sur Linux côté hôte. Supposons que vous ayez déjà créé et exécuté un conteneur dans LXC. (Article légèrement mis à jour pour les conteneurs non privilégiés et Ubuntu 20.04). Si vous souhaitez créer un conteneur en tant qu'utilisateur général (utilisateur non root) [ici](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)
Lorsque vous exécutez nvidia-smi du côté hôte, cela ressemble à ceci
# 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 |
+-----------------------------------------------------------------------------+
Tout d'abord, créez un conteneur Ubuntu avec lxc-create -n nom de conteneur -t download --- d ubuntu -r focal -a amd64
. Si / var / lib / lxc
est dans BTRFS, vous pouvez ajouter -B btrfs
et le temps qu'il faut pour dupliquer le conteneur plus tard avec lxc-copy -n old container -N new container
est dramatique. Devient plus court.
Utilisez ensuite lxc-execute -n nom du conteneur- / bin / passwd
pour définir le mot de passe approprié pour root.
Ajoutez les paramètres suivants
/var/lib/lxc/Nom du conteneur/Ajouter à la configuration
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
#Ce qui suit n'est pas nécessaire s'il s'agit d'un conteneur sans privilèges et si l'hôte Linux est une distribution qui utilise CGroup2 telle que Fedora 31
#Remplacer cgroup par cgroup2
lxc.cgroup.devices.allow = c 195:* rwm
lxc.cgroup.devices.allow = c 235:* rwm
Enfin, démarrez le conteneur avec lxc-start -F -n nom du conteneur
. Connectez-vous en tant que root lorsque vous y êtes invité. ** Pour accéder au GPU NVIDIA à partir d'un conteneur non privilégié, pré-hébergez le propriétaire ou le groupe des fichiers sous «/ dev» ci-dessus à root (généralement 100000) dans le conteneur avec «chown» ou «chgrp». Il doit être changé sur le côté **.
apt-get --no-install-recommends install software-properties-common
add-apt-repository ppa:graphics-drivers/ppa
#Les deux lignes ci-dessus ne sont pas nécessaires pour Ubuntu Focal
apt-get --no-install-recommends install nvidia-utils-440
Notez que le dernier nvidia-utils-440
entraînera une erreur s'il n'est pas exactement le même que la version du pilote NVIDIA de l'hôte Linux, et nvidia-smi
ne fonctionnera pas. Si vous faites jusqu'ici et exécutez nvidia-smi
dans le conteneur
# 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 |
|=============================================================================|
+-----------------------------------------------------------------------------+
Sera.
/var/lib/lxc/Nom du conteneur/Ajouter à la configuration
lxc.mount.entry = /home home none bind,rw 0 0
Dans le cas d'un conteneur non privilégié Avec la méthode ci-dessus, le propriétaire de tous les fichiers sous «/ home» devient «personne», et il n'est pas accessible correctement. Afin d'éliminer les inconvénients, en supposant que l'UID du fichier que vous voulez lire et écrire est 1000, la ligne de lxc.idmap
qui spécifie la méthode de conversion d'UID / GID dans le fichier de configuration du conteneur est la suivante, par exemple. Il est bon de réécrire.
$HOME/.local/share/lxc/Nom du conteneur/Changer de configuration
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
Lorsqu'ils sont réécrits comme ci-dessus, l'UID 1000 et le GID 1000 du répertoire de base du côté hôte sont affectés à l'UID 1000 et au GID 1000 même à l'intérieur du conteneur, de sorte que l'utilisateur avec l'UID 1000 peut exploiter les fichiers dans ce répertoire de base.
Ajoutez le contenu suivant au fichier de paramètres. Les paramètres suivants ne peuvent pas provoquer d'erreur sauf si vous démarrez lxc-start
à partir de la racine (le conteneur peut être sans privilège).
/var/lib/lxc/Nom du conteneur/Ajouter à la configuration
lxc.net.0.type = macvlan
lxc.net.0.link = enp6s0 #Ce nom est"ip l"Le nom de l'interface Ethernet affiché dans
lxc.net.0.flags = up
lxc.net.0.name = eth0
Recommended Posts