AoE:如何管理好模型?

2023-10-21 23:40
文章标签 模型 管理 aoe

本文主要是介绍AoE:如何管理好模型?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:丁超

前言

越来越多的业务会用到AI相关的技术,大多数的AI模型是部署在云端使用的,毕竟服务端计算更快,管理也更容易。随着终端设备性能提升,在终端使用 AI 模型有了更大的价值,可以更好满足业务对响应实时性、数据隐私性的需求。滴滴出行的银行卡识别功能也打算部署在客户端,但是遇到的问题也不少:

  1. 模型升级困难,模型在终端的存在一般都是已应用软件为载体,用户可以选择是否对应用软件进行更新,导致模型版本会产生分化。
  2. 硬件适配问题,不同的终端设备因为厂商深度定制因素,会出现一些兼容问题
  3. 不同模型运行框架不同,对于客户端工程师不够友好。

针对这些问题滴滴的终端智能团队推出了AoE作为解决方案,设计之初就将多模型管理支持可能升级、多框架支持、模型加密等功能定为基础设施。

AoE是怎么做好模型管理的

我们针对遇到的问题,主要做了3部分工作:

  1. 尝试了多机型覆盖测试做好模型的验证
  2. 利用运行环境配制化来实现加载模型
  3. 通过动态更新来升级模型

下面针对这三项分别进行介绍。

运行环境配置化

AoE SDK将推理框架总结了5个过程,它们分别是初使化、前处理、执行推理、后处理、释放资源。对 AoE 集成运行环境来说,最基本的便是抽象推理操作,通过 依赖倒置 的设计,使得业务只依赖AoE的上层抽象,而不用关心具体推理框架的接入实现。这种设计带来的最大的好处是开发者随时可以添加新的推理框架,而不用修改框架实现,做到了业务开发和 AoE SDK 开发完全解耦。

用户只需要简单的描述json文件即可完成对运行环境的配置,简化了用户的使用过程,更为简洁高效。

简单的配置如下:

{"version": "1.0.0",           // 版本号"tag": "tag_mnist",           // 区分业务场景"runtime": "tensorflow",      // runtime类型"source": "installed",            // 安装源"modelDir": "mnist",              // 所在文件夹"modelName": "mnist_cnn_keras",   // 模型文件名"updateURL": "https://www.didiglobal.com"   // 升级配置链接
}
机型覆盖测试

针对硬件差异的问题,我们在做模型验证期间尝试了多机型的覆盖测试,将模型在不同机型上的表现都记录下来反馈给模型生产团队,帮助模型不断的升级修复。

截取了部分测试时产生的耗时对比数据大致如下:

AoE:如何管理好模型?

虽然模型不相同,使用指令可能不同,但是大致也可以了解到机器的性能,具体数值仅供参考。在这个过程中,沉淀下来了benchmark工具来帮助验证多机型的覆盖测试,将来这个工具也会是开源的一部分来帮助大家验证模型的可用性,以及建立有效的机型比较。

动态更新

AoE的模型管理模块将模型按分发方式分为两种:

  1. 本地模型,意为应用软件自带的模型
  2. 远程模型,则是通过策略配置,从服务器下载匹配模型到本地的模型

本地模型与远程模型最大的区别就是本地模型无法更改,只能跟随应用软件一起更新,而远程模型则是通过和本地模型作比较后更新的较新模型,模型与模型之间通过版本做比较。本地模型与远程模型二者可以共存,也可以单独存在,在最新版的滴滴出行中,为了减少包的大小甚至没有本地模型,所有的模型都是来自远端下载。

之所以将模型分成两部种,是为了保证模型是可用的且可靠的,为什么这么说?一般本地模型都是经过长时间测试后才作为稳定版本跟随APP带到了线上,既可以作为最新版本,又可以作为后来的稳定版本:即使发现后来下载升级的远程模型效果不理想也可以通过灰度测试停止远程使用远程模型的使用,保证模型的高可用性。

远程模型的存在使业务模型拥有了动态更新的能力,方便了产品的迭代,不再依赖客户端的发布周期。在动态开关的写协助下,甚至可以做到精确指定模型版本的加载。

整体模型管理的结构如下图:

AoE:如何管理好模型?

模型加载怎么使用?

模型管理器是AoE的一个基础组件,以iOS为例,组件实现在Loader目录下。默认支持的模型配置文件为json格式,运行环境配置化部分的代码就描述了mnist demo的配置。

模型和模型配置文件名的格式配置以及远程版本存放地址,都可以通过继承AoEModelConfig类来做修改,具体的使用方式可以参照squeezenet的实例

在已经开源的版本中AoE还为大家提供了单功能多模型的支持,拿银行卡识别来举例,整个过程分两步,一是找到卡片以及卡片上的数字区域,二是根据数字区域的图片识别出卡号,所以整个过程需要两个模型。开源项目使用的模型配置的tag字段主要用来定义模型所属功能,结合dir字段,就可以定位到具体的模型。

写在最后

通过远程加载以及多维度的灰度测试配置是的帮助模型稳定安全运行的保证,虽然模型远程加载功能还没有在开源版本上线,但是已经安排在了日程中,预计在9月低就会上线。如果您对这个项目感兴趣,如果您在终端AI运行环境方面有想法,如果您在使用时有疑问,诚挚邀请您加入我们。

Github地址:

AoE:如何管理好模型?

欢迎star~

QQ交流群(QQ群号:815254379):

AoE:如何管理好模型?

欢迎加群聊~

这篇关于AoE:如何管理好模型?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/257700

相关文章

python uv包管理小结

《pythonuv包管理小结》uv是一个高性能的Python包管理工具,它不仅能够高效地处理包管理和依赖解析,还提供了对Python版本管理的支持,本文主要介绍了pythonuv包管理小结,具有一... 目录安装 uv使用 uv 管理 python 版本安装指定版本的 Python查看已安装的 Python

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

Redis实现RBAC权限管理

《Redis实现RBAC权限管理》本文主要介绍了Redis实现RBAC权限管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1. 什么是 RBAC?2. 为什么使用 Redis 实现 RBAC?3. 设计 RBAC 数据结构

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N