top of page

Come creare un API per un modello di machine learning in 5 minuti


Perchè creare un API per un modello di machine learning ?

In qualità di consulente di data science, voglio avere un impatto con i miei modelli di machine learning. Per avere un impatto intendo di riuscire a farli arrivare a più persone o aziende possibile.


Comunque, è più facile a dirsi che a farsi. Quando si avvia un nuovo progetto, si inizia a giocare con i dati in un notebook Jupyter. Una volta che hai una piena comprensione di quali dati hai, di che fare e ti sei allineato con il cliente su quali passi intraprendere, uno dei risultati può essere la creazione di un modello predittivo.


Dopo aver sentito il torni al tuo notebook Jupyter per allenare il miglior modello possibile. Il modello e i risultati vengono presentati e tutti sono contenti. Il cliente desidera eseguire il modello nella propria infrastruttura per verificare se può davvero creare l'impatto previsto.


Ma come possiamo farlo rapidamente, dato che con un'infrastruttura complicata potresti non avere familiarità? Anche se ne avessi familiarità sei sicuro di saper creare un infrastruttura per centinaia di dipendenti con poche competenze informatiche ?


Per questo scopo è necessario uno strumento che possa adattarsi alla loro complicata infrastruttura, preferibilmente con il linguaggio che preferiscono.


Prorpio per questo motivo la soluzione migliore per distribuire i modelli di Machine learning è quello di creare un'API REST che consente di inviare dati e ricevere una previsione come risposta. Così facendo si potrà utilizzare qualsiasi linguaggio per fare all'api una richiesta di GET.


Qui è dove useremo Flask . Flask è un micro framework web scritto in Python.



Cosa sono le API?

In parole semplici, un'API è un contratto (ipotetico) tra 2 software che dice :

"se il software utente fornisce un input in formato predefinito, il successivo estenderà le sue funzionalità e fornirà il risultato al software utente".


In sostanza, le API sono molto simili alle applicazioni web, ma invece di darti una pagina HTML ben disegnata, le API tendono a restituire i dati in un formato di scambio dati standard come JSON, XML, ecc. Una volta che uno sviluppatore ha l'output desiderato, possono modellarlo come vogliono. Esistono anche molte API ML popolari, ad esempio, l'API ML di IBM Watson che è in grado di eseguire quanto segue:

  • Traduzione automatica - Aiuta a tradurre il testo in diverse coppie di lingue.

  • Risonanza del messaggio – Per scoprire la popolarità di una frase o parola con un pubblico predeterminato.

  • Domande e risposte: questo servizio fornisce risposte dirette alle domande che vengono attivate da fonti di documenti primarie.

  • Modellazione utente: per fare previsioni sulle caratteristiche sociali di qualcuno da un determinato testo.

Anche l' API di Google Vision è un eccellente esempio che fornisce servizi dedicati per le attività di Computer Vision. Fai clic qui per avere un'idea di cosa è possibile fare utilizzando l'API di Google Vision.


Fondamentalmente ciò che accade è la maggior parte dei fornitori di cloud e le aziende più piccole focalizzate sull'apprendimento automatico forniscono API pronte per l'uso. Soddisfano le esigenze di sviluppatori/aziende che non hanno esperienza in ML, che desiderano implementare ML nei loro processi o suite di prodotti.


Esempi popolari di API di machine learning adatte in modo esplicito allo sviluppo web sono DialogFlow , Cognitive Toolkit di Microsoft , TensorFlow.js , ecc.

Ora che hai una buona idea di cosa sono le API, vediamo come puoi racchiudere un modello di apprendimento automatico (sviluppato in Python) in un'API in Python.


Passaggi per creare un API su modello di machine learning in 5 minuti



Creare un API su modello di machine learning -

Allena e salva il tuo modello

A scopo dimostrativo, addestrerò un semplice modello DecisionTreeClassifier su un set di dati di esempio che può essere caricato dal pacchetto scikit-learn .

Lo scopo di questo articolo non è quello di ottimizzare o scoprire nuovi modelli di machine learning. Dobbiamo soltanto allenare e salvare un modello per poi interrogarlo.


Naturalmente nel caso in cui tu hai già dei modelli allenati puoi tranquillamente saltare questo passaggio.


Copia e incolla il seguente codice in un file .py


import numpy as np
import pandas as pd
from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.metrics import accuracy_score

#carichiamo i dati
wine=load_wine()
data = pd.DataFrame(data= np.c_[wine['data'], wine['target']],columns= wine['feature_names'] + ['target'])


#separiamo dati train e test 
X_train = data[:-20]
X_test = data[-20:]

y_train = X_train.target
y_test = X_test.target

X_train = X_train.drop('target',1)
X_test = X_test.drop('target',1)

#definisco e alleno il modello
clf = tree.DecisionTreeClassifier()
clf = clf.fit(X_train, y_train)


#accuratezza
print("accuracy_score: %.2f"% accuracy_score(y_test, y_pred))
#accuracy_score: 0.89

#salviamo il modello in un file
import pickle
pickle.dump(clf, open('models/final_prediction.pickle', 'wb'))


Una volta che il cliente è soddisfatto del modello che hai creato, puoi salvarlo come file pickle . È quindi possibile usare questo file pickle in un secondo momento e chiamare la funzione predict per ottenere una previsione per i nuovi dati di input.


Questo è esattamente ciò che faremo in Flask.



Creare un API su modello di machine learning -

Crea l'API con Flask

Ora, potresti pensare che cos'è un servizio web? Il servizio Web è solo una forma di API che presuppone che un'API sia ospitata su un server e possa essere utilizzata. API Web, Servizio Web: questi termini sono generalmente usati in modo intercambiabile.

Venendo a Flask, è un framework di sviluppo di servizi Web in Python. Non è l'unico in Python, ce ne sono anche altri come Django, Falcon, Hug, ecc.


Se hai scaricato la distribuzione Anaconda, hai già installato Flask. Altrimenti, dovrai installarlo da solo con:

pip install flask

Flask è molto minimale. Flask è il preferito dagli sviluppatori Python per molte ragioni. Il framework Flask viene fornito con un server Web leggero integrato che richiede una configurazione minima e può essere controllato dal tuo codice Python. Questo è uno dei motivi per cui è così popolare.


Il codice seguente dimostra la minimalità di Flask in un modo carino. Il codice viene utilizzato per creare una semplice Web-API che alla ricezione di un determinato URL produce un output specifico.

from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
    return "Benvenuto sull API di Machine Learning!"
if __name__ == '__main__':
    app.run(debug=True)

Una volta eseguito, è possibile navigare all'indirizzo web (inserire l'indirizzo su un browser web), che viene visualizzato sul terminale, e osservare il risultato.



Alcuni note sul Creare un API su modello di machine learning:

  • I notebook Jupyter sono ottimi per tutto ciò che riguarda i markdown, R e Python. Ma quando si tratta di costruire un server web, potrebbe mostrare un comportamento incoerente. Quindi, è una buona idea scrivere i codici Flask in un editor di testo come Sublime ed eseguire il codice dal terminale/prompt dei comandi .

  • Assicurati di non nominare il file come flask.py .

  • Flask funziona sulla porta numero 5000 per impostazione predefinita. A volte, il server Flask viene avviato correttamente su questo numero di porta, ma quando si preme l'URL (che i server restituiscono sul terminale) in un browser Web o in qualsiasi client API come Postman.

  • Secondo Flask, il suo server è stato avviato correttamente sulla porta 5000, ma quando l'URL è stato attivato nel browser, non ha restituito nulla. Quindi, questo può essere un possibile caso di conflitto di numero di porta. In questo caso, modificare la porta predefinita 5000 con il numero di porta desiderato sarebbe una buona scelta. Puoi farlo semplicemente facendo quanto segue: app.run(debug=True,port=12345)


Ora basta chiacchere e scriviamo il codice del nostr Server Api


from flask import Flask, request, redirect, url_for, flash, jsonify
import numpy as np
import pickle as p
import json


app = Flask(__name__)


@app.route('/api/', methods=['POST'])
def makecalc():
    data = request.get_json()
    prediction = np.array2string(model.predict(data))

    return jsonify(prediction)

if __name__ == '__main__':
    modelfile = 'models/final_prediction.pickle'
    model = p.load(open(modelfile, 'rb'))
    app.run(debug=True, host='0.0.0.0')

NON SALVARE QUESTO FILE con il nome flask.py


Creare un API su modello di machine learning -

Richiedi previsioni

Le previsioni vengono effettuate passando una richiesta POST JSON al server Web Flask creato che si trova sulla porta 5000 per impostazione predefinita. In app.py questa richiesta viene ricevuta e una previsione si basa sulla funzione di previsione già caricata del nostro modello. Restituisce la previsione in formato JSON.


import requests
import json

url = 'http://0.0.0.0:5000/api/'

data = [[14.34, 1.68, 2.7, 25.0, 98.0, 2.8, 1.31, 0.53, 2.7, 13.0, 0.57, 1.96, 660.0]]
j_data = json.dumps(data)
headers = {'content-type': 'application/json', 'Accept-Charset': 'UTF-8'}
r = requests.post(url, data=j_data, headers=headers)
print(r, r.text)

Ora, tutto ciò che devi fare è chiamare il server web con la sintassi corretta dei punti dati. Corrisponde al formato del set di dati originale per ottenere questa risposta JSON delle tue previsioni. Per esempio:

python request.py -> <Response[200]> “[1.]"

Per i dati che abbiamo inviato abbiamo ottenuto una previsione di classe 1 come output del nostro modello. In realtà tutto ciò che stai facendo è inviare i dati in un array a un endpoint, che viene trasformato in formato JSON. L'endpoint legge il post JSON e lo trasforma nell'array originale.


Con questi semplici passaggi puoi facilmente consentire ad altre persone di utilizzare il tuo modello di apprendimento automatico e avere rapidamente un grande impatto.


Conclusioni su Come creare un API per un modello di machine learning in 5 minuti


In questo articolo, non ho tenuto conto di eventuali errori nei dati o altre eccezioni. Questo articolo mostra come distibuire semplicemente dei modelli, ma necessita di molti miglioramenti prima che sia pronto per essere messo in produzione.


Questa soluzione può essere resa scalabile durante la creazione di un file Docker con l'API e l'hosting su Kubernetes in modo da poter bilanciare il carico su diverse macchine. Ma questi sono tutti passi da compiere quando si passa da un proof of concept a un ambiente di produzione.


Comunque dopo questo artcolo hai tutte le informazioni per creare un api sul tuo modello di machine learning. Se sei un bravo sviluppatore ci metterai poco a farti pagare per ogni chiamata all'API

Commenti

Valutazione 0 stelle su 5.
Non ci sono ancora valutazioni

Aggiungi una valutazione
PCR (5).gif
PCR (4).gif
PCR.gif
PCR.gif
PCR.gif
PCR.gif
PCR (5).gif
3.gif
Vediamo se riesci a cliccarmi ! Nascondo una Sorpresa... (2).png

Ciao 

🤗 Articoli consigliati dalla nostra
Intelligenza Artificiale in base ai tuoi interessi

Correlazione Alta

Correlazione Media

Correlazione Bassa

Iscriviti

VUOI DIVENTARE UN MEMBRO DI INTELLIGENZA ARTIFICIALE ITALIA GRATUITAMENTE E TRARNE I SEGUENTI BENEFICI?

Corsi Gratis

più di 150 lezioni online

Dataset Gratis

più di 150o dataset