Distribuzione di modelli di machine learning su Heroku

Pubblicato: 2021-01-05

L'apprendimento automatico è un processo continuo che prevede l'estrazione, la pulizia, la selezione di funzionalità importanti, la creazione di modelli, la convalida e l'implementazione dei dati per testare il modello su dati invisibili.

Sebbene la fase iniziale di ingegneria dei dati e creazione del modello sia un processo piuttosto noioso e richieda molto tempo da dedicare ai dati, la distribuzione del modello può sembrare semplice, ma è un processo critico e dipende dal caso d'uso a cui si desidera indirizzare. Puoi soddisfare il modello per utenti mobili, siti Web, dispositivi intelligenti o tramite qualsiasi altro dispositivo IoT.

Si può scegliere di integrare il modello nell'applicazione principale, includerlo in SDLC o nel cloud. Esistono varie strategie per implementare ed eseguire il modello nella piattaforma cloud, che sembra un'opzione migliore nella maggior parte dei casi a causa della disponibilità di strumenti come Google Cloud Platform, Azure, Amazon Web Services ed Heroku.

Sebbene sia possibile scegliere di esporre il modello in modalità Pub/Sub, l'API (Application Program Interface) o il wrapper REST sono più comunemente usati per distribuire il modello in produzione. Con l'aumentare della complessità del modello, vengono assegnati diversi team per gestire tali situazioni comunemente note come Machine Learning Engineers. Con questa introduzione, diamo un'occhiata a come distribuire un modello di apprendimento automatico come API sulla piattaforma Heroku.

Sommario

Cos'è Heroku?

Heroku è una piattaforma come strumento di servizio che consente agli sviluppatori di ospitare il proprio codice serverless. Ciò significa che si possono sviluppare script per servire l'uno o l'altro per scopi specifici. La piattaforma Heroku è essa stessa ospitata su AWS (Amazon Web Services), che è un'infrastruttura come strumento di servizio.

Heroku è una piattaforma gratuita ma limitata a 500 ore di attività. Le app sono ospitate come un banco di prova che dopo un'inattività di 30 minuti entra in modalità di sospensione. Ciò garantisce che la tua app non consumi tutto il tempo libero durante l'inattività. La piattaforma supporta Ruby, Java, PHP, Python, Node, Go, Scala. La maggior parte dei principianti di Data Science fa riferimento a questa piattaforma per avere un'esperienza di esecuzione e distribuzione di un modello nel cloud.

Preparazione del modello

Ora che sei a conoscenza di questa piattaforma, prepariamo il modello per lo stesso. Quando un modello di machine learning viene addestrato, i parametri corrispondenti vengono archiviati nella memoria stessa. Questo modello deve essere esportato in un file separato in modo da poter caricare direttamente questo modello, passare i dati invisibili e ottenere gli output.

Di solito vengono praticati diversi formati di modello come Pickle, job-lib che converte il Python Object Model in un bitstream, ONNX, PMML o MOJO che è un formato di esportazione H20.ai e offre il modello da integrare anche nelle applicazioni Java. Per semplicità, considera che vogliamo esportare il modello tramite pickle, quindi puoi farlo:

sottaceto di importazione

Pkl_Filename = “modello.pkl”

con open(Pkl_Filename, 'wb') come file:

pickle.dump(nome_modello, file)

Il modello è ora archiviato in un file separato e pronto per essere utilizzato integrato in un'API.

La logica del server

Per fornire l'accesso a questo modello per le previsioni, abbiamo bisogno di un codice server in grado di reindirizzare e gestire tutte le richieste lato client. Python supporta i framework di sviluppo web e uno famoso è Flask.

È un framework minimalista che permette di configurare un server con poche righe di codice. Poiché si tratta di un pacchetto minimo, molte funzionalità come l'autenticazione e la natura RESTful non sono esplicitamente supportate. Questi possono essere integrati con estensioni.

Un'altra opzione è optare per il framework FastAPI appena rilasciato. È molto più veloce, scalabile, ben documentato e viene fornito con molti pacchetti integrati. Per ora, continuiamo con il pallone per impostare un semplice percorso di previsione.

da flask import Flask

sottaceto di importazione

app = Flask(__name__)

con open(Filename, 'rb') come file:

modello = pickle.load(file)

@app.route('/predict', metodi = ['GET', 'POST'])

def pred():

# implementare la logica per ottenere parametri tramite query o payload

previsione = model.predict([parametri ottenuti])

ritorno {'risultato': previsione}

Questo è un codice approssimativo per mostrare come procedere con la logica del server. Ci sono varie strategie che puoi optare per una migliore implementazione.

Scopri: Guida alla distribuzione di modelli ML utilizzando Streamlit

Configurazione dei file di distribuzione

Heroku richiede un elenco di tutte le dipendenze richieste dalla nostra applicazione. Questo è chiamato il file dei requisiti. È un file di testo che elenca tutte le librerie esterne utilizzate dall'applicazione. In questo esempio, il contenuto del file conterrà:

borraccia

sklearn

insensibile </p>

panda

gunicorn

L'ultima libreria, gunicorn, ci permette di configurare l'implementazione del server WSGI che costituisce l'interfaccia per il client e il server che gestisce il traffico HTTP. Heroku richiede anche un altro file noto come Procfile che viene utilizzato per specificare il punto di ingresso dell'app. Considera che il file di logica del server è salvato con il nome main.py, quindi il comando da inserire in questo file è:

web: gunicorn principale: app

"web" è il tipo di banco prova che stiamo implementando, "gunicorn" funge da mediatore per passare la richiesta al codice del server "main" e cercare "app" in "main". L'app gestisce tutti i percorsi qui.

Distribuzione finale

Tutti i preparativi sono terminati e ora è il momento di eseguire l'app nel cloud. Crea un account se non su Heroku, fai clic su crea un'app, scegli una regione qualsiasi. Successivamente collega il tuo account GitHub e scegli il repository che contiene questi file: codice server, model.pkl, requisiti.txt e Procfile.

Dopo questo, premi semplicemente il ramo di distribuzione! Se ha esito positivo, visita il collegamento generato e la tua app dovrebbe essere attiva. Ora puoi fare richieste a appname.herokuapp.com/predict route e dovrebbe fornire le previsioni. Ulteriori informazioni sui modelli di apprendimento automatico.

Conclusione

Questa è stata un'introduzione a cos'è Heroku, perché è necessario e come distribuire un modello con l'aiuto di Flask. Esistono molte piattaforme di hosting che offrono funzionalità più avanzate come Data Pipelines, streaming, ma essendo Heroku la piattaforma gratuita è comunque una buona scelta per i principianti che vogliono solo avere un assaggio di distribuzione.

Se sei interessato a saperne di più sull'apprendimento automatico, dai un'occhiata al Diploma PG di IIIT-B e upGrad in Machine Learning e AI, progettato per i professionisti che lavorano e offre oltre 450 ore di formazione rigorosa, oltre 30 casi di studio e incarichi, IIIT- B Status di Alumni, oltre 5 progetti pratici pratici e assistenza sul lavoro con le migliori aziende.

Quali sono gli svantaggi dell'utilizzo della piattaforma Heroku?

Heroku non è l'ideale per le grandi imprese poiché la documentazione della piattaforma non è ampia. Un altro problema è il file system di sola lettura, che rende difficili da gestire i caricamenti di file ingombranti come film o fotografie ad alta risoluzione. Heroku è un fornitore di piattaforme come servizi con una quantità limitata di personalizzazione. Heroku accetta solo pagamenti in USD e non in altre valute, come EUR. Per gli imprenditori che preferiscono pagare nella propria valuta, questo potrebbe essere un piccolo inconveniente. Inoltre, all'interno di CRE (Common Runtime Environment), Heroku non fornisce indirizzi IP statici.

In che modo Heroku è diverso da AWS?

La procedura di distribuzione in AWS non è semplice e, di conseguenza, non è particolarmente intuitiva in termini di complessità. Heroku fornisce un ambiente pronto all'uso semplice da usare. Heroku è più costoso di AWS poiché richiede meno intervento umano. AWS può gestire esigenze di calcolo elevate o molto elevate, mentre Heroku può gestire richieste di calcolo modeste. Heroku, a differenza di AWS, non richiede una manutenzione regolare dell'infrastruttura. AWS e Heroku sono entrambi velocissimi quando si tratta di implementazione.

Per quanto tempo posso usare Heroku gratuitamente?

Gli account Heroku hanno un pool di ore di prova gratuite che possono essere utilizzate su app gratuite. Questo sostituisce il limite di 18 ore sui programmi gratuiti, consentendo loro di funzionare 24 ore al giorno, se necessario. I nuovi account ottengono 550 ore di prova gratuite, con ulteriori 450 ore se convalidi la tua identità con una carta di credito. Heroku fornisce un piano gratuito per aiutarti ad apprendere la tecnologia e iniziare. Molti componenti aggiuntivi di Heroku forniscono un piano gratuito, così come i pulsanti e i Buildpack di Heroku.