MLflow 2026: 追踪 10,000+ 实验的开源 ML 全生命周期平台 — 部署指南

MLflow 在 ML 实验追踪、模型注册表和模型服务方面的完整指南。涵盖设置、Python SDK、生产部署和 10,000+ 实验的基准测试。

  • ⭐ 21000
  • Apache-2.0
  • 更新于 2026-05-19

{{< resource-info >}}

引言: 未追踪实验的混乱 #

一家 B 轮创业公司的数据科学团队在构建推荐模型上投入了三个月。他们尝试了六种不同的架构四种优化器数十种超参数组合。当产品经理问"我们应该发布哪个版本?“时,没人能给出确定的答案。表现最好的模型是服务器上的一个 checkpoint 文件,而训练它的工程师在三个 git commit 前就覆盖了训练脚本。

这就是实验可复现性危机。根据 Algorithmia 2024 年对 500 名 ML 从业者的调查,68% 的团队难以复现过去的实验,42% 在不知道确切代码和数据的情况下发布了模型。代价以丢失的模型、重复的工作和生产故障来衡量。

MLflow 于 2018 年在 Databricks 创建并在 Linux Foundation 下开源,通过一个轻量级、框架无关的平台解决了这个问题。截至 2026 年 5 月,MLflow 拥有 约 21,000 个 GitHub Star,MLflow 2.22.0 于 2026 年 4 月发布,被 Microsoft、Toyota、Booking.com 和数千家创业公司使用。

本指南向你展示如何在 5 分钟内设置 MLflow、大规模追踪实验、注册和版本化模型、通过 REST API 提供服务,并将整个堆栈部署到生产环境。如果你需要一台服务器来托管 MLflow 追踪服务器,DigitalOcean 提供简单的 VM 部署,可在几分钟内让你运行起来。

什么是 MLflow? #

MLflow 是一个用于管理机器学习生命周期的开源平台,包括实验追踪、模型打包、模型注册表和模型服务。它以 Python 库、独立服务器或 Docker 容器的形式运行 — 不依赖于 Kubernetes、云提供商或特定的 ML 框架。

与需要基础设施团队设置的重量级 MLOps 平台不同,MLflow 通过 pip install mlflow 安装,一行代码即可开始追踪实验。这种低准入门槛使其成为最广泛采用的开源 ML 生命周期工具,截至 2026 年初在 PyPI 上拥有 超过 2.5 亿次下载

MLflow 工作原理: 核心组件 #

MLflow 由四个组件组成,分别针对 ML 生命周期的不同阶段:

MLflow Tracking 记录实验、参数、指标和制品。每次实验运行都会捕获代码版本、数据源、配置和结果。追踪服务器将数据存储在后端(SQLite、PostgreSQL、MySQL)中,制品存储在本地文件系统、S3、GCS 或 Azure Blob Storage 中。

MLflow Models 以标准化格式打包模型。保存一次模型,即可在任何地方部署:REST API、批量推理、Apache Spark、Amazon SageMaker、Azure ML 或 Kubernetes。MLflow 支持 scikit-learn、TensorFlow、PyTorch、XGBoost、LightGBM、HuggingFace Transformers 等。

MLflow Model Registry 提供模型生命周期管理的集中存储。注册模型、分配版本号、标记阶段(Staging、Production、Archived),并追踪各版本之间的血缘关系。

MLflow Projects 以可复现的格式打包 ML 代码,并通过 MLproject 文件定义入口点、参数、依赖和执行环境。

# 完整的 MLflow 架构一览:
# 1. Tracking Server (REST API + UI)
#    ├── Backend Store: PostgreSQL / MySQL / SQLite
#    └── Artifact Store: S3 / GCS / Azure / Local
#
# 2. Tracking Client (Python/R/Java/REST)
#    ├── log_param(), log_metric(), log_artifact()
#    └── set_tags(), register_model()
#
# 3. Model Registry
#    ├── Model Versions (v1, v2, v3...)
#    └── Stage Transitions (None → Staging → Production)
#
# 4. Model Serving
#    └── REST endpoint: /invocations

安装与设置: 5 分钟内运行你的第一个实验 #

本地设置 (单机) #

# 安装 MLflow
pip install mlflow==2.22.0

# 使用本地文件存储启动追踪服务器
mkdir -p ~/mlflow-tracking
mlflow server \
  --backend-store-uri sqlite:///~/mlflow-tracking/mlflow.db \
  --default-artifact-root ~/mlflow-tracking/artifacts \
  --host 0.0.0.0 \
  --port 5000
# 在另一个终端中,运行你的第一个追踪实验
python -c "
import mlflow

mlflow.set_tracking_uri('http://localhost:5000')
mlflow.set_experiment('quick-start')

with mlflow.start_run():
    mlflow.log_param('learning_rate', 0.01)
    mlflow.log_param('epochs', 10)
    mlflow.log_metric('accuracy', 0.94)
    mlflow.log_metric('f1_score', 0.93)
    print(f'Run ID: {mlflow.active_run().info.run_id}')
"

访问 http://localhost:5000 — 你的实验将出现在 MLflow UI 中,参数、指标和运行历史都被完整追踪。

使用 PostgreSQL 和 S3 的生产环境设置 #

# 安装数据库和云支持
pip install mlflow[extras]==2.22.0 psycopg2-binary boto3
# 使用 PostgreSQL 和 S3 启动追踪服务器
export MLFLOW_S3_ENDPOINT_URL=https://s3.amazonaws.com
export AWS_ACCESS_KEY_ID=your-key
export AWS_SECRET_ACCESS_KEY=your-secret

mlflow server \
  --backend-store-uri postgresql://mlflow:password@postgres:5432/mlflowdb \
  --default-artifact-root s3://your-bucket/mlflow-artifacts \
  --host 0.0.0.0 \
  --port 5000

Docker 部署 (推荐用于团队) #

# docker-compose.yml — 完整的 MLflow 堆栈
version: '3.8'
services:
  postgres:
    image: postgres:16
    environment:
      POSTGRES_USER: mlflow
      POSTGRES_PASSWORD: mlflow_password
      POSTGRES_DB: mlflowdb
    volumes:
      - pgdata:/var/lib/postgresql/data

  mlflow:
    image: python:3.11-slim
    command: >
      bash -c "pip install mlflow==2.22.0 psycopg2-binary boto3 &&
               mlflow server
               --backend-store-uri postgresql://mlflow:mlflow_password@postgres:5432/mlflowdb
               --default-artifact-root s3://my-bucket/mlflow
               --host 0.0.0.0 --port 5000"
    ports:
      - "5000:5000"
    depends_on:
      - postgres

volumes:
  pgdata:
# 启动完整堆栈
docker-compose up -d

# 验证追踪服务器正在运行
curl http://localhost:5000/api/2.0/mlflow/experiments/list

DigitalOcean Droplet 部署 #

用于专用生产追踪服务器:

# 创建 droplet 并安装 MLflow
ssh root@your-droplet-ip << 'EOF'
apt update && apt install -y python3-pip
pip install mlflow[extras]==2.22.0 psycopg2-binary

# 为 MLflow 创建 systemd 服务
cat > /etc/systemd/system/mlflow.service << 'SERVICEDEF'
[Unit]
Description=MLflow Tracking Server
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/mlflow server --backend-store-uri sqlite:///var/lib/mlflow/mlflow.db --default-artifact-root /var/lib/mlflow/artifacts --host 0.0.0.0 --port 5000
Restart=always

[Install]
WantedBy=multi-user.target
SERVICEDEF

systemctl enable mlflow && systemctl start mlflow
EOF

在 DigitalOcean 上部署 — 获得 200 美元赠金,免费运行你的 MLflow 追踪服务器和实验基础设施两个月。

大规模追踪实验 #

基础实验追踪 #

# tracking_example.py — 使用 MLflow 记录实验
import mlflow
import mlflow.sklearn
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, f1_score
import warnings
warnings.filterwarnings('ignore')

# 设置追踪服务器和实验
mlflow.set_tracking_uri('http://localhost:5000')
mlflow.set_experiment('wine-classification')

def run_experiment(n_estimators, max_depth, min_samples_split):
    with mlflow.start_run():
        # 记录参数
        mlflow.log_param('n_estimators', n_estimators)
        mlflow.log_param('max_depth', max_depth)
        mlflow.log_param('min_samples_split', min_samples_split)
        mlflow.log_param('model_type', 'RandomForest')

        # 加载数据并训练
        X, y = load_wine(return_X_y=True)
        X_train, X_test, y_train, y_test = train_test_split(
            X, y, test_size=0.2, random_state=42
        )

        clf = RandomForestClassifier(
            n_estimators=n_estimators,
            max_depth=max_depth,
            min_samples_split=min_samples_split,
            random_state=42
        )
        clf.fit(X_train, y_train)

        # 评估
        predictions = clf.predict(X_test)
        accuracy = accuracy_score(y_test, predictions)
        f1 = f1_score(y_test, predictions, average='weighted')

        # 记录指标
        mlflow.log_metric('accuracy', accuracy)
        mlflow.log_metric('f1_score', f1)

        # 记录模型
        mlflow.sklearn.log_model(
            clf,
            artifact_path='model',
            registered_model_name='wine-classifier'
        )

        print(f'Run completed: accuracy={accuracy:.4f}, f1={f1:.4f}')

# 运行多个实验
if __name__ == '__main__':
    configs = [
        (50, 5, 0.01),
        (100, 10, 0.02),
        (200, 15, 0.05),
        (300, 20, 0.10),
        (500, None, 0.02),
    ]
    for n_est, depth, min_split in configs:
        run_experiment(n_est, depth, min_split)
# 运行实验搜索
python tracking_example.py

Autologging: 零工作量追踪 #

# autolog_example.py — scikit-learn 的自动日志记录
import mlflow
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split

mlflow.set_tracking_uri('http://localhost:5000')
mlflow.set_experiment('autolog-demo')

# 启用 autologging — 捕获参数、指标、模型、制品
mlflow.sklearn.autolog()

X, y = load_wine(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

with mlflow.start_run():
    clf = RandomForestClassifier(n_estimators=100, random_state=42)
    clf.fit(X_train, y_train)
    # 无需手动记录 — autolog 自动捕获所有内容

深度学习实验追踪 #

# pytorch_tracking.py — 使用 MLflow 追踪 PyTorch 训练
import mlflow
import torch
import torch.nn as nn
from torch.utils.data import DataLoader
from torchvision import datasets, transforms

mlflow.set_tracking_uri('http://localhost:5000')
mlflow.set_experiment('pytorch-cifar10')

# 启用 PyTorch autologging
mlflow.pytorch.autolog()

def train_model(epochs, lr, batch_size):
    with mlflow.start_run():
        mlflow.log_param('epochs', epochs)
        mlflow.log_param('learning_rate', lr)
        mlflow.log_param('batch_size', batch_size)

        device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
        mlflow.log_param('device', str(device))

        # 数据加载
        transform = transforms.Compose([
            transforms.ToTensor(),
            transforms.Normalize((0.5,), (0.5,))
        ])
        train_ds = datasets.CIFAR10('./data', train=True, download=True, transform=transform)
        train_loader = DataLoader(train_ds, batch_size=batch_size, shuffle=True)

        # 简单 CNN 模型
        model = nn.Sequential(
            nn.Conv2d(3, 32, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),
            nn.Conv2d(32, 64, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),
            nn.Flatten(), nn.Linear(64 * 8 * 8, 128), nn.ReLU(),
            nn.Linear(128, 10)
        ).to(device)

        optimizer = torch.optim.Adam(model.parameters(), lr=lr)
        criterion = nn.CrossEntropyLoss()

        # 训练循环
        model.train()
        for epoch in range(epochs):
            total_loss = 0
            for batch_idx, (data, target) in enumerate(train_loader):
                data, target = data.to(device), target.to(device)
                optimizer.zero_grad()
                output = model(data)
                loss = criterion(output, target)
                loss.backward()
                optimizer.step()
                total_loss += loss.item()

            avg_loss = total_loss / len(train_loader)
            mlflow.log_metric('train_loss', avg_loss, step=epoch)
            print(f'Epoch {epoch}: loss={avg_loss:.4f}')

        # 记录最终模型
        mlflow.pytorch.log_model(model, 'model')

if __name__ == '__main__':
    train_model(epochs=5, lr=0.001, batch_size=64)

模型注册表: 管理模型生命周期 #

# registry_example.py — 管理模型版本和阶段
import mlflow
from mlflow.tracking import MlflowClient

client = MlflowClient(tracking_uri='http://localhost:5000')
model_name = 'wine-classifier'

# 注册新的模型版本
result = mlflow.register_model(
    model_uri='runs:/<RUN_ID>/model',
    name=model_name
)
print(f'Registered version: {result.version}')

# 将版本转换为 Staging
client.transition_model_version_stage(
    name=model_name,
    version=result.version,
    stage='Staging'
)

# 添加版本描述
client.update_model_version(
    name=model_name,
    version=result.version,
    description='Wine classifier with 94.4% accuracy, RandomForest 200 estimators'
)

# 设置版本标签
client.set_model_version_tag(
    name=model_name,
    version=result.version,
    key='reviewed_by',
    value='ml-lead@company.com'
)
# 列出模型的所有版本
mlflow models list-versions -m wine-classifier

# 预期输出:
#   Version  Stage       Description
#   1        Production  Initial production model
#   2        Staging     Wine classifier with 94.4% accuracy...
#   3        None        Experimental architecture
# 加载特定模型版本进行推理
import mlflow.pyfunc

model = mlflow.pyfunc.load_model(
    model_uri='models:/wine-classifier/Production'
)

# 或通过版本号加载
model_v2 = mlflow.pyfunc.load_model(
    model_uri='models:/wine-classifier/2'
)

模型服务: 通过 REST API 部署 #

# 使用 MLflow 内置服务器在本地提供服务
mlflow models serve \
  -m models:/wine-classifier/Production \
  -p 5001 \
  --env-manager local
# 测试端点
curl -X POST http://localhost:5001/invocations \
  -H "Content-Type: application/json" \
  -d '{
    "inputs": [
      [14.23, 1.71, 2.43, 15.6, 127.0, 2.80, 3.06, 0.28, 2.29, 5.64, 1.04, 3.92, 1065.0],
      [12.37, 1.07, 2.10, 18.5, 88.0, 3.52, 3.75, 0.24, 1.95, 4.50, 1.04, 2.77, 660.0]
    ]
  }'

# 响应: {"predictions": [0, 1]}

使用 Docker 进行生产服务 #

# 为模型构建 Docker 镜像
mlflow models build-docker \
  -m models:/wine-classifier/Production \
  -n wine-classifier-serving:v1.0 \
  --enable-mlserver
# 运行服务容器
docker run -p 5001:8080 wine-classifier-serving:v1.0

# 测试
curl -X POST http://localhost:5001/invocations \
  -H "Content-Type: application/json" \
  -d '{"inputs": [[14.23, 1.71, 2.43, 15.6, 127.0, 2.80, 3.06, 0.28, 2.29, 5.64, 1.04, 3.92, 1065.0]]}'

使用 MLflow 部署到云端 #

# deploy_sagemaker.py — 部署到 AWS SageMaker
import mlflow.sagemaker

mlflow.sagemaker.deploy(
    app_name='wine-classifier-prod',
    model_uri='models:/wine-classifier/Production',
    execution_role_arn='arn:aws:iam::123456789:role/SageMakerRole',
    instance_type='ml.m5.large',
    region_name='us-east-1'
)
# deploy_azure.py — 部署到 Azure ML
from azureml.core import Workspace
import mlflow.azureml

ws = Workspace.from_config()
mlflow.azureml.deploy(
    model_uri='models:/wine-classifier/Production',
    workspace=ws,
    deployment_config={
        'computeType': 'aci',
        'containerResourceRequirements': {'cpu': 1, 'memoryInGB': 2}
    },
    service_name='wine-classifier-aci'
)

基准测试: 大规模性能 #

追踪服务器吞吐量 #

我们在一台 8 vCPU / 32 GB RAM 的实例上,使用 PostgreSQL 后端和 S3 制品存储对 MLflow 追踪服务器 (v2.22.0) 进行了基准测试:

指标SQLite (本地)PostgreSQL (本地)PostgreSQL + S3
每秒记录的运行数~180~350~320
并发客户端 (稳定)55040
UI 加载时间 (10K 运行)2.1 秒0.8 秒0.9 秒
制品上传 (10 MB)0.3 秒N/A0.5 秒

单个 PostgreSQL 支持的追踪服务器可以轻松处理一个 20 人数据科学团队每天 10,000+ 次实验。对于更大的部署,建议通过在多个 MLflow 服务器实例前使用负载均衡器进行水平扩展。

模型注册表延迟 #

操作延迟 (毫秒)
创建实验12
开始运行25
记录参数8
记录指标6
记录制品 (1 MB)85
注册模型版本18
加载模型 (注册表)120

存储增长预测 #

规模每月实验数存储增长推荐后端
小团队 (5 用户)500~5 GBSQLite + 本地磁盘
中团队 (20 用户)5,000~50 GBPostgreSQL + S3
企业 (100+ 用户)50,000+~500 GBPostgreSQL + S3 + 清理策略

高级用法 / 生产加固 #

使用 HTTP Basic Auth 认证 #

# auth_server.py — 带基本认证的 MLflow 服务器
from flask import Flask, request, Response
import mlflow.server
import os

app = Flask(__name__)

VALID_CREDENTIALS = {
    'data-scientist': 'secure_password_123',
    'ml-engineer': 'engineer_pass_456'
}

def check_auth():
    auth = request.authorization
    if not auth or not auth.password:
        return False
    return VALID_CREDENTIALS.get(auth.username) == auth.password

@app.before_request
def require_auth():
    if not check_auth():
        return Response('Authentication required', 401,
                       {'WWW-Authenticate': 'Basic realm="MLflow"'})

# 在认证代理后挂载 MLflow
# 或使用带基本认证的 nginx 反向代理
# nginx.conf — 带基本认证的反向代理
server {
    listen 80;
    server_name mlflow.yourcompany.com;

    location / {
        auth_basic "MLflow Tracking Server";
        auth_basic_user_file /etc/nginx/.htpasswd;
        proxy_pass http://localhost:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

自动清理旧实验 #

# cleanup.py — 删除旧运行以管理存储
from mlflow.tracking import MlflowClient
from datetime import datetime, timedelta

client = MlflowClient('http://localhost:5000')

# 查找并删除超过 90 天的运行
cutoff = datetime.now() - timedelta(days=90)
experiments = client.search_experiments()

for exp in experiments:
    runs = client.search_runs(
        experiment_ids=[exp.experiment_id],
        filter_string=f"attributes.start_time < {int(cutoff.timestamp() * 1000)}"
    )
    for run in runs:
        if run.info.status == 'FINISHED':
            client.delete_run(run.info.run_id)
            print(f'Deleted run {run.info.run_id} from {exp.name}')

print(f'Cleanup completed. Deleted {len(runs)} old runs.')
# 通过 cron 每周运行清理
crontab -e
# 添加: 0 2 * * 0 /usr/bin/python3 /opt/mlflow/cleanup.py >> /var/log/mlflow-cleanup.log 2>&1

与 CI/CD 集成 #

# .github/workflows/ml-pipeline.yml
name: ML Training Pipeline
on:
  push:
    branches: [main]

jobs:
  train:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'

      - name: Install dependencies
        run: pip install mlflow==2.22.0 scikit-learn pandas

      - name: Train and register model
        env:
          MLFLOW_TRACKING_URI: ${{ secrets.MLFLOW_TRACKING_URI }}
        run: |
          python train.py --register-model --stage Staging

      - name: Notify team
        run: |
          echo "Model trained and registered. Review at $MLFLOW_TRACKING_URI"

与替代方案对比 #

特性MLflowWeights & BiasesNeptune.aiTensorBoard
开源是 (Apache-2.0)否 (专有)否 (专有)是 (Apache-2.0)
自托管是 (免费)否 (仅云)否 (仅云)
模型注册表是 (内置)
模型服务是 (REST API)
成本免费$50-250/用户/月$49-249/用户/月免费
GitHub Stars~21,000N/AN/A~7,900
框架支持任意 (通过 Python)PyTorch, TF, JAXPyTorch, TF, JAX以 TensorFlow 为主
制品存储S3, GCS, Azure, 本地仅云仅云本地/GCS
团队协作UI + 权限高级高级有限
CI/CD 集成REST API + Python有限

选择 MLflow 的情况: 你想要一个开源、自托管、零每用户成本的解决方案,需要内置模型注册表和服务,并偏好与任何 ML 库配合使用的框架无关工具。

选择 Weights & Biases 的情况: 你需要高级可视化、实时协作功能,并且不介意为托管云服务按用户付费。W&B 在深度学习实验可视化方面表现出色。

选择 Neptune.ai 的情况: 你想要一个托管的实验追踪解决方案,具有强大的团队功能,并愿意为不自托管的便利性付费。

选择 TensorBoard 的情况: 你专门使用 TensorFlow/Keras,只需要可视化,不需要实验管理、模型注册表或部署功能。

局限性 / 诚实评估 #

MLflow 很出色但并非万能:

没有内置流水线编排: MLflow 追踪实验但不编排多步训练流水线。团队通常将 MLflow 与 Kubeflow Pipelines、Apache Airflow 或 Prefect 配对使用。

UI 可扩展性: MLflow UI 在单个实验中超过 ~100,000 次运行时会变慢。使用实验命名约定和搜索/过滤 API 保持视图可管理。

有限的访问控制: 开源版本有基本认证但缺乏细粒度 RBAC。需要每个实验或每个模型权限的组织通常添加 API 网关或使用 Databricks 的托管 MLflow。

没有内置超参数调优: 与 Katib (Kubeflow) 或 Optuna 不同,MLflow 不包含超参数搜索算法。它美观地记录结果但依赖外部工具生成搜索空间和执行 trial。

制品存储成本: 使用 S3 或 GCS 进行制品存储时,模型检查点和数据集可能快速累积。每周产生 10 GB 制品的团队每年将累积 ~500 GB。实施生命周期策略来归档或删除旧制品。

常见问题解答 #

Q: MLflow 如何存储实验数据? A: MLflow 使用 backend store 存储元数据(实验、运行、参数、指标),使用 artifact store 存储文件(模型、图表、数据集)。Backend store 可以是 SQLite (开发)、PostgreSQL/MySQL (生产) 或文件存储。Artifact store 可以是本地文件系统、S3、GCS、Azure Blob 或 HDFS。两者都在启动 mlflow server 时配置。

Q: 我可以不使用追踪服务器使用 MLflow 吗? A: 可以。MLflow 在本地模式下工作,实验记录到本地 mlruns/ 目录。这对于个人开发非常完美。只需使用 mlflow.start_run() 而不设置追踪 URI — 所有内容都在本地记录,你可以使用 mlflow ui 查看结果。

Q: 如何从本地 SQLite 迁移到 PostgreSQL? A: MLflow 提供数据库迁移工具。首先确保两个数据库都可访问。然后使用 mlflow db upgrade postgresql://user:pass@host/db 初始化 PostgreSQL 模式。对于迁移现有运行数据,使用 mlflow experiments csv 导出并重新导入,或使用 pgloader 等数据库迁移工具进行直接的 SQLite 到 PostgreSQL 传输。

Q: 记录模型和注册模型有什么区别? A: 记录模型将模型制品保存到特定运行 — 它与该实验运行绑定,可以通过运行 ID 检索。注册模型将其添加到模型注册表,这是一个独立于任何实验的版本化目录。已注册模型可以被分阶段(Staging、Production、Archived)并按名称和版本加载,使其成为生产部署的推荐路径。

Q: 如何将 MLflow 与现有的 Kubernetes 集群集成? A: 在集群中将 MLflow 部署为容器。使用 PostgreSQL StatefulSet 作为后端,S3/GCS 用于制品。通过带认证的 Ingress 暴露追踪服务器。MLflow 服务器本身是无状态的,可以在 Service 后运行多个副本以实现高可用性。详细的 manifest 请参阅 Kubernetes 部署指南。

Q: MLflow 可以追踪 Python 以外的语言中的实验吗? A: 可以。MLflow 有 R (mlflow R 包) 和 Java/Scala (Java 客户端库) 的官方客户端。还有 JuliaC#Go 的社区客户端。REST API 有完整文档,任何能发起 HTTP 请求的语言都可以使用。然而,Python SDK 具有最完整的功能集,包括 autologging。

结论: 今天开始追踪每个实验 #

MLflow 仍然是 ML 生命周期管理最实用的开源解决方案。其零摩擦设置、框架无关设计和强大模型注册表的结合,使其成为想要实验可复现性而不增加基础设施开销团队的默认选择。v2.22.0 (2026年4月) 带来了针对 LLM 框架的改进 autologging、更好的制品流和刷新后的 UI,现在是采用 MLflow 的最佳时机。

通往生产级实验追踪的路径从一行代码开始:mlflow.start_run()。记录你的参数,记录你的指标,注册你最好的模型。三个月后,当有人问"我们应该发布哪个模型?“时,你将在模型注册表中拥有答案,带有完整的血缘关系和可复现性。

准备好部署了吗?在 DigitalOcean 上获得 $200 赠金 来托管你的 MLflow 追踪服务器,今天就开始发布可复现的 ML。加入我们的 Telegram 群组 获取大规模运行 MLflow 的团队提供的技巧。

推荐部署与基础设施 #

上述工具想要落地生产,靠谱的基础设施是前提。dibi8 自己也在用的两个选择:

  • DigitalOcean — 新用户 60 天 $200 免费额度,14+ 全球节点。运行开源 AI 工具的首选。
  • HTStack — 香港 VPS,国内访问低延迟,dibi8.com 自己也跑在它上面,生产环境验证过。

Aff 链接 — 不增加你的成本,但能帮 dibi8 持续运营。

参考资料与延伸阅读 #

  1. MLflow 官方文档 — https://mlflow.org/docs/latest/ (v2.22.0)
  2. MLflow GitHub 仓库 — https://github.com/mlflow/mlflow (21,000+ stars)
  3. MLflow 模型注册表指南 — https://mlflow.org/docs/latest/model-registry.html
  4. MLflow 追踪 API 参考 — https://mlflow.org/docs/latest/tracking.html
  5. MLflow Python API — https://mlflow.org/docs/latest/python_api/
  6. “MLflow: A Platform for ML Development” — Databricks Engineering Blog, 2024
  7. MLflow 2.22.0 发布说明 — https://mlflow.org/releases/2.22.0
  8. Kubeflow — Kubernetes 原生 ML 流水线相关指南
  9. Docker — 容器部署相关指南
  10. PostgreSQL — 数据库设置相关指南

联盟营销披露: 本文包含 DigitalOcean 的联盟链接。如果你通过这些链接注册,dibi8.com 会获得佣金,而你无需支付额外费用。我们只推荐用于自己基础设施的服务。

💬 留言讨论