Skip to content

Nvidia CUDA & Docker or Podman

CUDA

Что это такое

  • Nvidia CUDA (Compute Unified Device Architecture) - программно-аппаратная архитектура параллельных вычислений, которая позволяет существенно увеличить вычислительную производительность благодаря использованию графических процессоров фирмы Nvidia.
  • Docker - программное обеспечение для автоматизации развёртывания и управления приложениями в средах с поддержкой контейнеризации. Позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, который может быть перенесён на любую Linux-систему с поддержкой cgroups в ядре, а также предоставляет среду по управлению контейнерами. Изначально использовал возможности LXC, с 2015 года применял собственную библиотеку, абстрагирующую виртуализационные возможности ядра Linux — libcontainer. С появлением Open Container Initiative начался переход от монолитной к модульной архитектуре.
  • Podman - What is Podman? Podman is a daemonless container engine for developing, managing, and running OCI Containers on your Linux System. Containers can either be run as root or in rootless mode. Simply put: alias docker=podman.

Требования

Для того что бы уйти от проблем docker демона, можно использовать podman.

Для возможности запуска podman с CUDA в контейнере необходимо сделать некоторые манипуляции.

Инструкция для ubuntu 18.04

Установка nvidia драйвера

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt install -y nvidia-container-toolkit
sudo systemctl restart docker

Параметры запуска docker

docker run --privileged --rm --gpus all dtulyakov/cudatest

Если не был указан параметр no-cgroups = true

docker run --rm --gpus all dtulyakov/cudatest

Настройка nvidia hooks для podman

sudo add-apt-repository -y ppa:projectatomic/ppa
sudo apt install podman buildah skopeo nvidia-container-runtime-hook
cat <<EOF >> /usr/share/containers/oci/hooks.d/oci-nvidia-hook.json
{
  "hook": "/usr/bin/nvidia-container-runtime-hook",
  "arguments": ["prestart"],
  "annotations": ["sandbox"],
  "stage": [ "prestart" ]
}
EOF
cat <<EOF >> /etc/nvidia-container-runtime/config.toml
disable-require = false
#swarm-resource = "DOCKER_RESOURCE_GPU"

[nvidia-container-cli]
#root = "/run/nvidia/driver"
#path = "/usr/bin/nvidia-container-cli"
environment = []
#debug = "/var/log/nvidia-container-runtime-hook.log"
#ldcache = "/etc/ld.so.cache"
load-kmods = true
no-cgroups = true
#user = "root:video"
ldconfig = "@/sbin/ldconfig.real"
EOF

Если указать этот параметр no-cgroups = true то придётся запускать контейнер в привелигерованном режиме!

Параметры запуска podman

podman run --rm --privileged dtulyakov/cudatest

Если не был указан параметр no-cgroups = true

podman run --rm dtulyakov/cudatest

Ссылки