MLflow

MLflow operator 在 Alauda AI 上部署并管理一个多租户的 MLflow Tracking Server。它基于开源 MLflow 构建,为数据科学和 ML 团队提供一个共享的实验跟踪和 model registry 服务,并与平台的单点登录和 Kubernetes RBAC 集成——因此每个团队只能查看和管理自己的 runs、experiments 和 registered models。

MLflow 以 基于 OLM Helm 的 operator 形式交付。从平台 OperatorHub 安装该 operator 并创建一个 MLflow 自定义资源后,就会启动 tracking server,通过平台 ingress 对外暴露,并在 Alauda AI → Tools 菜单中添加一个 MLFlow 条目。

它会部署什么

当你创建一个 MLflow 自定义资源时,operator 会在配置的 namespace 中协调一套 MLflow 栈(默认是 kubeflow):

  • MLflow Tracking Server — 实验跟踪 API 和 Web UI:记录参数、指标、artifacts 和 AI-agent traces;浏览 runs 和 traces;以及管理 model registry(mlflow Python SDK 的目标)。
  • OAuth proxy (oauth2-proxy) — 在请求到达 MLflow 之前,先通过平台 OIDC provider 对每个请求进行认证。客户端始终通过 proxy 访问;它们不会直接连接到 MLflow 容器端口。
  • Kubernetes auth plugin — 在 tracking server 内部,从转发的令牌中读取调用者身份,将每个 run 记录到该用户名下,并基于 Kubernetes RBAC 对请求进行授权。
  • Tools 菜单条目和 ingress 路由 — 一个 ConfigMap,用于将 MLFlow 添加到 Alauda AI Tools 菜单,以及平台 load balancer 上的一条 ingress 路由。

MLflow 元数据存储在你提供的 外部 PostgreSQL 数据库中。run artifacts 会写入 tracking server 配置的 artifact root(请参见 Installation → High availability and storage)。

关键概念

概念描述
MLflow 自定义资源声明一个 MLflow tracking server 的 CR(mlflow.alauda.io/v1alpha1)。一个 CR = 集群中的一个 tracking server。
Workspace一个暴露给 MLflow 作为租户边界的 Kubernetes namespace。Experiments、runs、datasets 和 registered models 都属于某个 workspace。
多租户只有与已配置 label selector 匹配的 namespace(默认是 mlflow-enabled=true)才会作为 workspace 可见;访问权限会基于 Kubernetes RBAC 按 namespace 进行授权。
OAuth proxyoauth2-proxy 位于 tracking server 前端:它先通过平台 SSO 对调用者进行认证,然后将身份令牌转发给 MLflow。

多租户模型

在 Alauda AI 上,MLflow 通过将 workspaces 映射到 Kubernetes namespaces 来实现多租户:

  • 当一个 namespace 带有已配置的 label(默认是 mlflow-enabled=true)时,它就会成为 MLflow workspace
  • 每一次 MLflow API 调用都会先由 OAuth proxy 进行认证,然后使用 mlflow.kubeflow.org API group,基于目标 namespace 中调用者的 Kubernetes RBAC 进行授权。
  • run 会记录在发起调用的用户身份下。

因此,workspace 的成员关系和权限由普通的 Kubernetes Role / RoleBinding 对象管理——请参见 MLflow Workspaces and Access Control

何时使用它

当团队需要一个共享的、受 SSO 保护的实验跟踪、AI-agent tracing 和 model registry 服务,并且每个团队的 runs 和 models 都通过 namespace 隔离并由 Kubernetes RBAC 管理时,请使用 MLflow Operator——而不是使用一个未认证的、单租户的 MLflow server。