# MLflow: cách trả lời câu hỏi “model nào đang chạy?” bằng run, version và alias

> Ở site khách hàng, model tốt chưa đủ: bạn còn phải chỉ ra được bản nào đang chạy production, nó sinh ra từ đâu và bạn làm lại nó thế nào.

Bản gốc: https://fdetimes.net/vi/cong-cu/mlflow-theo-doi-thi-nghiem-va-model-registry/

Trong MLflow Model Registry, mỗi lần bạn đăng ký một model dưới cái tên đã tồn tại, số version tự tăng lên. Chi tiết nghe nhỏ, nhưng nó giải quyết câu hỏi khó chịu nhất trong một dự án ML ở site khách hàng: “Cái model đang chạy là bản nào?”

Với một FDE, câu hỏi đó thường đến vào lúc tệ nhất. Kết quả dự đoán tuần này lệch, khách muốn biết có ai vừa thay model không. Nếu câu trả lời nằm trong trí nhớ của một kỹ sư hoặc trong tên file kiểu `model_final_v2_fix.pkl`, bạn đang mất uy tín.

MLflow không phải công cụ hào nhoáng nhất bạn sẽ học. Nhưng nó là cách rẻ nhất để biến “tôi nghĩ là bản này” thành “đây là bản này, sinh ra từ run này, với các tham số này”.

## Hai việc MLflow làm: ghi lại và đánh số

MLflow tự giới thiệu là nền tảng AI engineering mã nguồn mở lớn nhất cho agent, LLM và model ML, phát hành theo giấy phép Apache 2.0. Trong phạm vi bài này, chỉ cần quan tâm hai phần: Tracking và Model Registry.

Tracking là phần quản lý mọi thí nghiệm và các thành phần của chúng. Mỗi lần train trở thành một run, và bạn ghi lại tham số, kết quả để sau này so sánh các lần chạy với nhau thay vì dò lại trong notebook.

Dashboard của MLflow liệt kê các experiment, các run bên trong, và với từng run thì có metric, tham số và artifact.

Model Registry là bước tiếp theo: một kho tập trung để nhiều người cùng quản lý toàn bộ vòng đời của một model. Ba khái niệm cần nắm là version tự tăng, alias trỏ tới một version cụ thể, và liên kết từ mỗi version về run, logged model hoặc notebook đã sinh ra nó.

## Một ví dụ: ba version, một chữ “champion”

Thử hình dung bạn đang làm model dự đoán khách hàng rời bỏ dịch vụ cho một công ty viễn thông. Tuần đầu, bạn chạy ba run với ba bộ tham số khác nhau. Mỗi run được ghi lên dashboard kèm metric đánh giá và file model.

Bạn đăng ký cả ba dưới cùng tên `churn-model`. Registry đánh số lần lượt version 1, 2 và 3, bạn không phải tự đặt tên. Version 2 cho kết quả tốt nhất, nên bạn gán cho nó alias `champion`, và hệ thống serving của khách luôn tải model qua alias này chứ không qua số version.

Toàn bộ luồng đó gói gọn trong vài chục dòng Python. Đoạn dưới đây là bản phác tối giản cho một run, giả sử bạn đã có sẵn dữ liệu train và test:

```python
import mlflow
from mlflow import MlflowClient
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score

# 1. Log một run: tham số, metric và chính model
with mlflow.start_run():
model = LogisticRegression(C=0.5).fit(X_train, y_train)
auc = roc_auc_score(y_test, model.predict_proba(X_test)[:, 1])
mlflow.log_param("C", 0.5)
mlflow.log_metric("auc", auc)
info = mlflow.sklearn.log_model(model, "model")

# 2. Đăng ký vào registry: cùng tên thì version tự tăng
mv = mlflow.register_model(info.model_uri, "churn-model")

# 3. Gán alias cho version được chọn
MlflowClient().set_registered_model_alias("churn-model", "champion", mv.version)

# 4. Phía serving chỉ biết alias, không biết số version
live_model = mlflow.pyfunc.load_model("models:/churn-model@champion")
```

Hai tuần sau, bạn train lại với dữ liệu mới và được version 4. Sau khi đánh giá, bạn chỉ cần gọi lại bước 3 với version 4. Tài liệu MLflow gọi alias là tham chiếu “mutable”, tức có thể trỏ sang version khác, nên bước promote chỉ là đổi một con trỏ, còn dòng code ở bước 4 giữ nguyên.

Giờ khách hỏi “model nào đang chạy?”. Bạn mở registry: `champion` đang trỏ tới version 4, và version 4 liên kết về run đã sinh ra nó, trong run có đủ tham số và metric. Nếu cần quay lại bản cũ, version 2 vẫn còn đó, và các thí nghiệm đã lưu cho phép bạn tái tạo kết quả cũ mà không phải đoán.

**Điểm mấu chốt:** Alias trả lời câu hỏi “bản nào đang chạy”, còn liên kết về run trả lời câu hỏi “vì sao nó ra như vậy”.

## Khi nào FDE nên mang MLflow đến khách?

Hai đặc điểm khiến MLflow hợp với công việc deployment. Đầu tiên là tính trung lập: MLflow nói nó chạy với bất kỳ cloud, framework hay công cụ nào bạn đang dùng. Khách đã chọn sẵn hạ tầng thì bạn không phải thuyết phục họ đổi.

Đặc điểm còn lại là tự host được. Bạn có thể chạy MLflow trên server và database của chính mình, nên không bị giới hạn hay chi phí lưu trữ từ bên thứ ba. Với những khách nhạy cảm về dữ liệu, khả năng giữ mọi thứ trong hạ tầng của họ rất có thể là điểm quyết định, nên đáng hỏi rõ ngay từ buổi customer discovery.

Thời điểm hợp lý để đưa MLflow vào là ngay khi dự án có nhiều hơn một người train model, hoặc ngay trước lần deploy đầu tiên. Chờ đến khi có sự cố mới dựng registry nghĩa là các version cũ đã không còn dấu vết.

## MLflow không làm thay bạn những gì?

MLflow chỉ ghi lại những gì bạn log. Nếu pipeline không ghi phiên bản dữ liệu hay bước tiền xử lý vào run, liên kết từ version về run sẽ dẫn đến một bức tranh thiếu, và bạn vẫn không tái tạo được kết quả.

Alias cũng chỉ là con trỏ. Ai được quyền chuyển `champion`, và phải qua kiểm tra gì trước khi chuyển, là quy trình bạn phải thống nhất với khách. Repo GitHub của MLflow có nhắc đến phần đánh giá giúp phát hiện regression trước khi lên production, nhưng chạy nó trước mỗi lần promote là kỷ luật của đội, công cụ không tự ép.

Tự host cũng có cái giá của nó. Server và database của MLflow trở thành một hệ thống nữa mà ai đó phải vận hành, backup và phân quyền.

## Học gì trước, và ghi vào CV thế nào?

Thứ tự học hợp lý là tracking trước, registry sau. Hãy làm quen với việc mọi lần train đều thành một run có tham số, metric và artifact, rồi mới học đăng ký version và gán alias. Các tính năng cho LLM và agent có thể để sau, khi bạn đã thạo vòng đời của một model cổ điển.

Khi đọc JD của các vị trí FDE hay ML engineer, hãy để ý các cụm như “experiment tracking”, “model registry”, “reproducibility”. Trong CV, đừng chỉ ghi “MLflow” vào danh sách kỹ năng.

Hãy mô tả việc bạn đã dùng alias để đánh dấu version production và truy ngược sự cố về run gốc: một câu như vậy cho thấy bạn hiểu vấn đề công cụ giải quyết, chứ không chỉ biết tên nó.

Một model tốt giúp bạn thắng buổi demo. Một registry rõ ràng giúp khách tin bạn vào lần thứ hai họ hỏi “cái gì vừa thay đổi?”.

**Thử ngay tuần này:**

- Cài MLflow trên máy cá nhân, train một model nhỏ ba lần với tham số khác nhau và so sánh ba run trên dashboard.
- Đăng ký cả ba lần chạy dưới cùng một tên model, gán alias “champion” cho bản tốt nhất, rồi thử chuyển alias sang bản khác.
- Viết một câu cho CV mô tả đúng việc bạn đã làm: thiết lập tracking và registry, dùng alias để đánh dấu version production.

## Nguồn

- [ML Model Registry | MLflow AI Platform](https://mlflow.org/docs/latest/ml/model-registry/)

- [MLflow - Open Source AI Platform for Agents, LLMs & Models](https://mlflow.org/)

- [GitHub - mlflow/mlflow: The open source AI engineering platform for agents, LLMs, and ML models.](https://github.com/mlflow/mlflow)

- [Experiment Tracking - Made With ML by Anyscale](https://madewithml.com/courses/mlops/experiment-tracking/)

- [Learn to Streamline Your Machine Learning Workflow with MLFlow](https://www.datacamp.com/tutorial/mlflow-streamline-machine-learning-workflow)
