top of page
Team I.A. Italia

Come Distribuire un Modello di Machine Learning usando Flask

Nella moderna era digitale, l'intelligenza artificiale e il machine learning stanno rivoluzionando innumerevoli settori. Mentre lo sviluppo di modelli di machine learning è una sfida stimolante, portare questi modelli in produzione è altrettanto cruciale. In questa guida approfondita, esploreremo come distribuire un modello di machine learning utilizzando Flask, un potente framework web leggero e flessibile per Python.


Che tu sia uno studente desideroso di imparare o un professionista dell'IA pronto a conquistare nuove vette, questa risorsa dettagliata ti guiderà passo dopo passo nel processo di distribuzione, svelando segreti e best practice. Preparati a sbloccare tutto il potenziale dei tuoi modelli di machine learning e a portarli nel mondo reale!



Come Distribuire un Modello di Machine Learning usando Flask
Come Distribuire un Modello di Machine Learning usando Flask


Perché è così importante distribuire i modelli di machine learning?

Sviluppare modelli di machine learning è solo metà della battaglia. L'altra metà cruciale è renderli accessibili e utilizzabili nel mondo reale. Senza una corretta distribuzione, anche i modelli più sofisticati rimangono inutilizzati, confinati nei laboratori di ricerca.


La distribuzione consente di sbloccare il vero valore dei modelli di machine learning, consentendo loro di essere integrati in applicazioni, sistemi e processi aziendali. Sia che si tratti di migliorare l'esperienza dell'utente, automatizzare processi o ottimizzare operazioni, i modelli ben distribuiti possono trasformare praticamente ogni settore.


Secondo un recente studio di MarketsandMarkets, il mercato globale dei servizi di machine learning come servizio dovrebbe crescere da 1,07 miliardi di dollari nel 2019 a 8,43 miliardi di dollari entro il 2025, con un CAGR del 40,9% durante il periodo di previsione. Questa crescita esplosiva evidenzia l'importanza cruciale di padroneggiare le tecniche di distribuzione del machine learning.



Come Distribuire un Modello di Machine Learning usando Flask
Come Distribuire un Modello di Machine Learning usando Flask


Ma come si fa a distribuire un modello di machine learning?

È qui che entra in gioco Flask, un framework web leggero e potente che rende il processo di distribuzione incredibilmente accessibile. Nelle prossime sezioni, esploreremo il funzionamento di Flask e come sfruttarlo per portare i tuoi modelli di machine learning nel mondo reale.


Cos'è Flask e perché è una scelta ideale per la distribuzione di modelli di machine learning?

Flask è un micro-framework web scritto in Python, progettato per essere leggero, flessibile e facile da usare. Nonostante la sua semplicità, Flask offre un'ampia gamma di funzionalità che lo rendono una scelta eccellente per la distribuzione di modelli di machine learning.


Ecco alcune delle principali ragioni per cui Flask è così popolare tra gli sviluppatori di machine learning:

  1. Footprint leggero: Con una piccola impronta e dipendenze minime, Flask è incredibilmente veloce e facile da installare e configurare, rendendolo ideale per applicazioni di machine learning a bassa latenza.

  2. Flessibilità: Flask ti consente di avere un controllo granulare su ogni aspetto dell'applicazione, consentendoti di modellare e personalizzare il comportamento in base alle tue esigenze.

  3. Facile integrazione: Flask è progettato per lavorare senza soluzione di continuità con librerie scientifiche Python come NumPy, Pandas e Scikit-learn, rendendolo perfetto per l'integrazione con il tuo stack di machine learning esistente.

  4. Facilità di distribuzione: Che tu stia distribuendo su un server locale, su cloud o in un contenitore Docker, Flask offre un'ampia gamma di opzioni di distribuzione, semplificando notevolmente il processo.

  5. Comunità attiva: Flask gode di un'ampia e vivace comunità di sviluppatori, garantendo un costante flusso di aggiornamenti, risorse e supporto.


Con tutti questi vantaggi, non sorprende che Flask sia diventato uno strumento favorito tra gli sviluppatori di intelligenza artificiale in tutto il mondo. Sia che tu stia costruendo un'applicazione web avanzata o semplicemente voglia rendere accessibile il tuo modello di machine learning, Flask è uno strumento potente da avere nella tua cassetta degli attrezzi.

Nelle prossime sezioni, ci immergeremo nei dettagli e nei passaggi necessari per distribuire effettivamente un modello di machine learning utilizzando Flask. Tieniti forte, perché stiamo per intraprendere un emozionante viaggio nell'unire il potere dell'intelligenza artificiale con l'accessibilità del web!



Come Distribuire un Modello di Machine Learning usando Flask
Come Distribuire un Modello di Machine Learning usando Flask


Struttura del Progetto: Un Approccio Modulare

Per rendere il nostro progetto di distribuzione di un modello di machine learning più gestibile e scalabile, adotteremo un approccio modulare. Suddivideremo il nostro codice in tre file distinti, ognuno con un ruolo specifico:

  1. model.py: In questo file svilupperemo e addestreremo il nostro modello di machine learning.

  2. server.py: Qui codificheremo la logica per gestire le richieste POST e restituire i risultati delle previsioni.

  3. request.py: Questo file invierà richieste con le caratteristiche al server e riceverà i risultati delle previsioni.

Questa struttura modulare non solo rende il codice più organizzato e manutenibile, ma facilita anche la comprensione del flusso di lavoro complessivo. Prepariamoci ad esplorare questi tre componenti fondamentali nel dettaglio!



Come Distribuire un Modello di Machine Learning usando Flask
Come Distribuire un Modello di Machine Learning usando Flask


Sviluppo del Modello: model.py

Il cuore pulsante del nostro progetto risiede in model.py, dove svilupperemo e addestreremo il nostro modello di machine learning. In questa guida, utilizzeremo un esempio semplice ma illustrativo: prevederemo lo stipendio di un dipendente in base alla sua esperienza lavorativa.

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import pickle


Iniziamo importando le librerie necessarie. NumPy e Pandas ci consentiranno di manipolare matrici e dati, mentre Scikit-learn fornirà gli strumenti per la suddivisione dei dati e l'addestramento del modello. Pickle, d'altra parte, ci permetterà di salvare il modello addestrato su disco per un uso futuro.

dataset = pd.read_csv('Salary_Data.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 1].values


Qui carichiamo il dataset utilizzando Pandas e separiamo le caratteristiche (X) dall'etichetta (y) che desideriamo prevedere, in questo caso lo stipendio.

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=0)

Applicando la funzione train_test_split di Scikit-learn, suddividiamo i nostri dati in set di addestramento e test nella proporzione di 67% e 33% rispettivamente. Questa suddivisione è fondamentale per valutare le prestazioni del nostro modello su dati non visti durante l'addestramento.

regressor = LinearRegression()
regressor.fit(X_train, y_train)
y_pred = regressor.predict(X_test)


Istanziamo un oggetto LinearRegression e lo addestriamo utilizzando i set di addestramento X_train e y_train. Successivamente, utilizziamo il modello addestrato per prevedere gli stipendi (y_pred) sul set di test X_test.

pickle.dump(regressor, open('model.pkl', 'wb'))


Infine, serializziamo il nostro modello addestrato utilizzando la libreria Pickle e lo salviamo sul disco con il nome 'model.pkl'. Questo ci consentirà di caricare e utilizzare il modello in altri componenti del nostro progetto, come il server Flask.


Con model.py completato, abbiamo ora un modello di machine learning addestrato e pronto per essere distribuito. Nelle prossime sezioni, esploreremo come integrarlo in un'applicazione web utilizzando Flask e come effettuare previsioni tramite richieste HTTP. Tieniti forte, perché stiamo per portare il nostro modello di machine learning nel mondo reale!



Come Distribuire un Modello di Machine Learning usando Flask
Come Distribuire un Modello di Machine Learning usando Flask


Validazione Locale e Visualizzazione dei Risultati

Dopo aver addestrato e salvato il nostro modello, è una buona pratica eseguire alcune previsioni locali per convalidare il suo funzionamento corretto. In model.py, possiamo facilmente caricare il modello serializzato e utilizzarlo per effettuare previsioni.

model = pickle.load(open('model.pkl','rb'))
print(model.predict([[1.8]]))

Il metodo pickle.load() carica il modello serializzato dal file 'model.pkl' e lo deserializza in memoria. Una volta caricato il modello, possiamo utilizzare il metodo model.predict() per effettuare previsioni. Nell'esempio sopra, stiamo prevedendo lo stipendio di un dipendente con 1,8 anni di esperienza lavorativa.


Questa funzionalità di validazione locale è preziosa per garantire che il nostro modello sia stato addestrato correttamente e produca risultati sensati prima di procedere alla distribuzione. Inoltre, consente agli sviluppatori di eseguire test rapidi senza dover avviare l'intero stack di distribuzione.


Ecco il codice completo di model.py:

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import pickle

dataset = pd.read_csv('Salary_Data.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 1].values

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=0)

regressor = LinearRegression()
regressor.fit(X_train, y_train)
y_pred = regressor.predict(X_test)

pickle.dump(regressor, open('model.pkl', 'wb'))

model = pickle.load(open('model.pkl', 'rb'))
print(model.predict([[1.8]]))

Con il modello addestrato, serializzato e convalidato localmente, siamo pronti a intraprendere il prossimo passo: distribuirlo utilizzando Flask, un potente framework web per Python.



Come Distribuire un Modello di Machine Learning usando Flask
Come Distribuire un Modello di Machine Learning usando Flask


Introduzione a Flask: Un Framework Web Leggero e Flessibile

Flask è un micro-framework web scritto in Python, noto per la sua semplicità e flessibilità. Nonostante le sue dimensioni ridotte, Flask offre una vasta gamma di funzionalità che lo rendono ideale per la distribuzione di modelli di machine learning.

Uno dei principali vantaggi di Flask è la sua leggerezza. A differenza di framework monolitici come Django, Flask ha un'impronta minima e dipendenze ridotte, rendendolo incredibilmente veloce e facile da configurare. Questa agilità è particolarmente preziosa quando si distribuiscono modelli di machine learning, dove la bassa latenza è spesso un requisito critico.


Inoltre, Flask offre una flessibilità senza pari. A differenza di altri framework che impongono una struttura rigida, Flask consente agli sviluppatori di avere un controllo granulare su ogni aspetto dell'applicazione. Questo ti permette di modellare e personalizzare il comportamento in base alle tue esigenze specifiche, senza essere vincolato da convenzioni predefinite.


Un'altra caratteristica chiave di Flask è la sua facile integrazione con le librerie scientifiche di Python come NumPy, Pandas e Scikit-learn. Questo rende Flask perfetto per incorporare modelli di machine learning nelle applicazioni web, consentendo una perfetta sinergia tra il tuo stack di machine learning esistente e il tuo stack web.


La distribuzione con Flask è anche incredibilmente semplice. Che tu stia distribuendo su un server locale, su cloud o in un contenitore Docker, Flask offre un'ampia gamma di opzioni di distribuzione, semplificando notevolmente il processo.

Infine, Flask gode di un'ampia e vivace comunità di sviluppatori che contribuisce costantemente con nuove estensioni, risorse e supporto. Questa comunità attiva garantisce che Flask rimanga all'avanguardia e possa affrontare le sfide più complesse della distribuzione di modelli di machine learning.


Con tutte queste caratteristiche vantaggiose, non sorprende che Flask sia diventato uno strumento favorito tra gli sviluppatori di intelligenza artificiale in tutto il mondo.


Come Distribuire un Modello di Machine Learning usando Flask
Come Distribuire un Modello di Machine Learning usando Flask


Creazione del Server Flask per Gestire le Richieste

Ora che abbiamo sviluppato e addestrato il nostro modello di machine learning in model.py, è il momento di renderlo accessibile tramite un'API web. Questo ci consentirà di integrare facilmente il nostro modello in applicazioni, sistemi o processi aziendali.

È qui che entra in gioco Flask, il micro-framework web che semplifica notevolmente la creazione di un'API per il nostro modello. In server.py, creeremo un'istanza di Flask e definiremo una rotta API che accetterà richieste POST contenenti i dati di input per il nostro modello.

import numpy as np
from flask import Flask, request, jsonify
import pickle

app = Flask(__name__)
model = pickle.load(open('model.pkl', 'rb'))

Iniziamo importando le librerie necessarie: NumPy per gestire i dati di input, Flask per creare l'applicazione web e gestire le richieste, e Pickle per caricare il nostro modello addestrato salvato in precedenza.


Creiamo un'istanza di Flask e carichiamo il modello serializzato utilizzando Pickle. Questo ci consentirà di accedere facilmente al nostro modello addestrato all'interno delle nostre funzioni di gestione delle richieste.

@app.route('/api', methods=['POST'])
def predict():
    data = request.get_json(force=True)
    prediction = model.predict([[np.array(data['exp'])]])
    output = prediction[0]
    return jsonify(output)


Qui definiamo una rotta /api che accetterà richieste POST. La funzione predict gestirà queste richieste. Utilizziamo request.get_json per estrarre i dati di input dalla richiesta POST, che presumiamo sia in formato JSON.


Successivamente, convertiamo i dati di input in un array NumPy 2D, come richiesto dal metodo model.predict. La previsione del modello viene memorizzata nella variabile output, che viene quindi restituita come risposta JSON utilizzando jsonify.


Con questa configurazione, il nostro server Flask è pronto ad accettare richieste POST all'indirizzo /api contenenti i dati di input per il nostro modello. Flask si occuperà di gestire le richieste, passare i dati al nostro modello e restituire le previsioni come risposta JSON.




Esecuzione e Debug del Server con Flask

L'ultima parte di server.py consiste nell'avvio effettivo del server Flask. Questo viene fatto tramite un blocco if name == '__main__': che esegue app.run solo quando il file viene eseguito direttamente, e non quando viene importato come modulo.

if __name__ == '__main__':
    app.run(port=5000, debug=True)


In questa configurazione, il server Flask verrà avviato sulla porta 5000 e con debug=True, che consente un comodo debug dell'applicazione durante lo sviluppo. In caso di errori, verranno visualizzati dettagli e tracce di stack utili direttamente nel terminale.


Con il completamento di server.py, abbiamo ora un'API web completamente funzionante che accetta richieste POST contenenti dati di input e restituisce previsioni dal nostro modello di machine learning. Questa API può essere facilmente integrata in applicazioni web, sistemi aziendali o processi automatizzati, consentendo di sfruttare appieno il potenziale del nostro modello di machine learning nel mondo reale.


Nelle prossime sezioni, esploreremo come inviare effettivamente richieste a questa API utilizzando request.py, chiudendo così il cerchio del nostro progetto di distribuzione di modelli di machine learning con Flask.



Effettuare Richieste al Server con request.py

Abbiamo finalmente raggiunto la fase finale del nostro progetto di distribuzione del modello di machine learning. Finora, abbiamo sviluppato il modello in model.py e creato un'API Flask per gestire le richieste e restituire le previsioni in server.py. Ora è il momento di imparare a effettuare effettivamente richieste a questa API utilizzando request.py.

import requests

url = 'http://localhost:5000/api'
r = requests.post(url, json={'exp': 1.8})
print(r.json())

In request.py, iniziamo importando la libreria requests, che ci fornisce una semplice interfaccia per inviare richieste HTTP. Definiamo quindi l'URL del nostro server Flask, in questo caso http://localhost:5000/api, che corrisponde alla rotta /api che abbiamo definito in server.py.


Per inviare una richiesta POST al nostro server, utilizziamo il metodo requests.post(). Questo metodo accetta due argomenti principali: l'URL del server e i dati da inviare nella richiesta. Nel nostro caso, stiamo inviando un dizionario JSON con una chiave 'exp' e un valore di 1.8, che rappresenta l'esperienza lavorativa di un dipendente per il quale vogliamo prevedere lo stipendio.


La risposta del server viene memorizzata nella variabile r. Poiché il nostro server Flask restituisce le previsioni come oggetti JSON, possiamo semplicemente chiamare r.json() per ottenere il risultato della previsione come un valore numerico Python.


Questo approccio semplice ma potente ci consente di interagire facilmente con la nostra API di machine learning da qualsiasi applicazione o script Python. Possiamo inviare richieste con diversi set di dati di input e ricevere le previsioni corrispondenti, senza doverci preoccupare dei dettagli di basso livello della gestione delle richieste HTTP o della deserializzazione dei dati.




Come Distribuire un Modello di Machine Learning usando Flask
Come Distribuire un Modello di Machine Learning usando Flask


Conclusione: Un Flusso di Lavoro Completo per la Distribuzione di Modelli

In questa guida approfondita, abbiamo creato tre file distinti: model.py, server.py e request.py. Ognuno di questi file svolge un ruolo fondamentale nel processo di distribuzione del nostro modello di machine learning.

  1. model.py: In questo file, abbiamo sviluppato e addestrato un modello di regressione lineare per prevedere gli stipendi dei dipendenti in base alla loro esperienza lavorativa. Abbiamo quindi serializzato il modello addestrato utilizzando Pickle per un uso futuro.

  2. server.py: Utilizzando Flask, abbiamo creato un'API web che accetta richieste POST contenenti dati di input. Questa API carica il nostro modello serializzato, elabora i dati di input e restituisce le previsioni come risposta JSON.

  3. request.py: Infine, abbiamo imparato a inviare effettivamente richieste POST all'API Flask utilizzando la libreria requests. Questo ci consente di integrare facilmente il nostro modello di machine learning in applicazioni, sistemi o processi aziendali.



Per eseguire correttamente questo progetto, è necessario seguire una sequenza specifica:

  1. Eseguire model.py per addestrare e serializzare il modello.

  2. Avviare server.py in un terminale separato per avviare il server Flask.

  3. Eseguire request.py per inviare richieste al server e ricevere previsioni.


Seguendo questa guida, hai acquisito le competenze necessarie per distribuire i tuoi modelli di machine learning nel mondo reale utilizzando Flask. Che tu stia creando un'applicazione web avanzata o semplicemente rendendo accessibile il tuo modello tramite un'API, questa conoscenza ti consentirà di sfruttare appieno il potenziale dell'intelligenza artificiale e del machine learning.


Non dimenticare di continuare a esplorare, sperimentare e migliorare. Il campo dell'intelligenza artificiale è in costante evoluzione, e padroneggiare le tecniche di distribuzione ti consentirà di rimanere all'avanguardia e di creare soluzioni innovative che cambieranno il mondo.

Comments

Rated 0 out of 5 stars.
No ratings yet

Add a rating
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