工作区 (Workspaces)
工作空间为实验、注册模型、提示词(prompts)、AI 网关资源和工件(artifacts)等 MLflow 资源添加了一个可选的组织层和权限方案,让团队能够在不运行多个服务器的情况下共享同一部署。
核心功能
资源范围限定:每个工作空间保留其自己的资源,例如实验、注册模型、提示词、AI 网关资源和工件。工作空间级别的权限控制谁可以查看或修改这些资源。除此之外,所有的 MLflow 客户端和 API 使用方式保持不变。
共享基础设施:多个团队可以使用单个 MLflow 服务器实例,在按工作空间对资源进行分组的同时,降低运营开销。
灵活集成:可插拔的工作空间存储架构可用于与现有的组织结构(如 Kubernetes 命名空间或身份提供商)集成。
向后兼容:工作空间功能是可选的,默认情况下处于禁用状态。现有部署在无需修改的情况下可继续工作。
何时使用工作空间
当您有以下需求时,请使用工作空间:
- 多个团队共享单个 MLflow 实例,同时保持实验、注册模型、提示词和 AI 网关资源的有序管理
- 通过工作空间级别的权限来管理资源组,而无需管理单个实验或模型
- 与平台级结构(例如 Kubernetes 命名空间)集成以保持资源分组
- 在无需部署单独服务器的情况下,简化跨多个团队的 MLflow 管理
::::caution 非硬性隔离边界 工作空间在单个 MLflow 服务器内提供逻辑隔离和授权控制。如需严格的数据平面或合规性隔离,请运行独立的 MLflow 部署,而不是共享服务器。 :::
工作空间需要 SQL 数据库后端存储。启用工作空间后,不支持基于文件的后端。
如果您正在现有的启用 basic-auth 的实例上启用工作空间,请在您的 身份验证配置 中设置 grant_default_workspace_access = true 以实现向后兼容。否则,非管理员用户将无法访问 default 工作空间中的现有资源。
工作空间范围内的资源
启用工作空间后,以下顶级资源属于工作空间范围:
- 实验及其所有子资源(运行记录、追踪、指标、参数、标签、工件)
- 注册模型及其模型版本
- 提示词及其版本(提示词共享注册模型存储)
- AI 网关资源,例如 API 密钥、模型定义和端点
- 评估数据集
子资源会自动继承其父级的工作空间。例如,运行记录会继承实验的工作空间,模型版本会继承注册模型的工作空间。
工件隔离
默认情况下,工件通过 URI 前缀在工作空间内进行隔离。当在工作空间中创建实验时,MLflow 会自动在以下路径下生成工件位置:
<default_artifact_root>/workspaces/<workspace-name>/<experiment-id>
可选地,工作空间可以覆盖其默认的工件根目录。当在工作空间上设置 default_artifact_root 时,新实验会使用该路径:
<workspace_default_artifact_root>/<experiment-id>
运行记录的工件根目录衍生自实验位置
.../<run-id>/artifacts
为了向后兼容,在启用工作空间之前就存在于预留的 default 工作空间中的资源,将保留其存储的工件位置(可能没有前缀)并保持可访问状态。
启用工作空间后,客户端提供的 artifact_location 值将被拒绝,以防止绕过工作空间隔离。服务器会自动管理工件位置,以确保适当的隔离。
快速入门
工作空间需要 SQL 后端(不支持文件后端)。请使用 MLFLOW_ENABLE_WORKSPACES=1 启用,并配置工作空间提供商(若未指定,则使用默认的 SQL 提供商)。
启动 MLflow 服务器时启用工作空间
mlflow server \
--backend-store-uri postgresql://user:pass@localhost/mlflow \
--default-artifact-root s3://mlflow-artifacts \
--enable-workspaces
通过 Python 客户端使用工作空间
import mlflow
# Set tracking URI (no workspace in URI)
mlflow.set_tracking_uri("https://mlflow.example.com")
# Set active workspace
mlflow.set_workspace("team-a")
# All subsequent operations are scoped to team-a
experiment_id = mlflow.create_experiment("my-experiment")
with mlflow.start_run(experiment_id=experiment_id):
mlflow.log_param("alpha", 0.5)
mlflow.log_metric("rmse", 0.8)
列出可用工作空间
workspaces = mlflow.list_workspaces()
for workspace in workspaces:
print(f"{workspace.name}: {workspace.description}")
工作空间解析
活动工作空间按以下顺序确定:
- 显式的
mlflow.set_workspace()调用 MLFLOW_WORKSPACE环境变量- 提供商的
get_default_workspace()实现
如果未设置 mlflow.set_workspace() 也未设置 MLFLOW_WORKSPACE,MLflow 将回退到提供商的默认工作空间(通常为 default)。如果无法解析工作空间且提供商不支持默认工作空间,API 调用将返回错误。
身份验证与权限
启用 MLflow 身份验证 后,工作空间支持工作空间范围的权限,这些权限补充了资源级别的访问控制:
- 工作空间级别的权限为工作空间内的所有资源提供便捷的授权
- 用户可以拥有工作空间级别权限、资源级别权限,或两者兼有
- 拥有工作空间级别
READ权限的用户可以访问该工作空间中的所有实验、注册模型、提示词和 AI 网关资源 - 拥有工作空间级别
USE权限的用户可以调用 AI 网关端点或引用网关模型定义和 API 密钥 - 单个资源权限优先,并可进一步限制访问
- 拥有
MANAGE权限的用户可以将其工作空间内的访问权限委托给他人
详情请参阅 工作空间权限。
迁移与兼容性
在现有部署上启用工作空间
- 现有资源会自动分配给
default工作空间 - 工件位置保持不变
- 现有客户端通过使用
default工作空间可继续工作 - 一旦资源存在于非默认工作空间中,除非删除了非默认工作空间中的所有资源,否则无法禁用工作空间功能。
default 工作空间是预留的,无法删除或重命名。它为现有部署提供了向后兼容性。