[PYTHON] Précautions pour la mise à niveau de TensorFlow (vers la version 1.3)

** (À propos des avantages de nvidia-docker [Ajout] (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). ) **

La version officielle de TensorFlow 1.3 (la version avec RC supprimé) a été publiée. https://github.com/tensorflow/tensorflow/blob/r1.3/RELEASE.md

Pour les nouvelles fonctionnalités, etc., veuillez vous référer à la note de publication, mais l'installation a pris un certain temps, nous partagerons donc les informations ci-dessous.

(L'environnement de programmation est le suivant.

Je mets toujours la version officielle du binaire avec pip

Le framework de Deep Learning étant très actif, nous mettons généralement celui distribué en binaire après la sortie de la version officielle (la version avec RC = Release Candidate). Le but est de minimiser les problèmes dans l'espoir que les défauts mineurs puissent être supprimés. (En le retournant, on peut dire qu'il n'y a pas de tripes pour construire le code source.)

# 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

Après cela, je l'ai testé en utilisant le code MNIST.

  1. Code utilisant un modèle simple de classification MNIST. aucun problème.
  2. Modèle MNIST CNN (Convolutional Neural Network). ** Ne fonctionne pas ** ...
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.

Je ne l'ai pas remarqué car il n'était pas explicitement écrit dans la documentation TensorFlow, mais dans la Note de publication Une phrase a été écrite.

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

J'ai utilisé cuDNN 5.1 jusqu'à présent, mais cette fois, il semble que cuDNN 6.0 soit nécessaire. Il n'y a pas d'autre choix que de vous connecter au site des développeurs NVIDIA (après avoir répondu à l'enquête Easy Deep Learning) et de télécharger cuDNN 6.0. Pour référence, je vais coller une version capturée de cette page.

** Fig. Menu de téléchargement NVIDIA cuDNN (août 2017) ** NVIDIA_download.png

(Il existe également CUDA 9.0 RC. On suppose qu'il est compatible avec le nouveau GPU de NVIDIA et VOLTA.)

En installant ce cuDNN v6.0 pour CUDA 8.0, le code MNIST CNN a bien fonctionné.

TensorBoard dans un emballage séparé

TensorBoard est maintenant un package pip séparé, qui a été pris en charge par le programme ** pip ** et est venu avec lui lorsque le corps tensorflow (tensorflor-gpu) a été installé.

(Référence) https://github.com/tensorflow/tensorboard

Pour le moment, j'ai essayé d'exécuter la démo tensorboard mnist_with_summaries.py.

Fig. TensorBoard demo TensorBoard_demo.png

Il n'y avait pas de problème particulier. (Le nom de la balise peut être recherché par expression régulière, mais je ne sais pas s'il provient de cette version ou s'il a été pris en charge auparavant.)

Essayez d'utiliser la nouvelle fonctionnalité "Estimateurs standardisés"

Depuis que je l'ai installé, j'ai essayé d'utiliser la nouvelle fonction de TensorFlow 1.3, les "estimateurs en conserve" (estimateur en conserve, tf.estimator. *). Seule la partie principale est répertoriée ci-dessous.

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']))

(L'ensemble du code et l'ancien code de comparaison ont été téléchargés sur gist.)

Étant donné que l'initialisation des variables et le code tel que tf.Session () sont cachés, il est en quelque sorte devenu une atmosphère de «haut niveau». Cependant, je n'avais pas l'impression qu'il était très facile à utiliser, probablement parce que j'étais nouveau dans ce domaine. (Il existe également une "API Keras" de haut niveau.) Il semble qu'il sera nécessaire de l'utiliser un peu plus pour une évaluation précise.

Impressions

Les changements dans la bibliothèque Deep Learning sont si intenses que je sens que je ne peux pas suivre le rythme. Les utilisateurs de ** TensorFlow ** (version GPU) devront se rappeler qu'ils passeront à cuDNN 7.0 dans la prochaine TF 1.4 (Est-il possible de maintenir 6.0 parce que c'est prévu?). Quant à ** Chainer **, la v3.0.0beta a déjà été publiée (https://github.com/chainer/chainer/releases/tag/v3.0.0) si vous pensez qu'elle vient de devenir v2.0. b1). (Plutôt que Chainer, faites attention aux spécifications de CuPy autour de CUDA!?) Lorsque vous essayez d'utiliser plusieurs frameworks, il semble que vous deviez porter une attention particulière à la gestion des versions de la bibliothèque NVIDIA.

(J'utilise pyenv et virtualenv pour le moment ... mais quand je veux exécuter PyTorch et Theano, je n'ai pas de fin à mes soucis.)

(Ajout) Avantages de la maintenance de l'environnement par nvidia-docker

J'ai reçu des conseils de @ miumiu0917 que "" nvidia-docker "devrait faciliter la maintenance de l'environnement", j'ai donc confirmé la situation.

(Confirmation d'environnement)

Pour exécuter TensorFlow sur nvidia-docker, préparez d'abord une image Docker TensorFlow. La documentation TensorFlow comprend

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

J'ai été chargé d'utiliser celui avec la balise "latest-gpu", mais juste au cas où, je vérifierai le site Docker Hub. (Référence) https://hub.docker.com/r/tensorflow/tensorflow/tags/

Il semble qu'il existe 8 versions telles que "latest-gpu" et "latest-gpu-py3" même si le nom de la balise a "latest", mais pour le moment, tirez "latest-devel-gpu-py3" et tirez-le. J'ai confirmé que le code MNIST CNN ci-dessus (où le premier problème s'est produit) fonctionne "sans problème". Le Dockerfile du référentiel TensorFlow a la description suivante.

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 \

(Omis)

Comme vous pouvez le voir sur la première ligne, l'image de base est définie comme ** "nvidia / cuda: 8.0-cudnn6-devel-ubuntu16.04" ** et est écrite de manière à être correctement alignée (évidemment). Les images qui nécessitent le support "gpu" peuvent être démarrées avec "nvidia-docker", donc (je vois) il semble être assez "facile" d'améliorer l'environnement de Deep Learning et d'assurer la cohérence.

Site Web de référence

Recommended Posts

Précautions pour la mise à niveau de TensorFlow (vers la version 1.3)
Précautions lors de l'installation de tensorflow avec anaconda
[Python] Précautions lors de l'affectation de valeurs à des tableaux multidimensionnels
Précautions à prendre lors de la manipulation de Luigi
Précautions lors de l'installation de fbprophet
Précautions lors de l'utilisation de Chainer
Conseils et précautions lors du portage des programmes MATLAB vers Python
Lorsque TypeError apparaît lors de l'importation de tensorFlow
Introduction à Private TensorFlow
Précautions lors de la sortie vers une table BigQuery toutes les heures avec Luigi
Précautions lors du changement d'heure Unix en type datetime dans les pandas
Précautions lors du passage de def aux fonctions triées et groupby en Python? ??
Précautions lors de l'attribution de valeurs par défaut aux arguments dans les définitions de fonctions Python
Que faire quand Ubuntu plante
Points à noter lors de la mise à jour vers WSL2
Précautions lors de l'utilisation de Pit avec Python
Précautions lors de l'héritage de la classe DatasetMixin
Précautions lors de l'utilisation de l'analyse des traits TextBlob
Introduction à TensorFlow - Hello World Edition
Précautions lors de l'utilisation de codecs et de pandas
Conseils lorsque Vimmer passe à Pycharm
Comment ajouter sudo lors de l'exécution du débogage
Précautions lors de l'utilisation de la fonction urllib.parse.quote
UnicodeEncodeError lors de la tentative d'exécution du radon
Mémo Tensorflow [mis à jour de temps à autre]
Comment installer TensorFlow sur CentOS 7
Comment convertir le modèle Tensorflow en Lite
Précautions lors de la création d'un générateur Python
Comment exécuter du code TensorFlow 1.0 en 2.0
Précautions lors de l'utilisation de phantomjs de python
Précautions lors de l'utilisation de six avec Python 2.5