Et aspekt af scenariet er at skabe en maskinlæringsmodel. Det skal være brugbart i den virkelige verden og tilgængeligt for forbrugere og udviklere.
Den enkleste og mest populære måde at implementere maskinlæringsmodeller på er at indkapsle dem i en REST API.
Med et populært bibliotek kaldet FastAPI, er det præcis, hvad vi vil opnå i dag.
Men hvad er FastAPI?
FastAPI Python-webrammen blev skabt fra bunden for at drage fordel af moderne Python-funktioner.
Til asynkron, samtidig kommunikation med klienter overholder den ASGI-standarden, mens den også er i stand til at bruge WSGI.
Slutpunkter og ruter kan begge anvende asynkrone funktioner. Derudover muliggør FastAPI den produktive oprettelse af webapps i typeantydet, ren, moderne Python-kode.
FastAPI's vigtigste use case er, som navnet antyder, at skabe API-endepunkter.
Brug af OpenAPI-standarden, som inkluderer en interaktiv Swagger-brugergrænseflade, eller at levere Python-ordbogsdata som JSON er begge enkle måder at opnå dette på. FastAPI er dog ikke kun til API'er.
Det kan bruges til at tilbyde standardwebsider ved hjælp af Jinja2-skabelonmotoren og til at betjene apps, der bruger WebSockets, foruden stort set alt, hvad en webramme kan gøre.
I denne artikel udvikler vi en ligetil maskinlæringsmodel og bruger derefter FastAPI til at implementere den. Lad os begynde.
Installation af FastAPI og oprettelse af den første API
Installation af biblioteket og en ASGI-server er påkrævet først; enten Uvuicorn eller Hypercorn vil virke. Det virker ved at indtaste følgende kommando i terminalen:
Nu hvor API'en er blevet oprettet, kan du bruge din foretrukne kodeeditor og gennemse den. Opret et Python-script kaldet ml_model.py for at komme i gang. Du er velkommen til at give dit et andet navn, men af hensyn til dette indlæg vil jeg referere til denne fil som ml_model.py.
For at oprette en ligetil API med to slutpunkter skal du udføre følgende opgaver:
- Importer FastAPI- og Uvicorn-bibliotekerne.
- Konfigurer en FastAPI-klasseinstans.
- Deklarer den første rute, som på indekssiden producerer et ligetil JSON-objekt.
- Deklarer den anden rute, som giver et ligetil JSON-objekt med en tilpasset besked. Navneparameteren er taget direkte fra URL'en (f.eks. https://127.0.0.1:8000/Jay).
- Brug Uvicorn til at køre API'en.
Implementering af disse fem trin er vist i den følgende kodebit, dvs. oprettelse af en simpel API
Helt færdig! Lad os starte vores API med det samme. Åbn et terminalvindue ved siden af filen ml model.py for at opnå dette. Indtast derefter følgende:
Enter-tasten. Inden vi går videre, lad os afkræfte denne påstand. Den første app gør brug af Python-filnavnet alene uden udvidelsen. Den anden app skal have samme navn som din FastAPI-instans.
Ved at bruge -reload fortæller du API'en, at du ønsker, at den automatisk skal genindlæses, når du gemmer filen i stedet for at starte fra bunden.
Start nu en browser og naviger til https://127.0.0.1:8000; resultatet skal se ud som følger:
Du forstår nu, hvordan du opretter en simpel API ved hjælp af FastAPI.
Opbygning og træning af Machine Learning-modellen
Uden at indsamle eller analysere nogen data, træner vi blot en simpel model. Disse er ikke relateret til implementeringen af modeller og er ikke afgørende for det aktuelle emne.
En model baseret på Iris-datasættet kan installeres ved hjælp af det samme neurale netværk installationsmetode.
Og vi gør netop det: download Iris datasæt og træne modellen. Det bliver ikke nemt. For at begynde skal du lave en fil med navnet jaysmlmodel.py.
I den skal du gøre følgende:
- Importer — Du skal bruge pandaer, scikit-RandomForecastClassifier, learn's pydantics BaseModel (du vil opdage hvorfor i det følgende trin) og joblib til lagring og indlæsning af modeller.
- Erklær en IrisSpecies-klasse, der arver fra basismodellen. Denne klasse indeholder kun felter, der er nødvendige for at forudsige en enkelt blomsterart (mere om det i næste afsnit)
- Opret en klasse. IrisModel er et modeltrænings- og forudsigelsesværktøj.
- Deklarer en metode med navnet _train model i IrisModel. Det bruges til at træne modeller ved hjælp af Random Forests-teknikken. Den trænede model returneres af proceduren.
- Erklærer en forudsagt artsfunktion inde i IrisModel. Det bruges til at forecaste baseret på 4 inputfaktorer (blomstermålinger). Både prognosen (blomsterart) og forudsigelsessandsynligheden returneres af algoritmen.
- Skift konstruktøren i IrisModel, så den indlæser Iris-datasættet og træner modellen, hvis den mangler i mappen. Dette løser problemet med gentagne gange at træne nye modeller. Joblib-biblioteket bruges til at indlæse og gemme modeller.
Her er hele koden:
Jeg håber, at ovenstående liste og kommentarerne gjorde det let at forstå, selvom dette var en betydelig mængde kode at oprette. Nu hvor denne model er blevet udviklet, lad os offentliggøre dens forudsigelsesmuligheder over en REST-API.
Konstruktion af en fuld REST API
Vend tilbage til filen ml_model.py og rens alle data. Boilerpladen vil i det væsentlige være den samme, som du havde før, men vi bør starte forfra med en tom fil.
Du vil kun definere ét endepunkt denne gang, som er det, der bruges til at bestemme typen af blomst. IrisModel.predict species(), som blev erklæret i det foregående afsnit, kaldes af dette endepunkt for at udføre forudsigelsen.
Anmodningstypen er den anden store ændring. For at overføre parametre i JSON i stedet for URL, anbefales det, at du bruger POST, når du bruger machine learning API'er.
Ovenstående sætning kan have lydt som volapyk, hvis du er en dataforsker, men det er okay. For at designe og implementere modeller behøver man ikke nødvendigvis at være ekspert i HTTP-anmodninger og REST API'er.
Opgaverne for ml model.py er få og ligetil:
- Du skal importere følgende fra den tidligere oprettede jaymlmodel.py-fil: uvicorn, FastAPI, IrisModel og IrisSpecies.
- Opret forekomster af FastAPI og IrisModel.
- Erklær en funktion på https://127.0.0.1:8000/predict for at lave forudsigelser.
- Metoden IrisModel.predict species() modtager et objekt af typen IrisSpecies, transformerer det til en ordbog og returnerer det derefter. Afkast er den forventede klasse og den forventede sandsynlighed.
- Brug uvicorn til at udføre API'en.
Endnu en gang, her er hele filens kode sammen med dens kommentarer:
Det er alt, du behøver at gøre. I det næste trin, lad os teste API'en.
Test af API
Indtast følgende linje i terminalen igen for at udføre API'en: uvicorn ml_model:app –reload
Sådan ser dokumentationssiden ud:
Så det var det for i dag. Lad os konkludere i delen efter dette.
Konklusion
I dag lærte du, hvad FastAPI er, og hvordan du bruger det, ved at bruge både et simpelt API-eksempel og et simpelt maskinlæringseksempel. Du har også lært, hvordan du opretter og ser API-dokumentation, samt hvordan du tester den.
Det er meget for et enkelt stykke, så bliv ikke overrasket, hvis det kræver et par læsninger at forstå ordentligt.
Glad kodning.
Giv en kommentar