En aspekt av scenariot är att skapa en maskininlärningsmodell. Den måste vara användbar i den verkliga världen och tillgänglig för konsumenter och utvecklare.
Det enklaste och mest populära sättet att distribuera modeller för maskininlärning är att inkludera dem i ett REST API.
Med ett populärt bibliotek som heter FastAPI är det precis vad vi kommer att åstadkomma idag.
Men vad är det FastAPI?
FastAPI Python-webbramverket skapades från grunden för att dra nytta av samtida Python-funktioner.
För asynkron, samtidig kommunikation med klienter följer den ASGI-standarden, samtidigt som den också kan använda WSGI.
Slutpunkter och rutter kan båda använda asynkronfunktioner. Dessutom möjliggör FastAPI det produktiva skapandet av webbappar i typantydd, ren, modern Python-kod.
FastAPI:s huvudsakliga användningsfall är, som namnet antyder, att skapa API-slutpunkter.
Att använda OpenAPI-standarden, som inkluderar ett interaktivt Swagger-gränssnitt, eller tillhandahålla Python-ordboksdata som JSON är båda enkla sätt att uppnå detta. FastAPI är dock inte bara för API:er.
Den kan användas för att erbjuda standardwebbsidor med Jinja2-mallmotorn och för att tjäna appar som använder WebSockets, förutom i stort sett allt annat ett webbramverk kan göra.
I den här artikeln kommer vi att utveckla en enkel maskininlärningsmodell och sedan använda FastAPI för att distribuera den. Låt oss börja.
Installation av FastAPI och skapande av det första API:et
Installation av biblioteket och en ASGI-server krävs först; antingen Uvuicorn eller Hypercorn kommer att fungera. Det fungerar genom att skriva in följande kommando i terminalen:
Nu när API:et har skapats kan du använda din föredragna kodredigerare och bläddra igenom den. Skapa ett Python-skript som heter ml_model.py för att komma igång. Du får gärna ge ditt ett annat namn, men för detta inläggs skull kommer jag att referera till den här filen som ml_model.py.
För att skapa ett enkelt API med två slutpunkter måste du utföra följande uppgifter:
- Importera FastAPI- och Uvicorn-biblioteken.
- Konfigurera en FastAPI-klassinstans.
- Deklarera den första rutten, som på indexsidan producerar ett enkelt JSON-objekt.
- Deklarera den andra rutten, som ger ett enkelt JSON-objekt med ett anpassat meddelande. Namnparametern tas direkt från URL:en (till exempel https://127.0.0.1:8000/Jay).
- Använd Uvicorn för att köra API.
Implementering av dessa fem steg visas i följande kodbit, dvs. skapa ett enkelt API
Klart! Låt oss starta vårt API omedelbart. Öppna ett terminalfönster bredvid filen ml model.py för att göra detta. Ange sedan följande:
Enter-tangenten. Innan vi går vidare, låt oss avfärda detta påstående. Den första appen använder endast Python-filnamnet, utan tillägget. Den andra appen måste ha samma namn som din FastAPI-instans.
Genom att använda -reload säger du till API:et att du vill att det ska laddas om automatiskt när du sparar filen istället för att börja om från början.
Starta nu en webbläsare och navigera till https://127.0.0.1:8000; resultatet ska se ut som följer:
Du förstår nu hur du skapar ett enkelt API med FastAPI.
Bygga och träna Machine Learning-modellen
Utan att samla in eller analysera någon data, tränar vi bara en enkel modell. Dessa är inte relaterade till utbyggnaden av modeller och är inte väsentliga för det aktuella ämnet.
En modell baserad på Iris-datauppsättningen kan installeras med densamma neurala nätverk installationsmetod.
Och vi kommer att göra just det: ladda ner Iris -datauppsättning och träna modellen. Det kommer inte att vara enkelt. Börja med att skapa en fil med namnet jaysmlmodel.py.
I den gör du följande:
- Importer — Du behöver pandor, scikit-RandomForecastClassifier, learn's pydantics BaseModel (du kommer att upptäcka varför i följande steg) och joblib för att lagra och ladda modeller.
- Deklarera en IrisSpecies-klass som ärver från basmodellen. Den här klassen innehåller bara fält som behövs för att prognostisera en enda blomart (mer om det i nästa avsnitt)
- Skapa en klass. IrisModel är ett modelltränings- och prediktionsverktyg.
- Deklarera en metod som heter _train model inom IrisModel. Den används för att träna modeller med hjälp av Random Forests-tekniken. Den tränade modellen returneras av proceduren.
- Deklarera en förutsagd artfunktion inuti IrisModel. Den används för att prognostisera baserat på 4 ingångsfaktorer (blommätningar). Både prognosen (blommarter) och förutsägelsesannolikheten returneras av algoritmen.
- Ändra konstruktorn i IrisModel så att den laddar Iris-datauppsättningen och tränar modellen om den saknas i mappen. Detta löser problemet med att upprepade gånger träna nya modeller. Joblib-biblioteket används för att ladda och spara modeller.
Här är hela koden:
Jag hoppas att listan ovan och kommentarerna gjorde det lätt att förstå även om det var en ansenlig mängd kod att skapa. Nu när denna modell har utvecklats, låt oss publicera dess förutsägelsemöjligheter över en REST API.
Bygger ett fullständigt REST API
Gå tillbaka till filen ml_model.py och rensa all data. Boilerplate kommer att vara i stort sett densamma som du hade tidigare, men vi bör börja om med en tom fil.
Du kommer bara att definiera en slutpunkt denna gång, vilket är den som används för att bestämma typen av blomma. IrisModel.predict species(), som deklarerades i föregående avsnitt, anropas av denna slutpunkt för att utföra förutsägelsen.
Förfrågningstypen är den andra stora förändringen. För att överföra parametrar i JSON snarare än URL, rekommenderas att du använder POST när du använder maskininlärning API: er.
Ovanstående mening kan ha låtit som skratt om du är en datavetare, men det är okej. För att designa och distribuera modeller behöver man inte nödvändigtvis vara expert på HTTP-förfrågningar och REST API:er.
Uppgifterna för ml model.py är få och enkla:
- Du måste importera följande från den tidigare skapade filen jaymlmodel.py: uvicorn, FastAPI, IrisModel och IrisSpecies.
- Skapa instanser av FastAPI och IrisModel.
- Deklarera en funktion på https://127.0.0.1:8000/predict för att göra förutsägelser.
- Metoden IrisModel.predict species() tar emot ett objekt av typen IrisSpecies, omvandlar det till en ordbok och returnerar det sedan. Avkastning är den förväntade klassen och den förutsagda sannolikheten.
- Använd uvicorn för att köra API.
Återigen, här är hela filens kod tillsammans med dess kommentarer:
Det är allt du behöver göra. I nästa steg, låt oss testa API:et.
Testar API
Skriv in följande rad igen i terminalen för att köra API:t: uvicorn ml_model:app –reload
Så här ser dokumentationssidan ut:
Så det var allt för idag. I delen efter detta, låt oss avsluta.
Slutsats
Idag har du lärt dig vad FastAPI är och hur du använder det, med både ett enkelt API-exempel och ett enkelt maskininlärningsexempel. Du har också lärt dig hur du skapar och visar API-dokumentation, samt hur du testar den.
Det är mycket för ett enda stycke, så bli inte förvånad om det krävs några läsningar för att förstå.
Lycklig kodning.
Kommentera uppropet