SageMaker Unified Studio 原生集成 MLflow:不用自己搭 tracking server 了
痛点
搞 ML 的团队都知道:训练一个模型要跑几十次实验,每次调参数、换数据集、试不同的预处理方式。问题是——这些实验记录怎么管?
之前的选择:
- 自己搭 MLflow Tracking Server(要维护 EC2 + RDS + S3)
- 用 Excel/Notion 手记(别笑,真有团队这么干)
- 直接放弃对比,靠记忆
亚马逊云科技 5 月在 SageMaker Unified Studio 里直接集成了托管版 MLflow。不用自己搭,开箱即用。
之前怎么搭 MLflow
自己搭一套完整的 MLflow 需要:
# 1. 一台 EC2 跑 tracking server
pip install mlflow
mlflow server --host 0.0.0.0 --port 5000 \
--backend-store-uri postgresql://user:pass@rds-endpoint/mlflow \
--default-artifact-root s3://my-mlflow-artifacts/
# 2. 一个 RDS PostgreSQL 存元数据
# 3. 一个 S3 桶存模型产物
# 4. VPC 安全组配置
# 5. IAM Role 配置
# 6. 搞个 ALB 做 HTTPS
# 7. 运维:更新、备份、扩容...
7 件事,还没开始训练模型呢就折腾半天。
现在怎么做
SageMaker Unified Studio 里开启 MLflow 实验追踪,不需要任何基础设施:
import mlflow
import sagemaker
# SageMaker Studio 环境自动配置了 tracking URI
# 不需要手动指定 server 地址
mlflow.set_experiment("my-llm-finetune")
with mlflow.start_run(run_name="lr-0.001-epoch-5"):
# 记录参数
mlflow.log_param("learning_rate", 0.001)
mlflow.log_param("epochs", 5)
mlflow.log_param("batch_size", 32)
mlflow.log_param("model_base", "distilbert-base")
# 训练...
model = train(config)
# 记录指标
mlflow.log_metric("train_loss", 0.234)
mlflow.log_metric("val_accuracy", 0.891)
mlflow.log_metric("f1_score", 0.876)
# 记录模型产物
mlflow.pytorch.log_model(model, "model")
就这样。参数、指标、模型文件全部自动存到托管存储里。
实际工作流
一个典型的调参流程:
# 批量跑实验对比
learning_rates = [0.001, 0.0005, 0.0001]
batch_sizes = [16, 32, 64]
for lr in learning_rates:
for bs in batch_sizes:
with mlflow.start_run(run_name=f"lr-{lr}-bs-{bs}"):
mlflow.log_params({"learning_rate": lr, "batch_size": bs})
metrics = train_and_evaluate(lr, bs)
mlflow.log_metrics(metrics)
跑完在 Studio 的 MLflow UI 里一目了然——哪组参数效果好,直接看图表对比。
和 SageMaker Training Job 的配合
如果用 SageMaker Training Job 做分布式训练,实验日志也能自动关联:
from sagemaker.pytorch import PyTorch
estimator = PyTorch(
entry_point="train.py",
role=role,
instance_type="ml.p4d.24xlarge",
instance_count=2,
framework_version="2.1",
environment={
"MLFLOW_TRACKING_URI": "auto" # Studio 环境自动注入
}
)
estimator.fit({"training": "s3://my-data/train/"})
Training Job 里的 mlflow.log_xxx() 调用会自动写到 Studio 的托管 MLflow Server。
好处
- 零运维 — 不用管 EC2/RDS/S3/ALB 这些基础设施
- 团队协作 — Studio 里多人共享实验记录,不用传 CSV
- 和 SageMaker 深度集成 — Training Job、Pipeline、Model Registry 打通
- IAM 权限控制 — 谁能看谁能改,按角色管理
- 产物存储自动化 — 模型文件自动存到 S3,不用手动管路径
局限
- 目前只在 SageMaker Unified Studio 内可用(不能在外部单独访问这个 MLflow Server)
- 如果团队已经有自建 MLflow 且定制了大量 plugin,迁移需要评估兼容性
- MLflow UI 的自定义能力比自建的少一些
建议
- 新项目直接用 — 省掉搭建和运维成本
- 老项目评估迁移 — 如果只用了 MLflow 基础功能(log_param/log_metric/log_model),迁移很简单
- 搭配 SageMaker Pipeline — 把实验追踪串进 CI/CD for ML,做到可复现
参考:亚马逊云科技 2026/5 月 SageMaker Unified Studio 更新
补充:Model Registry 的版本管理
MLflow Model Registry 在 Studio 内也是托管的:
# 训练完成后注册模型
model_uri = f"runs:/{run.info.run_id}/model"
result = mlflow.register_model(model_uri, "sentiment-classifier")
# 推进到 Production
from mlflow.tracking import MlflowClient
client = MlflowClient()
client.transition_model_version_stage(
name="sentiment-classifier",
version=result.version,
stage="Production"
)
模型从实验到生产有清晰的版本链条:
- None → Staging(测试中)
- Staging → Production(上线)
- Production → Archived(下线)
补充:训练过程可视化
for epoch in range(50):
train_loss = train_one_epoch(model, train_loader)
val_loss, val_acc = evaluate(model, val_loader)
mlflow.log_metrics({
"train_loss": train_loss,
"val_loss": val_loss,
"val_accuracy": val_acc
}, step=epoch)
每个 step 记录一次指标。Studio UI 自动生成 loss 曲线。多个 run 可叠加对比。
补充:数据版本追踪
with mlflow.start_run():
# 记录数据集信息
mlflow.log_param("dataset_version", "v2.1")
mlflow.log_param("train_samples", 50000)
mlflow.log_param("test_samples", 10000)
mlflow.log_param("preprocessing", "tokenize+pad+truncate")
# 记录数据集文件的 hash
mlflow.log_param("data_hash", compute_hash("s3://data/train.csv"))
这样复现实验时不只知道用了什么参数,还知道用了什么数据。
ML 实验管理从手工记录到自动化追踪,SageMaker + MLflow 的组合让这件事变得很自然。
专注建模,不要被基础设施绑架。

浙公网安备 33010602011771号