[PYTHON] J'ai essayé d'exécuter TensorFlow dans l'environnement AWS Lambda: Préparation

Cet article en 3 lignes

1. Motivation

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/).

2. Résultat

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.

3. Méthode expérimentale

3.1. Préparation des modules natifs dans l'environnement Amazon EC2

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

3.2. Préparer le package de déploiement AWS Lambda

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 ajoutantmain.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

3.3. Télécharger le package de déploiement AWS Lambda

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.

3.4. Exécution d'AWS Lambda

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.

4. Références

Ce qui suit est une page de référence.

Recommended Posts

J'ai essayé d'exécuter TensorFlow dans l'environnement AWS Lambda: Préparation
J'ai essayé d'exécuter TensorFlow
J'ai essayé d'exécuter GAN dans Colaboratory
J'ai essayé de mettre virtualenv dans l'environnement Cygwin
J'ai essayé de connecter AWS Lambda à d'autres services
J'ai essayé d'exécuter pymc
J'ai essayé AWS CDK!
J'ai essayé AWS Iot
J'ai essayé d'obtenir une AMI en utilisant AWS Lambda
AWS Lambda prend désormais en charge Python, je l'ai donc essayé
J'ai mis du sélénium et du chrome sans tête dans AWS lambda. (Notes sous environnement Win10, etc.)
[Python] Scraping dans AWS Lambda
J'ai essayé d'utiliser magenta / TensorFlow
J'ai essayé d'utiliser AWS Chalice
[AWS] J'ai essayé d'utiliser EC2, RDS, Django. Construction de l'environnement à partir de 1
J'ai essayé l'algorithme de super résolution "PULSE" dans un environnement Windows
Je viens de créer un environnement virtuel avec la couche AWS lambda
J'ai essayé d'exécuter le système de reconnaissance vocale hors ligne Julius avec python dans l'environnement virtuel Docker
J'ai essayé le tutoriel TensorFlow 1er
Prise en charge de la variable d'environnement AWS Lambda
Ecrire une fonction AWS Lambda en Python
J'ai essayé le tutoriel TensorFlow 2ème
installer tensorflow dans un environnement anaconda + python3.5
Essayez de fournir des variables d'environnement AWS Lambda?
[Couches Python / AWS Lambda] Je souhaite réutiliser uniquement le module dans AWS Lambda Layers
J'ai essayé Grumpy (allez exécuter Python).
J'ai comparé Node.js et Python lors de la création d'une miniature à l'aide d'AWS Lambda
J'ai essayé d'exécuter prolog avec python 3.8.2.
J'ai essayé la notification de ligne en Python
J'ai essayé d'exécuter le didacticiel TensorFlow avec des commentaires (_TensorFlow_2_0_Introduction pour les débutants)
J'ai essayé de supprimer régulièrement les mauvais tweets avec l'API AWS Lambda + Twitter
J'ai essayé d'informer le serveur Zabbix d'une erreur d'exécution de la fonction AWS Lambda
[Django] Erreur de version de sqlite lors de l'exécution de python manage.py dans l'environnement aws cloud9
J'ai essayé d'utiliser NVDashboard (pour ceux qui utilisent le GPU dans l'environnement jupyter)
Tutoriel TensorFlow J'ai essayé MNIST 3rd
J'ai essayé d'implémenter PLSA en Python
J'ai essayé de créer un linebot (préparation)
J'ai essayé tensorflow pour la première fois
J'ai essayé de visualiser AutoEncoder avec TensorFlow
Environnement lorsque des bibliothèques natives sont incluses dans AWS Lambda
J'ai essayé de jouer au jeu ○ ✕ en utilisant TensorFlow
J'ai essayé d'implémenter PLSA dans Python 2
J'ai essayé de classer le texte en utilisant TensorFlow
J'ai essayé d'implémenter ADALINE en Python
J'ai essayé d'implémenter PPO en Python
J'ai construit un environnement TensorFlow avec windows10
Démarrage de Node.js dans un environnement virtuel
Implémentation de DQN avec TensorFlow (je voulais ...)
Je viens de faire FizzBuzz avec AWS Lambda
[AWS] Lançons un test unitaire de la fonction Lambda dans l'environnement local
J'ai couru le tutoriel TensorFlow avec des commentaires (classification du texte des critiques de films)
J'ai essayé de réduire les coûts en démarrant / arrêtant EC2 dans un lot avec AWS Lambda
J'ai essayé de créer un environnement à vérifier régulièrement en utilisant Selenium avec AWS Fargate
J'ai essayé d'utiliser Twitter Scraper avec AWS Lambda et cela n'a pas fonctionné.
J'ai essayé d'utiliser l'API Detect Labels d'AWS Rekognition
Différences entre queryStringParameters et multiValueQueryStringParameters dans AWS Lambda
Python: j'ai pu récurer en lambda
J'ai essayé de jouer à un jeu de frappe avec Python