ML-Model-CI
NTU出品的MLOps全链路平台,一站式完成模型注册、格式转换、性能评测与Docker部署上线
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
NTU出品的MLOps全链路平台,一站式完成模型注册、格式转换、性能评测与Docker部署上线
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你是一名算法工程师,刚刚在本地训练好了 ResNet-50 模型,想要把它部署成一个能对外提供推理服务的 API。常规操作是什么?安装 TensorFlow Serving、配置 Docker、写 gRPC 客户端、处理模型格式转换……一个下午就没了。而 MLModelCI 正是为了终结这种重复劳动而生的——它把模型从训练完成到线上服务的整条流水线自动化,让这条最后一公里变成一键可达。
MLModelCI 由新加坡南洋理工大学(NTU)的研究团队开发,核心作者黄一峥(Huang Yizheng)等人在 2020 年发表了同名论文《MLModelCI: An Automatic Cloud Platform for Efficient MLaaS》,目前论文已被引用超过 41 次(在学术圈属于相当不错的传播度)。项目最初定位是解决 MLaaS(Machine Learning as a Service)场景下的工程化难题——训练环境与推理环境往往存在巨大鸿沟,模型开发者在实验室调通精度后,还要面对格式转换、推理性能调优、容器化部署等一系列工程挑战。
与很多学术原型项目不同,MLModelCI 选择了完整的工程化路线。它不只是一个论文配套代码,而是构建了一套包含 Web UI、CLI、REST/gRPC API 的完整系统。截至目前 GitHub 获星 198 颗,在 arXiv 学术平台、LinkedIn 均有作者主动推广,具备一定的社区关注度。

图1:MLModelCI Web 前端 Dashboard 界面,提供模型注册、性能监控等可视化操作
MLModelCI 的设计围绕一条完整的 MLOps 流水线展开,拆解为五个核心模块:
作为系统的入口模块,Housekeeper 负责模型的注册、存储、检索和生命周期管理。用户通过 CLI 或 Web UI 将训练好的模型权重文件上传至中心化的 MongoDB 数据库,系统为每个模型分配唯一 ID,支持版本管理。这类似于一个模型版本的「商店」,团队成员可以浏览、搜索、选取已有模型进入后续流水线。
模型上线前必须经过格式转换。Converter 模块支持将训练框架的原生格式转换为多种序列化/优化格式:
TensorFlow SavedModel:TensorFlow 官方推荐的生产环境格式
ONNX:跨框架通用格式,可在不同推理引擎间无缝迁移
TorchScript:PyTorch 的生产级序列化格式
TensorRT:NVIDIA 专为 GPU 推理优化的高性能引擎格式
转换完成后,模型文件会被归档存储,供 Profiler 和 Dispatcher 后续使用。Converter 的价值在于——开发者无需了解各引擎的底层 API,只需一个命令即可完成格式标准化。
模型上线前必须「摸底考试」。Profiler 模块通过 gRPC 客户端模拟真实推理请求,对模型在指定硬件环境下的运行时性能进行全面评估,输出包括 P99 延迟、吞吐量(QPS)、GPU 利用率等多维指标报告。这个模块对于判断模型能否满足线上 SLA 至关重要——比如一个延迟要求 50ms 以内的服务,如果 Profiler 显示 P99 达到 200ms,团队就能提前优化或换用 TensorRT 加速。
Dispatcher 是整个流水线的最后一棒。它将 Converter 输出的模型文件与指定的推理引擎(TensorFlow Serving、Triton Inference Server、ONNX Runtime、FastAPI)绑定,打包为 Docker 容器并启动服务,最终将 MLaaS 端点暴露给外部调用方。整个过程高度自动化,开发者无需手动编写 Dockerfile 或配置 K8s manifest。
Controller 是整个系统的「交通枢纽」,负责协调各模块的执行顺序,并将任务分发到集群中相对空闲的节点,提升整体资源利用率。它同时接收来自监控模块的数据,动态调整任务调度策略。
下面这幅图展示了 MLModelCI 的标准使用流程:

图2:MLModelCI 端到端工作流——从模型注册到 Converter 转换、Profiler 评测、Dispatcher 部署
Step 1:用户注册模型(modelci init + modelci add),Housekeeper 将原始权重存入 MongoDB。
Step 2:Converter 自动触发格式转换,生成 ONNX/TensorRT 等多种优化版本。
Step 3:Profiler 对各版本模型进行性能基准测试,生成详细评测报告。
Step 4:用户在 Web UI 上选择最优版本和推理引擎,Dispatcher 完成容器化部署。
Step 5:系统上线,同时 Controller 持续监控系统健康状态。
从代码结构来看,MLModelCI 采用微服务架构设计:
后端:Python(≥3.7),以 modelci/ 为核心包,app/ 模块提供 FastAPI REST 服务,hub/ 模块封装模型转换/部署的核心逻辑
前端:TypeScript + React(frontend/ 目录),提供完整的 Web UI
数据层:MongoDB(通过 mongoengine/pymongo),存储模型元数据和配置信息
通信协议:gRPC(模型推理通信)+ REST API(Web 层)
容器化:提供 TensorRT CUDA 镜像 + CPU 镜像两种 Dockerfile,docker-compose 支持一键启动
推理引擎支持:TensorFlow Serving、Triton Inference Server(NVIDIA)、ONNX Runtime、FastAPI
依赖栈中值得关注的是 FastAPI ≤ 0.61.2 的版本约束(项目自 2020 年起维护放缓)、PyTorch 1.5.0 和 TensorFlow-GPU 2.1.0 的旧版本锁定,以及对 TensorRT 和 TVM 的可选支持——这些依赖决定了平台对较新模型框架的兼容能力有限。
MLModelCI 提供了开箱即用的容器化部署方案:

图3:通过 modelci service init 一键启动服务
CPU 模式(适合开发和测试):
docker-compose -f docker/docker-compose-cpu-modelhub.yml up
GPU 模式(适合生产推理):
docker-compose -f docker/docker-compose-cuda10.2-modelhub.yml up
硬件需求方面,GPU 模式必须配备 NVIDIA GPU(CUDA 10.2+,建议 8GB+ 显存),CPU 模式则对硬件无特殊要求,8GB+ 内存即可运行完整功能。磁盘空间建议预留 20GB 以上,用于存储镜像和模型文件。
pip 手动安装方式也受支持:pip install git+https://github.com/cap-ntu/ML-Model-CI.git@master,但需要自行配置 MongoDB 环境。
客观来看,MLModelCI 存在几个明显的局限:
1. 维护节奏放缓:项目上一次提交已有一段时间,依赖版本较旧(PyTorch 1.5、TF 2.1),对新版模型框架(如 PyTorch 2.0 动态形状、Transformers 库新模型)的支持可能存在兼容性问题。
2. 复杂依赖门槛:TensorRT、TVM 等可选依赖的安装本身就是一个门槛,这与「降低部署难度」的初衷存在一定矛盾。
3. 竞争格局激烈:MLModelCI 诞生于 2020 年,此后 Triton Inference Server、Ray Serve、BentoML 等开源方案快速发展,MLModelCI 的差异化优势逐渐被稀释。
尽管存在局限,MLModelCI 的学术价值和方向指引意义不容忽视:它是较早系统化提出 MLOps 端到端自动化理念的开源项目之一,为后续 BentoML、Seldon 等项目提供了思路参考。其论文被 41 次引用,在学术圈具备一定影响力。从 GitHub 数据看,198 星的体量虽不算大,但在「模型部署自动化」细分领域属于有代表性的早期探索者。
对于今天希望搭建企业内部模型服务平台的团队,MLModelCI 的模块化设计思路(Converter→Profiler→Dispatcher)值得借鉴,但生产使用时需评估依赖版本更新的维护成本。