À l'aide de GPU à partir d'un conteneur docker?
Je suis à la recherche d'un moyen d'utiliser le GPU de l'intérieur d'un conteneur docker.
Le conteneur d'exécuter du code arbitraire, donc je ne veux pas utiliser le mode privilégié.
Des conseils à donner?
À partir de précédentes recherches, j'ai compris que run -v
et/ou LXC cgroup
était la voie à suivre, mais je ne suis pas sûr de la façon de l'enlever exactement
- Voir stackoverflow.com/questions/17792161/... qui est similaire à votre besoin.
- Le lien était bon, mais pas très utile puisque je ne peux pas utiliser privilégié pour des raisons de sécurité. Le lxc-cgroups était un bon pointeur, mais pas assez. J'ai trouvé un moyen, et je lui réponds quand tout sera poli.
Vous devez vous connecter pour publier un commentaire.
Regan réponse est génial, mais c'est un peu hors de date, comme la bonne façon de le faire est d'éviter les lxc contexte d'exécution comme Docker a abandonné LXC par défaut le contexte d'exécution de menu fixe à 0,9.
Au lieu de cela il est mieux de dire docker sur le nvidia appareils via le --appareil de drapeau, et il suffit d'utiliser le natif du contexte d'exécution plutôt que de lxc.
Environnement
Ces instructions ont été testées sur l'environnement suivant:
Installer le pilote nvidia et cuda sur votre hôte
Voir CUDA 6.5 sur AWS GPU Exemple sous Ubuntu 14.04 pour obtenir votre machine hôte de l'installation.
Installer Docker
Trouver vos périphériques nvidia
Exécuter conteneur Docker pilote nvidia pré-installé
J'ai créé un docker image qui a le cuda pilotes pré-installés. Le dockerfile est disponible sur dockerhub si vous voulez savoir comment cette image a été construit.
Vous aurez envie de personnaliser cette commande pour correspondre à vos périphériques nvidia. Voici ce qui a fonctionné pour moi:
Vérifier CUDA est correctement installé
Ce doit être exécuté à partir de l'intérieur du conteneur docker que vous venez de lancer.
Installer CUDA échantillons:
Construire deviceQuery exemple:
Si tout a fonctionné, vous devriez voir le résultat suivant:
-e lxc
lors du démarrage de Docker, c'est donc à l'aide de la valeur par défaut (libcontainer?). Peut-être qu'ils n'ont pas eu l'occasion de le renommer le package à partir d'un conteneur lxc-menu fixe à autre chose.ls -la /dev | grep nvidia
mais CUDA ne pouvez pas trouver un CUDA-appareil compatible:./deviceQuery
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
cudaGetDeviceCount returned 38
-> no CUDA-capable device is detected
Result = FAIL
c'Est à cause de l'inadéquation de la CUDA libs sur l'hôte et dans le conteneur?Ok j'ai enfin réussi à le faire sans l'aide de l' --mode privilégié.
Je suis en cours d'exécution sur le serveur ubuntu 14.04 et j'utilise la dernière cuda (6.0.37 pour linux 13.04 64 bits).
Préparation
Installer le pilote nvidia et cuda sur votre hôte. (il peut être un peu difficile donc je vous suggère de suivre ce guide https://askubuntu.com/questions/451672/installing-and-testing-cuda-in-ubuntu-14-04)
À l'ATTENTION de : Il est vraiment important que vous gardez les fichiers utilisés pour l'hôte cuda installation
Obtenir le Démon Docker à exécuter à l'aide d'un conteneur lxc
Nous avons besoin pour exécuter le panneau de démon à l'aide d'un conteneur lxc conducteur d'être en mesure de modifier la configuration et de donner l'accès au conteneur de l'appareil.
Un temps d'utilisation :
Permanente de configuration
Modifier votre menu fixe fichier de configuration se trouve dans /etc/default/docker
Modifiez la ligne DOCKER_OPTS en ajoutant '-e lxc'
Voici ma ligne après modification
Puis redémarrez le démon à l'aide de
Comment vérifier si le démon de l'utiliser efficacement lxc pilote ?
L'Exécution de Pilote de ligne doit ressembler à cela :
Construire votre image avec la carte NVIDIA et CUDA driver.
Ici est une base Dockerfile de construire un CUDA compatible image.
Exécuter votre image.
Vous devez d'abord identifier votre le plus grand nombre associé à votre appareil.
Plus simple est de faire la commande suivante :
Si le résultat est vide, utilisez le lancement de l'un des échantillons sur l'hôte devrait faire l'affaire.
Le résultat devrait ressembler à ça
Comme vous pouvez le voir, il existe un ensemble de 2 nombres entre le groupe et la date.
Ces 2 numéros sont appelés les numéros majeur et mineur (écrit dans cet ordre) et de la conception d'un appareil.
Nous allons simplement utiliser les nombres pour des raisons de commodité.
Pourquoi nous avons activé un conteneur lxc pilote?
Pour utiliser le lxc conf option qui nous permettent de nous pour permettre à nos conteneur pour accéder à ces périphériques.
L'option est : (je recommande l'utilisation * pour le mineur en cause de nombre de réduire la longueur de la course de commande)
Donc, si je veux lancer un conteneur (en Supposant que votre nom de l'image est cuda).
--device
option pour permettre conteneur pour accéder à l'ordinateur hôte de l'appareil. Cependant j'ai essayé d'utiliser--device=/dev/nvidia0
pour permettre conteneur docker pour exécuter cuda et a échoué./dev/nvidiao
,/dev/nvidia1
,/dev/nvidiactl
et/dev/nvidia-uvm
avec--device
. Bien que je ne sais pas pourquoi./dev/nvidia*
@Regan. Pour @ChillarAnand j'ai fait un cuda-dockerRUN apt-get update && apt-get install ...
)Nous venons de publier un expérimentales GitHub qui devrait faciliter le processus de l'utilisation des Gpu NVIDIA à l'intérieur de conteneurs Docker.
Les améliorations récentes apportées par NVIDIA ont produit beaucoup plus robuste pour ce faire.
Essentiellement, ils ont trouvé un moyen d'éviter la nécessité d'installer CUDA/pilote du GPU à l'intérieur des conteneurs et ont-il correspondre à l'hôte de module de noyau.
Au lieu de cela, les pilotes sont sur l'ordinateur hôte et les conteneurs n'a pas besoin d'eux.
Elle nécessite une modification de docker-cli droit maintenant.
C'est super, parce que maintenant les conteneurs sont beaucoup plus portable.
Un test rapide sur Ubuntu:
Pour plus de détails, voir:
GPU Conteneur Docker
et: https://github.com/NVIDIA/nvidia-docker
Mis à jour pour cuda-8.0 sur ubuntu 16.04
Installer docker https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-16-04
Construire l'image suivante qui comprend les pilotes nvidia et cuda toolkit
Dockerfile
sudo docker run -ti --device /dev/nvidia0:/dev/nvidia0 --device /dev/nvidiactl:/dev/nvidiactl --device /dev/nvidia-uvm:/dev/nvidia-uvm <built-image> ./deviceQuery
Vous devriez obtenir un résultat similaire à:
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0, CUDA Runtime Version = 8.0, NumDevs = 1, Device0 = GRID K520
Result = PASS
L'écriture d'une mise à jour de réponse étant donné que la plupart des déjà présent réponses sont obsolètes aujourd'hui.
Les Versions antérieures à
Docker 19.03
utilisée pour exigernvidia-docker2
et la--runtime=nvidia
drapeau.Depuis
Docker 19.03
, vous devez installernvidia-container-toolkit
paquet et ensuite utiliser le--gpus all
drapeau.Donc, ici, sont les bases,
Package D'Installation
Installer le
nvidia-container-toolkit
colis comme par la documentation officielle sur Github.Pour Redhat en fonction des Systèmes d'exploitation, exécutez les commandes suivantes:
Pour Debian en fonction des Systèmes d'exploitation, exécutez les commandes suivantes:
Exécutant le menu fixe avec support GPU
Veuillez noter que le drapeau
--gpus all
est utilisée pour attribuer tous disponibles gpu pour le conteneur docker.À assigner des gpu pour le menu fixe conteneur (dans le cas de plusieurs Gpu disponibles dans votre machine)
Ou
À utiliser le GPU de conteneur docker, au lieu d'utiliser le menu fixe, utiliser Nvidia-menu fixe. Pour installer le panneau Nvidia utiliser les commandes suivantes
Utilisation x11docker par mviereck:
https://github.com/mviereck/x11docker#hardware-acceleration dit
Ce script est vraiment pratique car il gère l'ensemble de la configuration et de l'installation. L'exécution d'un menu fixe l'image sur X avec le gpu est aussi simple que