J'ai installé le conteneur docker tensorflow sur une machine Ubuntu. Le menu fixe tensorflow - instructions d'installation spécifiez:
docker run -it b.gcr.io/tensorflow/tensorflow
Cela me met dans le terminal de conteneur de menu fixe, et je peux exécuter python et exécuter l'exemple Hello World. Je peux aussi exécuter manuellement.\Run_jupyter.sh pour démarrer le bloc-notes jupyter. Cependant, je ne parviens pas à accéder au cahier à partir de l'hôte.
Comment démarrer le bloc-notes jupyter de manière à pouvoir l'utiliser à partir de la machine hôte? Idéalement, j'aimerais utiliser docker pour lancer le conteneur et lancer jupyter en une seule commande.
Pour un hôte Linux, la réponse de Robert Graves fonctionnera, mais pour Mac OS X ou Windows, il reste encore beaucoup à faire car le menu fixe s'exécute sur une machine virtuelle.
Donc, pour commencer à lancer le docker Shell (ou n’importe quel shell si vous utilisez Linux) et exécutez la commande suivante pour lancer un nouveau conteneur TensorFlow:
docker run -p 8888:8888 -p 6006:6006 b.gcr.io/tensorflow/tensorflow ./run_jupyter.sh
Ensuite, pour Mac OS X et Windows, vous devez effectuer les opérations suivantes une seule fois:
$ cd
$ docker run -it -p 8888:8888 -p 6006:6006 -v /$(pwd)/tensorflow:/notebooks --name tf b.gcr.io/tensorflow/tensorflow
$ docker start -i tf
Si vous n'êtes pas sous Windows, vous devriez probablement changer
/$(pwd)
en$(pwd)
Vous obtiendrez un dossier vide nommé tensorflow
dans votre répertoire de base pour l'utiliser comme stockage persistant de fichiers de projet tels que Ipython Notebooks et les ensembles de données.
cd
pour vous assurer que vous vous trouvez dans votre répertoire personnel.-it
signifie interactif, vous pouvez donc interagir avec le conteneur dans l'environnement du terminal. -v Host_folder:container_folder
permet de partager un dossier entre l'hôte et le conteneur. Le dossier Host doit se trouver dans votre répertoire personnel. /$(pwd)
se traduit par //c/Users/YOUR_USER_DIR
dans Windows 10. Ce dossier est considéré comme un répertoire notebooks
dans le conteneur utilisé par Ipython/Jupyter Notebook. --name tf
attribue le nom tf
au conteneur.-p 8888:8888 -p 6006:6006
mappant les ports du conteneur sur l'hôte, première paire pour le bloc-notes Jupyter, la deuxième pour Tensorboard-i
signifie interactifAprès avoir lu/ la documentation de docker j’ai une solution qui marche pour moi:
docker run -p 8888:8888 -p 6006:6006 b.gcr.io/tensorflow/tensorflow ./run_jupyter.sh
Les options -p 8888: 8888 et -p 6006: 6006 exposent les ports de conteneur à l'hôte sur le même numéro de port. Si vous utilisez simplement -p 8888, un port aléatoire de l'hôte sera attribué.
Le fichier ./run_jupyter.sh indique à docker ce qu'il doit exécuter dans le conteneur.
Avec cette commande, je peux utiliser un navigateur sur la machine hôte pour me connecter à http: // localhost: 8888/ et accéder au bloc-notes jupyter.
UPDATE: Après avoir lutté avec docker sur Windows, je suis revenu à une machine Ubuntu avec docker. Mon carnet de notes était en train d'être effacé entre les sessions de menu fixe, ce qui est logique après avoir lu davantage de documentation sur ce programme. Voici une commande mise à jour qui monte également un répertoire Host dans le conteneur et lance jupyter pointant sur ce répertoire monté. Maintenant, mon ordinateur portable est enregistré sur l'hôte et sera disponible lors du prochain démarrage de tensorflow.
docker run -p 8888:8888 -p 6006:6006 -v /home/rob/notebook:/notebook b.gcr.io/tensorflow/tensorflow sh -c "jupyter notebook /notebook"
Ces étapes ont fonctionné pour moi si vous êtes un non-dockeur total utilisant une machine Windows.
Versions: Windows 8.1, menu fixe 1.10.3, tensorflow r0.7
docker-machine ip
et notez-le. Permet de l'appeler 'adresse ip'. Ressemblera à ceci: 192.168.99.104 (j'ai composé cette adresse ip)Collez cette commande sur le terminal de docker:
docker run -p 8888:8888 -p 6006:6006 b.gcr.io/tensorflow/tensorflow
.
Si vous l'exécutez pour la première fois, il téléchargera et installera l'image sur cette machine virtuelle légère. Ensuite, il devrait indiquer "Le cahier Jupyter tourne à ...." -> C'est bon signe!
<your ip address (see above)>:8888
. Par exemple. 192.168.99.104:8888/Pour que cela fonctionne sous hyper-v. Effectuez les étapes suivantes:
1) Créez une machine virtuelle docker en utilisant https://blogs.msdn.Microsoft.com/scicoria/2014/10/09/getting-docker-running-on-hyper-v-8-1-2012-r2/ cela vous donnera un conteneur de docker qui fonctionne. Vous pouvez vous y connecter via la console ou via ssh. Je mettrais au moins 8 Go de mémoire car je suis sûr que cela utilisera beaucoup de mémoire.
2) exécutez "ifconfig" pour déterminer l'adresse IP du Docker VM
3) Sur le type d'invite du docker Shell:
exécution du menu fixe -p 8888: 8888 -p 6006: 6006 -it b.gcr.io/tensorflow/tensorflow
4) Connectez-vous à Jupyter Workbench en utilisant http:/[adresse ifconfig]: 8888 /
Pour ranger un peu les choses, je voudrais donner quelques explications supplémentaires, car j’ai également beaucoup souffert de la configuration de docker avec tensorflow. Pour cela, je me réfère à this video qui n'est malheureusement pas auto-explicatif dans tous les cas ... Je suppose que vous avez déjà installé docker. La partie générale très intéressante de la vidéo commence à la minute 0:44 où il a finalement commencé à travailler dans Docker. Jusque là, il ne télécharge que le compte-rendu tensorflow dans le dossier, qu'il monte ensuite dans le conteneur. Vous pouvez bien sûr mettre n'importe quoi d'autre dans le conteneur et y accéder plus tard dans la VM du menu fixe.
Il exécute d'abord la commande docker longue docker run –dit -v /c/Users/Jay/:/media/disk –p 8000 –p 8888 –p 6006 b.gcr.io/tensorflow/tensorflow
. La commande "run" lance les conteneurs. Dans ce cas, il lance le conteneur «b.gcr.io/tensorflow/tensorflow», dont l'adresse est fournie dans le didacticiel d'installation de tensorflow docker . Le conteneur sera téléchargé par docker s'il n'est pas déjà disponible localement. Ensuite, il donne deux types d'arguments supplémentaires: Il monte un dossier du système hôte sur le chemin donné au conteneur. N'oubliez pas de donner la partition au début (par exemple, "/ c /"). En outre, il déclare que les ports seront disponibles ultérieurement à partir de la machine hôte avec les paramètres -p. De toute cette commande, vous récupérez le [CONTAINER_ID] de cette exécution de conteneur! Vous pouvez toujours voir les conteneurs en cours d'exécution en exécutant «docker ps» dans la console de menu fixe. Votre conteneur créé ci-dessus doit apparaître dans cette liste avec le même identifiant.
Étape suivante: avec votre conteneur en cours d’exécution, vous souhaitez maintenant exécuter quelque chose dans ce conteneur. Dans notre cas, cahier jupyter ou tensorflow ou autre: Pour ce faire, vous faites en sorte que le menu fixe exécute le bash sur le conteneur nouvellement créé: docker exec –ti [CONTAINER_ID] bash
. Cette commande démarre maintenant un shell bash sur votre conteneur. Vous voyez cela parce que le “$” a maintenant changé pour root @ [CONTAINER_ID] :. De là, pas de retour possible. Si vous souhaitez revenir au terminal de menu fixe, vous devez démarrer une nouvelle console de menu fixe comme il le fait à la minute 1:10. Maintenant, avec un shell bash s'exécutant dans le conteneur, vous pouvez faire ce que vous voulez et exécuter Jupiter ou tensorflow ou autre chose. Le dossier du système hôte, que vous avez indiqué dans la commande d'exécution, devrait maintenant être disponible sous «/ media/disk».
Dernière étape pour accéder à la sortie VM. Il ne voulait toujours pas travailler pour moi et je ne pouvais pas accéder à mon cahier. Vous devez toujours trouver l'adresse IP et le port corrects pour accéder au carnet de notes lancé, à la session de tensorboard ou à un autre processus. Commencez par trouver l'adresse IP principale en utilisant docker-machine –ls
. Dans cette liste, vous obtenez l'URL. (Si c'est votre seul conteneur, il s'appelle default.) Vous pouvez laisser le port indiqué ici. Ensuite, à partir de docker ps
, vous obtenez la liste des ports transférés. Lorsque 0.0.0.32776-> 6006/tcp est écrit dans la liste, vous pouvez y accéder à partir de la machine hôte en utilisant le port indiqué en premier lieu (Awkyard). Donc, dans mon cas, le tableau de contrôle exécuté dans le conteneur a été «lancé sur le port 6006». Ensuite, depuis mon machine hôte, je devais entrer http://192.168.99.100:32776/ pour y accéder.
-> Et ça y est! Il a couru pour moi comme ça!
Il vous donne l'invite de terminal:
FOR /f "tokens=*" %i IN ('docker-machine env --Shell cmd vdocker') DO %i
docker run -it tensorflow/tensorflow:r0.9-devel
ou
FOR /f "tokens=*" %i IN ('docker-machine env --Shell cmd vdocker') DO %i
docker run -it b.gcr.io/tensorflow/tensorflow:latest-devel
Vous devriez avoir 'vdocker' ou changer vdocker en 'default'.
Pour une raison quelconque, j'ai rencontré un problème supplémentaire que je devais surmonter, au-delà des exemples fournis, en utilisant l'indicateur --ip
:
nvidia-docker run --rm \
-p 8888:8888 -p 6006:6006 \
-v `pwd`:/root \
-it tensorflow/tensorflow:latest-devel-gpu-py3 sh -c "jupyter notebook --ip 0.0.0.0 ."
Et puis je peux accéder via http: // localhost: 8888 depuis ma machine. À certains égards, cela a du sens; dans le conteneur, vous vous connectez à 0.0.0.0
qui représente toutes les adresses disponibles. Mais si je dois le faire, cela semble varier (par exemple, j’ai commencé à utiliser les ordinateurs portables avec jupyter/scipy-notebook
sans le faire).
Dans tous les cas, la commande ci-dessus fonctionne pour moi, pourrait être utile à d’autres.