1. 12:48 10/10/2026
**Tại sao quy trình có thể tái hiện lại quan trọng**
Trong phát triển phần mềm, khả năng tái bản là tiêu chuẩn. Với học máy (ML), cùng một quy trình làm việc không chỉ đảm bảo kết quả ổn định mà còn giúp việc gỡ lỗi, kiểm tra và triển khai trở nên dễ dàng hơn. Hướng dẫn này trình bày một quy trình có thể tái hiện từ đầu đến cuối, sử dụng các thư viện Python phổ biến, công cụ ML-Ops mã nguồn mở và quy trình CI/CD đơn giản.
**1. Thiết lập môi trường làm việc có thể tái hiện**
- Sử dụng `conda` hoặc `docker` để tạo hình ảnh có thể tái hiện được.
- Lưu trữ tất cả các phụ thuộc trong tệp `environment.yml` (hoặc `requirements.txt`).
- Commit tệp Docker/Dockerfile vào cùng một kho lưu trữ với mã nguồn.
**2. Làm sạch và khám phá dữ liệu**
```python
import pandas as pd
from sklearn.model_selection import train_test_split
# Tải dữ liệu
df = pd.read_csv('data/raw.csv')
# Xử lý giá trị thiếu
df = df.dropna()
# Mã hóa các biến phân loại
df['target'] = pd.Categorical(df['target'])
# Chia dữ liệu
X_train, X_test, y_train, y_test = train_test_split(
df.drop('target', axis=1), df['target'], test_size=0.2, random_state=42)
```
**3. Lưu trữ các bước xử lý dữ liệu**
- Sử dụng `pandas` `to_parquet` để ghi dữ liệu đã xử lý vào kho lưu trữ đối tượng (ví dụ: AWS S3, GCS).
- Thêm tệp README ngắn ghi lại tên cột, loại dữ liệu và bất kỳ phép biến đổi nào đã áp dụng.
**4. Xây dựng mô hình một cách có thể tái hiện**
```python
from sklearn.ensemble import RandomForestClassifier
from mlflow import log_param, log_metric, log_model
model = RandomForestClassifier(n_estimators=200, random_state=42)
model.fit(X_train, y_train)
# Ghi lại siêu tham số và mô hình bằng MLflow
log_param('n_estimators', 200)
log_param('random_state', 42)
log_model(model, 'models')
```
**5. Định lượng và lưu trữ các phép biến đổi**
- Sử dụng `sklearn.preprocessing` (bộ chuẩn hóa, bộ mã hóa OneHot) và ghi lại chúng bằng `joblib`.
- Lưu trữ các phép biến đổi cùng với dữ liệu đã xử lý để đảm bảo tính nhất quán trong quá trình suy luận.
**6. Tích hợp CI/CD để tự động hóa thử nghiệm**
- Thêm một bước hành động GitHub Actions chạy các kiểm tra đơn vị, kiểm tra chất lượng dữ liệu và xác thực mô hình trên mỗi lần đẩy.
- Tự động triển khai mô hình đã ghi lại lên điểm cuối (ví dụ: Flask, FastAPI) chỉ sau khi tất cả các kiểm tra này vượt qua.
**7. Giám sát và ghi lại**
- Sử dụng `prometheus` để theo dõi độ trễ dự đoán.
- Thiết lập `Grafana` để trực quan hóa sự sụt giảm hiệu suất.
- Ghi lại các độ lệch dữ liệu bằng cách sử dụng `Great Expectations` để phát hiện sự thay đổi.
**Lời khuyên thực tế**
- Commit các tham số của tệp `random_state` vào kho lưu trữ để đảm bảo tính tái bản.
- Sử dụng nhãn phiên bản trong kho lưu trữ đối tượng (ví dụ: `model_v1`) để truy xuất các mô hình cũ.
- Tự động hóa việc dọn dẹp các phiên bản cũ để tránh tình trạng lộn xộn.
Bằng cách tuân thủ các bước trên, bạn sẽ có một quy trình học máy có thể tái hiện, dễ bảo trì và sẵn sàng cho sản xuất, sẵn sàng hỗ trợ các dự án quy mô lớn và hợp tác giữa các nhóm.