SageMaker Unified Studio 原生集成 MLflow:不用自己搭 tracking server 了

痛点

搞 ML 的团队都知道:训练一个模型要跑几十次实验,每次调参数、换数据集、试不同的预处理方式。问题是——这些实验记录怎么管?

之前的选择:

  1. 自己搭 MLflow Tracking Server(要维护 EC2 + RDS + S3)
  2. 用 Excel/Notion 手记(别笑,真有团队这么干)
  3. 直接放弃对比,靠记忆

亚马逊云科技 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。

好处

  1. 零运维 — 不用管 EC2/RDS/S3/ALB 这些基础设施
  2. 团队协作 — Studio 里多人共享实验记录,不用传 CSV
  3. 和 SageMaker 深度集成 — Training Job、Pipeline、Model Registry 打通
  4. IAM 权限控制 — 谁能看谁能改,按角色管理
  5. 产物存储自动化 — 模型文件自动存到 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 的组合让这件事变得很自然。
专注建模,不要被基础设施绑架。

posted @ 2026-05-12 11:35  亚马逊云开发者  阅读(7)  评论(0)    收藏  举报