Lors de la session d'étude, j'ai fait une présentation intitulée "J'ai essayé de classer des textes en utilisant TensorFlow". J'ai pu obtenir des résultats, j'ai donc décidé de l'utiliser sérieusement, ainsi que mes préférés AWS Lambda et [Amazon API Gateway] J'ai décidé de créer une API en utilisant (https://aws.amazon.com/jp/api-gateway/).
J'ai utilisé TensorFlow pour calculer "1 + 2" et j'ai obtenu le résultat correct "3". Au moins, j'ai pu confirmer que TensorFlow peut être «import» dans l'environnement AWS Lambda.
AWS Lambda s'exécute sur Amazon Linux. Pour l'environnement spécifique, consultez «[Environnement d'exécution Lambda et bibliothèques disponibles-AWS Lambda](http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/current-supported-versions.html» sur la page officielle. ) ».
Puisque nous voulons opérer dans la région de Tokyo cette fois, nous pouvons voir sur la page ci-dessus que nous devrions utiliser ʻami-383c1956. Veuillez noter que l'AMI est différente pour chaque région. J'ai créé une instance
t2.micro de ʻami-383c1956
sur Amazon EC2 et préparé un module natif.
Le fichier ZIP terminé est placé à gist: 9b11f081186b98fe130e sous le nom ʻami-383c1956-python2.7-tensorflow0.7.1-20160320.zip`. La taille du fichier est d'environ 23 Mo et la valeur de hachage SHA-1 est «3157f010853fee1769a1149afbed15383bf2be96».
La procédure de construction est la suivante.
#Vérifiez l'environnement
$ uname -a
Linux ip-xxx-xxx-xxx-xxx 4.1.10-17.31.amzn1.x86_64 #1 SMP Sat Oct 24 01:31:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/system-release
Amazon Linux AMI release 2015.09
#Mettre à jour et installer les packages
$ sudo yum -y update
$ sudo yum -y upgrade
$ sudo yum -y groupinstall "Development Tools"
$ sudo yum -y install python27-devel python27-pip gcc
#Préparer virtualenv
$ export ENV_ROOT=~/env
$ virtualenv ${ENV_ROOT}
$ source ${ENV_ROOT}/bin/activate
#Vérifiez la version et le chemin de Python
(env)$ python2.7 --version
Python 2.7.10
(env)$ which python2.7
~/env/bin/python2.7
(env)$ which pip2.7
~/env/bin/pip2.7
#Installer TensorFlow et les bibliothèques dépendantes
(env)$ pip2.7 install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.7.1-cp27-none-linux_x86_64.whl
Successfully installed numpy-1.10.4 protobuf-3.0.0b2 setuptools-20.3.1 six-1.10.0 tensorflow-0.7.1 wheel-0.29.0
(env)$ deactivate
#Créer un fichier ZIP
$ export OUT_FILE=~/ami-383c1956-python2.7-tensorflow0.7.1-20160320.zip
$ cd ${ENV_ROOT}/lib/python2.7/site-packages
$ touch google/__init__.py
$ zip -r9v ${OUT_FILE} . --exclude \*.pyc
$ cd ${ENV_ROOT}/lib64/python2.7/site-packages
$ zip -r9v ${OUT_FILE} . --exclude \*.pyc
$ sha1sum ${OUT_FILE}
3157f010853fee1769a1149afbed15383bf2be96 /home/ec2-user/ami-383c1956-python2.7-tensorflow0.7.1-20160320.zip
Cette fois, j'ai utilisé le code suivant. C'est un code très simple qui calcule simplement "1 + 2".
main.py
import tensorflow as tf
def lambda_handler(event, context):
a = tf.constant(1)
b = tf.constant(2)
with tf.Session() as sess:
return str(sess.run(a + b))
J'ai créé un package de déploiement en copiant ʻami-383c1956-python2.7-tensorflow0.7.1-20160320.zipet en ajoutant
main.py`.
$ cd /project/path/tensorflow
$ cp ami-383c1956-python2.7-tensorflow0.7.1-20160320.zip test.zip
$ cd /project/path/tensorflow/lambda
$ vi main.py
$ zip -r9v ../test.zip . --exclude \*.pyc
Cette fois, j'ai créé une fonction Lambda à partir de la console Web et téléchargé test.zip
.
La taille de mémoire par défaut est de 128 Mo. La valeur du délai d'expiration a été étendue à 10 secondes.
Lorsque j'ai appuyé sur le bouton "Test" de la console Web et exécuté la fonction Lambda, j'ai pu obtenir le résultat correct de "3". Au moins à partir de la deuxième fois, le temps d'exécution était inférieur à 100 ms et l'utilisation maximale de la mémoire était de 33 Mo.
Ce qui suit est une page de référence.
Recommended Posts