Un aspetto dello scenario è la creazione di un modello di apprendimento automatico. Deve essere utilizzabile nel mondo reale e disponibile per consumatori e sviluppatori.
Il modo più semplice e diffuso per distribuire modelli di machine learning è racchiuderli in un'API REST.
Con una libreria popolare chiamata FastAPI, questo è esattamente ciò che realizzeremo oggi.
Ma cosa è API veloce?
Il framework Web FastAPI Python è stato creato da zero per sfruttare le funzionalità Python contemporanee.
Per la comunicazione simultanea e asincrona con i client, aderisce allo standard ASGI, mentre è anche in grado di utilizzare WSGI.
Gli endpoint e i percorsi possono entrambi utilizzare funzioni asincrone. Inoltre, FastAPI consente la creazione produttiva di app Web in codice Python moderno, pulito e con suggerimenti sui tipi.
Il caso d'uso principale di FastAPI è, come suggerisce il nome, la creazione di endpoint API.
L'utilizzo dello standard OpenAPI, che include un'interfaccia utente Swagger interattiva, o la fornitura di dati del dizionario Python come JSON sono entrambi modi semplici per raggiungere questo obiettivo. Tuttavia, FastAPI non è solo per le API.
Può essere utilizzato per offrire pagine Web standard utilizzando il motore di modelli Jinja2 e per servire app che utilizzano WebSocket, oltre a praticamente tutto ciò che un framework Web può fare.
In questo articolo, svilupperemo un modello di machine learning semplice e quindi utilizzeremo FastAPI per distribuirlo. Cominciamo.
Installazione di FastAPI e creazione della prima API
Per prima cosa è richiesta l'installazione della libreria e di un server ASGI; o Uvuicorn o Hypercorn funzioneranno. Funziona inserendo il seguente comando nel Terminale:
Ora che l'API è stata creata, puoi utilizzare il tuo editor di codice preferito e sfogliarlo. Crea uno script Python chiamato ml_model.py per iniziare. Puoi dare al tuo un nome diverso, ma per il bene di questo post, mi riferirò a questo file come ml_model.py.
Per creare un'API semplice con due endpoint, devi completare le seguenti attività:
- Importa le librerie FastAPI e Uvicorn.
- Configura un'istanza di classe FastAPI.
- Dichiara la prima route, che, nella pagina dell'indice, produce un semplice oggetto JSON.
- Dichiara la seconda route, che fornisce un semplice oggetto JSON con un messaggio personalizzato. Il parametro name viene preso direttamente dall'URL (ad esempio, https://127.0.0.1:8000/Jay).
- Utilizza Uvicorn per eseguire l'API.
L'implementazione di queste cinque fasi è mostrata nel seguente bit di codice, ad es. creare una semplice API
Tutto fatto! Lanciamo immediatamente la nostra API. Apri una finestra Terminale accanto al file ml model.py per ottenere ciò. Quindi, inserisci quanto segue:
il tasto Invio. Prima di andare avanti, sfatiamo questa affermazione. La prima app utilizza solo il nome del file Python, senza l'estensione. La seconda app deve avere lo stesso nome dell'istanza FastAPI.
Usando -reload, dici all'API che desideri che si ricarichi automaticamente quando salvi il file anziché ricominciare da zero.
Ora avvia un browser e vai a https://127.0.0.1:8000; il risultato dovrebbe apparire come segue:
Ora capisci come creare una semplice API utilizzando FastAPI.
Costruire e addestrare il modello di Machine Learning
Senza raccogliere o analizzare alcun dato, addestreremo semplicemente un modello semplice. Questi non sono correlati all'implementazione dei modelli e non sono essenziali per l'argomento in questione.
Un modello basato sul set di dati Iris può essere installato utilizzando lo stesso rete neurale metodo di installazione.
E noi faremo proprio questo: scarica il Set di dati Iris e addestrare il modello. Non sarà semplice. Per iniziare, crea un file chiamato jaysmlmodel.py.
In esso, farai quanto segue:
- Importazioni: avrai bisogno di panda, scikit-RandomForecastClassifier, BaseModel di pydantic (scoprirai perché nel passaggio successivo) e joblib per archiviare e caricare modelli.
- Dichiara una classe IrisSpecies che eredita dal modello base. Questa classe contiene solo i campi necessari per prevedere una singola specie di fiori (ne parleremo più avanti nella prossima sezione)
- Crea una classe. IrisModel è uno strumento di formazione e previsione dei modelli.
- Dichiara un metodo denominato _train model all'interno di IrisModel. Viene utilizzato per addestrare modelli utilizzando la tecnica Random Forests. Il modello addestrato viene restituito dalla procedura.
- Dichiara una funzione di specie prevista all'interno di IrisModel. Viene utilizzato per prevedere sulla base di 4 fattori di input (misure di fiori). Sia la previsione (specie di fiori) che la probabilità di previsione vengono restituite dall'algoritmo.
- Modificare il costruttore in IrisModel in modo che carichi il set di dati Iris e addestra il modello se manca dalla cartella. Questo risolve il problema dell'addestramento ripetuto di nuovi modelli. La libreria joblib viene utilizzata per il caricamento e il salvataggio del modello.
Ecco l'intero codice:
Spero che l'elenco sopra e i commenti lo abbiano reso facile da comprendere anche se si trattava di una notevole quantità di codice da creare. Ora che questo modello è stato sviluppato, pubblichiamo le sue capacità di previsione su a API REST.
Costruire un'API REST completa
Torna al file ml_model.py ed elimina tutti i dati. Il boilerplate sarà essenzialmente lo stesso di quello che avevi prima, ma dovremmo ricominciare da capo con un file vuoto.
Definirai solo un punto finale questa volta, che è quello utilizzato per determinare il tipo di fiore. IrisModel.predict species(), dichiarato nella sezione precedente, viene chiamato da questo endpoint per eseguire la previsione.
Il tipo di richiesta è l'altro grande cambiamento. Per trasmettere i parametri in JSON anziché in URL, si consiglia di utilizzare POST durante l'utilizzo machine learning API.
La frase sopra potrebbe suonare senza senso se sei un scienziato di dati, ma va bene. Per progettare e distribuire modelli, non è necessario essere un esperto di richieste HTTP e API REST.
Le attività per ml model.py sono poche e dirette:
- È necessario importare quanto segue dal file jaymlmodel.py precedentemente creato: uvicorn, FastAPI, IrisModel e IrisSpecies.
- Crea istanze di FastAPI e IrisModel.
- Dichiara una funzione su https://127.0.0.1:8000/predict per fare previsioni.
- Il metodo IrisModel.predict species() riceve un oggetto di tipo IrisSpecies, lo trasforma in un dizionario e quindi lo restituisce. I rendimenti sono la classe attesa e la probabilità prevista.
- Usa uvicorn per eseguire l'API.
Ancora una volta, ecco il codice dell'intero file insieme ai suoi commenti:
Questo è tutto ciò che devi fare. Nel passaggio successivo, testiamo l'API.
Test dell'API
Immettere nuovamente la seguente riga nel Terminale per eseguire l'API: uvicorn ml_model:app –reload
Ecco come appare la pagina della documentazione:
Quindi è tutto per oggi. Nella parte successiva, concludiamo.
Conclusione
Oggi hai imparato cos'è FastAPI e come utilizzarlo, utilizzando sia un semplice esempio di API che un semplice esempio di machine learning. Hai anche imparato a creare e visualizzare la documentazione dell'API, nonché a testarla.
È molto per un singolo pezzo, quindi non sorprenderti se ci vogliono alcune letture per capirlo correttamente.
Buona codifica.
Lascia un Commento