ML-mallien lataaminen ja tarjoilu
joblib/keras-mallin lataaminen käynnistyksen yhteydessä, säieturvallinen päättely, eräennustamisen päätepisteet.
ML-mallien lataaminen ja tarjoilu on ilmainen Oppikaa tekoälyä Pythonilla-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Oppikaa tekoälyä Pythonilla-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Oppikaa tekoälyä Pythonilla-kurssilla on yhteensä 4 oppituntia.
Latausongelma
Mallin lataaminen levyltä on hidasta. Jos lataatte sen jokaisella pyynnöllä uudelleen, viive kasvaa valtavasti. Ratkaisu on ladata malli kerran käynnistyksen yhteydessä ja käyttää sitä uudelleen kaikissa pyynnöissä.
startup-tapahtuma
@app.on_event("startup")-koukku suoritetaan kerran palvelimen käynnistyessä, joten se on täydellinen paikka mallin lataamiseen ennen ensimmäisenkään pyynnön saapumista.
from fastapi import FastAPI
import joblib
app = FastAPI()
@app.on_event("startup")
def load_model():
app.state.model = joblib.load("model.joblib")app.state säieturvalliseen tallennukseen
app.state on suositeltu paikka jaettujen olioiden, kuten mallin, säilyttämiseen. Kun olio tallennetaan kerran käynnistyksen yhteydessä ja sitä vain luetaan pyyntöjen aikana, vältetään muuttuviin moduulitason globaaleihin muuttujiin liittyvät ongelmat.
from fastapi import Request
@app.post("/predict")
def predict(req: PredictRequest, request: Request):
model = request.app.state.model
return {"prediction": model.predict([req.features])[0]}Miksi ei globaalia muuttujaa?
Pelkkä moduulitason globaali muuttuja toimii, mutta se sitoo lataamisen tuontiaikaan ja vaikeuttaa testaamista tai olion vaihtamista. app.state sitoo olion elinkaaren sovellukseen, mikä on selkeämpi ja FastAPI:n suosittelema toimintatapa.
Moderni lifespan-lähestymistapa
Uudemmissa FastAPI-versioissa lifespan-kontekstinhallinta korvaa on_event-mekanismin ja käsittelee sekä käynnistyksen että sammutuksen yhdessä paikassa.
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app):
app.state.model = joblib.load("model.joblib") # startup
yield
app.state.model = None # shutdown
app = FastAPI(lifespan=lifespan)Mallin esilämmitys
Ensimmäinen ennuste on usein hidas, koska kehykset alustavat osan toiminnallisuudesta laiskasti vasta ensimmäisellä kutsulla. Esilämmitä malli käynnistyksen yhteydessä tekemällä valete-ennuste, jotta ensimmäinen oikea käyttäjäpyyntö käsitellään heti nopeasti.
@app.on_event("startup")
def load_and_warm():
app.state.model = joblib.load("model.joblib")
app.state.model.predict([[0.0, 0.0, 0.0, 0.0]]) # warm-upMiksi esilämmitys on tärkeää?
Ilman esilämmitystä ensimmäinen pyyntö käyttöönoton jälkeen voi olla moninkertaisesti hitaampi, mikä heikentää hännän viivettä ja saattaa jopa aiheuttaa health check -tarkistusten epäonnistumisen. Yksi valepäättely käynnistyksen yhteydessä siirtää tämän kustannuksen kriittisen suorituspolun ulkopuolelle.
Eräennusteiden päätepiste
Monen rivin ennustaminen yhdellä kutsulla on paljon tehokkaampaa kuin useat yksittäiset kutsut, koska mallit vektoroivat käsittelyn erän yli. Hyväksy lista piirrevektoreita ja palauta lista ennusteita.
class BatchRequest(BaseModel):
items: list[list[float]]
@app.post("/predict/batch")
def predict_batch(req: BatchRequest, request: Request):
model = request.app.state.model
preds = model.predict(req.items)
return {"predictions": preds.tolist()}Yksittäinen ennuste vai erä
- Yksittäinen: yksi syöte, pienin viive kutsua kohden ja yksinkertaiset asiakkaat.
- Erä: useita syötteitä kerralla, huomattavasti suurempi läpimeno ja sopii erinomaisesti offline-pisteytykseen.
Tarjoamalla molemmat vaihtoehdot voidaan palvella sekä reaaliaikaisia että massakäsittelyn käyttötapauksia.
Tilan lukeminen päätepisteissä
Jokainen päätepiste lukee jaetun mallin osoitteen request.app.state.model kautta eikä lataa sitä uudelleen, joten kaikki pyynnöt käyttävät samaa muistissa olevaa instanssia.
Kokoaminen
Tuotantovalmis ratkaisu lataa ja esilämmittää mallin lifespan/startup-vaiheessa, tallentaa sen app.state-olioon ja tarjoaa sekä yksittäisiä että erä-ennusteiden päätepisteitä, jotka lukevat mallin tilasta. Näin viive pienenee ja läpimeno maksimoituu.
Pikatesti
Testatkaa mallien tarjoiluun liittyvät tietonne.
Kertaus
Latasitte mallin kerran startup/lifespan-vaiheen kautta, tallensitte sen app.state-olioon säieturvallista uudelleenkäyttöä varten, lisäsitte esilämmitystä varten valepäättelyn ja tarjositte läpimenoa parantavan erä-päätepisteen. Seuraavaksi API paketoidaan Dockerilla.
Opi Python tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 53
- Oppitunnit
- 225
Usein kysytyt kysymykset
Onko oppitunti ”ML-mallien lataaminen ja tarjoilu” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Oppikaa tekoälyä Pythonilla-oppimispolun 3 oppituntia, myös oppitunnin “ML-mallien lataaminen ja tarjoilu”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppikaa tekoälyä Pythonilla-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”ML-mallien lataaminen ja tarjoilu”?
joblib/keras-mallin lataaminen käynnistyksen yhteydessä, säieturvallinen päättely, eräennustamisen päätepisteet. Harjoittelet Oppikaa tekoälyä Pythonilla-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Oppikaa tekoälyä Pythonilla-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Oppikaa tekoälyä Pythonilla-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”ML-mallien lataaminen ja tarjoilu”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Oppikaa tekoälyä Pythonilla-oppitunnilla?
Kyllä. Jokainen Oppikaa tekoälyä Pythonilla-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- FastAPI-perusteet ML-insinööreille
- Pydantic-skeemat pyynnöille ja vastauksille
- ML-mallien lataaminen ja tarjoilu
- Mallirajapinnan kontittaminen Dockerilla