一文读懂my_ml_service架构:Django如何优雅管理多个机器学习模型版本

发布时间:2026/8/27 15:24:49
一文读懂my_ml_service架构:Django如何优雅管理多个机器学习模型版本 一文读懂my_ml_service架构Django如何优雅管理多个机器学习模型版本【免费下载链接】my_ml_serviceMy Machine Learning Web Service项目地址: https://gitcode.com/gh_mirrors/my/my_ml_service在机器学习项目中训练出模型只是第一步真正让人头疼的是模型版本的上线、切换与验证。my_ml_service 是一个基于 Django Django REST Framework 构建的机器学习 Web 服务它把机器学习模型版本当作结构化数据存进数据库用一个 REST API 就能完成模型注册、版本切换、A/B 测试与请求审计。这篇文章带你一文读懂 my_ml_service 的架构看看 Django 如何优雅管理多个机器学习模型版本。为什么用 Django 管理模型版本传统做法里模型通常以文件形式硬塞进服务代码换版本要改代码、重启服务。my_ml_service 换了思路同一接口挂多个版本一个 endpoint 下可以同时存在多个模型版本各按状态独立管理状态机控制上线模型按testing → staging → production流转切换只改数据库状态全程可审计每次预测的输入、输出、反馈全部落库支持 A/B 评测与合规追溯A/B 测试自动化两个版本随机分流测试结束自动用真实反馈评出胜负核心设计就在 models.py 里的 5 个数据模型。4 个角色撑起的模型版本账本模型职责关键字段EndpointML API 的入口name即 API 路径中的名字MLAlgorithm一个具体的模型版本version、code完整算法源码、ownerMLAlgorithmStatus版本的状态status、active同时只有一个生效MLRequest每次预测的审计日志input_data、response、feedbackABTest两个版本之间的对战记录parent_mlalgorithm_1/2、summary精髓在于MLAlgorithmStatus同一个模型可以有多个状态记录但同一时刻只有一个activeTrue。新状态激活时旧状态在数据库事务中被批量置为失效views.py 中的deactivate_other_statuses从机制上杜绝了版本混乱。MLRegistry把版本同时写进数据库和内存服务启动时wsgi.py 会实例化各个机器学习算法类并逐一注册进 MLRegistryregistry.add_algorithm(endpoint_nameincome_classifier, algorithm_objectrf, algorithm_namerandom forest, algorithm_statusproduction, algorithm_version0.0.1, ...)add_algorithm做了两件事用get_or_create在Endpoint、MLAlgorithm、MLAlgorithmStatus表中登记版本信息数据库可查询、可审计把算法对象放进内存字典self.endpoints内存预测时快速取用谁在线上因此有了双重保障数据库负责管理面内存负责服务面。income_classifier 端点的两个模型项目在 Adult-Income 数据集预测年收入是否超过 5 万美元上训练了两个分类器挂在同一个income_classifier端点下模型实现初始状态Random Forestrandom_forest.pyproductionExtra Treesextra_trees.pytesting两个算法类遵循统一接口compute_prediction内部串起 preprocessing → predict → postprocessingjoblib 模型工件放在research/目录训练代码见 train_income_classifier.ipynb。一个 predict 接口精准路由到目标版本 预测接口在 urls.py 中统一定义调用形如POST /api/v1/endpoint_name/predict?statusproductionversion0.0.1核心逻辑在 PredictViewURL 决定端点查询参数决定状态与版本状态默认production查库筛选该状态下激活的模型列表若命中多个且不是 A/B 测试直接返回 400 错误要求显式指定version——含糊的部署永远不会发生计算预测结果并落库一条MLRequest响应中附带request_id供后续追踪同一个端点服务多个模型版本调用方加一个查询参数即可切换这正是版本管理的优雅所在。A/B 测试让两个模型版本正面交锋 ABTest模型把两个MLAlgorithm版本绑定在一起。创建测试时views.py两个模型的状态会被事务性地切到ab_testing并激活此后 predict 接口以 50/50 的概率把请求分给任意一个版本。停止测试时StopABTestView 完成决赛结算统计各版本在测试期间的请求用MLRequest中response与feedback的匹配率算出真实准确率准确率更高的版本自动晋升production落败方降级testing测试结论写入ABTest.summary由此形成数据驱动发版闭环训练 → 注册 → 测试 → A/B → 上线全程由数据库状态驱动无需改一行代码。模拟 A/B 实验的笔记在 ab_test.ipynb。Docker Compose 一键部署最快配置方法项目提供 Nginx wsgiserver 双容器方案Nginx 负责反向代理与静态文件配置见 docker-compose.ymlgit clone https://gitcode.com/gh_mirrors/my/my_ml_service cd my_ml_service docker compose up -d启动后访问http://localhost:8000/api/v1/endpoints可查看已注册端点调用/predict接口即可体验完整的模型预测与版本路由流程。依赖版本固定在 requirements.txt 中Django 2.2、djangorestframework、scikit-learn、pandas 等。总结my_ml_service 架构的 3 个亮点 ✅设计带来的价值数据库存储模型版本与状态同一端点多版本共存状态机决定哪个版本对外服务事务中自动切换 active 状态新状态激活即失效旧状态杜绝版本冲突每次请求落库为 MLRequest可审计、可回溯还能驱动 A/B 评测与模型迭代如果你需要把机器学习模型投入生产并想用一个成熟的 Web 框架管好版本、状态、审计这三件事my_ml_service 这套 Django 架构非常值得参考。【免费下载链接】my_ml_serviceMy Machine Learning Web Service项目地址: https://gitcode.com/gh_mirrors/my/my_ml_service创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考