Trong lĩnh vực học máy, việc xây dựng một mô hình dự đoán chính xác chỉ là một phần của quá trình. Để mô hình có thể phục vụ người dùng hoặc tích hợp vào hệ thống lớn, nó cần được triển khai dưới dạng một API. FastAPI, một framework web hiện đại cho Python, đang nổi lên như một lựa chọn lý tưởng để hiện thực hóa điều này nhờ tốc độ xử lý nhanh, hỗ trợ async và khả năng tích hợp dễ dàng với các thư viện học máy.
Bài viết này sẽ hướng dẫn bạn từng bước chuyển một mô hình học máy đã huấn luyện thành API thực tế bằng FastAPI. Nếu bạn đã từng thử triển khai với Flask (Hướng dẫn xây dựng API dự đoán bằng Flask + ML model), thì FastAPI sẽ cho bạn thấy sự khác biệt về hiệu suất và khả năng mở rộng.
Mô tả bài toán
Mục tiêu là xây dựng một API dự đoán giá nhà từ các thông tin đầu vào như diện tích, số phòng ngủ, số phòng tắm… bằng mô hình học máy đã huấn luyện (Linear Regression). API sẽ nhận dữ liệu JSON, xử lý dữ liệu, đưa vào mô hình và trả về kết quả dự đoán.
Pipeline thực hiện gồm:
- Tải và chuẩn bị mô hình học máy.
- Xây dựng API bằng FastAPI.
- Tạo endpoint nhận dữ liệu và trả kết quả.
- Test API bằng Postman hoặc cURL.
- Đóng gói và triển khai.
Cài đặt FastAPI và các thư viện cần thiết
Để xây dựng và chạy API, cần cài đặt FastAPI và một server ASGI như Uvicorn để phục vụ ứng dụng. Ngoài ra, các thư viện như scikit-learn, joblib, Pandas sẽ được sử dụng để xử lý mô hình và dữ liệu.
Cài đặt qua pip:
pip install fastapi uvicorn scikit-learn joblib pandas
Chuẩn bị mô hình học máy
Để API có thể dự đoán được đầu ra từ mô hình học máy, ta cần nạp mô hình đã huấn luyện bên trong ứng dụng. Bước này giúp tách rõ phần huấn luyện và phần API, giúp API nhẹ nhàng và phục vụ nhanh.
Tải file house_price_model.pkl từ repo iam-prabha/house-price-prediction. Tại đây!
Lưu vào thư mục model/ trong project của bạn.
Sử dụng joblib.load() để load mô hình.
import joblib
model = joblib.load('model/house_price_model.pkl')
Tạo ứng dụng FastAPI
Đây là bước chính để tạo một ứng dụng web có thể nhận yêu cầu từ client và trả kết quả dự đoán từ mô hình học máy.
Tạo file main.py với nội dung:
from fastapi import FastAPI
from pydantic import BaseModel
import model_loader
app = FastAPI()
class HouseData(BaseModel):
area: float
bedrooms: int
bathrooms: int
@app.get("/")
def read_root():
return {"message": "API dự đoán giá nhà đã sẵn sàng!"}
Tạo endpoint dự đoán
Endpoint /predict sẽ xử lý dữ liệu người dùng gửi đến, chạy mô hình để dự đoán và trả về kết quả.
Thêm vào file main.py:
@app.post("/predict")
def predict_price(data: HouseData):
input_data = [[data.area, data.bedrooms, data.bathrooms]]
predicted_price = model_loader.model.predict(input_data)
return {"predicted_price": predicted_price[0]}
Chạy ứng dụng FastAPI
Sau khi tạo ứng dụng và endpoint, bạn cần chạy server để phục vụ API. FastAPI sử dụng Uvicorn làm server ASGI.
Chạy server cục bộ:
uvicorn main:app --reload
Truy cập Swagger UI tại http://127.0.0.1:8000/docs để thử API qua giao diện trực quan.
Test API bằng Postman hoặc cURL
Kiểm tra API đảm bảo nó hoạt động đúng trước khi triển khai thực tế.
Gửi yêu cầu POST bằng cURL:
curl -X 'POST' \
'http://127.0.0.1:8000/predict' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"area": 120, "bedrooms": 3, "bathrooms": 2}'
Kết quả trả về:

