【如何构建高可用的模型在线推理系统?】随着大数据技术和人工智能技术的发展 , 越来越多的业务场景 , 如金融风控、在线广告、商品推荐、智能城市等 , 采用大量的机器学习技术来提升服务质量和智能决策水平 。针对具体的任务 , 训练得到模型后 , 需要将其封装、部署上线 , 提供在线推理服务 , 解决实际业务问题 。
本文提出一种分布式机器学习模型在线推理系统的完整技术方案 , 该系统主要采用CPU/GPU 计算节点来提供推理任务的基础算力 , 通过Docker容器技术封装、打包模型推理任务 , 将不同服务的运行环境完全隔离 , 并借助Kubernetes进行服务编排 , 提供服务的分布式容灾和资源的弹性伸缩功能 , 同时结合模型仓库、容器镜像仓库、系统/服务状态监控、服务注册/订阅、可视化面板等功能模块使算法模型与服务架构解耦 , 使模型的部署上线、更新和管理流程变得简单 , 上线效率高、风险低 , 同时提高预测服务的稳定性、灵活性和服务能力 。
模型在线推理服务部署的技术回顾
1. 现有的技术方法
将模型部署为在线推理服务 , 当前存在以下几种技术方法:
① 直接在物理机器上部署 。将训练好的模型文件及对应的推理代码借助Flask、Tensorflow Serving等封装为Web服务包 , 拷贝至物理机器 , 启动部署 。一个物理机器上可能部署一个或多个模型服务 。然后将服务接口和调用方式通过文档的形式提供给模型服务调用方法 。
② 在虚拟机上部署 。先将物理机器通过vmware、virtual box等虚拟化技术划分为多个虚拟机 , 然后将训练好的模型文件及对应的推理代码借助Flask、Tensorflow Serving等封装为Web服务包部署至一个或多个虚拟机上 。每个虚拟机上一般只部署一个模型服务 , 以避免资源冲突 。为解决大规模并发请求 , 会启用多个虚拟机和模型服务 , 通过负载均衡技术将请求流量分转发至多个机器 。最后将统一的对外服务接口和调用方式通过文档的形式提供给模型服务调用方法 。
2. 现有技术存在的问题
① 由于机器学习模型运行的软件环境、依赖基础库及版本多样 , 不同模型之间存在差异 , 部署不同的模型都需要搭建一次基础环境 , 存在重复工作 , 且可能与模型训练时的环境不一样 , 导致运行异常 。
② 直接在物理机器上部署多个机器学习模型服务时 , 虽然可以通过Conda等工具创建虚拟软件环境的方式隔离多个服务的基础环境 , 但多个服务之间会存在资源冲突 , 影响服务的稳定性 。另外 , 服务均为单实例部署 , 不能保证模型服务的高可用性 。
③ 在虚拟机上部署同样存在基础环境重复搭建问题 。另外 , 为应对大规模服务请求情况 , 往往配置较高的虚拟机数量和硬件规格 , 而大多数服务的调用量往往会随着业务的涨落而涨落 , 经常出现类似白天高、夜间低的现象 , 导致硬件资源在调用量较低期间使用率低 , 造成资源浪费 。
④ 模型推理的准确性由于数据分布的漂移在一定时间后需要重新训练模型 , 更新线上服务 , 当前的部署方式需要人工选择某个版本的模型文件、上传 , 替换线上的模型文件 , 根据模型服务封装方式的不同 , 可能还需要重启服务 , 导致线上服务中断 。另外 , 该更新过程需要人工操作、无法自动化 , 且过程繁琐、缺乏统一管理和追踪 , 容易出错 。
高可用模型在线推理系统的设计
1. 总体设计思路
① 基于容器技术 , 通过预置模型服务的执行环境和容器镜像 , 支持Scikit-learn、Tensorflow、PyTorch、Keras、Caffe、MXNet等多种模型框架和基础环境 , 无需重复搭建机器学习模型运行的软件环境 。
② 基于开源Kubernetes技术和自研插件 , 构建Kubernetes集群 , 对CPU异构集群、GPU异构集群、Ceph/HDFS存储服务等基础资源进行隔离和合理的分配、调度 , 为模型服务提供高可用的运行时环境 , 将计算节点集群化 , 提供全系统容灾保障 , 无需担心单点故障 。
推荐阅读
- 一篇短文介绍 Defer 是如何工作的
- python 如何使用HttpRunner做接口自动化测试
- 无服务器技术如何实现最佳的DevOps实践
- 如何用DL4J构建起一个人脸识别系统
- 如何看客厅风水是藏风纳气还是一泻千里?
- 客厅风水:客厅地板如何装饰?
- 如何让客厅风水带动家居运气
- 客厅的沙发应当如何摆放?
- 客厅风水:如何布置客厅的财位?
- 黄山毛峰茶的冲泡方法,黄山毛峰如何冲泡
