MLflow + Kubeflow 搭建 K8s 机器学习平台指南:从实验留痕到模型一键上线
【免费下载链接】mlflowThe open source AI engineering platform for agents, LLMs, and ML models. MLflow enables teams of all sizes to debug, evaluate, monitor, and optimize production-quality AI applications while controlling costs and managing access to models and data.项目地址: https://gitcode.com/GitHub_Trending/ml/mlflow
MLflow 与 Kubeflow 是搭建K8s 机器学习平台的两块互补拼图:前者在集群里提供实验跟踪与模型注册能力,后者把训练流程编排成可复用的 DAG。本文面向新手,带你完整走一遍「连通 → 追溯 → 自动化」的落地路线。
先从一个真实场景说起。你所在的小团队每两周交付一版模型,但每次上线都像在拆炸弹:训练脚本跑在个人机器上,线上服务却部署在 K8s 集群里;出了问题没人说得清线上那个模型对应哪次训练、用了哪些参数;同一个"最佳模型",A 同事复现的指标和 B 同事的总是不一样。模型上线反复返工,根子往往不在算法,而在训练、实验、部署三套流程彼此脱节。
下面这套方案里,MLflow 的 Helm Chart 负责把 Tracking Server 和 Model Registry 装进 K8s(charts/ 目录即官方 chart),Helm 部署文档提供了生产级配置参考;Kubeflow Pipelines(下称 KFP)负责把"数据预处理 → 训练 → 评估"编排成 DAG 并调度训练 Pod;模型最后通过mlflow models build-docker一键打成推理镜像,交给 KServe 之类的推理服务上线。
先分好工:MLflow 与 Kubeflow 在平台里各管什么
选组件前先明确边界,避免后期职责混乱:
| 职责 | 承担组件 | 常用入口 |
|---|---|---|
| 实验跟踪(参数/指标/artifact)、模型注册、Tracking Server 托管 | MLflow | mlflow/tracking/ 源码、Helm chart |
| 训练 DAG 编排、Pod 生命周期与资源配额、流水线重跑 | Kubeflow Pipelines | KFP 组件@component与@pipeline装饰器 |
| 模型推理镜像构建、KServe 部署 | MLflow 模型 + KServe | mlflow models build-docker、部署文档 |
一句话记忆:实验的"账本"记在 MLflow,训练流程的"调度"交给 KFP。两者都跑在同一个 K8s 集群里,通过集群内 DNS 互通,不需要额外的中间件。
打通:MLflow Tracking Server 的 Kubernetes Helm 部署配置方法
🚀 环境要求:Kubernetes 1.23+、Helm 3.8+、已装好 KFP 的集群。
先把 MLflow 装进集群。仓库自带官方 Helm chart,一条命令即可安装(默认 SQLite 存元数据 + PVC 存 artifact,适合团队共享开发环境):
helm install mlflow ./charts \ --namespace mlflow \ --create-namespace \ --set storage.enabled=true \ --set mlflow.backendStoreUri="sqlite:////mlflow/mlflow.db" \ --set mlflow.artifactsDestination="/mlflow/artifacts" kubectl port-forward -n mlflow svc/mlflow-mlflow 5000:5000打开http://localhost:5000看到 UI 即成功。多用户生产环境请换成 PostgreSQL 存元数据、对象存储存 artifact,并把凭证放进 K8s Secret 后通过 values 文件引用——charts/README.md 给出了完整的 values 写法,TLS、Ingress、Prometheus 指标、垃圾回收 CronJob 也都能在这一个文件里配好。
KFP 的安装走 Kubeflow 官方的 kustomize manifest,属于集群级一次性操作,这里不展开。
追溯:训练任务绑定 Tracking URI 与 Pipeline RunID 的配置方法
MLflow 装好后,实验页就能这样按 run 对比参数和指标:
关键是让训练代码"指"向集群里的 Tracking Server,并把 KFP 的运行 ID 记进 MLflow,实现双向追溯:
import os import mlflow mlflow.set_tracking_uri("http://mlflow-mlflow.mlflow.svc.cluster.local:5000") with mlflow.start_run(run_name=os.environ.get("PIPELINE_RUN_ID", "local-run")): mlflow.set_tag("kubeflow_run_id", os.environ.get("PIPELINE_RUN_ID")) train_and_log()两个新手最容易踩的点:
- 集群内访问地址用 Service 的 DNS 名,形如
http://mlflow-mlflow.mlflow.svc.cluster.local:5000(命名空间 + Service 名拼出来),不要写localhost——localhost指向的是 Pod 自己,从 KFP 的训练容器里根本连不通 Tracking Server。 - run_name 直接取流水线 RunID(
PIPELINE_RUN_ID),MLflow 里的一条 run 就天然对应 KFP 的一次执行,排障时双向都能找到源头。
训练代码里照常用mlflow.log_param、mlflow.log_metric、mlflow.sklearn.log_model即可;模型会以标准 MLflow Model 格式登记进 Registry,版本号自动递增,为后面打包部署打下基础。
自动化:模型一键构建容器镜像与 KServe 部署配置方法
模型跑通之后,部署环节也要"声明式"。用 MLflow 的 build-docker 从 Registry 直接取某个版本的模型,构建推理镜像:
mlflow models build-docker \ --registry-uri runs:/<RUN_ID>/model \ -n my-model:$(MLFLOW_VERSION)镜像推到仓库后,用 KServe 的 InferenceService 描述部署(核心字段:镜像 + 资源请求):
apiVersion: serving.kserve.io/v1beta1 kind: InferenceService metadata: name: my-model spec: predictor: containers: - image: my-model:<MLFLOW_VERSION> resources: requests: {cpu: "1", memory: "2Gi"}kubectl apply -f之后 KServe 会处理副本滚动、探活与扩缩容。到这里,KFP 流水线里新增一个"构建 + 部署"组件,就能把训练、记录、上线串成一键式闭环,团队不再需要手工维护 K8s 配置文件与 MLflow 实验之间的映射。
排障避坑:三类典型故障的症状、原因与解法
🩺 按"症状 → 原因 → 解法"对照检查:
- 镜像拉取失败(Pod 处于 ImagePullBackOff):原因是集群节点没有私有镜像仓库的凭证。解法:在 namespace 里创建 DockerConfigJson 类型的 Secret,在 Pod/InferenceService 模板中配置
imagePullSecrets,再确认节点能访问仓库地址。 - 训练任务报 Tracking Server 连接超时:通常是地址写错或网络不通。解法:把 URI 改成 Service 的集群内 DNS 名;在训练容器里
kubectl exec进去做 DNS 解析和 HTTP 请求验证;若 Tracking Server 前面挂了 Ingress 且配了主机名校验,需把域名加进 chart 的allowed_hosts(见 charts/values.yaml)。 - 训练 Pod 被 OOMKilled 或 GPU 任务互相抢占:原因是资源请求没有设好。解法:在 KFP 组件上设置 CPU/内存 request 与 limit,GPU 任务声明
nvidia.com/gpu配额,并用 PodAntiAffinity 把重任务打散到不同节点。
结语:把实验、调度与部署收敛到一个集群里
绕一圈你会发现,这套MLflow Kubeflow K8s 机器学习平台方案的本质是各归其位:MLflow 管好实验元数据、模型版本与推理镜像,KFP 管好 DAG 编排与资源调度,K8s 提供统一的运行底座。实验可复现、部署可追溯、资源可调度,"上线返工"这类问题大多能在这条链路上被提前拦截。未来随着 MLflow 3 持续增强对 GenAI 场景的支持,同一个集群里跑经典模型与大模型应用将越来越自然——这条路线值得尽早搭起来。
【免费下载链接】mlflowThe open source AI engineering platform for agents, LLMs, and ML models. MLflow enables teams of all sizes to debug, evaluate, monitor, and optimize production-quality AI applications while controlling costs and managing access to models and data.项目地址: https://gitcode.com/GitHub_Trending/ml/mlflow
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考