Come creare una REST API per il serving di un modello di Machine Learning Python con Google Colaboratory

Mario Cartia
3 min readOct 7, 2019

La combinazione Python + Jupyter è oggi quasi uno standard-de-facto per quanto riguarda lo sviluppo di modelli di Machine (o Deep) Learning da parte dei Data Scientist. Google mette a disposizione, in modo assolutamente gratuito, un ambiente di sviluppo chiamato Colaboratory basato sullo stack di cui sopra con, addirittura, la possibilità di poter usufruire di un container dotato di GPU/TPU in grado di velocizzare notevolmente le operazioni di training delle reti neurali.

Mostreremo in questo tutorial, mediante un esempio facilmente riproducibile, come esporre un modello di Machine Learning, scritto in Python con l’utilizzo del popolarissimo framework scikit-learn, sotto forma di HTTP REST API.

Realizzeremo, in particolare, un semplice modello ensamble tramite l’algoritmo Random Forest per la classificazione delle varietà di Iris (fiori). Il dataset che andremo ad utilizzare, dato che questo tipo di modello viene comunemente utilizzato a scopo didattico come una sorta di “Hello World” del Machine Learning, è scaricabile “ready-to-use” con una apposita funzione di libreria di scikit-learn. Qui di seguito lo snippet di codice per effettuare il training ed il salvataggio del modello su Google Drive.

Per semplicità effettueremo il salvataggio del modello in formato pickle: un formato generico per la serializzazione di oggetti Python. Esistono alternative migliori basate su formati “portabili”, quali PMML e ONNX per citare le più diffuse, che non ho voluto utilizzare perché esulano dagli scopi di questo tutorial. Per lo stesso motivo ho ignorato le operazioni di “data preparation” e “validation” del modello seppur imprescindibili nel contesto di qualsiasi progetto reale.

Per il serving del modello costruiremo una HTTP REST API utilizzando Flask, un framework lightweight per la realizzazione di applicazioni web in Python. Al fine di esporre la API attraverso un indirizzo pubblico, feature non consentita da Colab, utilizzeremo il servizio gratuito ngrok (https://ngrok.com). Qui di seguito il codice per il caricamento del modello precedentemente salvato su Google Drive e la creazione della API wrapper per la prediction.

Per verificare che tutto sia andato a buon fine proviamo a contattare il server in ascolto su localhost:

A questo punto, utilizzando ngrok, creiamo il tunnel per ottenere una URL pubblica sulla quale è possibile invocare la API.

N.B. per avviare il tunnel sarà necessario un auth token che è possibile ottenere dopo aver effettuato la registrazione al servizio ngrok.

Per effettuare il test finale invocheremo l’API sull’URL pubblica utilizzandoil client Postman

Congratulazioni! Il vostro modello è adesso utilizzabile con qualsiasi applicazione in grado di effettuare una chiamata HTTP REST.

Qui di seguito il link ai notebook completi

Training del modello:

https://colab.research.google.com/drive/1bVDKI6EbuXYXxvtXNdNiaG0LlnUmO7aU

Serving (REST API):

https://colab.research.google.com/drive/11K25LlPTi22d6e1OlaN0btF0MHLWeg1X

--

--

Mario Cartia

Old school developer, veteran system administrator, technology lover and jazz piano player.