Xây Dựng Ứng Dụng Học Máy với FastAPI và Chuẩn Bị cho Observability trên Kubernetes
Lê Lân
1
The Observability Blueprint: Xây Dựng Ứng Dụng ML Có Quan Sát Trên Kubernetes Với OpenTelemetry – Phần 1
Mở Đầu
Trong thế giới phát triển phần mềm hiện đại, quan sát hệ thống (observability) là yếu tố không thể thiếu để đảm bảo ứng dụng hoạt động ổn định và hiệu quả. Chuỗi bài viết "The Observability Blueprint" sẽ hướng dẫn bạn cách tích hợp các công cụ mã nguồn mở như OpenTelemetry, Prometheus, Jaeger, Loki và Grafana để có cái nhìn toàn diện về một ứng dụng máy học (ML) khi được triển khai trên Kubernetes.
Trong phần đầu tiên này, chúng ta sẽ cùng nhau:
Xây dựng ứng dụng ML đơn giản bằng FastAPI
Tạo một mô hình Linear Regression dự đoán giá nhà
Biết cách chạy ứng dụng FastAPI phục vụ mô hình
Qua đó, bạn sẽ có nền tảng để hiểu về cách triển khai quan sát và giám sát trong các phần tiếp theo.
Phần 1: Xây Dựng Ứng Dụng Máy Học Đơn Giản Với FastAPI
👩💻 Chuẩn Bị Môi Trường
Trước tiên, cần đảm bảo bạn đã có sẵn:
Python phiên bản 3.8 trở lên
Kiến thức căn bản về Python và REST API
Trình quản lý gói pip được cập nhật
Lưu ý: Để tránh làm ảnh hưởng đến hệ thống Python toàn cục, hãy tạo một môi trường ảo bằng lệnh:
python3 -m venv venv
source venv/bin/activate # Trên Windows: venv\Scripts\activate
pip3 install --upgrade pip
Tạo file requirements.txt với nội dung:
fastapi==0.110.0
pydantic==1.10.14
uvicorn==0.29.0
scikit-learn==1.4.2
numpy==1.26.4
Cài đặt các thư viện:
pip3 install -r requirements.txt
🧠 Machine Learning Là Gì? Tại Sao Lại Là Linear Regression?
Machine Learning (máy học) là nghệ thuật và khoa học giúp máy tính tự học các mẫu từ dữ liệu, thay vì dựa vào các luật cố định viết bằng tay.
Trong ví dụ này, chúng ta dùng Linear Regression – mô hình ML đơn giản, giả định mối quan hệ tuyến tính giữa biến đầu vào và đầu ra. Ví dụ cụ thể: diện tích nhà càng lớn thì giá nhà càng cao.
Mã nguồn huấn luyện mô hình
# train_model.py
import numpy as np
import pickle
from sklearn.linear_model import LinearRegression
# Bộ dữ liệu mẫu: diện tích (foot vuông) và giá nhà tương ứng ($)
X = np.array([[500], [1000], [1500], [2000], [2500]])
y = np.array([100000, 150000, 200000, 250000, 300000])
# Huấn luyện mô hình Linear Regression
model = LinearRegression()
model.fit(X, y)
# Lưu mô hình thành file .pkl để dùng về sau
withopen("house_price_model.pkl", "wb") as f:
pickle.dump(model, f)
print("Model trained and saved as 'house_price_model.pkl'")
Chú ý: File house_price_model.pkl lưu trữ mô hình đã huấn luyện, sẽ được chúng ta tải vào ứng dụng web.
⚡ Phục Vụ Mô Hình Qua FastAPI
Tại sao chọn FastAPI?
FastAPI là một framework web Python hiện đại, ưu tiên tốc độ và trải nghiệm lập trình viên tuyệt vời nhờ tích hợp Pydantic và Starlette. Nó cũng hỗ trợ tự động tạo tài liệu API với Swagger rất tiện lợi.
Mã nguồn ứng dụng FastAPI
# app.py
from fastapi import FastAPI, Request
from pydantic import BaseModel
import pickle
import numpy as np
import logging
# Cấu hình logging
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
app = FastAPI()
# Tải mô hình đã huấn luyện
withopen("house_price_model.pkl", "rb") as f:
model = pickle.load(f)
@app.get("/")
defread_root(request: Request):
return {"message": "House Price Prediction API is live!"}
Chúc mừng bạn! Bạn đã tự tay xây dựng thành công một API dự đoán giá nhà sử dụng máy học đơn giản.
Kết Luận
Trong phần đầu tiên này, chúng ta đã:
Tiếp cận khái niệm máy học và mô hình Linear Regression
Huấn luyện và lưu mô hình dự đoán giá nhà
Xây dựng một ứng dụng FastAPI phục vụ mô hình qua REST API cơ bản
Phần tiếp theo sẽ dẫn dắt bạn cách dockerize ứng dụng để sẵn sàng triển khai trên Kubernetes, đồng thời bắt đầu tích hợp quan sát (instrumentation) bằng OpenTelemetry.
Hãy tiếp tục theo dõi để biến ứng dụng ML của bạn thành một hệ thống có thể quan sát và vận hành chuyên nghiệp!
Tham Khảo
Sebastian Raschka, Python Machine Learning, Packt Publishing, 2015.