1. 12:27 14/10/2026
Khi đưa một mô hình học máy từ giai đoạn thử nghiệm vào sản xuất, việc xây dựng một API nhẹ, dễ bảo trì và có khả năng mở rộng là bước quan trọng. FastAPI kết hợp với Docker cung cấp giải pháp tối ưu nhờ hiệu năng cao, tài liệu tự động (OpenAPI) và khả năng đóng gói nhất quán trên mọi môi trường.
**1. Chuẩn bị mã nguồn**
- Tách biệt logic dự đoán vào một module riêng (ví dụ `model_inference.py`).
- Sử dụng Pydantic để định nghĩa schema request/response, giúp kiểm tra dữ liệu đầu vào tự động.
- Viết hàm `load_model()` chỉ chạy một lần khi container khởi động, tránh tải lại mô hình cho mỗi request.
**2. Viết ứng dụng FastAPI**
```python
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import joblib
import numpy as np
app = FastAPI(title="ML Model API")
class InputData(BaseModel):
features: list[float]
model = None
@app.on_event("startup")
def load_model():
global model
model = joblib.load("model.pkl")
@app.post("/predict")
def predict(data: InputData):
try:
arr = np.array(data.features).reshape(1, -1)
pred = model.predict(arr)
return {"prediction": pred.tolist()}
except Exception as e:
raise HTTPException(status_code=400, detail=str(e))
```
**3. Dockerfile tối giản**
```Dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
```
**4. Build và chạy**
- `docker build -t ml-api:latest .`
- `docker run -d -p 8000:8000 ml-api:latest`
**5. Một số lưu ý vận hành**
- Sử dụng health‑check endpoint (`/health`) để Kubernetes hoặc Docker Swarm giám sát sự sống của container.
- Giới hạn bộ nhớ và CPU trong `docker run --memory=512m --cpus=1` để tránh tranh chấp tài nguyên.
- Bật logging chuẩn (stdout/stderr) và tích hợp với ELK/Grafana Loki để tập trung log.
- Cập nhật mô hình bằng cách build lại image hoặc mount volume chứa `model.pkl` và reload qua signal `SIGHUP`.
Với quy trình trên, đội ngũ có thể đẩy mô hình lên production nhanh chóng, đảm bảo tính nhất quán, dễ dàng mở rộng khi lượng request tăng lên.