Добавить в корзинуПозвонить
Найти в Дзене
Умный дом Home Assistant 2025

Как запустить LXC и Docker-контейнеры с поддержкой GPU в Proxmox

GPU уже определённо используются не только геймерами или майнерами криптовалюты. Они также стали ключевым оборудованием при работе с ИИ, кодированием медиа и задачами вроде машинного обучения. Даже в домашней лаборатории мы можем использовать GPU для ускорения окружения при выполнении многих новых и интересных рабочих нагрузок, таких как локально размещённый приватный ИИ. Это включает использование GPU-ускорения в таких вещах, как Kubernetes, LXC и Docker-контейнеры. Контейнеры LXC и Docker с пробросом GPU в Proxmox При работе с контейнерами вы можете настроить GPU-совместимые контейнеры в своей домашней лаборатории, чтобы использовать аппаратное GPU-ускорение. Давайте посмотрим, зачем это нужно и как это настроить. Вы, конечно, можете выполнять многозадачность и запускать серьёзные рабочие нагрузки на современных процессорах. Однако GPU гораздо эффективнее справляются с задачами, выполняемыми параллельно. Модели ИИ опираются на тысячи потоков, которые выполняются одновременно, и тольк
Оглавление

GPU уже определённо используются не только геймерами или майнерами криптовалюты. Они также стали ключевым оборудованием при работе с ИИ, кодированием медиа и задачами вроде машинного обучения. Даже в домашней лаборатории мы можем использовать GPU для ускорения окружения при выполнении многих новых и интересных рабочих нагрузок, таких как локально размещённый приватный ИИ. Это включает использование GPU-ускорения в таких вещах, как Kubernetes, LXC и Docker-контейнеры.

Контейнеры LXC и Docker с пробросом GPU в Proxmox

При работе с контейнерами вы можете настроить GPU-совместимые контейнеры в своей домашней лаборатории, чтобы использовать аппаратное GPU-ускорение. Давайте посмотрим, зачем это нужно и как это настроить.

Зачем беспокоиться о GPU-ускорении в домашней лаборатории?

Вы, конечно, можете выполнять многозадачность и запускать серьёзные рабочие нагрузки на современных процессорах. Однако GPU гораздо эффективнее справляются с задачами, выполняемыми параллельно. Модели ИИ опираются на тысячи потоков, которые выполняются одновременно, и только GPU способны обработать такую нагрузку с высокой производительностью. Большинство из нас испытывали это даже на очень быстром современном CPU. Если запускать модели ИИ только на CPU, ответы в чатах идут чрезвычайно медленно в терминах «токенов в секунду» по сравнению с использованием GPU для локального ИИ.

Обратите внимание на следующие рабочие нагрузки, которые выиграют от наличия GPU:

  • ИИ: Это, вероятно, главный сценарий сейчас. Самостоятельно размещённый ИИ — отличный способ гарантировать, что вы владеете и контролируете данные вашего ИИ-чата
  • Медиа-серверы: Решения вроде Jellyfin, Plex и HandBrake могут использовать GPU для кодирования H.264, H.265 и AV1
  • Эксперименты с машинным обучением: Вы можете использовать такие инструменты, как PyTorch и TensorFlow, чтобы перенести тяжёлые вычисления на GPU
  • Параллельная обработка данных: Вы можете использовать инструменты, такие как RAPIDS или базы данных с ускорением на CUDA, чтобы тестировать рабочие процессы данных без необходимости в облачных ресурсах

Запуск GPU-совместимых контейнеров позволяет использовать мощь вашего GPU в лёгком контейнере для рабочих нагрузок. Давайте посмотрим, как это настроить.

Шаг 1: Проверьте оборудование и драйверы

Первый шаг зависит от вашего оборудования. Прежде чем углубляться в настройки Docker или Kubernetes, убедитесь, что у вас есть оборудование, поддерживающее передачу (проброс) GPU (passthrough).

Обычно это включает следующее:

  1. GPU NVIDIA: Большинство карт GTX, RTX и дата-центровых карт (например, A2000 или A6000) поддерживают CUDA. Драйверы NVIDIA доступны для хостов на Linux и Windows.
  2. GPU AMD: Многие современные Radeon GPU поддерживают ROCm — открытую платформу вычислений от AMD. Поддержка контейнеров AMD улучшилась в 2025 году и теперь имеет официальную интеграцию с Docker.
  3. GPU Intel: Intel Arc и встроенная графика Iris Xe поддерживают ускорение GPU с помощью Intel GPU Tools и рантайма OneAPI

Далее проверьте, поддерживает ли ваш BIOS IOMMU и включены ли расширения виртуализации. Это гарантирует, что GPU можно изолировать для проброса или прямого доступа.

IOMMU в BIOS для GPU-ускоренных контейнеров
IOMMU в BIOS для GPU-ускоренных контейнеров

Если вы хотите использовать командную строку, вы также можете проверить IOMMU и виртуализацию AMD для ввода-вывода таким образом. Ниже мы проверяем, включены ли IOMMU и AMD-Vi.

dmesg | grep -e IOMMU -e AMD-Vi

Проверка IOMMU через командную строку
Проверка IOMMU через командную строку

Шаг 2: Установите драйверы GPU и рантайм

Для большинства домашних лабораторий на базе Linux вам нужно установить правильные драйверы на хост-систему. Посмотрите обзор ниже, если вы запускаете Docker-контейнеры на «голом» железе с установленным Linux или на виртуальной машине с Linux поверх гипервизора.

Ускорение GPU с помощью драйвера и контейнерного тулкита
Ускорение GPU с помощью драйвера и контейнерного тулкита

NVIDIA:

Использование graphics-drivers/ppa с последующим указанием nvidia-driver-latest обычно обеспечивает установку последнего драйвера.

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install -y nvidia-driver-latest
sudo reboot

После установки драйверов вы можете проверить, что они установлены и оборудование работает, командой nvidia-smi:

sudo nvidia-smi

Выполнение команды nvidia-smi
Выполнение команды nvidia-smi

Важно: NVIDIA Container Toolkit устанавливается только на хост-систему (то есть на Docker-хост), а не внутри ваших контейнеров. Этот пакет действует как мост между Docker и драйверами NVIDIA. Он позволяет контейнерам получить доступ к GPU-оборудованию. Контейнеры будут автоматически использовать драйверы хоста, поэтому вам не нужно устанавливать драйверы внутри контейнера. Если вашему приложению нужны библиотеки CUDA, вы можете использовать предсобранные базовые образы NVIDIA (например, nvidia/cuda), которые уже включают их.

Далее установите NVIDIA Container Toolkit, который позволяет Docker взаимодействовать с GPU:

# Добавить репозиторий NVIDIA Container Toolkit
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.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
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

Вы можете убедиться в доступе к GPU внутри контейнеров с помощью:

docker run --rm --gpus all nvidia/cuda:12.5.0-base-ubuntu22.04 nvidia-smi

AMD

Установите ROCm и пакеты поддержки контейнеров:

sudo apt install -y rocm-dkms

Для интеграции с Docker AMD предоставляет образ рантайма ROCm, который вы можете протестировать:

docker run --device=/dev/kfd --device=/dev/dri --group-add video \
rocm/pytorch:latest rocm-smi

Intel

Для Intel Arc и встраиваемой графики необходимо установить рантайм Intel GPU:

sudo apt install -y intel-opencl-icd intel-level-zero-gpu level-zero

Вы можете проверить доступ к GPU с помощью:

docker run --device /dev/dri intel/oneapi-basekit

А что насчёт LXC-контейнеров?

Для LXC-контейнеров всё зависит от того, что вы запускаете внутри LXC. Если вы запускаете приложения непосредственно внутри LXC (без Docker), вам нужно установить драйверы NVIDIA внутри самого LXC-контейнера, но вам НЕ нужно устанавливать container toolkit.

LXC-контейнеры без Docker для GPU-ускорения
LXC-контейнеры без Docker для GPU-ускорения

sudo apt update
sudo apt install -y nvidia-driver-latest

Если вы запускаете Docker внутри LXC-контейнера, тогда вам нужно установить и драйвер NVIDIA, и Container Toolkit.

LXC-контейнер с Docker для GPU-ускорения
LXC-контейнер с Docker для GPU-ускорения

Команды для выполнения в этом случае:

# Установить драйверы
sudo apt update
sudo apt install -y nvidia-driver-latest

# Установить Docker (если не установлен)
curl -fsSL https://get.docker.com | sh

# Установить Container Toolkit
sudo add-apt-repository ppa:graphics-drivers/ppa
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
# ... (остальная часть установки Container Toolkit)

Шаг 3: Запуск GPU-рабочих нагрузок

После того как вы пройдёте этапы с оборудованием и драйверами, мы можем настроить Docker для использования вашего GPU в качестве устройства рантайма. Эта часть довольно проста — нужно передать флаги в команду Docker для обнаружения всех доступных GPU или добавить это в Docker Compose.

1. Ollama или OpenWebUI для локального ИИ

Если вы экспериментируете с локальными LLM, такими как Llama 3 или Mistral, вы можете запускать их прямо в Docker с GPU-ускорением:

docker run -d --gpus all -p 3000:3000 \
-v /opt/openwebui:/data \
ghcr.io/open-webui/open-webui:latest

Запуск Docker-контейнера с флагом —gpus all
Запуск Docker-контейнера с флагом —gpus all

Вы также можете указать доступ к GPU в вашем файле Docker Compose:

services:
ollama:
image: ollama/ollama
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
- /opt/ollama:/root/.ollama
ports:
- 11434:11434

2. Plex или Jellyfin для GPU-транскодирования

Если вы используете домашнюю лабораторию как медиа-сервер, GPU-ускорение существенно улучшает производительность стриминга и энергоэффективность. Примечание: Plex требует подписки Plex Pass для аппаратного транскодирования.

services:
plex:
image: linuxserver/plex
container_name: plex
runtime: nvidia
environment:
- PUID=1000
- PGID=1000
- VERSION=docker
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=all
volumes:
- /opt/plex/config:/config
- /media:/media
ports:
- 32400:32400
restart: unless-stopped

Вот пример Plex с Intel QuickSync:

services:
plex:
image: linuxserver/plex
container_name: plex
devices:
- /dev/dri:/dev/dri # Intel QuickSync
environment:
- PUID=1000
- PGID=1000
- VERSION=docker
volumes:
- /opt/plex/config:/config
- /media:/media
ports:
- 32400:32400
restart: unless-stopped

Вот пример Jellyfin, который является open-source и использует NVIDIA-устройства:

services:
jellyfin:
image: jellyfin/jellyfin
container_name: jellyfin
# Для NVIDIA:
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=all
# Для Intel/AMD:
devices:
- /dev/dri:/dev/dri
volumes:
- /opt/jellyfin/config:/config
- /opt/jellyfin/cache:/cache
- /media:/media
ports:
- 8096:8096
restart: unless-stopped

Вы можете включить аппаратное ускорение в настройках Plex в разделе Transcoder. Включите «Использовать аппаратное ускорение, когда доступно». В Jellyfin перейдите в Dashboard > Playback > Transcoding. Там установите аппаратное ускорение на NVIDIA, Intel QuickSync или VAAPI и т.д.

3. Машинное обучение с TensorFlow или PyTorch

Если вы экспериментируете с ML-моделями локально, использование GPU-совместимых контейнеров даёт огромный прирост производительности.

Быстрый тест TensorFlow на GPU:

docker run --gpus all -it --rm tensorflow/tensorflow:latest-gpu bash
python -c "import tensorflow as tf; print('GPUs Available:', tf.config.list_physical_devices('GPU'))"

PyTorch с NVIDIA:

# Тест доступа PyTorch к GPU:
docker run --gpus all -it --rm pytorch/pytorch:latest bash
python -c "import torch; print('CUDA Available:', torch.cuda.is_available()); print('GPU Count:', torch.cuda.device_count())"

PyTorch с AMD ROCm:

# Для Radeon RX 7000/9000 серии AMD:
docker run -it --rm \
--device=/dev/kfd --device=/dev/dri \
--group-add video \
rocm/pytorch:latest bash

python -c "import torch; print('ROCm Available:', torch.cuda.is_available())"

Шаг 4: GPU в Kubernetes или MicroK8s

Если вы перешли на Kubernetes в вашей домашней лаборатории, вы можете использовать планирование GPU для ваших рабочих нагрузок. Предварительные требования: Убедитесь, что драйверы NVIDIA и Container Toolkit установлены на всех узлах, которые будут запускать GPU-рабочие нагрузки (см. Шаг 2 выше).

NVIDIA

# Использование kubectl (проверьте последнюю версию)
kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.16.2/deployments/static/nvidia-device-plugin.yml

Или вы можете сделать это с помощью Helm:

helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
helm repo update
helm install nvidia-device-plugin nvdp/nvidia-device-plugin \
--namespace kube-system \
--create-namespace

Затем вы можете проверить обнаружение GPU с помощью:

kubectl get nodes -o=custom-columns=NAME:.metadata.name,GPU:.status.capacity.'nvidia\.com/gpu'

Затем вы можете добавить запросы на GPU в спецификацию Pod:

apiVersion: v1
kind: Pod
metadata:
name: gpu-pod
spec:
containers:
- name: gpu-test
image: nvidia/cuda:12.5.0-base-ubuntu22.04
resources:
limits:
nvidia.com/gpu: 1 # Запрос 1 GPU
command: ["nvidia-smi"]
args: ["-L"] # Перечислить GPU и выйти (для тестирования)

Для постоянных рабочих нагрузок вы можете использовать деплоймент с долгоживущим контейнером, например:

resources:
limits:
nvidia.com/gpu: 1 # Или "2" для нескольких GPU

MicroK8s также включает встроенный аддон GPU, который автоматически настраивает драйверы для поддерживаемого оборудования, что делает процесс очень простым. Примечание: Это предполагает, что вы уже установили драйверы NVIDIA и Container Toolkit на хост MicroK8s. Аддон развёртывает только device plugin, а не сами драйверы.

microk8s enable gpu

AMD

AMD имеет плагин устройства для Kubernetes через ROCm:

kubectl create -f https://raw.githubusercontent.com/RadeonOpenCompute/k8s-device-plugin/master/k8s-ds-amd-gpu-dp.yaml

Затем вы можете планировать GPU-рабочие нагрузки аналогичным образом:

resources:
limits:
amd.com/gpu: 1

Шаг 5: Устранение неполадок

Если контейнеры «не видят» GPU, вы можете пройти базовую диагностику с помощью нескольких команд на уровне хоста.

# Для NVIDIA:
nvidia-smi

# Для AMD:
rocm-smi

# Проверьте наличие устройств:
ls -la /dev/nvidia* /dev/dri/

Если nvidia-smi не работает на хосте, значит, проблема с установкой драйвера. После проверки уровня хоста, если нужно протестировать доступ к GPU внутри контейнера, выполните следующее:

# Для NVIDIA:
docker run --rm --gpus all nvidia/cuda:12.5.0-base-ubuntu22.04 nvidia-smi

# Проверить, что устройства примонтированы:
docker run --rm --gpus all nvidia/cuda:12.5.0-base-ubuntu22.04 ls -la /dev/nvidia*

Вы также можете использовать инструменты вроде watch nvidia-smi, чтобы отслеживать активные процессы на GPU, когда контейнеры запускаются, чтобы увидеть, используют ли они GPU.

Шаг 6: Мониторинг

Когда ваши GPU-рабочие нагрузки работают, мониторинг помогает оптимизировать распределение ресурсов и раннее обнаружение проблем. Вы можете использовать открытое решение с Prometheus и NVIDIA DCGM Exporter, которое рекомендуется для сбора статистики и метрик:

NVIDIA

Вы можете развернуть DCGM Exporter на каждом GPU-узле для экспорта метрик.

docker run -d --restart=unless-stopped \
--gpus all \
--name dcgm-exporter \
-p 9400:9400 \
nvcr.io/nvidia/k8s/dcgm-exporter:3.3.5-3.4.0-ubuntu22.04

# Kubernetes
helm repo add gpu-helm-charts https://nvidia.github.io/dcgm-exporter/helm-charts
helm install dcgm-exporter gpu-helm-charts/dcgm-exporter --namespace gpu-monitoring

Затем вы можете настроить Prometheus для скрапинга метрик:

scrape_configs:
- job_name: 'dcgm'
static_configs:
- targets: ['localhost:9400']

AMD

Используйте экспортер ROCm SMI:

git clone https://github.com/platina-systems/rocm_smi_exporter
cd rocm_smi_exporter
python3 rocm_smi_exporter.py

Рекомендуемые модели GPU

Обратите внимание на несколько рекомендаций по GPU для различных рабочих нагрузок и задач на 2025–2026 годы с моделями, которые нам известны на текущий момент.

Для задач AI/ML

NVIDIA RTX 5070
VRAM: 12GB GDDR7 | TDP: 250W | Прибл. цена: 60 000 руб
Лучше всего для: Начальный уровень для ИИ, заявляет производительность RTX 4090 с DLSS 4
Доступность:
Доступна сейчас

NVIDIA RTX 5080
VRAM: 16GB GDDR7 | TDP: 360W | Прибл. цена: 120 000 руб
Лучше всего для: Серьёзные ИИ-задачи, 4K-гейминг
Доступность:
Доступна сейчас

NVIDIA RTX Pro 4000 SFF
VRAM: 20GB GDDR6 | TDP: 70W | Прибл. цена: 170 000 руб
Лучше всего для: Компактные серверы, низкое энергопотребление
Доступность:
Доступна сейчас

AMD Radeon RX 9070 XT
VRAM: 16GB | TDP: 300W | Прибл. цена: 75 000 руб
Лучше всего для: ROCm-совместимые ИИ-задачи, дружелюбна к open-source
Доступность:
Доступна сейчас

AMD Radeon RX 9070 (желательно модель 48GB)
VRAM: 48GB | TDP: 350W | Прибл. цена: 150 000 руб
Лучше всего для: Большие языковые модели, огромные датасеты
Доступность: В России практически недоступна сейчас

Intel Arc B770
VRAM: 16GB GDDR6 | TDP: 225W | Прибл. цена: 36 000 руб
Лучше всего для: Бюджетный ИИ, медиа-транскодирование
Доступность:
Доступна сейчас

Для медиатранскодирования (Plex/Jellyfin и т.д.)

Intel Arc B580
VRAM: 12GB | TDP: 190W | Прибл. цена: 32 000 руб
Лучше всего для: Самая выгодная, справляется с 10+ потоками, AV1-кодирование
Доступность:
Доступна сейчас

Intel Arc Pro B50
VRAM: 16GB | TDP: 70W | Прибл. цена: 32 000 руб
Лучше всего для: Низкопрофильные, компактные сборки
Доступность:
Доступна сейчас

Intel Arc A770
VRAM: 16GB | TDP: 225W | Прибл. цена: 45 000 руб
Лучше всего для: Зрелые драйверы, проверенная производительность
Доступность:
Доступна сейчас

NVIDIA RTX 5050
VRAM: 8GB | TDP: 130W | Прибл. цена: 27 000 руб
Лучше всего для: NVENC-кодирование, компактна
Доступность:
Доступна сейчас

Для бюджетных домашних лабораторий

Intel Arc B580
VRAM: 12GB | TDP: 190W | Прибл. цена: 32 000 руб
Лучше всего для: Лучшая общая ценность для ИИ + транскодирования
Доступность:
Доступна сейчас

AMD Radeon RX 7700 XT
VRAM: 12GB | TDP: 245W | Прибл. цена: 50 000 руб
Лучше всего для: Надёжная поддержка ROCm, игровая карта
Доступность:
Доступна сейчас I

ntel Arc A380
VRAM: 6GB | TDP: 75W | Прибл. цена: 14 000 руб
Лучше всего для: Ультра-бюджетное транскодирование
Доступность:
Доступна сейчас

В заключение

Нет сомнений, что GPU-совместимые контейнеры — одна из крупнейших эволюций в современной домашней лаборатории. С учётом растущих требований к рабочим нагрузкам, таких как ИИ, машинное обучение и обработка медиа, нам всё чаще потребуется такая конфигурация. Процесс настройки стал значительно проще благодаря NVIDIA Container Toolkit и интеграции ROCm от AMD, а также растущей поддержке со стороны Intel.

С одним GPU и небольшими настройками вы можете открыть новый уровень производительности для задач ИИ и медиа. Напишите в комментариях — используете ли вы GPU-совместимые контейнеры?

Источник на английском языке

Читайте про умный дом:

🌐 Сайт

📱 Телеграм

📰 Дзен