[PYTHON] Prédire FX avec LSTM à l'aide de Keras + Tensorflow Partie 2 (Calculer avec GPU)

introduction

ThinkPad X260 (Core i7-6500 2,5 GHz (thread 2core 4)) lorsque j'ai écrit Predicting FX with LSTM using Keras + Tensorflow Il a fallu beaucoup de temps pour calculer avec. Dans le deep learning, il existe de nombreux paramètres, et même si vous essayez de les modifier de différentes manières, cela ne restera pas aussi longtemps que cela. De plus, FX a plusieurs paires de devises, et il ne suffit pas de n'avoir qu'une seule paire de devises, et la vérification devrait prendre plus de temps.

Cependant, il peut être accéléré à l'aide de GPU, que ce soit Tensorflow ou Keras. Il est naturel d'exécuter un apprentissage en profondeur sur un GPU (comme nous le verrons plus tard, ce flux peut changer). J'ai donc décidé de l'utiliser avec Geforce GTX 1070.

Difficile (2017/6/5 7:00 ajouté)

En fait, je l'ai déjà acheté (je l'ai acheté pour essayer TensorFlow sur Ubuntu), mais le matériel a la configuration suivante.

・ Geforce GTX 1070 (8 Go de mémoire) ・ Core i5-6500 3.2Ghz (4core 4Thread) ・ Système d'exploitation: Windows 10 64 bits ・ Mémoire: 8 Go

Puisque l'essentiel est de laisser le GPU calculer, la partie GPU est riche, mais je pensais que le CPU ne serait de toute façon pas nécessaire (je l'expliquerai plus tard, mais si cela échoue ...). J'omets le stockage, mais j'utilise un SSD (la quantité de données est trop petite et tout va bien).

De plus, j'ai choisi 1070, qui a 8 Go, car je veux mettre beaucoup de mémoire sur le GPU. Je pense que nous pourrions le rendre encore plus rapide en choisissant 1080 ou 1080 Ti, mais nous n'avons pas pu investir car nous ne savions pas de quelle puissance GPU nous avions besoin. Parce que l'alimentation est au niveau de dernière minute. Ce serait bien s'il pouvait également être utilisé à d'autres fins, mais je ne pourrais pas trop investir car je prévois de l'utiliser uniquement pour le deep learning. Si ce n'est qu'un essai, peut-être qu'environ 1060 avec 6 Go de mémoire sont bons ...

La raison pour laquelle j'ai choisi Windows comme système d'exploitation est que je souhaite utiliser un environnement similaire ailleurs. J'avais déjà essayé TensorFlow sur Ubuntu (je n'utilisais pas Keras à l'époque), mais c'était assez difficile à installer.

Je voulais aussi que l'expérience puisse l'installer immédiatement lorsque j'achèterais un ordinateur portable (Windows) équipé d'un GPU dans le futur.

Préparation

Le premier est l'introduction de la version GPU de Tensorflow. Je voudrais dire que ce n'est pas si difficile si vous vous référez à install de TensorFlow, mais j'en ai deux.

Le premier est l'installation de scipy. En gros, je ne pouvais pas l'installer avec pip, etc. J'ai apporté scipy-0.19.0-cp35-cp35m-win_amd64.whl de Unofficial Windows Binaries for Python Extension Packages. Vous pouvez l'apporter et l'installer en spécifiant le nom du fichier comme indiqué ci-dessous.

# pip install scipy-0.19.0-cp35-cp35m-win_amd64.whl

Le second est la bibliothèque VS. En fait, c'était ici jusqu'à la semaine précédente (vers le 28 mai 2017), mais pourquoi pas? ..Je vais le chercher.

En fait, j'avais déjà préparé un environnement GPU TensorFlow sur Ubuntu, mais c'était subtile lequel était le plus facile. Ni l'un ni l'autre ne peut être fait en douceur. L'environnement Untu est peut-être plus simple maintenant.

C'est dommage qu'il n'y ait pas d'étapes détaillées sur le site telles que le placement de la bibliothèque NVIDIA cuDNN dans le chemin.

Cependant, cela prend plus de temps qu'il ne peut être calculé sur le processeur, je dois donc introduire le GPU.

La source

Bien qu'il s'agisse d'une source, elle est déjà enregistrée dans github. git clone https://github.com/rakichiki/keras_fx.git et ce sera keras_fx_gpu.ipynb. Cela peut être une correction de bogue comme avant. Bien que le nom du fichier ait GPU, il fonctionne même dans un environnement CPU uniquement. Si vous démarrez cela avec jupyter et le téléchargez, cela fonctionnera.

Les parties suivantes de keras_fx_gpu.ipynb ont changé (je l'ai mentionné de quelque part, mais j'ai oublié ... je suis désolé de ne pas avoir de lien vers la personne qui y fait référence).

Paramètre d'utilisation de la mémoire


import tensorflow as tf
from keras import backend as K

config = tf.ConfigProto(allow_soft_placement=True)
config.gpu_options.allow_growth = True
session = tf.Session(config=config)
K.set_session(session)

Comme je le mentionnerai dans Exécution et discussion, le GPU a moins de mémoire que le corps principal. Par exemple, la Geforce GTX 1070 dispose de 8 Go de mémoire. Il est normal d'avoir 16 Go de mémoire sur un PC de développement ces jours-ci (mon ThinkPad X260 principal a 16 Go).

Cependant, l'apprentissage en profondeur consomme beaucoup de mémoire et, s'il n'est pas spécifié, il peut d'abord occuper beaucoup de mémoire. Pour cette raison, je pense que divers problèmes peuvent survenir à moins que vous n'écriviez d'abord que vous utiliserez autant que vous utilisez comme décrit ci-dessus.

Auparavant, lors de l'utilisation de TensorFlow sur GPU sous Linux, lors d'une tentative de calcul en parallèle, la mémoire du GPU était insuffisante et de nouvelles tâches ne pouvaient pas être démarrées. L'utilisation est-elle prévue?

Exécution (vitesse uniquement) et considération (2017/06/06 07:15 révision majeure)

Lançons-le. Cependant, cette fois-ci, au lieu de chercher à augmenter les profits de change, nous gardons à l'esprit combien de temps peut être gagné pour calculer 9 paires de devises. Je ne sais pas combien de temps il faudra pour voir le résultat même si je règle ou modifie la source.

Alors le résultat est le suivant. Il donne le nombre le plus élevé dans le calcul de la charge du GPU et de la bande passante de transfert de mémoire.

environnement Nombre de paires de devises temps(Minutes) Charge GPU(%) Bande passante de transfert de mémoire GPU(%) Utilisation de la mémoire GPU(MB)
Core i7-6500 2.5GHz (2core 4thread) 1 27.9 - - -
Core i7-6500 2.5GHz (2core 4thread) 2 48.8 - - -
Geforce GTX 1070 & Core i5-6500 3.2Ghz (4core 4Thread) 1 3.1 50 15 526
Geforce GTX 1070 & Core i5-6500 3.2Ghz (4core 4Thread) 2 4.4 72 20 793
Geforce GTX 1070 & Core i5-6500 3.2Ghz (4core 4Thread) 3 5.5 75 22 1,069
Geforce GTX 1070 & Core i5-6500 3.2Ghz (4core 4Thread) 4 7.0 76 23 1,345
Geforce GTX 1070 & Core i5-6500 3.2Ghz (4core 4Thread) 5 9.0 76 23 1,620
Geforce GTX 1070 & Core i5-6500 3.2Ghz (4core 4Thread) 6 11.1 77 23 1,891
Geforce GTX 1070 & Core i5-6500 3.2Ghz (4core 4Thread) 7 12.6 76 23 2,079
Geforce GTX 1070 & Core i5-6500 3.2Ghz (4core 4Thread) 8 14.7 77 23 2,355
Geforce GTX 1070 & Core i5-6500 3.2Ghz (4core 4Thread) 9 16.5 76 23 2,664

ThinkPad X260 (Core i7-6500 2,5 GHz (2core 4e lecture)) et PC de bureau (Geforce GTX 1070 et Core i5-6500 3,2 GHz (4core 4 threads)).

Le nombre de paires de devises est le nombre de billets ouverts et exécutés en même temps. Le processeur prend trop de temps, je n'ai donc essayé que jusqu'à 2 paires de devises.

Tout d'abord, lorsque l'on compare une paire de devises, il y a une différence de près de 9 fois entre le processeur et le GPU. Il est proche de 11 fois avec 2 paires de devises. Si la différence de vitesse est d'environ un ordre de grandeur différent, je pense que c'est un nombre qui vous motivera à relever le défi même s'il y a un gros problème dans la transition. De plus, j'ai abandonné car il semblait que cela prendrait trop de temps pour mesurer 9 paires de devises avec le CPU (ce sera plus de 3 heures).

En fonction de ce que vous calculez, un traitement intensif fera une plus grande différence. Cependant, à titre indicatif, vous pouvez penser qu'il est insensé de faire ce genre de calcul avec le CPU.

*: Reconsidérez la partie utilisant le GPU (Si vous y réfléchissez, vous avez consigné les informations relatives au GPU. Si vous la regardez, vous pouvez l'expliquer un peu plus facilement.)

Si vous regardez ce nombre, vous pouvez voir que le GPU n'utilise pas tout le GPU dans une seule paire de devises.

Cependant, on peut voir que les GPU ne sont plus utilisés, avec 3 paires de devises ou plus évoluant autour de 75%.

Cependant, je ne peux pas voir les chiffres qui sont entravés par la bande passante de transfert de mémoire et l'utilisation de la mémoire (jusqu'à 8 Go). Bien que la température du GPU ne soit pas indiquée, cela ne signifie pas que l'arrêt thermique s'est produit car même 9 paires de devises n'ont atteint que 70 degrés.

Ici, j'ai regardé la situation de 9 paires de devises.

9.png

Le CPU a atteint 100%. Je pensais que la version GPU de TensorFlow / Keras calculait uniquement le GPU, mais ce n'est pas le cas. Est-ce le calcul de la perte, etc.?

Avec l'introduction du GPU, il y a une perspective d'accélération dans une certaine mesure, mais il y a quelques obstacles et on ne peut pas dire qu'il peut être pleinement utilisé.

Quand j'ai acheté ce PC, j'ai choisi la configuration parce que je me suis dit: "Parce qu'il est calculé par le GPU, le CPU devrait avoir une configuration stupide", mais il semble que ce soit un échec.

Même ainsi, il est possible de calculer 9 paires de devises à la fois. Eh bien, on me dira probablement de mettre un arrêt anticipé avant cela ...

Impressions

Le résultat a été que le CPU est devenu un goulot d'étranglement et que la vitesse de calcul n'a pas augmenté de façon inattendue, mais il semble qu'il soit possible d'augmenter la vitesse d'environ un ordre de grandeur en fonction de l'utilisation du GPU.

Cependant, on suppose que les GPU ne sont pas bons dans ce monde, et chaque entreprise prend des mesures.

Goole a créé un [TPU] dédié (http://www.publickey1.jp/blog/17/googlecloud_tpuaigoogle_io_2017.html), NVIDIA dispose d'une unité Tensor sur le dernier GPU et Qualcomm a un Snapdragon 835. DSP de Tensorflow Il est pris en charge (Cependant, TensorFlow ne fonctionne pas à part CPU et CUDA, donc je ne comprends pas le cas de Qualcomm ...), et il est possible de calculer avec FP16 et INT8 avec Vega, le dernier GPU d'AMD. J'essaie d'améliorer la capacité de calcul détaillé. Il semble que chaque entreprise se concentre davantage sur l'accélération de l'apprentissage profond qu'elle ne le fait actuellement.

Cependant, ni le TPU de Google ni le Snapdragon 835 ne seront en vente au grand public, les GPU avec unités Tensor ne sont pas encore en vente (non, je ne pourrais pas l'acheter s'ils l'étaient), et le Vega d'AMD n'est toujours pas en vente. , TensorFlow ne prend toujours en charge que CUDA donc je ne peux pas l'utiliser ...

Il semble qu'il sera plus difficile d'améliorer les performances plus facilement que maintenant, mais j'espère que ce domaine s'améliorera un peu vers l'année prochaine (2018).

finalement

Pour le moment, nous avons créé une source de travail et un environnement où vous pouvez facilement l'essayer. Maintenant, vous pouvez enfin commencer. Désormais, je contesterai les résultats petit à petit.

Lien

Recommended Posts

Prédire FX avec LSTM à l'aide de Keras + Tensorflow Partie 2 (Calculer avec GPU)
Essayez de prédire FX avec LSTM en utilisant Keras + Tensorflow Partie 3 (essayez d'atteindre tous les paramètres)
Essayez de prédire le taux de change (FX) avec un apprentissage automatique non approfondi
Débutant RNN (LSTM) | Essayer avec Keras
Essayez de prédire les fleurs de cerisier avec XG Boost
Prévision de stock avec TensorFlow (LSTM) ~ Prévision de stock Partie 1 ~
Prédiction d'images vidéo à l'aide de la convolution LSTM avec TensorFlow
Essayez de résoudre le problème du fizzbuzz avec Keras
Comment réduire l'utilisation de la mémoire GPU avec Keras
Essayez Tensorflow avec une instance GPU sur AWS
Visualisons la pièce avec tarte aux râpes, partie 1
Essayez de créer une API RESTful avec MVC à l'aide de Flask 1.0.2
J'ai essayé d'implémenter Grad-CAM avec keras et tensorflow
LSTM multivarié avec Keras
Essayez la régression avec TensorFlow
[TensorFlow 2 / Keras] Comment exécuter l'apprentissage avec CTC Loss dans Keras
Essayez d'implémenter la régression linéaire à l'aide de Pytorch avec Google Colaboratory
Essayez de défier le sol par récursif
Essayez l'apprentissage en profondeur avec TensorFlow
Essayez d'utiliser PythonTex avec Texpad.
Essayez d'utiliser matplotlib avec PyCharm
Essayez d'utiliser SQLAlchemy + MySQL (partie 1)
Essayez d'utiliser SQLAlchemy + MySQL (partie 2)
Essayez TensorFlow MNIST avec RNN
Essayez d'utiliser le folium avec anaconda
[Note] Essayons de prédire la quantité d'électricité utilisée! (Partie 1)
Essayez d'analyser le mahjong familial en ligne à l'aide de Python (PARTIE 1: Prendre des données)