[PYTHON] Créer une instance de GPU AWS pour entraîner StyleNet

Instance GPU Linux d'AWS

Les instances de GPU AWS sont basées sur HVM. HVM est une abréviation de Hardware Virtual Machine. En d'autres termes, les instances de GPU AWS ne sont pas connectées à des GPU physiques, mais à des GPU virtuels. (Je pense, mais veuillez signaler si vous faites une erreur.)

Créer une instance g2.2xlarge

Créez une instance dans l'est des États-Unis moins cher (nord de la Virginie). ** 0,65 $ de l'heure. ** (au 23 septembre 2015) C'est plus cher que les micro-instances qui l'entourent, alors n'oubliez pas de le supprimer lorsque vous avez terminé! !!

Créez une instance en suivant cette procédure.

Rechercher nvidia sur l'AWS Marketplace

スクリーンショット 2015-09-23 23.07.44.png

Puisque Linux est utilisé, sélectionnez Amazon Linux AMI avec le pilote GPU NVIDIA GRID

スクリーンショット 2015-09-23 23.07.58.png

Sélectionnez g2.2xlarge pour l'instance GPU

スクリーンショット 2015-09-23 23.08.17.png

Divers paramètres détaillés (il s'agit de la valeur par défaut de base)

スクリーンショット 2015-09-23 23.08.28.png

スクリーンショット 2015-09-23 23.08.40.png

スクリーンショット 2015-09-23 23.09.15.png

スクリーンショット 2015-09-23 23.09.25.png

Confirmation finale et création

スクリーンショット 2015-09-23 23.09.48.png

Après la création, vous pouvez vérifier si le GPU est connecté et si le pilote est installé avec la commande suivante.

nvidia-smi -q | head

(Vous pouvez tous les afficher, mais vous pouvez voir la version du pilote et le nombre de connexions dans les 10 premières lignes.)

Installer le package python pour le chainer

L'AMI créée contient python et pip depuis le début, installez donc les packages nécessaires pour chainer. (Si vous avez besoin de sudo de temps en temps, ajoutez-le comme il convient.)

pip install numpy
pip install chainer

Le paramètre PATH pour utiliser CUDA à partir du chaîneur est le suivant pour l'AMI créée cette fois.

export PATH=/opt/nvidia/cuda/bin:$PATH
export LD_LIBRARY_PATH=/opt/nvidia/cuda/lib64:$LD_LIBRARY_PATH

Confirmer du chainer

S'il n'y a pas d'erreur avec la commande suivante, tout va bien.

import chainer
from chainer import cuda

cuda.check_cuda_available()
cuda.get_device(0).use()

Exécutez StyleNet

Exécutez StyleNet, qui est le sujet de cet article, sur une instance GPU.

Installez Git et téléchargez style-gogh. Téléchargez également le modèle caffe de NIN. Renommé le fichier caffemodel en ***. Caffemodel.

sudo yum install git
git clone https://github.com/mattya/chainer-gogh
wget https://www.dropbox.com/s/0cidxafrb2wuwxw/nin_imagenet.caffemodel?dl=1
mv nin_imagenet.caffemodel?dl=1 nin_imagenet.caffemodel

Et si vous exécutez la commande suivante, cela fonctionnera. Je voulais afficher le temps de calcul, donc je l'ai modifié pour que le temps de calcul soit affiché en sortie sur la console pour chaque génération. Le dernier nombre dans la sortie de la console est le temps écoulé depuis l'exécution du script. (Les quatre autres nombres sont, dans l'ordre, le nombre de générations, le numéro du calque qui a été produit, l'écart par rapport à l'image de contenu et l'écart par rapport à l'image de style) Pour plus d'informations, veuillez lire le commentaire et le code.

Version du processeur

load model... nin_imagenet.caffemodel
('image resized to: ', (1, 3, 435, 435))
('image resized to: ', (1, 3, 435, 428))
0 0 0.0 131.536987305 100.341277122
0 1 0.0 16.9276828766 101.161045074
0 2 5.29387950897 0.132858499885 101.5359869
0 3 0.530761241913 0.00741795729846 102.120722055
1 0 0.0 123.52784729 178.474854946
1 1 0.0 15.2022619247 179.293597937
1 2 5.03846788406 0.123586334288 179.670742035
1 3 0.470058709383 0.00525630777702 180.251745939
2 0 0.0 110.198478699 255.28085494
2 1 0.0 12.6540279388 256.074426889
2 2 4.90201044083 0.113212890923 256.448594093
2 3 0.431303560734 0.00383871118538 257.029608965
3 0 0.0 92.4355773926 332.629327059
3 1 0.0 10.1973600388 333.420332909
3 2 4.86908721924 0.108661472797 333.790095091
3 3 0.409945964813 0.00298984581605 334.37262392
4 0 0.0 72.380569458 410.049565077
4 1 0.0 9.32985496521 410.848016024
4 2 4.92668151855 0.117410235107 411.218291044
4 3 0.398817956448 0.00246199313551 411.802879095
5 0 0.0 53.6025543213 486.892725945
5 1 0.0 11.4278764725 487.710140944
5 2 5.04112100601 0.141176745296 488.083660126
5 3 0.39475902915 0.00214517721906 488.664105892

Il faut environ 80 secondes pour transformer une génération.

Version GPU

load model... nin_imagenet.caffemodel
('image resized to: ', (1, 3, 435, 435))
('image resized to: ', (1, 3, 435, 428))
0 0 0.0 131.557006836 22.7398509979
0 1 0.0 16.9326477051 22.7434000969
0 2 5.2936425209 0.13280403614 22.7467870712
0 3 0.529067575932 0.00738066714257 22.7503979206
1 0 0.0 123.602386475 41.3092479706
1 1 0.0 15.211555481 41.3119618893
1 2 5.04172039032 0.123632088304 41.3146359921
1 3 0.469296246767 0.00526729598641 41.3175621033
2 0 0.0 110.336387634 41.394990921
2 1 0.0 12.6709651947 41.3977220058
2 2 4.90853118896 0.113566093147 41.4003748894
2 3 0.43169811368 0.00389048201032 41.4033150673
3 0 0.0 92.6167144775 41.4806849957
3 1 0.0 10.2161283493 41.4833440781
3 2 4.87660598755 0.109313540161 41.4860169888
3 3 0.41028663516 0.00304215308279 41.4892690182
4 0 0.0 72.5410461426 41.566724062
4 1 0.0 9.3198633194 41.5694000721
4 2 4.93378400803 0.118150554597 41.5720379353
4 3 0.399007946253 0.0025086470414 41.5749340057
5 0 0.0 53.6465911865 41.6522700787
5 1 0.0 11.3575658798 41.6549448967
5 2 5.0474896431 0.141661688685 41.6576039791
5 3 0.394712120295 0.00219127023593 41.6604459286

** Environ 0,1 seconde pour activer une génération. Explosion du GPU **

finalement

Cette fois, je voulais vérifier la procédure de création d'une instance AWS et la comparaison de vitesse entre le CPU et le GPU, donc StyleNet ne s'est formé qu'une dizaine de fois, mais étant donné qu'il s'entraîne 5000 fois, CPU ・ ・ ・ 80 * 5000 = 40 000 [s] ≒ environ 4,6 jours GPU ・ ・ ・ 0,1 * 5000 = 500 [s] Et le temps change tellement. En pensant normalement, les gens disent souvent qu'ils n'utilisent pas de GPU. GPGPU J'étudierai plus.

référence

http://qiita.com/pyr_revs/items/e1545e6f464b712517ed http://yamakatu.github.io/blog/2014/07/05/gpgpu/ http://www.gdep.jp/page/view/248

Recommended Posts

Créer une instance de GPU AWS pour entraîner StyleNet
Création d'un environnement pour exécuter ChainerMN sur une instance de GPU AWS
Utiliser jupyter sur une instance GPU sur AWS
Créez un alias pour Route53 vers CloudFront avec l'API AWS
Créer un environnement de développement AWS Cloud9 sur une instance Amazon EC2
[Pour Python] Créez rapidement un fichier de téléchargement vers AWS Lambda Layer
Changer l'instance AWS EC2 de t2 à t3
Exécutez TensorFlow sur une instance GPU sur AWS
Comment créer un environnement NVIDIA Docker
Version de juin 2017 pour créer un environnement Tensorflow / Keras sur une instance GPU d'AWS
Générer une instance Excel compatible avec les compléments avec xlwings
J'ai essayé de créer un environnement à vérifier régulièrement en utilisant Selenium avec AWS Fargate
Essayez Tensorflow avec une instance GPU sur AWS
Comment créer un agent de ressources compatible OCF
Création d'une instance AWS EC2 EC2 (Amazon Linux AMI) 2
Essayez de créer un serveur HTTP en utilisant Node.js
Comment mettre fin à une instance AWS EC2 (supprimer la sécurité G et supprimer la paire de clés)
Essayez d'exécuter Schedule pour démarrer et arrêter des instances dans AWS Lambda (Python)
Comment créer un article à partir de la ligne de commande
Bluemix-Script pour annuler une instance d'IaaS (anciennement SoftLayer)
J'ai essayé d'obtenir une AMI en utilisant AWS Lambda
AWS EC2 2nd SSH connection to EC2 Instance (Amazon Linux 2)
Comment créer un téléchargeur d'image avec Bottle (Python)
Comment déployer une application Go sur une instance ECS
Comment créer une instance d'une classe particulière à partir de dict en utilisant __new__ () en python