ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

把 MLflow 部署到 Kubernetes:从单机脚本到集群服务的落地指南

把 MLflow 部署到 Kubernetes:从单机脚本到集群服务的落地指南 把 MLflow 部署到 Kubernetes从单机脚本到集群服务的落地指南【免费下载链接】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本地 notebook 里跑得好好的训练脚本一上多机就露馅实验往哪记没人管模型版本对不上服务谁来起更是空白。MLflow 的 Kubernetes 部署MLflow Kubernetes 部署正好补这块——它用官方 Helm chart 把 Tracking Server 跑进集群再用 projects 的 K8s 后端把训练任务提交成 Job实验、模型、部署各归其位。先判断它适不适合你的场景先花 10 秒确认这条路对不对得上你的情况别一上来就装维度说明适合谁已有 K8s 集群、想让实验平台跑在团队共享集群上而不是每人本地起个 server 的工程师前置环境Kubernetes 1.23、Helm 3.8kubectl能指向目标集群跑训练 Job 还需docker和kubernetesPython 包不推荐只想一个人本地验证、或还没有集群的同学——直接mlflow server更省事别为了上云而上云一句话有集群、有协作需求才值得走这条路。否则下面这套对你只是负担。它们是怎么配合的MLflow 在 K8s 上有两副面孔别混为一谈。第一副是Tracking Server用 Helm chart 部署的常驻服务负责收实验的 params、metrics 和模型 artifactartifact 就是训练产出的文件比如模型权重它是数据的仓库管理员。第二副是projects 的 Kubernetes 后端一个 Python 模块mlflow/projects/kubernetes.py把你的训练项目打包成 docker 镜像、推到 registry再在集群里起一个JobJob 是 K8s 里跑完就停的一次性任务区别于长期运行的 Deployment来执行训练。数据流向很直白训练 Job 在容器里调用mlflow.log_*通过集群内的 Service 地址把元数据写回 Tracking Server跑完后你在 Server 的 UI 上就能看到这次 Job 记录了什么。镜像和模板这些 K8s 侧的东西由你给配置MLflow 负责编排。落地实现搭环境装 Tracking Server这一步做的是把 MLflow Server 拉进集群给它一个持久的存储卷存 SQLite 元数据和 artifact。仓库自带生产就绪的 Helm chart直接装即可。helm install mlflow ./charts \ --namespace mlflow --create-namespace \ --set storage.enabledtrue \ --set mlflow.backendStoreUrisqlite:////mlflow/mlflow.db \ --set mlflow.artifactsDestination/mlflow/artifacts⚠️ SQLite 本地文件存储只适合验证。多人/高并发生产把 backend 换成 PostgreSQL、artifact 换对象存储参考 生产示例 values。写流程一份能提交到集群的训练脚本这一步写的是要被 Job 执行的活。要点是别依赖本地./mlruns而是通过集群内 Service 域名连回 Tracking Server这样 Job 和 Server 在同一个网络里。import mlflow from sklearn.linear_model import SGDClassifier from sklearn.datasets import load_wine mlflow.set_tracking_uri(http://mlflow-mlflow.mlflow.svc:5000) X, y load_wine(return_X_yTrue) model SGDClassifier(max_iter100).fit(X, y) with mlflow.start_run(run_namewine-sgd): mlflow.log_param(max_iter, 100) mlflow.log_metric(acc, model.score(X, y)) mlflow.sklearn.log_model(model, model)打通元数据把脚本提交成 K8s Job这一步是关键衔接——用--backend kubernetes让 MLflow 接管打包镜像 → 起 Job的全过程你只提供一个 Job 模板声明资源。export KUBE_MLFLOW_TRACKING_URIhttp://mlflow-mlflow.mlflow.svc:5000 mlflow run examples/docker \ --backend kubernetes \ -P kubernetes_configexamples/docker/kubernetes_config.jsonKUBE_MLFLOW_TRACKING_URI会被注入到 Job 的容器环境里保证容器内连的是集群内地址而非 localhost。Job 的容器资源CPU/内存/镜像模板在 K8s Job 模板 里声明改这里就能给 GPU 任务加nvidia.com/gpu之类的 limits。发布与验证暴露端口看结果验证阶段先把端口映射到本地浏览器打开就能看实验无需额外配置 Ingress。kubectl port-forward -n mlflow svc/mlflow-mlflow 5000:5000要对外服务、走域名时在 values 里开ingress.enabled并配好allowed_hosts否则公网请求会被 host 校验挡掉。怎么确认做对了按上面四步每步都有个能自检的点环境kubectl get pods -n mlflow应看到mlflow-mlflow-xxx状态为Running、1/1port-forward后打开http://localhost:5000能进 UI。元数据UI 的实验页应出现名为wine-sgd的 run展开能看到max_iter参数、acc指标以及model这个 artifact 目录集群侧kubectl get jobs -n ns对应 Job 状态为Succeeded。发布port-forward的日志里能看到/api/2.0/...的200响应模型页能看到刚 log 的模型说明 artifact 通道通了。出问题时现象Pod 反复CrashLoopBackOff起不来。原因storageClassName和集群不匹配kind/minikube 用standardEKS 用gp2PVC 一直 Pending。解决在 values 里改storage.storageClassName为你集群实际的值helm upgrade重装。现象port-forward 本地访问正常换公网域名就 403。原因MLflow 的 host 校验中间件默认只放行localhost和内网 IP。解决给 Ingress 配server.value_options.allowed_hosts设为你的公网域名同时开 TLS。现象Job 里mlflow.log_*全部超时或连不上。原因容器内误连localhost——Job 和 Server 不在同一 Pod本地回环当然不通。解决确认注入了KUBE_MLFLOW_TRACKING_URI且指向集群内 svc 域名而不是本机地址。现象helm uninstall后想重装旧数据莫名其妙还在或 PVC 卡住。原因uninstall不会删 PersistentVolumeClaim。解决手动kubectl delete pvc -n mlflow --all清掉残留卷。走通这条链路你拿到的是三样东西共享的实验仓库不再每人本地一套、可编排的训练任务资源在 Job 模板里声明、GPU 随用随加、声明式的部署改 values 再 upgrade而不是手改 YAML。完整配置与生产部署细节见 K8s Helm 部署文档chart 源码在 charts/。【免费下载链接】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),仅供参考
返回列表