[PYTHON] Exécutez TensorFlow sur une instance GPU sur AWS

Je l'ai essayé dans l'environnement suivant, alors gardez une trace du travail lors de l'installation.

TensoFlow ne fonctionne pas sous Windows. L'outil de compilation Google Bazel utilisé par TensorFlow n'est compatible qu'avec Linux et Mac. Si vous n'avez pas de machine Mac ou Linux sous la main, je pense qu'il est facile de configurer un environnement Ubuntu sur AWS.

Mac OS X J'ai installé un package qui ne fonctionne que sur le processeur. C'est le plus simple. ** spécifications **

Installez le package avec pip conformément à la [Documentation] officielle (https://www.tensorflow.org/versions/master/get_started/os_setup.html#pip_install).

$ sudo easy_install --upgrade six
$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.6.0-py2-none-any.whl

En guise de test, apprenons ensemble de données CIFAR-10.

$ git clone https://github.com/tensorflow/tensorflow.git
$ cd tensorflow/tensorflow/models/image/cifar10/
$ python cifar10_train.py

Une fois exécuté, le jeu de données sera téléchargé et la formation commencera. Étant donné que la progression du processus est sortie sur le terminal, il a fallu 0,540 seconde pour un apprentissage par lots lorsque j'ai vu environ 100 étapes lorsque l'apprentissage était stable.

2015-12-31 15:00:08.397460: step 100, loss = 4.49 (237.0 examples/sec; 0.540 sec/batch)

Amazon web service(AWS) Créez l'environnement à l'aide d'AWS EC2 Instance G2.

** Remarque: TensorFlow nécessite une prise en charge spéciale si la capacité de calcul Cuda 3.5 ou inférieure. ** ** La capacité de calcul de Cuda est comme une architecture GPU et est déterminée par le GPU. Étant donné que le GRID K520 installé dans l'instance AWS G2 est la capacité de calcul Cuda 3.0, il ne peut pas effectuer le calcul GPU TensorFlow tel quel. Ici traite de la prise en charge de la version 3.0.

J'ai utilisé une instance de l'Oregon (USA), qui était moins chère. Les prix et informations ci-dessous sont en date du 30 décembre 2015.

modèle GPU vCPU Mémoire(GiB) Stockage SSD(GB) Frais-Oregon(Etats-Unis)
g2.2xlarge GRID K520 x 1 8 15 1 x 60 $0.65 /1 heure
g2.8xlarge GRID K520 x 4 32 60 2 x 120 $2.6 /1 heure

Installation

Voir ici pour les connexions aux instances Linux. J'ai procédé en faisant référence à ici. Tout d'abord, installez le logiciel nécessaire.

$ sudo apt-get update
$ sudo apt-get upgrade -y #Sélectionnez "installer la version des responsables du package"
$ sudo apt-get install -y build-essential python-pip python-dev git python-numpy swig python-dev default-jdk zip zlib1g-dev ipython

Ajout de la liste noire Nouveau pour éviter les conflits avec les pilotes NVIDIA.

$ echo -e "blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
$ echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf
$ sudo update-initramfs -u
$ sudo reboot

Il sera redémarré, alors connectez-vous à nouveau et exécutez ce qui suit. Je ne comprends pas pourquoi j'en ai besoin ici.

$ sudo apt-get install -y linux-image-extra-virtual
$ sudo reboot
# Install latest Linux headers
$ sudo apt-get install -y linux-source linux-headers-`uname -r`

Ensuite, installez CUDA et cuDNN. Veuillez également consulter la documentation officielle ici pour continuer. La version à installer doit être la suivante.

Tout d'abord, installez CUDA.

# Install CUDA 7.0
$ wget http://developer.download.nvidia.com/compute/cuda/7_0/Prod/local_installers/cuda_7.0.28_linux.run
chmod +x cuda_7.0.28_linux.run
$ ./cuda_7.0.28_linux.run -extract=`pwd`/nvidia_installers
$ cd nvidia_installers
$ sudo ./NVIDIA-Linux-x86_64-346.46.run
$ sudo modprobe nvidia
$ sudo ./cuda-linux64-rel-7.0.28-19326674.run

Ensuite, installez cuDNN. cuDNN est une bibliothèque spécialisée dans l'accélération de l'apprentissage des réseaux de neurones profonds sur les GPU. Cet article sera utile. Pour obtenir cuDNN, vous devez vous inscrire à un compte développeur NVIDIA. Puisqu'il n'est pas disponible avec wget, téléchargez-le depuis ici une fois dans l'environnement local. Transférez le fichier téléchargé localement par SCP. Voici un exemple de transfert depuis Linux. xxxxx.amazonaws.com est le DNS public de l'AMI.

#Travaillez localement
#Transfert vers AMI par SCP
$ scp -i /path/my-key-pair.pem cudnn-6.5-linux-x64-v2.tgz [email protected]:~

Une fois le transfert terminé, décompressez-le et copiez-le dans le répertoire cuda.

#Travailler avec AMI
$ cd
$ tar -xzf cudnn-6.5-linux-x64-v2.tgz
$ sudo cp cudnn-6.5-linux-x64-v2/libcudnn* /usr/local/cuda/lib64
$ sudo cp cudnn-6.5-linux-x64-v2/cudnn.h /usr/local/cuda/include/

Traversez le chemin.

$ vi .bashrc #Utilisez vi ou nano pour faire les deux lignes suivantes.Ajouté à bashrc
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64"
export CUDA_HOME=/usr/local/cuda
$ source .bashrc # .Refléter les paramètres bashrc

L'espace disque disponible dans l'AMI n'est pas très important. Après cela, vous aurez besoin d'un espace disque suffisant lors de la création avec Bazel ou lors du téléchargement des données d'entraînement. Il y a suffisamment d'espace disque dans le stockage éphémère (/ mnt / ou moins) alloué lors de la création d'une instance, alors créez un lien symbolique. Vous pouvez supprimer nvidia_installers et cudnn-6.5-linux-x64-v2.tgz que vous n'utilisez plus.

$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev             7687184      12   7687172   1% /dev
tmpfs            1540096     344   1539752   1% /run
/dev/xvda1       8115168 5874536   1805356  77% /
none                   4       0         4   0% /sys/fs/cgroup
none                5120       0      5120   0% /run/lock
none             7700472       0   7700472   0% /run/shm
none              102400       0    102400   0% /run/user
/dev/xvdb       66946696   53144  63486192   1% /mnt
# /mnt/tmp/Créer un lien symbolique vers
$ sudo mkdir /mnt/tmp
$ sudo chmod 777 /mnt/tmp
$ sudo rm -rf /tmp
$ sudo ln -s /mnt/tmp /tmp

** Remarque: lorsque l'instance est arrêtée, tout ce qui se trouve sous / mnt / sera supprimé. N'enregistrez pas les données qui doivent être laissées dans l'image AMI dans / tmp /. ** ** Pour l'AMI publique décrite plus loin, nous avons préparé un script shell (create_tmp_on_ephemeral_storage.sh) qui crée tmp dans le stockage éphémère lors de la création d'une instance ou du redémarrage.

Installez l'outil de construction Bazel.

$ cd /mnt/tmp
$ git clone https://github.com/bazelbuild/bazel.git
$ cd bazel
$ git checkout tags/0.1.0
$ ./compile.sh
$ sudo cp output/bazel /usr/bin

Ensuite, installez TensorFlow. "./configure" est exécuté avec des options telles que "TF_UNOFFICIAL_SETTING = 1 ./ configure" comme indiqué dans ici Faire. Cela en fait un paramètre non officiel qui prend également en charge la capacité de calcul Cuda 3.0.

$ cd /mnt/tmp
$ git clone --recurse-submodules https://github.com/tensorflow/tensorflow
$ cd tensorflow
$ TF_UNOFFICIAL_SETTING=1 ./configure

Lors de la configuration, j'ai les questions suivantes: Par défaut, seules les capacités de calcul Cuda 3.5 et 5.2 sont prises en charge, ajoutez donc 3.0 comme indiqué ci-dessous.

Please specify a list of comma-separated Cuda compute capabilities you want to build with.
You can find the compute capability of your device at: https://developer.nvidia.com/cuda-gpus.
Please note that each additional compute capability significantly increases your build time and binary size.
[Default is: "3.5,5.2"]: 3.0,3.5,5.2   #3.Ajouter 0

Construisez TensorFlow.

$ bazel build -c opt --config=cuda //tensorflow/cc:tutorials_example_trainer

Ensuite, créez et installez le package TensorFlow Python. La partie "/tmp/tensorflow_pkg/tensorflow-0.6.0-cp27-none-linux_x86_64.whl" doit correspondre au nom de fichier de la version réellement générée.

$ bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
$ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
$ sudo pip install /tmp/tensorflow_pkg/tensorflow-0.6.0-cp27-none-linux_x86_64.whl

Ceci termine l'installation.

tester

Essayez d'abord avec une instance g2.2xlarge.

$ cd tensorflow/models/image/cifar10/
$ python cifar10_multi_gpu_train.py

Les résultats sont les suivants.

2016-01-01 09:08:55.345446: step 100, loss = 4.49 (285.9 examples/sec; 0.448 sec/batch)

De plus, essayez avec g2.8xlarge. Définissez le nombre de GPU sur 4 autour de la ligne 63 de cifar10_multi_gpu_train.py comme indiqué ci-dessous. Si vous ne le faites pas, il utilisera apparemment quatre GPU, mais il n'accélérera pas, probablement parce que la parallélisation ne fonctionne pas correctement.

tf.app.flags.DEFINE_integer('num_gpus', 4,
                            """How many GPUs to use.""")

Résultat de l'exécution. C'était assez rapide.

2016-01-01 09:33:24.481037: step 100, loss = 4.49 (718.2 examples/sec; 0.178 sec/batch)

AMI communautaire

L'image créée cette fois est publiée dans la communauté AMI d'AWS Oregon (US). ubuntu14.04_tensorflow0.6.0_gpu - ami-69475f08 Après avoir créé l'instance, exécutez create_tmp_on_ephemeral_storage.sh pour créer le répertoire / tmp sur le stockage éphémère.

$ ./create_tmp_on_ephemeral_storage.sh

Recommended Posts

Exécutez TensorFlow sur une instance GPU sur AWS
Essayez Tensorflow avec une instance GPU sur AWS
Création d'un environnement pour exécuter ChainerMN sur une instance de GPU AWS
Exécutez la version GPU tensorflow sur une instance ponctuelle d'AWS EC2
Utiliser jupyter sur une instance GPU sur AWS
Exécutez TensorFlow2 sur le serveur VPS
Exécutez régulièrement des programmes Python sur AWS Lambda
Version de juin 2017 pour créer un environnement Tensorflow / Keras sur une instance GPU d'AWS
# 2 Créez un environnement Python avec une instance EC2 d'AWS (ubuntu18.04)
Création d'un environnement TensorFlow qui utilise des GPU sous Windows 10
Exécutez Tensorflow 2.x sur Python 3.7
Exécutez YOLO v3 sur AWS v2
Exécutez YOLO v3 sur AWS
Si vous pensez que tensorflow ne reconnaît pas votre GPU sur AWS
Exécutez Tensorflow avec la prise en charge native de Windows
Exécutez un serveur Linux avec GCP
Exécutez Python selon la planification sur AWS Lambda
Exécutez l'image Docker de TensorFlow sur Python3
Exécutez Matplotlib sur un conteneur Docker
Exécutez headless-chrome sur une image basée sur Debian
Exécutez une application Java qui réside sur AWS EC2 en tant que démon
# 3 Créez un environnement Python (Django) avec une instance EC2 (ubuntu18.04) d'AWS part2
Exécutez le GPU Radeon sous Windows sur QEMU / KVM
Exécuter un script local sur un hôte distant
J'ai essayé d'installer TensorFlow (version GPU) sur Ubuntu
[Python] Exécutez Headless Chrome sur AWS Lambda
Exécutez le code Python sur A2019 Community Edition
J'ai construit un environnement TensorFlow avec windows10
Exécuter le notebook Jupyter sur un serveur distant
Exécutez matplotlib sur un conteneur Windows Docker
Étapes pour exécuter TensorFlow 2.1 à partir de Jupyter sur le front-end Spacon ITO (avec GPU)
Une histoire addictive lors de l'utilisation de tensorflow sur Android
Envisagez une application WebSocket native pour le cloud qui s'exécute sur AWS
Créez un environnement WardPress sur AWS avec Pulumi
Jupyter sur AWS
Créer une instance de GPU AWS pour entraîner StyleNet
(Pour moi-même) AWS_Flask_3 (Installer / exécuter Flask sur AWS)
TensorFlow: exécuter des données apprises en Python sur Android
Essayez d'exécuter Schedule pour démarrer et arrêter des instances dans AWS Lambda (Python)
Exécutez Tensorflow à partir de Jupyter Notebook sur Bash sur Ubuntu sous Windows
[Construction de l'environnement] @anaconda qui exécute keras / tensorflow sur GPU
Procédure de déploiement sur les paramètres d'environnement du serveur AWS (2) (instance EC2)
Créer un robot LINE de retour de perroquet avec AWS Cloud9
Remarques sur l'installation de Chainer 1.5 pour GPU sous Windows
Configurez un serveur gratuit sur AWS en 30 minutes
Procédure de création d'un Line Bot sur AWS Lambda
Je suis un utilisateur Windows mais je souhaite exécuter tensorflow
Comment exécuter Django sur IIS sur un serveur Windows
Installez Tensorflow sur Mac
Installez TensorFlow sur Ubuntu
Exécutez Django sur PythonAnywhere
Exécutez mysqlclient sur Lambda
Activer le GPU pour tensorflow
Exécutez OpenMVG sur Mac
Construire TensorFlow sous Windows
Installez Docker sur AWS
Exécutez AWS IoT Device SDK for Python sur Raspberry Pi
[AWS] Installez node.js sur l'instance EC2 et exécutez l'exemple de programme
Comment exécuter un modèle de transformateur entraîné localement sur CloudTPU
Exécutez un nombre limité de programmes de présentation d'images sur PsychoPy