
使用 MLflow Ray Serve 插件部署并扩缩容 Iris 分类模型【免费下载链接】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 开源仓库中以 examples/ray_serve 示例为蓝本完成训练模型 → 注册到 Model Registry → 通过 Ray Serve 部署 → 在线预测 → 横向扩容 → 清理下线的完整闭环。读者将掌握 MLflow 部署插件mlflow deployments命令族在 Ray Serve 目标上的实战用法理解-t、-m、--config等参数背后的解析逻辑并学会用一套命令完成模型服务的全生命周期管理。示例概览与整体流程本示例的核心路径如下全程使用 MLflow 官方提供的部署插件机制无需手写任何服务端代码用sklearn训练一个用于分类 Iris鸢尾花数据集的GradientBoostingClassifier模型通过mlflow.sklearn.autolog()自动记录训练信息并把模型注册进 Model Registry注册名为RayMLflowIntegration启动 Ray 集群与 Ray Serve将注册模型models:/RayMLflowIntegration/1部署为名为iris:v1的服务实例用input.json中的样本花萼/花瓣尺寸发起预测得到[0]、[1]或[2]三个类别索引之一通过num_replicas2将服务扩容为 2 个副本提升吞吐删除部署实例并关闭 Ray 集群。该流程涵盖了模型服务化部署中最常见的操作且每一步都有对应的mlflow deployments子命令支撑方便读者直接照搬用于自己的模型。环境准备与插件安装示例假定你已安装 MLflow 以及mlflow[deployments]相关依赖。Ray Serve 部署能力由社区插件mlflow-ray-serve提供需按插件仓库的安装指引单独安装可通过pip install mlflow-ray-serve一类的包管理器安装。安装后MLflow 会通过 entry point 自动发现该插件无需额外配置。验证插件是否生效可以运行mlflow deployments --help如果插件安装成功mlflow deployments的帮助信息中会列出当前已安装的部署目标supported targets其中应包含ray-serve。这一行为由 mlflow/deployments/cli.py 中的逻辑决定CLI 启动时会读取插件注册表把已注册的 target 名称拼进帮助文案。训练模型并注册到 Model Registry首先进入示例目录并运行训练脚本cd examples/ray_serve python train_model.pyexamples/ray_serve/train_model.py 的内部流程如下设置 Tracking URI 为本地 SQLite 数据库sqlite:///mlruns.db并开启mlflow.sklearn.autolog()自动记录超参数、指标与模型产物加载 Iris 数据集使用shuffle打乱后按 100/50 划分训练集与验证集训练GradientBoostingClassifier打印验证集 MSE 与三类目标名称MSE: 1.04 Target names: [setosa versicolor virginica]通过mlflow.last_active_run()拿到当前 run_id将自动记录的模型以runs:/run_id/model为 URI 注册为RayMLflowIntegration并打印注册名与版本号通常为 1。model_uri fruns:/{run_id}/model registered_model_name RayMLflowIntegration mv mlflow.register_model(model_uri, registered_model_name) print(fName: {mv.name}) print(fVersion: {mv.version})这一步是本示例的关键后续部署命令使用的models:/RayMLflowIntegration/1正是注册模型名 版本号形式的 Model URI它让部署目标无需关心模型文件的具体存储位置只认注册中心里的模型版本。启动 Ray 集群与 Ray Serve训练完成后设置 Tracking URI 环境变量使部署命令能访问存放 Model Registry 的数据库export MLFLOW_TRACKING_URIsqlite:///mlruns.db注意train_model.py内部已经把 Tracking URI 写死为sqlite:///mlruns.db因此这里的export主要是为了让后续的mlflow deployments命令行进程也能定位到同一个注册库。示例中的mlruns.db是一个相对路径实际使用时应替换为你自己的注册库位置。接着启动单节点 Ray 集群再在该集群上启动常驻的 Ray Serve 实例ray start --head serve startray start --head会在本机启动一个 head 节点分布式场景下可再添加 worker 节点serve start则向该集群提交一个常驻的 Serve 控制器此后 Serve 即可接收部署请求。部署模型到 Ray Serve使用mlflow deployments create创建部署实例mlflow deployments create -t ray-serve -m models:/RayMLflowIntegration/1 --name iris:v1参数含义参数说明-t/--target部署目标此处为ray-serve对应已安装插件的注册名-m/--model-uri模型 URImodels:/注册名/版本指向 Model Registry 中的某个模型版本--name部署实例名称示例中为iris:v1name:version风格-C/--config可选目标相关的键值对配置形如-C num_replicas2-f/--flavor可选指定要部署的模型 flavor缺省时自动推断命令执行后终端会输出类似sklearn deployment iris:v1 is created的信息其中 flavor 为sklearn。命令背后的插件解析机制-t ray-serve的解析发生在 mlflow/deployments/utils.py 的parse_target_uri()无 scheme 的裸名称如ray-serve直接作为 target 名返回而带 scheme 的 URI如ray-serve:/suffix则取其 scheme 部分。随后 mlflow/deployments/interface.py 的get_deploy_client()会到插件注册表中按该名称查找mlflow.deploymentsentry point 对应的插件模块校验其实现了BaseDeploymentClient子类及必需的接口后实例化并返回客户端对象再由 CLI 调用其create_deployment方法。插件注册发生在 mlflow/deployments/plugin_manager.pyDeploymentPlugins在初始化时通过register_entrypoints()遍历所有声明了mlflow.deploymentsentry point group 的已安装包完成自动注册——这就是安装插件后无需手工配置的原因。发起在线预测input.json中存放的是一条样本输入包含一朵样本花的花萼长、花萼宽、花瓣长、花瓣宽四个特征[[4.6, 3.1, 1.5, 0.2]]执行预测命令mlflow deployments predict -t ray-serve --name iris:v1 --input-path input.json输出为[0]、[1]或[2]分别对应目标名称setosa、versicolor、virginica三个类别。CLI 实现中mlflow/deployments/cli.pypredict子命令通过pandas.read_json(input_path)读取输入文件调用插件客户端的predict方法结果默认以 JSON 形式打印到标准输出也可以用-O/--output-path将结果写入 JSON 文件。--name与--endpoint二选一同时指定或都不指定会报错。水平扩容增加副本数无需重建服务直接通过update命令把部署实例扩容为多个副本mlflow deployments update -t ray-serve --name iris:v1 --config num_replicas2num_replicas是 Ray Serve 插件识别并转发给 Ray Serve 的部署配置用于控制该部署的副本数量。示例仅用了 2 个副本实际可依据 Ray 集群可用 CPU 核数自由调整。扩容是提升在线服务吞吐量的常用手段——每个副本独立处理请求多副本并行即可摊薄单副本负载。update命令同时支持更新模型 URI 与 flavormlflow/deployments/cli.py也就是说不仅可以横向扩容还能在不停机的情况下把部署切换到 Model Registry 中的新模型版本。删除部署与关闭集群验证完毕后清理资源mlflow deployments delete -t ray-serve --name iris:v1 ray stopdelete命令会调用插件客户端的delete_deployment方法删除指定名称的部署实例随后ray stop关闭整个 Ray 集群释放计算资源。至此从训练、注册、部署、预测、扩容到下线的完整生命周期全部走完。常用部署命令速查mlflow deployments是一个完整的子命令族均定义于 mlflow/deployments/cli.py除上述命令外还包含命令作用mlflow deployments list -t ray-serve列出该目标下所有部署实例名称mlflow deployments get -t ray-serve --name iris:v1打印指定部署的详细信息mlflow deployments help -t ray-serve显示该目标插件支持的配置项与 URI 格式说明mlflow deployments run-local -t ray-serve -m models:/RayMLflowIntegration/1 --name iris:v1本地试运行部署便于调试不可被 update/delete 管理mlflow deployments explain -t ray-serve --name iris:v1 --input-path input.json生成预测解释输出格式因目标而异mlflow deployments create/update/delete/predict也提供了等价的 Python API调用 mlflow/deployments/interface.py 的get_deploy_client(ray-serve)获得客户端后即可直接调用create_deployment、predict、update_deployment、delete_deployment等方法便于在训练流水线中以代码方式编排部署。小结通过本示例可以确认MLflow 的部署插件机制让注册模型 → 远程部署 → 在线预测 → 动态扩缩容完全可以通过 CLI 或 Python API 一键化完成而具体的目标实现如 Ray Serve 的副本管理、HTTP 暴露等被插件封装在mlflow.deploymentsentry point 之后。示例中的 train_model.py、input.json 与部署插件解析逻辑cli.py、interface.py、plugin_manager.py共同构成了一条可复制、可扩展的模型服务化参考路径。【免费下载链接】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),仅供参考