[PYTHON] Führen Sie TensorFlow auf einer GPU-Instanz in AWS aus

Ich habe es in der folgenden Umgebung versucht. Führen Sie daher während der Installation Aufzeichnungen über die Arbeit.

TensoFlow funktioniert nicht unter Windows. Das von TensorFlow verwendete Google-Build-Tool Bazel ist nur mit Linux und Mac kompatibel. Wenn Sie keinen Mac oder Linux zur Hand haben, ist es meiner Meinung nach einfach, eine Ubuntu-Umgebung unter AWS einzurichten.

Mac OS X Ich habe ein Paket installiert, das nur auf der CPU läuft. Es ist am einfachsten. ** spec **

Installieren Sie das Paket mit pip gemäß der offiziellen Dokumentation.

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

Lassen Sie uns als Test [CIFAR-10-Datensatz] lernen (https://www.cs.toronto.edu/~kriz/cifar.html).

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

Nach der Ausführung wird der Datensatz heruntergeladen und das Training beginnt. Da der Fortschritt des Prozesses an das Terminal ausgegeben wird, dauerte es 0,540 Sekunden für ein Batch-Lernen, als ich ungefähr 100 Schritte sah, als das Lernen stabil war.

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

Amazon web service(AWS) Erstellen Sie die Umgebung mit AWS EC2 G2-Instanz.

** Hinweis: TensorFlow erfordert spezielle Unterstützung, wenn die Cuda-Rechenfähigkeit 3.5 oder niedriger ist. ** ** ** Die Cuda-Rechenfähigkeit ähnelt einer GPU-Architektur und wird von der GPU bestimmt. Da das in der AWS G2-Instanz installierte GRID K520 Cuda Compute Capability 3.0 ist, kann es die TensorFlow-GPU-Berechnung nicht so durchführen, wie sie ist. Hier erläutert die Unterstützung für 3.0.

Ich habe eine Instanz von Oregon (USA) verwendet, die billiger war. Die unten angegebenen Preise und Informationen gelten zum 30. Dezember 2015.

Modell- GPU vCPU Erinnerung(GiB) SSD-Speicher(GB) Gebühr-Oregon(USA)
g2.2xlarge GRID K520 x 1 8 15 1 x 60 $0.65 /1 Stunde
g2.8xlarge GRID K520 x 4 32 60 2 x 120 $2.6 /1 Stunde

Installation

Unter hier finden Sie Verbindungen zu Linux-Instanzen. Ich fuhr mit Bezug auf [hier] fort (https://gist.github.com/erikbern/78ba519b97b440e10640). Installieren Sie zunächst die erforderliche Software.

$ sudo apt-get update
$ sudo apt-get upgrade -y #Wählen Sie "Paketbetreuer-Version installieren".
$ sudo apt-get install -y build-essential python-pip python-dev git python-numpy swig python-dev default-jdk zip zlib1g-dev ipython

Nouveau Blacklist hinzugefügt, um Konflikte mit NVIDIA-Treibern zu vermeiden.

$ 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

Es wird neu gestartet. Melden Sie sich erneut an und führen Sie die folgenden Schritte aus. Ich verstehe nicht, warum ich es hier brauche.

$ 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`

Installieren Sie dann CUDA und cuDNN. Weitere Informationen finden Sie unter Offizielle Dokumentation hier. Die zu installierende Version muss wie folgt sein.

Installieren Sie zuerst 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

Installieren Sie dann cuDNN. cuDNN ist eine Bibliothek, die sich darauf spezialisiert hat, das Lernen von tiefen neuronalen Netzen auf GPUs zu beschleunigen. Dieser Artikel ist hilfreich. Um cuDNN zu erhalten, müssen Sie sich für ein NVIDIA-Entwicklerkonto registrieren. Da es mit wget nicht verfügbar ist, laden Sie es einmal in der lokalen Umgebung von hier herunter. Übertragen Sie die heruntergeladene Datei lokal per SCP. Das Folgende ist ein Beispiel für die Übertragung von Linux. xxxxx.amazonaws.com ist das öffentliche DNS des AMI.

#Arbeiten Sie vor Ort
#Übertragung per SCP an AMI
$ scp -i /path/my-key-pair.pem cudnn-6.5-linux-x64-v2.tgz [email protected]:~

Entpacken Sie die Übertragung nach Abschluss und kopieren Sie sie in das cuda-Verzeichnis.

#Arbeiten mit 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/

Geh durch den Weg.

$ vi .bashrc #Verwenden Sie vi oder nano, um die folgenden zwei Zeilen auszuführen.Zu bashrc hinzugefügt
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64"
export CUDA_HOME=/usr/local/cuda
$ source .bashrc # .Reflektieren Sie die Basiseinstellungen

Der im AMI verfügbare Speicherplatz ist nicht sehr groß. Danach benötigen Sie ausreichend Speicherplatz, wenn Sie mit Bazel erstellen oder Trainingsdaten herunterladen. Beim Erstellen einer Instanz ist genügend Speicherplatz im kurzlebigen Speicher (/ mnt / oder weniger) vorhanden. Erstellen Sie daher eine symbolische Verknüpfung. Sie können nvidia_installers und cudnn-6.5-linux-x64-v2.tgz löschen, die Sie nicht mehr verwenden.

$ 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/Erstellen Sie einen symbolischen Link zu
$ sudo mkdir /mnt/tmp
$ sudo chmod 777 /mnt/tmp
$ sudo rm -rf /tmp
$ sudo ln -s /mnt/tmp /tmp

** Hinweis: Wenn die Instanz gestoppt wird, wird alles unter / mnt / gelöscht. Speichern Sie die Daten, die im AMI-Image verbleiben müssen, nicht in / tmp /. ** ** ** Für die später beschriebene öffentliche AMI haben wir ein Shell-Skript (create_tmp_on_ephemeral_storage.sh) vorbereitet, das beim Erstellen einer Instanz oder beim Neustart tmp im kurzlebigen Speicher erstellt.

Installieren Sie das Build-Tool 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

Installieren Sie dann TensorFlow. "./configure" wird mit Optionen wie "TF_UNOFFICIAL_SETTING = 1 ./ configure" ausgeführt, wie in hier beschrieben. Machen. Dies macht es zu einer inoffiziellen Einstellung, die auch mit Cuda Compute Capability 3.0 kompatibel ist.

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

Während der Konfiguration habe ich folgende Fragen: Standardmäßig werden nur die Cuda-Rechenfunktionen 3.5 und 5.2 unterstützt. Fügen Sie daher 3.0 wie unten gezeigt hinzu.

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.Addiere 0

Erstellen Sie TensorFlow.

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

Erstellen und installieren Sie dann das TensorFlow Python-Paket. Der Teil "/tmp/tensorflow_pkg/tensorflow-0.6.0-cp27-none-linux_x86_64.whl" sollte mit dem Dateinamen der tatsächlich generierten Version übereinstimmen.

$ 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

Damit ist die Installation abgeschlossen.

Prüfung

Versuchen Sie es zuerst mit einer g2.2xlarge-Instanz.

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

Die Ergebnisse sind wie folgt.

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

Versuchen Sie es außerdem mit g2.8xlarge. Setzen Sie die Anzahl der GPUs in Zeile 63 von cifar10_multi_gpu_train.py wie unten gezeigt auf 4. Wenn Sie dies nicht tun, werden anscheinend vier GPUs verwendet, aber es wird nicht beschleunigt, wahrscheinlich weil die Parallelisierung nicht richtig funktioniert.

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

Ausführungsergebnis. Es war ziemlich schnell.

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

Community AMI

Das diesmal erstellte Bild wird in der Community AMI von AWS Oregon (US) veröffentlicht. ubuntu14.04_tensorflow0.6.0_gpu - ami-69475f08 Führen Sie nach dem Erstellen der Instanz create_tmp_on_ephemeral_storage.sh aus, um das Verzeichnis / tmp im kurzlebigen Speicher zu erstellen.

$ ./create_tmp_on_ephemeral_storage.sh

Recommended Posts

Führen Sie TensorFlow auf einer GPU-Instanz in AWS aus
Versuchen Sie Tensorflow mit einer GPU-Instanz unter AWS
Erstellen einer Umgebung zum Ausführen von ChainerMN auf einer AWS-GPU-Instanz
Führen Sie den Tensorflow der GPU-Version vor Ort in AWS EC2 aus
Verwenden Sie jupyter für eine GPU-Instanz in AWS
Führen Sie TensorFlow2 auf dem VPS-Server aus
Führen Sie regelmäßig Python-Programme auf AWS Lambda aus
Version vom Juni 2017 zum Erstellen einer Tensorflow / Keras-Umgebung auf einer GPU-Instanz von AWS
# 2 Erstellen Sie eine Python-Umgebung mit einer EC2-Instanz von AWS (ubuntu18.04).
Erstellen einer TensorFlow-Umgebung, die GPUs unter Windows 10 verwendet
Führen Sie Tensorflow 2.x unter Python 3.7 aus
Führen Sie YOLO v3 unter AWS v2 aus
Führen Sie YOLO v3 unter AWS aus
Wenn Sie glauben, dass Tensorflow Ihre GPU in AWS nicht erkennt
Führen Sie Tensorflow mit nativer Unterstützung für Windows aus
Führen Sie einen Linux-Server mit GCP aus
Führen Sie Python planmäßig auf AWS Lambda aus
Führen Sie das Docker-Image von TensorFlow unter Python3 aus
Führen Sie Matplotlib auf einem Docker-Container aus
Führen Sie Headless-Chrome auf einem Debian-basierten Image aus
Führen Sie eine Java-App aus, die sich in AWS EC2 als Daemon befindet
# 3 Erstellen Sie eine Python-Umgebung (Django) mit einer EC2-Instanz (ubuntu18.04) von AWS part2
Führen Sie die Radeon-GPU unter Windows unter QEMU / KVM aus
Führen Sie ein lokales Skript auf einem Remote-Host aus
Ich habe versucht, TensorFlow (GPU-Version) unter Ubuntu zu installieren
[Python] Führen Sie Headless Chrome unter AWS Lambda aus
Führen Sie Python-Code in der A2019 Community Edition aus
Ich habe eine TensorFlow-Umgebung mit Windows 10 erstellt
Führen Sie Jupyter Notebook auf einem Remote-Server aus
Führen Sie matplotlib in einem Windows Docker-Container aus
Schritte zum Ausführen von TensorFlow 2.1 von Jupyter auf dem Spacon ITO-Frontend (mit GPU)
Eine süchtig machende Geschichte bei der Verwendung von Tensorflow unter Android
Stellen Sie sich eine Cloud-native WebSocket-Anwendung vor, die unter AWS ausgeführt wird
Erstellen Sie mit pulumi eine WardPress-Umgebung auf AWS
Jupyter auf AWS
Erstellen Sie eine AWS-GPU-Instanz, um StyleNet zu trainieren
(Für mich) AWS_Flask_3 (Flask auf AWS installieren / ausführen)
TensorFlow: Führen Sie in Python gelernte Daten unter Android aus
Versuchen Sie, Schedule auszuführen, um Instanzen in AWS Lambda (Python) zu starten und zu stoppen.
Führen Sie Tensorflow von Jupyter Notebook unter Bash unter Ubuntu unter Windows aus
[Umgebungskonstruktion] @anaconda, die Keras / Tensorflow auf der GPU ausführt
Bereitstellungsverfahren in den Umgebungseinstellungen von AWS (2) Server (EC2-Instanz)
Lassen Sie einen Papagei LINE Bot mit AWS Cloud9 zurückgeben
Hinweise zur Installation von Chainer 1.5 für GPU unter Windows
Richten Sie in 30 Minuten einen kostenlosen Server unter AWS ein
Vorgehensweise zum Erstellen eines Linienbot in AWS Lambda
Ich bin ein Windows-Benutzer, möchte aber Tensorflow ausführen
So führen Sie Django unter IIS auf einem Windows-Server aus
Installieren Sie Tensorflow auf dem Mac
Installieren Sie TensorFlow unter Ubuntu
Führen Sie Django auf PythonAnywhere aus
Führen Sie mysqlclient auf Lambda aus
Aktivieren Sie die GPU für den Tensorflow
Führen Sie OpenMVG auf einem Mac aus
Erstellen Sie TensorFlow unter Windows
Installieren Sie Docker unter AWS
Führen Sie das AWS IoT Device SDK für Python auf Raspberry Pi aus
[AWS] Installieren Sie node.js auf der EC2-Instanz und führen Sie das Beispielprogramm aus
So führen Sie ein geschultes Transformatormodell lokal auf CloudTPU aus
Führen Sie eine begrenzte Anzahl von Bildpräsentationsprogrammen auf PsychoPy aus