功能介绍
MLOps 致力于将繁重晦涩的 AI 模型工程进行解构。系统将使用空间按算法应用类别进行了切面,每类应用都有统一的四大中坚功能域,以下为您拆解 MLOps 模块的全图结构与核心主航道能力。
1. 算法场景统一纳管
这里是整个引擎的心跳总线,根据不同的业务形态对底层物理及逻辑结构提供软隔离空间。
- 多源异构模型集装:所有内置的 6 大算法大盘(异常检测/时序预测/日志聚类/文本分类/图片分类/目标检测)统一提供同构同源的信息架构链路(以解决用户在不同场景不同供应商模型下因为组件繁多乱序难以开展统一治理的鸿沟差异)。
- 可插拔算法配置(Algorithm Config):每个算法场景下的具体算法(如 ECOD、Prophet、Spell 等)均通过数据库算法配置表动态管理。配置项涵盖:算法标识(
name)、展示名称(display_name)、场景说明(scenario_description)、Docker 训练/推理镜像(image)及动态表单定义(form_config)。管理员可通过界面启用/禁用特定算法,禁用后系统会校验是否有正在使用该算法的训练任务,若有则拒绝禁用,确保在用算法不被意外下线。系统启动时可通过初始化命令一次性导入所有内置算法预设。 - 内置算法清单:
- 异常检测:ECOD(多维异常点检测)、EWMA(渐进式时序异常)、PELT(变点/状态切换检测)
- 时序预测:Prophet(趋势与季节性预测)
- 日志聚类:Spell(在线日志模板挖掘)
- 文本分类:XGBoost、GradientBoosting、RandomForest
- 图片分类:YOLOClassification
- 目标检测:YOLODetection
2. 数据集管理
“模型吃什么就长成什么样”。该模块不仅是存储硬盘,更是控制投喂标准的源头工坊。
- 结构化样本管理与预标记:除了满足基础的多场景文件或媒体流图片文件的直传增删改查外,内置关键的用途打标配置器,指定每条独立条目的用途是”训练”(
is_train_data)、”验证”(is_val_data)还是”测试”(is_test_data),三标志互不排斥、可复合标记(解决数据资产入库后,如果不对质量进行圈定,会导致整个训练周期失控的底线要求)。 - 时间截面发行器控制:利用强大的发布版本基线快照模型,支持随时将整理好的数据基线进行「归档」、「恢复」,或是下载全量压缩包(用来规避持续滚动的人工样本标注覆盖掉早期高价值实验模型的依赖回滚事故)。发布版本状态流转:待发布 → 发布中 → 已发布,同时支持手动「归档」与「恢复归档」,帮助团队管理历史版本生命周期。
- 组织归属隔离:数据集及其子资源(训练数据条目、发布版本)均通过
team字段绑定至具体组织,子资源的权限通过父数据集的组织归属自动继承,无需额外配置。训练任务启动时平台会校验其关联数据集版本是否与任务的组织归属一致,防止跨组织数据被误用于训练。
3. 训练任务编排与观测 (Training)
将原先基于控制台后台手敲的 python .py 训练脚本转化为平台高度所见即所得的可控状态机。
- 受控化的周期引擎编排:强制任务必须强绑定既定的历史数据集与唯一模型算法参数表单,且能够全界面化的操作启动与停止。平台通过乐观锁机制防止同一任务被并发重复启动(
claim_train_job_running原子锁),启动失败时自动回滚任务状态,避免状态悬挂。启动前会自动清理同一任务上可能残留的旧训练容器,保证每次训练都是干净的起点。 - Celery 异步状态轮询:训练启动后由 Celery Beat 调度异步任务(
poll_train_job_status)每 30 秒向 MLflow 查询最新 run 状态,最长轮询约 3 小时。若 MLflow 连续出现 10 次以上查询异常,平台会向 webhookd 核实训练容器的实际运行状态:容器仍在运行则降级为低频(5 分钟)轮询,容器已消失则将任务标记为失败,避免因监控链路故障导致训练假失败或状态僵死。 - MLflow Run 管理:每次「启动训练」会在 MLflow 中创建一条新的 run 记录。平台展示当前训练任务的所有历史 run 列表(含耗时、起止时间、状态),支持查看单条 run 的运行参数(
run_params)和各项指标历史曲线(metrics_history),可针对不符合预期的历史 run 执行「软删除」操作(标记删除,MLflow 数据不丢失,可恢复)。正在运行的 run 受保护,不允许删除。 - 模型产物下载:对任意已完成的 run,支持从 MLflow artifact 拉取模型文件并打包为 ZIP 直接浏览器下载,供离线分析或外部部署使用(图片分类和目标检测场景提供此能力;传统 ML 场景同样支持)。
- 超参数配置同步至 MinIO:创建或修改训练任务时,平台会将超参数配置(
hyperopt_config)与完整的 MLflow/模型配置合并,生成一份 JSON 文件上传至 MinIO,作为训练容器的配置来源。若 MinIO 上传失败,整个保存操作会事务回滚,防止数据库与配置文件不一致。
4. 能力发布与实时推断 (Serving)
承接产物并使其落地变现为可向外部系统源源不断供血的企业公共服务窗口。
- 热插拔的无缝模型上架引擎:与系统的真实运行时深度绑定,支持直接通过一键点击来挂载发布新的预测推理服务以及其背后的容器接管能力分配(避免数据科学家为了对外发布预测模型不得不再次跨组寻找运维工程师搭建 k8s 应用与 Nginx 规则墙的漫长低效过程)。容器编排经平台底层的 webhookd 执行器统一拉起,同时兼容
docker与kubernetes两种运行时,所用推理镜像由各算法场景的「算法配置」动态指定,平台不绑定固定的打包框架。 - 覆盖全生命周期的服务托管:
- 新建:创建服务记录时平台自动调用 webhookd 拉起推理容器,若同名容器已存在则同步容器现有状态;
- 启动:手动启动一个已停止的服务,同样处理容器已存在的边界情况;
- 停止:停止并删除容器(释放端口资源),服务记录保留;
- 移除:强制删除容器(可处理运行中的容器);
- 删除记录:先清理容器,成功后才删除数据库记录,防止僵尸容器残留;
- 配置变更自动重启:更新模型版本、关联训练任务或指定端口时,若容器正在运行,平台会先删除旧容器再拉起新容器使变更生效。
- 容器状态实时同步:列表和详情页每次访问都会批量向 webhookd 查询真实容器状态(
state、port等)并写回数据库;若 webhookd 请求失败则降级显示数据库中的历史状态并附加错误标记,不影响页面可用性。 - 推理地址动态构建:推理 URL 不做持久化存储,每次请求时按运行时动态拼接:
- docker 模式:
http://{serving_id}:3000/predict(容器名寻址) - kubernetes 模式:
http://{service_name}.{namespace}.svc.cluster.local:3000/predict(集群内 DNS) - 主机模式:
http://{DEFAULT_ZONE_VAR_NODE_SERVER_URL_host}:{port}/predict
- docker 模式:
- 沙箱可视化体验推理:网页内置在线推理工作区,可直接提交数据并即时查看模型返回结果,无需编写代码或对接 API。
- 在线推理请求规模上限保护:为保障推理服务的稳定性与响应质量,平台对单次在线推理(Predict)请求的数据规模设置了默认上限。文本及结构化数据类场景(异常检测、时序预测、日志聚类、文本分类)单次最多提交 10,000 条;图片类场景(图片分类、目标检测)单次最多提交 100 张,且每张图片大小不超过 10 MB。超出上限的请求将被拦截并给出明确提示,避免因批量数据阻塞服务资源。如业务场景有更高吞吐需求,平台管理员可在部署配置中通过环境变量
MLOPS_PREDICT_MAX_BATCH_SIZE调整对应上限参数。
5. 多组织权限隔离
MLOps 的根资源(数据集、训练任务、能力发布)均支持与一个或多个组织(team)绑定,实现跨部门数据与模型的硬隔离。
- 资源归属绑定:数据集、训练任务、能力发布在创建时必须指定所属组织,列表查询时自动按当前登录组织过滤,非超级管理员用户只能看到属于其所在组织的资源。
- 子资源自动继承:训练数据条目和数据集发布版本不单独持有
team字段,权限通过父数据集的组织归属继承(ORM 通过dataset__team过滤)。 - 训练启动前组织校验:启动训练任务时,平台会校验其关联数据集版本的组织归属是否与训练任务自身的组织归属一致,防止跨组织数据被误用于训练。
- 推理服务组织校验:创建能力发布时,平台会校验关联训练任务的组织归属是否与当前组织匹配,杜绝跨组拉起他组模型服务。
- MLflow run 范围隔离:指标历史、run 参数、run 删除、模型下载等旁路接口均会先校验目标 run 是否属于当前用户有权访问的训练任务,外部伪造 run_id 不会泄露其他组织的训练数据。
- 超级管理员例外:超级管理员(
is_superuser)不受组织过滤限制,可跨组织查看全量资源,适用于平台运维与排障场景。
6. NATS 数据接口
MLOps 通过 NATS 消息总线对外暴露两个标准化接口,供其他 BK-Lite 模块(如告警、监控)查询资源列表:
get_mlops_module_list:返回所有模块及其子模块的枚举列表(数据集 / 训练任务 / 能力发布 × 6 大场景 = 18 个子模块)。get_mlops_module_data:按模块、子模块、分页参数和组织 ID 查询对应资源的 id/name 列表,单次最多返回MLOPS_NATS_MAX_PAGE_SIZE(默认 500)条。
🖼️ 界面指引:
- 配置逻辑:这是当您上线完成模型服务后的体验页。无论底层算法场景是 CV 图片分类还是日志溯源,您只需要在此界面的输入工作区放好格式文本,点击大按钮,系统都会实时跨过内置的服务防火墙拿到返回结果并可视化投射在右侧的结果栏为您定界参考。
⚠️ 注意 / 安全最佳实践:
- 数据一旦处于挂载训练状态或发布为不可变的版本基线后不允许再强销毁原始映射。
- 模型发布上线服务本质会调集平台底层物理容器(Container)池进行真实的运行派发并占用硬件端口层实例。在结束周期性的预测批跑项目后,推荐各位管理员养成良好习惯进入后台「能力发布」区域及时手动处于驻留状态的运行任务执行 「停止」或「移除」,防止平台出现计算资源的僵尸侵蚀。
