Установка и настройка драйверов nvidia в LXC контейнере
Установка и настройка LXC
2) Установите Nvidia драйвера для Tensorflow и PyTorch для Ubuntu
Установка Nvidia LXC контейнера
1) Установите контейнер docker0. Создавать будем контейнер с названием nvidia
lxc-create -t download -n nvidia -- --dist ubuntu --release jammy --arch amd64
2) Внесите изменения в файл /var/lib/lxc/nvidia/config
Раскоментируйте строку
lxc.include = /usr/share/lxc/config/nesting.conf
Это позволит создать Nested контейнер — возможность запустить контейнер в контейнере (вложенные контейнеры).
Добавьте в файл следующие строки
lxc.net.0.ipv4.address = 172.30.0.25/24
lxc.net.0.ipv4.gateway = 172.30.0.1
lxc.mount.auto = cgroup-full:rw
lxc.apparmor.profile = unconfined
lxc.cgroup.devices.allow = a
lxc.cap.drop =
# nvidia driver
lxc.cgroup.devices.allow = c 195:* rwm
lxc.cgroup.devices.allow = c 243:* rwm
lxc.cgroup.devices.allow = c 510:* rwm
lxc.cgroup2.devices.allow = c 195:* rwm
lxc.cgroup2.devices.allow = c 243:* rwm
lxc.cgroup2.devices.allow = c 510:* rwm
lxc.mount.entry = /dev/nvidia0 dev/nvidia0 none bind,optional,create=file
lxc.mount.entry = /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
lxc.mount.entry = /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file
lxc.mount.entry = /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file
lxc.mount.entry = /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file
Если будете настраивать Docker Swarm, то закоментируйте строки
#lxc.idmap = u 0 100000 65536
#lxc.idmap = g 0 100000 65536
Настройка контейнера
1) Установка docker:
curl -sSL https://get.docker.com | sh
systemctl enable docker
systemctl start docker
apt-get install docker-compose
2) В крон через команду sudo crontab -e пропишите команду, которая будет автоматически очищать контейнеры
0 */2 * * * docker system prune --filter "until=24h" -f > /dev/null
3) Установите драйвер в LXC контейнер. Драйвер должен быть той же версии, что и на хосте. Ниже команда устанавливает драйвер версии 515. Если у вас новее драйвер, поставьте другую версию.
Версия драйвера в LXC должна совпадать с версией драйвера на хост системе.
apt-get install nvidia-driver-535-server
4) Установите плагин libnvidia-containuer.
Установите ключ nvidia:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/nvidia-container-toolkit-keyring.gpg
Добавьте репозиторий:
wget https://nvidia.github.io/libnvidia-container/stable/deb/libnvidia-container.list -O "/etc/apt/sources.list.d/nvidia-container-toolkit.list"
Установите Docker плагин:
apt-get update
apt-get install -y nvidia-docker2
5) Добавьте строчки в /etc/docker/daemon.json
{
"log-driver": "journald",
"log-opts": {
"labels":"com.docker.swarm.service.name"
},
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
6) Перезапустите Docker:
systemctl restart docker
7) Выполните команду:
docker run --rm --gpus all nvidia/cuda:11.7.1-base-ubuntu20.04 nvidia-smi
Если команда выполнилась успешно и указала версию драйвера, значит все установлено корректно.
Источники