Implementarea unui model FastAI cu FastAPI
- 1 minute de citit
- 5 exemple de cod în Python, Shell și JSON
Disponibil și în English
Pe această pagină
Salut tuturor 👋,
În acest articol scurt vă arăt cum să implementați un model FastAI folosind FastAPI.
Este o continuare a articolului meu anterior de aici și se bazează parțial pe această lecție FastAI:
https://www.youtube.com/watch?v=F4tvM4Vb3A0
Exportarea modelului
Înainte să creăm API-ul, trebuie să exportăm modelul ca fișier pickle.
Adăugați learn.export("<path>/cat_or_dog.pkl") cu calea absolută completă de export la finalul scriptului:
# ...learn = vision_learner(dls, resnet34, metrics=error_rate)learn.fine_tune(1)learn.export("C:\\Users\\nutiu\PycharmProjects\\fastaiIntro\cat_or_dog.pkl")Implementarea cu FastAPI
Să creăm un proiect nou și să instalăm dependențele necesare:
pip install fastaipip install fastapipip install python-multipartpip install "uvicorn[standard]"Acum creați un fișier Python main.py pe care îl vom folosi pentru a defini aplicația FastAPI. Rețineți că acesta este doar un tutorial scurt,
nu este o introducere completă în FastAPI; puteți găsi mai multe detalii despre el aici.
Handler-ul FastAPI este un simplu endpoint POST care primește un fișier și returnează un răspuns JSON cu predicția. Dacă fișierul nu este o imagine, returnează un răspuns 400.
Funcția is_cat este necesară pentru importul modelului; dacă nu este definită, modelul nu va fi încărcat corect.
import PILfrom fastai.learner import load_learnerfrom fastapi import FastAPI, UploadFile, HTTPExceptionapp = FastAPI()def is_cat(x): return x[0].isupper()cat_or_dog_model = load_learner(open("cat_or_dog.pkl", "rb"))@app.post("/predict/cat-or-dog")async def post_predict_cat_or_dog(file: UploadFile): try: file_contents = await file.read() is_cat, _, confidence = cat_or_dog_model.predict(file_contents) return { "is_cat": True if is_cat == "True" else False, "confidence": float(confidence[1]) } except PIL.UnidentifiedImageError as e: raise HTTPException(status_code=400, detail="File is not an image")if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)Gata, acum puteți rula aplicația folosind python main.py și o puteți testa cu curl:
curl -X 'POST' \ 'http://localhost:8000/predict/cat-or-dog' \ -H 'accept: application/json' \ -H 'Content-Type: multipart/form-data' \ -F '[email protected];type=image/jpeg'Ar trebui să primiți un răspuns similar cu acesta:
{ "is_cat": true, "confidence": 1}Pe mașina mea, timpul de răspuns este de aproximativ 70ms.
Concluzie
Am prezentat o modalitate simplă de a implementa un model FastAI folosind FastAPI, prin exportarea acestuia într-un fișier pickle și apoi încărcarea lui în API.
O modalitate mai avansată de a implementa modelul ar fi folosirea ONNX Runtime. Alte modalități de implementare a modelului sunt, de asemenea, prezentate de Jeremy în videoclipul de mai sus.
Mulțumesc pentru lectură! 📚🫶
Dacă doriți să fiți anunțat când public conținut nou, vă rog să vă abonați la newsletter-ul meu 📰.