it-swarm.dev

Agregue nvidia runtime a los tiempos de ejecución de Docker

Estoy ejecutando una máquina virtual en GCP con una GPU tesla. E intente implementar una aplicación basada en PyTorch para acelerarla con GPU.

Quiero que Docker use esta GPU, tenga acceso a ella desde los contenedores.

Logré instalar todos los controladores en la máquina Host, y la aplicación funciona bien allí, pero cuando intento ejecutarlo en Docker (basado en el contenedor de nvidia/cuda) falla Pytorch:

File "/usr/local/lib/python3.6/dist-packages/torch/cuda/__init__.py", line 82, 
in _check_driver http://www.nvidia.com/Download/index.aspx""")
AssertionError: 
Found no NVIDIA driver on your system. Please check that you have an NVIDIA GPU and installed a driver from

Para obtener información sobre los controladores de nvidia visibles para el contenedor, ejecuto esto:

docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
Pero se queja: docker: Error response from daemon: Unknown runtime specified nvidia.

En la máquina host nvidia-smi la salida se ve así:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.33.01    Driver Version: 440.33.01    CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla P100-PCIE...  On   | 00000000:00:04.0 Off |                    0 |
| N/A   39C    P0    35W / 250W |    873MiB / 16280MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

Si reviso mis tiempos de ejecución en la ventana acoplable, solo obtengo runc tiempo de ejecución, no nvidia como en los ejemplos en Internet.

$ docker info|grep -i runtime
 Runtimes: runc
 Default Runtime: runc

¿Cómo puedo agregar este nvidia entorno de tiempo de ejecución a mi acoplador?

La mayoría de las publicaciones y preguntas que encontré hasta ahora dicen algo como "Olvidé reiniciar mi docker daemon, funcionó", pero no me ayuda. ¿Qué debería hacer?

Verifiqué muchos problemas en github, y # 1 , # 2 y # Preguntas de StackOverflow - no ayudaron.

4
evaleria

El tiempo de ejecución nvidia que necesita es nvidia-container-runtime.

Siga las instrucciones de instalación aquí:
https://github.com/NVIDIA/nvidia-container-runtime#installation

Básicamente, primero lo instala con su administrador de paquetes, si no está presente:

Sudo apt-get install nvidia-container-runtime

Luego lo agrega a los tiempos de ejecución de Docker:
https://github.com/nvidia/nvidia-container-runtime#daemon-configuration-file

Esta opción funcionó para mí:

$ Sudo tee /etc/docker/daemon.json <<EOF
{
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}
EOF
Sudo pkill -SIGHUP dockerd

Comprueba que se haya añadido:

$ docker info|grep -i runtime
 Runtimes: nvidia runc
 Default Runtime: runc
3