web-dev-qa-db-fra.com

Ajouter le runtime nvidia aux runtimes docker

J'exécute un vachine virtuel sur GCP avec un GPU tesla. Et essayez de déployer une application basée sur PyTorch pour l'accélérer avec le GPU.

Je veux que Docker utilise ce GPU, j'y ai accès à partir de conteneurs.

J'ai réussi à installer tous les pilotes sur la machine hôte et l'application fonctionne correctement, mais lorsque j'essaie de l'exécuter dans Docker (basé sur le conteneur nvidia/cuda), Pytorch échoue:

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

Pour obtenir des informations sur les pilotes nvidia visibles par le conteneur, je lance ceci:

docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
Mais il se plaint: docker: Error response from daemon: Unknown runtime specified nvidia.

Sur la machine hôte nvidia-smi la sortie ressemble à ceci:

+-----------------------------------------------------------------------------+
| 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 je vérifie mes runtimes dans docker, je ne reçois que runc runtime, pas nvidia comme dans les exemples sur Internet.

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

Comment puis-je ajouter cet environnement d'exécution nvidia à mon docker?

La plupart des messages et des questions que j'ai trouvés jusqu'à présent disent quelque chose comme "J'ai juste oublié de redémarrer mon démon docker, cela a fonctionné", mais cela ne m'aide pas. Que dois-je faire?

J'ai vérifié de nombreux problèmes sur github, et # 1 , # 2 et # questions StackOverflow - n'a pas aidé.

4
evaleria

Le runtime nvidia dont vous avez besoin est nvidia-container-runtime.

Suivez les instructions d'installation ici:
https://github.com/NVIDIA/nvidia-container-runtime#installation

Fondamentalement, vous l'installez d'abord avec votre gestionnaire de paquets, s'il n'est pas présent:

Sudo apt-get install nvidia-container-runtime

Ensuite, vous l'ajoutez aux runtimes docker:
https://github.com/nvidia/nvidia-container-runtime#daemon-configuration-file

Cette option a fonctionné pour moi:

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

Vérifiez qu'il est ajouté:

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