Инструменты пользователя

Инструменты сайта


how-to:gpu:nvidia

Это старая версия документа!


Nvidia

Установить драйвера без xserver:

sudo apt install nvidia-dkms-550

Установить nvidia-utils (nvidia-smi):

sudo apt install nvidia-utils-550

Если устанавливаются драйвера с официального бинарного файла, то перед установкой:

Нажмите, чтобы отобразить

Нажмите, чтобы скрыть

sudo apt install build-essential


После установки драйверов необходимо перегрузиться!

Инструменты

GUI панель инструментов:

sudo apt install nvidia-settings

Консольный nvtop:

sudo apt install nvtop

docker

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html

Установить NVIDIA Container Toolkit (предоставляет контейнерам прямой доступ к хост ресурсам: видеокарте, драйверу, бинарникам):

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt update
sudo apt install -y nvidia-container-toolkit

Настроить NVIDIA Container Toolkit (изменится /etc/docker/daemon.json):

sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
#или для пользователя
nvidia-ctk runtime configure --runtime=docker --config=$HOME/.config/docker/daemon.json

Проверить работу драйвера:

docker-compose.yaml

docker-compose.yaml

services:
  cuda:
    image: nvidia/cuda:11.6.1-base-ubuntu20.04
    command: ['nvidia-smi']
    deploy:
      replicas: 1
      resources:
        limits:
          memory: 32m
        reservations:
          devices:
            - capabilities: [gpu]
#without setting the default-runtime in /etc/docker/daemon.json
#CONTAINER
docker run --rm --runtime=nvidia nvidia/cuda:11.6.1-base-ubuntu20.04 nvidia-smi
docker run --rm --gpus all ubuntu nvidia-smi
 
#COMPOSE
docker compose -p cuda up
docker compose -p cuda down

Проверить работу драйвера с установленным nvidia runtime по умолчанию:

Установить runtime по умолчанию

Установить runtime по умолчанию

sudo nvidia-ctk runtime configure --runtime=docker --set-as-default
sudo systemctl restart docker.service
#или для пользователя
nvidia-ctk runtime configure --runtime=docker --set-as-default --config=$HOME/.config/docker/daemon.json

Пример /etc/docker/daemon.json:

{
    "runtimes": {
        "nvidia": {
            "args": [],
            "path": "nvidia-container-runtime"
        }
    },
    "default-runtime": "nvidia"
}
#SERVICE
docker service create --replicas 1 --name cuda nvidia/cuda:11.6.1-base-ubuntu20.04 sleep 3600
docker service rm cuda
 
#TEST
docker exec $(docker ps -q -f name=cuda) nvidia-smi
 
#CONTAINER
docker run --rm -e NVIDIA_VISIBLE_DEVICES=all ubuntu nvidia-smi

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/docker-specialized.html
https://nvidia.github.io/libnvidia-container/
https://hub.docker.com/r/nvidia/cuda/tags

Отключить GPU:

docker run --rm --runtime runc nvidia/cuda:11.6.1-base-ubuntu20.04 nvidia-smi
docker run --rm -e NVIDIA_VISIBLE_DEVICES=none nvidia/cuda:11.6.1-base-ubuntu20.04 nvidia-smi

Отключить «засыпание» видеокарты

Отключить «засыпание» видеокарты

Использовать cgroupfs напрямую. В /etc/docker/daemon.json:

{
  "exec-opts": ["native.cgroupdriver=cgroupfs"]
}
jq '. += {"exec-opts": ["native.cgroupdriver=cgroupfs"]}' /etc/docker/daemon.json | sudo tee /etc/docker/daemon.json


kubernetes

https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/latest/overview.html - NVIDIA GPU Operator

Для поиска оборудования развернуть модуль обнаружения Node Feature Discovery/NFD на все ноды:

helm -n node-feature-discovery upgrade --create-namespace --install node-feature-discovery node-feature-discovery --repo https://kubernetes-sigs.github.io/node-feature-discovery/charts \
 --set-json worker.tolerations='[{ "operator": "Exists", "effect": "NoSchedule"}]'

https://github.com/kubernetes-sigs/node-feature-discovery/blob/master/deployment/helm/node-feature-discovery/values.yaml

Установить gpu operator (отключить встроенный NFD, включить DCGM Exporter, добавить tolerations ко всем нодам для daemonsets):

helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
helm repo update nvidia
helm -n gpu-operator upgrade --create-namespace --install gpu-operator nvidia/gpu-operator --set nfd.enabled=false --set dcgmExporter.serviceMonitor.enabled=true \
 --set-json daemonsets.tolerations='[{ "key": "sku", "operator": "Equal", "value": "gpu", "effect": "NoSchedule"}]'

https://github.com/NVIDIA/gpu-operator/blob/main/deployments/gpu-operator/values.yaml

Проверить

Проверить

Проверить, что NVIDIA Device Plugin зарегистрировал GPU на нодах (должно быть: nvidia.com/gpu: 1):

kubectl describe node ${NODENAME} | grep -i nvidia

Посмотреть логи NVIDIA Device Plugin:

kubectl get pods -n gpu-operator -l app=nvidia-device-plugin-daemonset
kubectl logs -n gpu-operator ${DEVICEPLUGINPODNAME}

Проверить RuntimeClass (должен быть в списке: nvidia):

kubectl get runtimeclass

Проверить назначенный runtimeClassName для пода (должен быть: nvidia):

kubectl get pod ${PODNAME} -o json | jq -r .spec.runtimeClassName
# или вывести список имён подов с назначенным runtimeClassName:
kubectl get pod -o json | jq -r '.items[] | select( .spec.runtimeClassName == "nvidia" ).metadata.name'

Показать версию драйвера и CUDA:

kubectl get pods -n gpu-operator -l app=nvidia-driver-daemonset
kubectl exec -it -n gpu-operator ${NVIDIADRIVERPODNAME} -- nvidia-smi --version


python

Тесты:

onnxruntime

onnxruntime

pip install onnxruntime-gpu
python -c 'import onnxruntime; print("ONNX Providers:",onnxruntime.get_available_providers())'
ONNX Providers: ['TensorrtExecutionProvider', 'CUDAExecutionProvider', 'CPUExecutionProvider']

https://pypi.org/project/onnxruntime-gpu/
https://onnxruntime.ai/docs/install/#python-installs

tensorflow

tensorflow

pip install tensorflow[and-cuda]
python -c 'import tensorflow as tf; print("Num GPUs Available: ",len(tf.config.list_physical_devices("GPU")))'
python -c 'import tensorflow as tf; print("CUDA Version: ", tf.test.is_built_with_cuda())'
python -c 'import tensorflow as tf; print("GPU Device Name: ", tf.test.gpu_device_name())'

https://pypi.org/project/tensorflow/
https://www.tensorflow.org/install/pip
https://gist.github.com/raulqf/2d5f2b33549e56a6bb7c9f52a7fd471c

torch

torch

pip install torch torchvision torchaudio
python -c 'import torch; print("CUDA: ", torch.cuda.is_available())'

https://pytorch.org/get-started/locally/


Ссылки

how-to/gpu/nvidia.1769057772.txt.gz · Последнее изменение: lioncub