Установка и настройка LXC

1) Установите программу LXC

2) Установите Nvidia драйвера для Tensorflow и PyTorch для Ubuntu

Установка Nvidia LXC контейнера

1) Установите контейнер docker0. Создавать будем контейнер с названием nvidia

_x000D_lxc-create -t download -n nvidia -- --dist ubuntu --release jammy --arch amd64

2) Внесите изменения в файл /var/lib/lxc/nvidia/config

Раскоментируйте строку

_x000D_lxc.include = /usr/share/lxc/config/nesting.conf

Это позволит создать Nested контейнер — возможность запустить контейнер в контейнере (вложенные контейнеры).

Добавьте в файл следующие строки

_x000D_lxc.net.0.ipv4.address = 172.30.0.25/24_x000D_lxc.net.0.ipv4.gateway = 172.30.0.1_x000D_lxc.mount.auto = cgroup-full:rw_x000D_lxc.apparmor.profile = unconfined_x000D_lxc.cgroup.devices.allow = a_x000D_lxc.cap.drop =_x000D__x000D_# nvidia driver_x000D_lxc.cgroup.devices.allow = c 195:* rwm_x000D_lxc.cgroup.devices.allow = c 243:* rwm_x000D_lxc.cgroup.devices.allow = c 510:* rwm_x000D_lxc.cgroup2.devices.allow = c 195:* rwm_x000D_lxc.cgroup2.devices.allow = c 243:* rwm_x000D_lxc.cgroup2.devices.allow = c 510:* rwm_x000D_lxc.mount.entry = /dev/nvidia0 dev/nvidia0 none bind,optional,create=file_x000D_lxc.mount.entry = /dev/nvidiactl dev/nvidiactl none bind,optional,create=file_x000D_lxc.mount.entry = /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file_x000D_lxc.mount.entry = /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file_x000D_lxc.mount.entry = /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file_x000D_

Если будете настраивать Docker Swarm, то закоментируйте строки

_x000D_#lxc.idmap = u 0 100000 65536_x000D_#lxc.idmap = g 0 100000 65536

Настройка контейнера

1) Установка docker:

_x000D_curl -sSL https://get.docker.com | sh_x000D_systemctl enable docker_x000D_systemctl start docker_x000D_apt-get install docker-compose

2) В крон через команду sudo crontab -e пропишите команду, которая будет автоматически очищать контейнеры

_x000D_0 */2 * * * docker system prune --filter "until=24h" -f > /dev/null

3) Установите драйвер в LXC контейнер. Драйвер должен быть той же версии, что и на хосте. Ниже команда устанавливает драйвер версии 515. Если у вас новее драйвер, поставьте другую версию.

Версия драйвера в LXC должна совпадать с версией драйвера на хост системе.

_x000D_apt-get install nvidia-driver-535-server

4) Установите плагин libnvidia-containuer.

Установите ключ nvidia:

_x000D_curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/nvidia-container-toolkit-keyring.gpg_x000D_

Добавьте репозиторий:

_x000D_wget https://nvidia.github.io/libnvidia-container/stable/deb/libnvidia-container.list -O "/etc/apt/sources.list.d/nvidia-container-toolkit.list"

Установите Docker плагин:

_x000D_apt-get update_x000D_apt-get install -y nvidia-docker2

5) Добавьте строчки в /etc/docker/daemon.json

_x000D_{_x000D_ "log-driver": "journald",_x000D_ "log-opts": {_x000D_ "labels":"com.docker.swarm.service.name"_x000D_ },_x000D_ "default-runtime": "nvidia",_x000D_ "runtimes": {_x000D_ "nvidia": {_x000D_ "path": "nvidia-container-runtime",_x000D_ "runtimeArgs": []_x000D_ }_x000D_ }_x000D_}

6) Перезапустите Docker:

_x000D_systemctl restart docker

7) Выполните команду:

_x000D_docker run --rm --gpus all nvidia/cuda:11.7.1-base-ubuntu20.04 nvidia-smi

Если команда выполнилась успешно и указала версию драйвера, значит все установлено корректно.

Источники

  1. libnvidia-container
  2. NVIDIA cloud-native install-guide
  3. NVIDIA Driver & CUDA inside an LXC container