Je me suis souvenu que mon propre PC de bureau, que j'utilisais rarement récemment, avait un GPU (GeForce GTX 960) fabriqué par NVIDIA, j'ai donc pensé à créer un environnement où l'apprentissage en profondeur peut être fait en l'utilisant. .. Malgré le GPU que j'ai acheté il y a 5 ans, la vitesse de traitement était extrêmement rapide et j'ai été surpris de la beauté du GPU (rires). msi GeForce GTX960 Gaming 2G MGSV
Pour utiliser Tensorflow / Keras dans un environnement GPU, vous devez faire correspondre chacune des exigences ci-dessus avec la version correspondante. Il existe une table correspondante sur le site Tensorflow, alors assurez-vous de la vérifier. En gros, je pense que vous devez installer la version correspondante en fonction de la version de Tensorflow. Si, pour une raison quelconque, vous ne spécifiez pas la version, la dernière version est OK. Au moment de la publication (2020/03/21), 2.0.0 est la dernière version, nous allons donc la construire avec 2.0.0.
Si la version CPU et la version GPU de Tensorflow sont mélangées, il semble que la version CPU soit automatiquement sélectionnée, alors créez un nouvel environnement.
cmd
> conda create -n tf200gpu Python=3.6.4
Une fois créé, activez l'environnement et installez Tensorflow-gpu.
cmd
> conda activate tf200gpu
(tf200gpu)> pip install tensorflow-gpu==2.0.0
↓ Si vous obtenez cette erreur, reportez-vous à l'article suivant
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.
Une fois l'installation terminée, vérifiez ce qui suit avec
pip list. (Même si vous exécutez
import tensorflow``` en Python à ce stade, une erreur se produira car CUDA / cuDNN n'est pas inclus.)
Je pense que Keras peut être installé sans aucun problème. La version 2.3.1 est incluse dans mon environnement.
cmd
(tf200gpu)> pip install keras
Comme avec Tensorflow, vérifiez si l'installation est effectuée avec
pip list```.
Obtenez et installez Visual Studio qui correspond à votre version de Tensorflow à partir du site de téléchargement Microsoft (https://visualstudio.microsoft.com/en/vs/older-downloads/). Cette fois, ce sera 2017, alors installez Visual Studio Community 2017. Cochez «Développement de bureau à l'aide de charges de travail C ++» lors de l'installation.
(Cela prend un certain temps ...)
Sélectionnez le produit sur site de téléchargement NVIDIA et obtenez le programme d'installation. Pour les autres cartes graphiques, changez en conséquence. Si vous ne faites rien de spécial et continuez d'appuyer sur "Suivant", l'installation devrait être terminée sans problème.
CUDA est une plate-forme de calcul parallèle à usage général pour les GPU développés et fournis par NVIDIA. Obtenez et installez le programme d'installation à partir du site de téléchargement de CUDA Toolkit (https://developer.nvidia.com/cuda-toolkit-archive). Vous devez créer un compte gratuit pour obtenir l'installateur, alors faites un gâchis. Cette fois, installez `` CUDA Toolkit 10.0 ''. Sélectionnez le type et la version du système d'exploitation, puis sélectionnez exe (réseau). (Sélectionnez local lors de l'installation sur un PC qui ne peut pas se connecter à Internet)
Après le téléchargement, démarrez le programme d'installation et appuyez et maintenez "Suivant" comme pilote pour installer.
Ensuite, installez cuDNN, une bibliothèque pour le Deep Learning publiée par NVIDA.
Vous aurez également besoin d'un compte ici, veuillez donc vous connecter avec le compte que vous avez créé lorsque vous étiez chez CUDA.
Cette fois, récupérez 7.4.2 pour CUDA 10 '' sur [site de téléchargement cuDNN](https://developer.nvidia.com/rdp/cudnn-download). Si vous cochez «J'accepte les termes du contrat de licence du logiciel cuDNN», plusieurs options vous seront proposées. Si vous ne trouvez pas la version souhaitée, cliquez sur "Versions cuDNN archivées" dans le cadre rouge pour voir les versions précédentes. ![cudnn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542930/6989f125-76ce-93de-a343-32362d760b02.png) Lorsque vous décompressez le zip téléchargé, vous trouverez trois dossiers, bin, include et lib, et un fichier texte appelé NVIDIA_SLA_cuDNN_Support.txt. Ouvrez
C: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v.10.0 '' dans l'Explorateur Windows, et il y a des dossiers bin, include, lib de la même manière, donc dans le dossier téléchargé L'installation est terminée en copiant et en collant le contenu dans des dossiers portant le même nom.
Des privilèges d'administrateur peuvent vous être demandés, veuillez donc les autoriser.
Ceci termine le système d'installation. Pour voir si le GPU est correctement reconnu, essayez ce qui suit à l'invite de commande:
cmd
(tf200gpu)> python -c "from tensorflow.python.client import device_lib;print(device_lib.list_local_devices())"
Il est reconnu correctement ...! !!
Ensuite, j'ai essayé de m'entraîner en utilisant Tensorflow-gpu ... mais cela a été bloqué par l'erreur suivante.
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.
Quand j'ai évoqué cet article, ni cudatooklit ni cudnn n'apparaissaient sur la liste des condas ...
Donc, quand j'ai essayé conda install cudnn '', les candidats sont sortis, donc je vais l'installer. Au fait, il semble que vous puissiez installer à la fois cudatoolkit et cudnn avec
`` conda install cudnn```.
Installé ci-dessus:
J'ai de nouveau exécuté le code d'apprentissage et cela a bien fonctionné sur le GPU! !!
J'ai installé CUDA et cuDNN deux fois, donc je ne suis pas sûr que ce soit la bonne méthode (et la version est différente), mais cela fonctionne pour le moment (rires). Je mettrai à jour l'article si j'ai des problèmes à l'avenir ou trouverai la bonne manière! (Si vous êtes familier avec cela, veuillez nous le faire savoir dans les commentaires ~ (´; ω; `))
Mesurons avec le code Python suivant pour l'apprentissage effectué par un certain programme de formation en ligne. Il s'agit du code d'apprentissage du programme de reconnaissance d'image qui classe l'image d'entrée en trois classes à l'aide de CNN. En tant que données d'image pour l'entraînement, chargez celle enregistrée à l'avance au format .npy. J'ai essayé de former 157 images de 50 x 50 pixels (à mi-chemin), taille de lot 32, époque 100 ...
Processor | Time |
---|---|
CPU | 0:01:22.239975 |
GPU | 0:00:15.542190 |
Le GPU est environ 5,4 fois plus rapide. (À propos, le processeur installé est Intel Core i5-6600K à 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))
Recommended Posts