2017-04-21 6 views
4

Ich beginne zu lernen, wie man mit TensorFlow maschinelles Lernen macht. Und herauszufinden, Docker ist ziemlich praktisch, um TensorFlow auf meinem Computer zu implementieren. Das Beispiel, das ich finden konnte, funktionierte jedoch nicht auf meiner Zieleinstellung. Welches istWie man Tensorboard und jupyter gleichzeitig mit docker läuft?

Unter ubuntu16.04 os, mit nvidia-docker jupyter und tensorboard service zusammen Host (könnte zwei Container oder ein Container mit zwei Service sein). Und Dateien, die von jupyter erstellt werden, sollten für das Host-Betriebssystem sichtbar sein.

  • Ubuntu 16.04
  • Dokcer
  • nvidia-Andockfensters
    • Jupyter
    • Tensorboard

Jupyter Behälter

nvidia-docker run \ 
    --name jupyter \ 
    -d \ 
    -v $(pwd)/notebooks:/root/notebooks \ 
    -v $(pwd)/logs:/root/logs \ 
    -e "PASSWORD=*****" \ 
    -p 8888:8888 \ 
    tensorflow/tensorflow:latest-gpu 

Tensorboard Behälter

nvidia-docker run \ 
    --name tensorboard \ 
    -d \ 
    -v $(pwd)/logs:/root/logs \ 
    -p 6006:6006 \ 
    tensorflow/tensorflow:latest-gpu \ 
    tensorboard --logdir /root/logs 

Ich habe versucht, Protokolle Ordner sowohl Behälter zu montieren, und lassen Sie Tensorboard das Ergebnis jupyter zugreifen. Aber der Berg scheint funktioniert zu haben. Wenn ich eine neue Datei im Jupyter-Container mit Notizbuchordner anlege, erscheint im Hostordner $ (pwd)/notebooks nichts.

Ich folgte auch die Anweisungen in Nvidia Docker, Jupyter Notebook and Tensorflow GPU

nvidia-docker run -d -e PASSWORD='winrar' -p 8888:8888 -p 6006:6006 gcr.io/tensorflow/tensorflow:latest-gpu-py3 

Nur Jupyter arbeitete, tensorboard nicht von Port 6006.

Antwort

5

Ich war vor dem gleichen Problem heute erreichen konnte.

Kurze Antwort: Ich gehe davon aus, Sie verwenden die gleichen Container für beide Jupyter Notebook und Tensorboard. So, wie Sie schrieb, können Sie den Behälter mit implementieren:

nvidia-docker run -d --name tensor -e PASSWORD='winrar'\ 
        -p 8888:8888 -p 6006:6006 gcr.io/tensorflow/tensorflow:latest-gpu-py3 

Jetzt können Sie beide 8888 zugreifen und 6006 Ports, aber zuerst müssen Sie initialisieren tensorboard:

docker exec -it tensor bash 
tensorboard --logdir /root/logs 

Über die andere Option: Laufen Jupiter und Tensorboard in verschiedenen Containern. Wenn Sie Probleme haben, dieselben Verzeichnisse in verschiedenen Containern zu installieren (in der Vergangenheit gab es einen Fehler), können Sie seit Docker 1.9 unabhängige Volumes erstellen, die nicht mit bestimmten Containern verknüpft sind. Dies kann eine Lösung sein.

  1. Erstellen Sie zwei Volumes, um Protokolle und Notizbücher zu speichern.
  2. Stellen Sie beide Images mit diesen Volumes bereit.

docker volume create --name notebooks 
docker volume create --name logs 

nvidia-docker run \ 
--name jupyter \ 
-d \ 
-v notebooks:/root/notebooks \ 
-v logs:/root/logs \ 
-e "PASSWORD=*****" \ 
-p 8888:8888 \ 
tensorflow/tensorflow:latest-gpu 

nvidia-docker run \ 
--name tensorboard \ 
-d \ 
-v logs:/root/logs \ 
-p 6006:6006 \ 
tensorflow/tensorflow:latest-gpu \ 
tensorboard --logdir /root/logs 
+0

Danke Ihre Lösung für die Bereitstellung. Erste Lösung funktioniert für mich! –

+0

Gibt es eine Möglichkeit zu vermeiden: 'Docker exec -it tensor Bash' und lieber etw als' docker exec tensorboard --logs = ... '<- Dieser Befehl funktioniert nicht. – thigi