[PYTHON] Vorsichtsmaßnahmen für das TensorFlow-Upgrade (auf 1.3)

** (Über die Vorteile von nvidia-docker [Addition] (http://qiita.com/TomokIshii/items/0cf8bbf64be2823a82a8#%E8%BF%BD%E8%A8%98nvidia-docker-%E3%81%AB%E3%82%88%E3%82%8B%E7 % 92% B0% E5% A2% 83% E6% 95% B4% E5% 82% 99% E3% 81% AE% E5% 88% A9% E7% 82% B9). ) **

Die offizielle Version von TensorFlow 1.3 (die Version mit entferntem RC) wurde veröffentlicht. https://github.com/tensorflow/tensorflow/blob/r1.3/RELEASE.md

Informationen zu neuen Funktionen usw. finden Sie in der Versionshinweise. Die Installation hat jedoch einige Zeit in Anspruch genommen. Daher werden wir die folgenden Informationen weitergeben.

(Die Programmierumgebung ist wie folgt.

Ich habe immer die offizielle Version von binär mit pip gesetzt

Da das Framework von Deep Learning sehr aktiv ist, setzen wir das normalerweise in Binärform verteilte, nachdem die offizielle Version (die Version mit RC = Release Candidate) veröffentlicht wurde. Ziel ist es, Probleme zu minimieren, in der Hoffnung, dass kleinere Mängel behoben werden können. (Wenn man es umdreht, kann man sagen, dass es keinen Mut gibt, Quellcode zu erstellen.)

# From TensorFlow documentation
$ pip install --upgrade tensorflow      # for Python 2.7
$ pip3 install --upgrade tensorflow     # for Python 3.n
$ pip install --upgrade tensorflow-gpu  # for Python 2.7 and GPU
$ pip3 install --upgrade tensorflow-gpu # for Python 3.n and GPU

Danach habe ich es mit dem MNIST-Code getestet.

  1. Code unter Verwendung eines einfachen Modells der MNIST-Klassifizierung. kein Problem.
  2. MNIST CNN-Modell (Convolutional Neural Network). ** Funktioniert nicht ** ...
ImportError: libcudnn.so.6: cannot open shared object file: No such file or directory

Failed to load the native TensorFlow runtime.

See https://www.tensorflow.org/install/install_sources#common_installation_problems

for some common reasons and solutions.  Include the entire stack trace
above this error message when asking for help.

Ich habe es nicht bemerkt, weil es nicht explizit in der TensorFlow-Dokumentation geschrieben wurde, sondern im Release Note. Ein Satz wurde geschrieben.

  • All our prebuilt binaries have been built with cuDNN 6. We anticipate releasing TensorFlow 1.4 with cuDNN 7.

Ich habe bisher cuDNN 5.1 verwendet, aber diesmal scheint cuDNN 6.0 erforderlich zu sein. Sie haben keine andere Wahl, als sich auf der NVIDIA Developer-Website anzumelden (nachdem Sie die Easy Deep Learning-Umfrage beantwortet haben) und cuDNN 6.0 herunterzuladen. Als Referenz werde ich eine erfasste Version dieser Seite einfügen.

** Abb. NVIDIA cuDNN-Download-Menü (August 2017) ** NVIDIA_download.png

(Es gibt auch CUDA 9.0 RC. Es wird davon ausgegangen, dass es mit der neuen GPU und VOLTA von NVIDIA kompatibel ist.)

Durch die Installation dieses cuDNN v6.0 für CUDA 8.0 funktionierte der MNIST CNN-Code einwandfrei.

TensorBoard in einem separaten Paket

TensorBoard ist jetzt ein separates Pip-Paket, das vom ** pip ** -Programm übernommen wurde und mit der Installation des Tensorflow-Körpers (Tensorflor-GPU) geliefert wurde.

(Referenz) https://github.com/tensorflow/tensorboard

Vorerst habe ich versucht, die Tensorboard-Demo mnist_with_summaries.py auszuführen.

Fig. TensorBoard demo TensorBoard_demo.png

Es gab kein besonderes Problem. (Der Tag-Name kann mit regulären Ausdrücken gesucht werden, aber ich weiß nicht, ob er aus dieser Version stammt oder bereits unterstützt wurde.)

Versuchen Sie es mit der neuen Funktion "Schätzer in Dosen".

Seit ich es installiert habe, habe ich versucht, die neue Funktion von TensorFlow 1.3, "Canned Estimators" (Canned Estimator, tf.estimator. *), Zu verwenden. Nur der Hauptteil ist unten aufgeführt.

def main(unused_args):
    ### Load MNIST dataset.
    mnist = tf.contrib.learn.datasets.DATASETS['mnist']('../MNIST_data')
    train_input_fn = tf.estimator.inputs.numpy_input_fn(
        x={X_FEATURE: mnist.train.images},
        y=mnist.train.labels.astype(np.int32),
        batch_size=100,
        num_epochs=None,
        shuffle=True)
    test_input_fn = tf.estimator.inputs.numpy_input_fn(
        x={X_FEATURE: mnist.train.images},
        y=mnist.train.labels.astype(np.int32),
        num_epochs=1,
        shuffle=False)

    ### Convolutional network
    classifier = tf.estimator.Estimator(model_fn=inference_fn)
    classifier.train(input_fn=train_input_fn, steps=400)
    scores = classifier.evaluate(input_fn=test_input_fn)
    print('Accuracy (conv_model): {0:f}'.format(scores['accuracy']))

(Der gesamte Code und der alte Code zum Vergleich wurden auf [gist] hochgeladen (https://gist.github.com/tomokishii/6a5d433246003811bf215a7b86954c89).)

Da der Code wie Variableninitialisierung und tf.Session () ausgeblendet ist, ist er irgendwie zu einer "Hi-Level" -Atmosphäre geworden. Ich hatte jedoch nicht den Eindruck, dass es einfach zu bedienen ist, wahrscheinlich weil ich neu darin war. (Es gibt auch eine "Keras-API" auf hoher Ebene.) Es scheint notwendig zu sein, sie für eine genaue Auswertung etwas genauer zu verwenden.

Impressionen

Die Änderungen in der Deep Learning-Bibliothek sind so intensiv, dass ich das Gefühl habe, nicht mithalten zu können. Benutzer von ** TensorFlow ** (GPU-Version) müssen sich daran erinnern, dass sie im nächsten TF 1.4 auf cuDNN 7.0 umsteigen werden (Ist es möglich, 6.0 beizubehalten, da dies geplant ist?). Für ** Chainer ** wurde v3.0.0beta bereits veröffentlicht (https://github.com/chainer/chainer/releases/tag/v3.0.0), wenn Sie der Meinung sind, dass es gerade v2.0 geworden ist. b1). (Beachten Sie anstelle von Chainer die CuPy-Spezifikationen für CUDA !?) Wenn Sie versuchen, mehrere Frameworks zu verwenden, müssen Sie anscheinend genau auf die Versionsverwaltung der NVIDIA-Bibliothek achten.

(Ich verwende pyenv und virtualenv, aber ... ich mache mir Sorgen, ob ich auch PyTorch und Theano ausführen möchte.)

(Ergänzung) Vorteile der Umgebungspflege durch nvidia-docker

Ich erhielt den Rat von @ miumiu0917, dass "" nvidia-docker "die Wartung der Umgebung erleichtern sollte", also bestätigte ich die Situation.

(Bestätigung der Umgebung)

Um TensorFlow auf nvidia-docker auszuführen, bereiten Sie zunächst ein TensorFlow Docker-Image vor. Die TensorFlow-Dokumentation enthält

$ nvidia-docker run -it gcr.io/tensorflow/tensorflow:latest-gpu bash

Ich wurde angewiesen, das mit dem Tag "latest-gpu" zu verwenden, aber für alle Fälle werde ich die Docker Hub-Site überprüfen. (Referenz) https://hub.docker.com/r/tensorflow/tensorflow/tags/

Es scheint, dass es 8 Versionen wie "Neueste-GPU" und "Neueste-GPU-Py3" gibt, auch wenn der Tag-Name "Neueste" hat, aber ziehen Sie vorerst "Neueste-Entwickler-GPU-Py3" und ziehen Sie es. Ich habe bestätigt, dass der obige MNIST-CNN-Code (bei dem das erste Problem aufgetreten ist) "ohne Probleme" funktioniert. Die Docker-Datei im TensorFlow-Repository enthält die folgende Beschreibung.

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/docker/Dockerfile.gpu

FROM nvidia/cuda:8.0-cudnn6-devel-ubuntu16.04

MAINTAINER Craig Citro <[email protected]>

# Pick up some TF dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
        build-essential \
        curl \
        libfreetype6-dev \
        libpng12-dev \
        libzmq3-dev \
        pkg-config \
        python \

(Weggelassen)

Wie Sie in der ersten Zeile sehen können, ist das Basisbild als ** "nvidia / cuda: 8.0-cudnn6-devel-ubuntu16.04" ** definiert und so geschrieben, dass es (offensichtlich) richtig ausgerichtet ist. Bilder, die "GPU" -Unterstützung erfordern, können mit "nvidia-docker" gestartet werden. Daher scheint es (wie ich sehe) recht einfach zu sein, die Deep Learning-Umgebung zu verbessern und Konsistenz zu gewährleisten.

Referenz-Website

Recommended Posts

Vorsichtsmaßnahmen für das TensorFlow-Upgrade (auf 1.3)
Vorsichtsmaßnahmen bei der Installation von Tensorflow mit Anaconda
[Python] Vorsichtsmaßnahmen beim Zuweisen von Werten zu mehrdimensionalen Arrays
Vorsichtsmaßnahmen beim Umgang mit Luigi
Vorsichtsmaßnahmen bei der Installation von fbprophet
Vorsichtsmaßnahmen bei der Verwendung von Chainer
Tipps und Vorsichtsmaßnahmen beim Portieren von MATLAB-Programmen nach Python
Wenn TypeError beim Importieren von tensorFlow angezeigt wird
Einführung in Private TensorFlow
Vorsichtsmaßnahmen bei der stündlichen Ausgabe an die BigQuery-Tabelle mit Luigi
Vorsichtsmaßnahmen beim Ändern der Unix-Zeit in Datetime-Typ in Pandas
Vorsichtsmaßnahmen beim Übergeben von def an sortierte und gruppierte Funktionen in Python? ??
Vorsichtsmaßnahmen beim Festlegen von Standardwerten für Argumente in Python-Funktionsdefinitionen
Was tun, wenn Ubuntu abstürzt?
Punkte, die beim Aktualisieren auf WSL2 zu beachten sind
Vorsichtsmaßnahmen bei der Verwendung von Pit mit Python
Vorsichtsmaßnahmen beim Erben der DatasetMixin-Klasse
Vorsichtsmaßnahmen bei der Verwendung der TextBlob-Merkmalsanalyse
Einführung in TensorFlow - Hallo World Edition
Vorsichtsmaßnahmen bei der Verwendung von Codecs und Pandas
Tipps, wenn Vimmer zu Pycharm wechselt
So fügen Sie sudo hinzu, wenn Sie das Debug ausführen
Vorsichtsmaßnahmen bei Verwendung der Funktion urllib.parse.quote
UnicodeEncodeError beim Versuch, Radon auszuführen
Tensorflow-Memo [von Zeit zu Zeit aktualisiert]
So installieren Sie TensorFlow unter CentOS 7
So konvertieren Sie das Tensorflow-Modell in Lite
Vorsichtsmaßnahmen beim Erstellen eines Python-Generators
So führen Sie TensorFlow 1.0-Code in 2.0 aus
Vorsichtsmaßnahmen bei der Verwendung von Phantomjs aus Python
Vorsichtsmaßnahmen bei Verwendung von sechs mit Python 2.5