Ich erinnerte mich, dass mein eigener Desktop-PC, den ich in letzter Zeit selten benutzte, eine GPU (GeForce GTX 960) von NVIDIA hat, und dachte darüber nach, eine Umgebung zu schaffen, in der Deep Learning mithilfe dieser verwendet werden kann. .. Trotz der GPU, die ich vor 5 Jahren gekauft habe, war die Verarbeitungsgeschwindigkeit extrem hoch und ich war überrascht, wie wunderbar die GPU war (lacht). msi GeForce GTX960 Gaming 2G MGSV
Um Tensorflow / Keras in einer GPU-Umgebung zu verwenden, müssen Sie jede der oben genannten Anforderungen mit der entsprechenden Version abgleichen. Auf der Tensorflow-Site befindet sich eine passende Tabelle. Überprüfen Sie diese daher unbedingt. Grundsätzlich denke ich, dass Sie die entsprechende Version entsprechend der Version von Tensorflow installieren sollten. Wenn Sie die Version aus irgendeinem Grund nicht angeben, ist die neueste Version in Ordnung. Zum Zeitpunkt der Veröffentlichung (2020/03/21) ist 2.0.0 die neueste Version, daher werden wir sie mit 2.0.0 erstellen.
Wenn die CPU-Version und die GPU-Version von Tensorflow gemischt sind, wird die CPU-Version anscheinend automatisch ausgewählt. Erstellen Sie daher eine neue Umgebung.
cmd
> conda create -n tf200gpu Python=3.6.4
Aktivieren Sie nach der Erstellung die Umgebung und installieren Sie Tensorflow-gpu.
cmd
> conda activate tf200gpu
(tf200gpu)> pip install tensorflow-gpu==2.0.0
↓ Wenn Sie diesen Fehler erhalten, lesen Sie den folgenden Artikel
ERROR: cannot uninstall 'wrapt'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
Überprüfen Sie nach Abschluss der Installation Folgendes mit `pip list```. (Selbst wenn Sie zu diesem Zeitpunkt
import tensorflow``
in Python ausführen, wird eine Fehlermeldung angezeigt, da CUDA / cuDNN nicht enthalten ist.)
Ich denke, Keras kann ohne Probleme installiert werden. Version 2.3.1 ist in meiner Umgebung enthalten.
cmd
(tf200gpu)> pip install keras
Überprüfen Sie wie bei Tensorflow, ob die Installation mit `` `pip list``` abgeschlossen ist.
Beziehen und installieren Sie Visual Studio, das Ihrer Version von Tensorflow entspricht, von der Microsoft Download Site (https://visualstudio.microsoft.com/de/vs/older-downloads/). Diesmal ist es 2017, also installieren Sie Visual Studio Community 2017. Überprüfen Sie während der Installation "Desktop-Entwicklung mit C ++ - Workloads".
(Es dauert eine ganze Weile ...)
Wählen Sie das Produkt auf der NVIDIA-Download-Site aus und rufen Sie das Installationsprogramm auf. Ändern Sie für andere Grafikkarten entsprechend. Wenn Sie nichts Besonderes tun und weiterhin auf "Weiter" klicken, sollte die Installation problemlos abgeschlossen sein.
CUDA ist eine universelle Parallel-Computing-Plattform für GPUs, die von NVIDIA entwickelt und bereitgestellt wird. Beziehen und installieren Sie das Installationsprogramm von der CUDA Toolkit-Download-Site (https://developer.nvidia.com/cuda-toolkit-archive). Sie müssen ein kostenloses Konto erstellen, um das Installationsprogramm zu erhalten. Dieses Mal installieren Sie `` `CUDA Toolkit 10.0```. Wählen Sie den Betriebssystemtyp und die Version aus und wählen Sie exe (Netzwerk). (Wählen Sie lokal, wenn Sie auf einem PC installieren, der keine Verbindung zum Internet herstellen kann.)
Starten Sie nach dem Herunterladen das Installationsprogramm und halten Sie "Next" gedrückt, um den Treiber zu installieren.
Installieren Sie als Nächstes cuDNN, eine von NVIDA veröffentlichte Bibliothek für Deep Learning.
Sie benötigen hier auch ein Konto. Melden Sie sich daher mit dem Konto an, das Sie bei CUDA erstellt haben.
Dieses Mal erhalten Sie `7.4.2 für CUDA 10``` von [cuDNN download site](https://developer.nvidia.com/rdp/cudnn-download). Wenn Sie "Ich stimme den Bedingungen der cuDNN-Softwarelizenzvereinbarung zu" aktivieren, erhalten Sie mehrere Optionen. Wenn Sie die gewünschte Version nicht finden, klicken Sie im roten Rahmen auf "Archivierte cuDNN-Versionen", um frühere Versionen anzuzeigen. ![cudnn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542930/6989f125-76ce-93de-a343-32362d760b02.png) Wenn Sie die heruntergeladene Zip-Datei entpacken, finden Sie drei Ordner, bin, include und lib sowie eine Textdatei mit dem Namen NVIDIA_SLA_cuDNN_Support.txt. Öffnen Sie
`C: \ Programme \ NVIDIA GPU Computing Toolkit \ CUDA \ v.10.0``` im Windows Explorer, und es gibt bin-, include- und lib-Ordner auf die gleiche Weise, also im heruntergeladenen Ordner Die Installation wird abgeschlossen, indem der Inhalt kopiert und in gleichnamige Ordner eingefügt wird.
Möglicherweise werden Sie nach Administratorrechten gefragt. Bitte erlauben Sie dies.
Damit ist das Installationssystem abgeschlossen. Versuchen Sie an der Eingabeaufforderung Folgendes, um festzustellen, ob die GPU ordnungsgemäß erkannt wird:
cmd
(tf200gpu)> python -c "from tensorflow.python.client import device_lib;print(device_lib.list_local_devices())"
Es wird richtig erkannt ...! !!
Dann habe ich versucht, mit Tensorflow-gpu zu trainieren ... aber es wurde durch den folgenden Fehler blockiert.
tensorflow.python.framework.errors_impl.UnknownError: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
Als ich auf [diesen Artikel] verwies (https://qiita.com/minarai/items/48ab415d134e9a44f7a5), tauchten weder cudatooklit noch cudnn auf der Conda-Liste auf ... Als ich "conda install cudnn" versuchte, kamen die Kandidaten heraus, also werde ich es installieren. Übrigens scheint es, dass Sie sowohl cudatoolkit als auch cudnn mit `` `conda install cudnn``` installieren können. Oben installiert:
Ich habe den Lerncode erneut ausgeführt und er hat auf der GPU einwandfrei funktioniert! !!
Ich habe CUDA und cuDNN zweimal installiert, daher bin ich mir nicht sicher, ob dies die richtige Methode ist (und die Version ist anders), aber sie funktioniert vorerst (lacht). Ich werde den Artikel aktualisieren, wenn ich in Zukunft Probleme habe oder den richtigen Weg finde! (Wenn Sie damit vertraut sind, teilen Sie uns dies bitte in den Kommentaren ~ (´; ω; `) mit.)
Messen wir mit dem folgenden Python-Code für das Lernen, das von einem bestimmten Online-Trainingsprogramm erstellt wurde. Dies ist der Lerncode des Bilderkennungsprogramms, das das Eingabebild mithilfe von CNN in drei Klassen klassifiziert. Laden Sie als Bilddaten für das Training die zuvor im .npy-Format gespeicherten Daten. Ich habe versucht, 157 50 x 50 Pixel-Bilder (auf halber Strecke), Stapelgröße 32, Epoche 100 ... zu trainieren.
Processor | Time |
---|---|
CPU | 0:01:22.239975 |
GPU | 0:00:15.542190 |
Die GPU ist ungefähr 5,4-mal schneller. (Die installierte CPU ist übrigens Intel Core i5-6600K bei 3,5 GHz)
train.py
import keras
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.utils import np_utils
import numpy as np
import datetime
classes = ["class1", "class2", "class3"]
num_classes = len(classes)
image_size = 50
def main():
X_train, X_test, y_train, y_test = np.load("./data.npy", allow_pickle=True)
X_train = X_train.astype("float") / 256
X_test = X_test.astype("float") / 256
y_train = np_utils.to_categorical(y_train, num_classes)
y_test = np_utils.to_categorical(y_test, num_classes)
model = model_train(X_train, y_train)
model_eval(model, X_test, y_test)
def model_train(X, y):
model = Sequential()
model.add(Conv2D(32, (3, 3), padding='same', input_shape=X.shape[1:]))
model.add(Activation('relu'))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(64, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(3))
model.add(Activation('softmax'))
opt = keras.optimizers.adam(lr=0.0001, decay=1e-6)
model.compile(
loss='categorical_crossentropy',
optimizer=opt,
metrics=['accuracy']
)
model.fit(X, y, batch_size=32, epochs=100)
return model
def model_eval(model, X, y):
scores = model.evaluate(X, y, verbose=1)
print('Test Loss: ', scores[0])
print('Test Accuracy: ', scores[1])
if __name__ == "__main__":
start_time = datetime.datetime.now()
main()
end_time = datetime.datetime.now()
print("Time: " + str(end_time - start_time))