GPU Passthrough en Docker
Qué cubre este artículo sobre GPU Passthrough en Docker
- Cómo pasar GPUs a contenedores Docker.
- Diferencias entre Nvidia y AMD.
- Configuración para Ollama, PyTorch y otras herramientas de IA.
- ROCm, CUDA y Container Runtime.
- Errores comunes y soluciones.
Introducción: GPU Passthrough en Docker
Aplicaciones de IA como Ollama, vLLM o PyTorch se benefician enormemente de una GPU. Docker ofrece formas de pasar la GPU del host directamente a los contenedores, permitiendo que múltiples cargas de trabajo GPU se ejecuten aisladas entre sí. Nvidia y AMD tienen requisitos diferentes, pero ambas funcionan con Docker cuando se instalan los drivers y runtimes correctos.
Este artículo muestra cómo poner GPUs de Nvidia y AMD disponibles en contenedores Docker y evitar obstáculos típicos.
Términos clave
- GPU Passthrough: Pasar una GPU física a un contenedor.
- CUDA: Plataforma de Nvidia para computación paralela.
- ROCm: Plataforma de código abierto de AMD para GPU Computing.
- Container Runtime: Entorno de ejecución que ejecuta el contenedor.
- Nvidia Container Toolkit: Extensión que permite GPUs de Nvidia en Docker.
- Device Mapping: Asignación de archivos de dispositivo a un contenedor.
- Privileged: Contenedor con acceso completo al host.
- Compute-Only: GPU se utiliza solo para cálculos.
GPU Nvidia en Docker
Requisitos previos
- Drivers oficiales de Nvidia instalados.
- Docker y Docker Compose instalados.
- Nvidia Container Toolkit.
Instalar Nvidia Container Toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
Ollama con GPU
services:
ollama:
image: ollama/ollama
container_name: ollama
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=all
volumes:
- ollama-data:/root/.ollama
restart: unless-stopped
volumes:
ollama-data:
O usando el comando docker run:
docker run -d --name ollama --gpus all -v ollama-data:/root/.ollama ollama/ollama
Verificar uso de GPU
docker exec -it ollama nvidia-smi
GPU AMD en Docker
Requisitos previos
- GPU AMD con soporte ROCm.
- Drivers ROCm instalados.
- Distribución Linux compatible, generalmente Ubuntu.
Ollama con ROCm
services:
ollama:
image: ollama/ollama:rocm
container_name: ollama
devices:
- /dev/kfd
- /dev/dri
environment:
- HSA_OVERRIDE_GFX_VERSION=11.0.0
volumes:
- ollama-data:/root/.ollama
restart: unless-stopped
volumes:
ollama-data:
Verificar uso de GPU
docker exec -it ollama rocm-smi
Seleccionar una GPU específica
docker run --gpus '"device=0,1"' -d ollama/ollama
En Compose:
environment:
- NVIDIA_VISIBLE_DEVICES=0,1
Problemas de rendimiento
- Runtime incorrecto: El contenedor no usa
nvidia. - Errores de driver: Los drivers de Nvidia y el toolkit no coinciden.
- Versión de ROCm: No todas las GPUs de AMD tienen soporte oficial.
- Límite de memoria: El contenedor no tiene acceso a suficiente VRAM.
- Fallback a CPU: Ollama recurre a CPU cuando la GPU no se detecta.
- Conflictos de Mesa: Los drivers de gráficos pueden chocar con drivers de computación.
Seguridad
--gpus allexpone todas las GPUs.- Asigna GPUs específicas intencionalmente.
- Usa privileged solo cuando sea absolutamente necesario.
- Restringe imágenes de contenedor a fuentes confiables.
Enlaces e información adicional
- BotServ.de Comandos Ollama
- BotServ.de Performance Ollama
- BotServ.de Seguridad Docker
- BotServ.de Performance Ollama
Preguntas frecuentes: GPU Passthrough
¿Necesito una GPU para Ollama? No, pero es muy recomendable para modelos grandes o respuestas fluidas.
¿Funciona con cualquier GPU de Nvidia? Con casi todas las GPUs actuales de Nvidia que tengan soporte CUDA.
¿Puedo usar mi GPU de AMD?
Sí, si soporta ROCm o si funciona con variables de entorno como HSA_OVERRIDE_GFX_VERSION.
¿Debo instalar el driver del host en el contenedor? No, el driver del host se pasa a través del Container Toolkit.
¿Cómo verifico si la GPU se detecta en el contenedor?
Usa nvidia-smi o rocm-smi dentro del contenedor.
Fuentes y lectura adicional
- Nvidia Container Toolkit: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/
- ROCm Docker: https://rocmdocs.amd.com/
- Ollama Docker: https://hub.docker.com/r/ollama/ollama
Resumen: GPU Passthrough en Docker
GPU Passthrough en Docker permite ejecutar Ollama y otras herramientas de IA en hardware dedicado sin afectar el sistema operativo del host. Nvidia requiere el Container Toolkit, AMD necesita ROCm y los archivos de dispositivo correctos. Lo importante es tener runtimes correctas, versiones de drivers compatibles y asignación deliberada de GPUs. Si logras ejecutar nvidia-smi o rocm-smi dentro del contenedor, puedes estar seguro de que la GPU se pasa correctamente.


