In questo Log configuriamo una AWS Lambda Function basata su un RNN (LSTM) Tensorflow Model scritto in Python, chiamabile attraverso un web API.
Prima di procedere, alcuni chiarimenti.
Questo è un Log, e come da definizione, è un viaggio con un obiettivo chiaro in testa.
NON E’ UNA GUIDA.
Quella arriverà dopo.
La differenza?
In breve, un log è la successione temporale dei processi, delle decisioni, degli errori, delle prove e dei successi di un progetto.
A mio avviso più interessante di una guida sempliciotta, che va dritta al punto, un log consente di cogliere l’effort, la fatica e il sudore che si cela dietro una grande, o piccola conquista.
L’altra grande differenza è l’esito: certo per una guida, che narra di un’impresa compiuta, di un successo raggiunto; probabile ma irresoluto per un log.
Quindi qual è l’obiettivo?
Questo: portare online il nostro modello di machine learning, una RNN con architettura (LSTM) creta attraverso Tensorflow.
La manderemo on-line con l’ausilio di una AWS Lambda Function.
Procediamo.
AWS Lambda Function
Ho già creato un account AWS, che permette l’uso di diversi servizi gratuiti purché l’utilizzo degli stessi rimanga sotto determinate soglie mensili.
Non avremo problemi, poiché la natura del nostro progetto prevede pochi accessi e scarse risorse.
Modello alla mano, procediamo a redigere il codice per la AWS Lambda Function.
Prima però avremo bisogno di una bussola: questa guida sarà per noi il riferimento.
Inizializzeremo un progetto in locale, lo configureremo affinché funzioni a dovere e procederemo al caricamento in Cloud usando l’utility AWS Serverless.
Per il momento ho clonato la repository indicata nell’articolo e rimosso il riferimento a ogni origine remota.
Ho aperto VsCode, configurandolo per l’handling dei file pyhton. Ecco cosa ho installato, fra pacchetti e dipendenze varie:
- Kite (Python Autocomplete with AI)
- pylint
- autopep8
Modifico il file dei requirments.txt
Dobbiamo cambiare runtime: nell’editor stiamo usando Python 3.5, che non è nell’elenco runtime compatibili con AWS lambda.
In locale abbiamo 4 environment creati negli anni in fase di testing: procediamo alla pulizia, cancellando qualche environment di troppo.
La doc di conda, torna qui molto utile. In alternativa, per guadagnare tempo:
conda env remove -n ENV_NAME
e aggiorniamo pip:
python -m pip install --upgrade pip
Aggiorniamo quindi protobuf, richiesto da TF2.0
Nuovamente incappati nell’errore:
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.
Possiamo consultare queste info per trovare qualche spunto aggiuntivo, e qui pure.
AWS Lambda Update 15/04
A causa di eccessiva lentezza nell’installazione di nuovi pacchetti attraverso la piattaforma Anaconda, ho rimosso tutto.
Quindi, ho installato miniconda: un installer leggero, senza interfaccia grafica con incredibile miglioramento delle performance.
Puoi trovare il link al download qui.
Abbiamo attivato un nuovo virtual envronment (con python 3.6.10, quindi compatibile con la AWS Lambda) per tenere le cose pulite e installato pip, poi tensorflow:
conda create --name deep-learning
conda install -c anaconda pip
pip install tensorflow
Chiariamo l’obiettivo: installare le dipendenze di cui abbiamo bisogno per scriver in locale una funzione che faccia inferenza su un modello di RNN con architettura LSTM prima di passare ai Transformer.
Creata la funzione, occorre caricarla su AWS, nello specifico renderla disponibile al web attraverso il servizio AWS Lambda.
Con un endpoint REST operativo possiamo completare lo sviluppo della nostra web-app react.
Un caldo abbraccio, Andrea.
No Comment