استفاده از FastAPI برای مدلهای یادگیری ماشین
در دنیای علم داده و یادگیری ماشین، پس از آموزش یک مدل، گام مهم بعدی، استقرار (Deployment) آن است تا بتوان از آن در برنامههای کاربردی واقعی استفاده کرد. FastAPI یک فریمورک وب مدرن و سریع برای پایتون است که به طور خاص برای ساخت APIها طراحی شده و به خوبی با مدلهای یادگیری ماشین ادغام میشود. این مقاله به بررسی نحوه استفاده از FastAPI برای استقرار مدلهای یادگیری ماشین میپردازد.
چرا FastAPI؟
FastAPI نسبت به سایر فریمورکهای وب پایتون مانند Flask و Django، مزایای متعددی دارد که آن را به گزینهای ایدهآل برای استقرار مدلهای یادگیری ماشین تبدیل میکند:
- سرعت: FastAPI بر اساس Starlette و Pydantic ساخته شده است و به دلیل استفاده از کتابخانههای Asynchronous، عملکرد بسیار بالایی دارد.
- سهولت استفاده: FastAPI دارای API ساده و شهودی است که یادگیری و استفاده از آن را آسان میکند.
- اعتبارسنجی دادهها: Pydantic به طور خودکار دادههای ورودی را اعتبارسنجی میکند و از بروز خطا جلوگیری میکند.
- تولید خودکار مستندات: FastAPI به طور خودکار مستندات API را با استفاده از OpenAPI و Swagger UI تولید میکند.
- پشتیبانی از Type Hints: استفاده از Type Hints در FastAPI به بهبود خوانایی و نگهداری کد کمک میکند.
پیشنیازها
قبل از شروع، مطمئن شوید که پیشنیازهای زیر را نصب کردهاید:
- پایتون 3.7 یا بالاتر
- pip
برای نصب FastAPI و Uvicorn (سرور ASGI که FastAPI را اجرا میکند) از دستورات زیر استفاده کنید:
pip install fastapi uvicorn
یک مثال ساده: استقرار یک مدل خطی
برای درک بهتر نحوه استفاده از FastAPI برای استقرار مدلهای یادگیری ماشین، یک مثال ساده را بررسی میکنیم. فرض کنید یک مدل خطی ساده برای پیشبینی قیمت خانه بر اساس متراژ آن آموزش دادهایم. کد پایتون زیر نحوه استقرار این مدل با استفاده از FastAPI را نشان میدهد:
from fastapi import FastAPI
from pydantic import BaseModel
import numpy as np
# فرض کنید مدل خطی شما به این صورت تعریف شده است
# y = 200000 + 500 * x (x: متراژ خانه، y: قیمت خانه)
def predict_price(square_footage: float) -> float:
return 200000 + 500 * square_footage
app = FastAPI()
class InputData(BaseModel):
square_footage: float
@app.post("/predict")
async def predict(data: InputData):
price = predict_price(data.square_footage)
return {"price": price}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
در این کد:
- `FastAPI()` یک نمونه از برنامه FastAPI ایجاد میکند.
- `InputData` یک مدل Pydantic است که دادههای ورودی را تعریف میکند (در این مورد، متراژ خانه).
- `@app.post(“/predict”)` یک endpoint POST را در مسیر `/predict` تعریف میکند.
- تابع `predict` دادههای ورودی را دریافت میکند، قیمت خانه را با استفاده از مدل خطی پیشبینی میکند و نتیجه را به صورت JSON برمیگرداند.
- `uvicorn.run(app, host=”0.0.0.0″, port=8000)` برنامه FastAPI را روی پورت 8000 اجرا میکند.
برای اجرای این کد، آن را در یک فایل پایتون (مثلاً `main.py`) ذخیره کنید و سپس از دستور زیر در ترمینال استفاده کنید:
uvicorn main:app --reload
گزینه `–reload` باعث میشود که سرور به طور خودکار پس از تغییر کد، ریاستارت شود.
اکنون میتوانید با استفاده از یک ابزار مانند `curl` یا Postman، یک درخواست POST به آدرس `http://localhost:8000/predict` ارسال کنید. به عنوان مثال:
curl -X POST -H "Content-Type: application/json" -d '{"square_footage": 100}' http://localhost:8000/predict
این درخواست یک پاسخ JSON مانند زیر برمیگرداند:
{"price": 250000.0}
استقرار مدلهای پیچیدهتر
برای استقرار مدلهای یادگیری ماشین پیچیدهتر، میتوانید از کتابخانههایی مانند scikit-learn، TensorFlow یا PyTorch استفاده کنید. مراحل کلی به شرح زیر است:
- بارگذاری مدل: مدل آموزشدیده را در برنامه FastAPI بارگذاری کنید.
- تعریف مدل ورودی: یک مدل Pydantic برای تعریف دادههای ورودی ایجاد کنید.
- تعریف Endpoint: یک endpoint برای دریافت دادههای ورودی و پیشبینی با استفاده از مدل ایجاد کنید.
- پیشپردازش دادهها: دادههای ورودی را قبل از ارسال به مدل، پیشپردازش کنید (مانند نرمالسازی یا تبدیل ویژگیها).
- پیشبینی: از مدل برای پیشبینی خروجی استفاده کنید.
- پسپردازش دادهها: خروجی مدل را پسپردازش کنید (مانند تبدیل برچسبها یا مقیاسبندی).
- برگرداندن نتیجه: نتیجه را به صورت JSON برگردانید.
مدیریت خطاها
در هنگام استقرار مدلهای یادگیری ماشین، مدیریت خطاها بسیار مهم است. FastAPI به شما امکان میدهد تا به راحتی خطاها را مدیریت کنید و پاسخهای مناسبی را به کاربر برگردانید. میتوانید از استثنائات (Exceptions) و HTTP Error Codes برای مدیریت خطاها استفاده کنید.
مستندات API
FastAPI به طور خودکار مستندات API را با استفاده از OpenAPI و Swagger UI تولید میکند. برای مشاهده مستندات API، به آدرس `http://localhost:8000/docs` در مرورگر خود بروید. این مستندات به شما امکان میدهد تا endpointهای API را مشاهده کنید، دادههای ورودی و خروجی را بررسی کنید و API را تست کنید.
نکات پیشرفته
- استفاده از Asynchronous Programming: برای بهبود عملکرد، از Asynchronous Programming در FastAPI استفاده کنید.
- استفاده از Dependency Injection: از Dependency Injection برای مدیریت وابستگیها و بهبود تستپذیری کد استفاده کنید.
- استفاده از Middleware: از Middleware برای انجام کارهای مشترک مانند احراز هویت و ثبت وقایع استفاده کنید.
- استقرار در محیط Production: برای استقرار در محیط Production، از یک سرور ASGI مانند Gunicorn یا uvicorn با پیکربندی مناسب استفاده کنید.
نتیجهگیری
FastAPI یک فریمورک وب قدرتمند و آسان برای استفاده است که به خوبی با مدلهای یادگیری ماشین ادغام میشود. با استفاده از FastAPI، میتوانید به راحتی APIهایی را برای استقرار مدلهای خود ایجاد کنید و آنها را در برنامههای کاربردی واقعی به کار ببرید. این مقاله یک معرفی جامع به استفاده از FastAPI برای مدلهای یادگیری ماشین ارائه داد و امیدواریم که به شما در شروع کار با این فریمورک کمک کند.

بدون دیدگاه