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

相关文章

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

基于Python+PyQt5打造一个跨平台Emoji表情管理神器

《基于Python+PyQt5打造一个跨平台Emoji表情管理神器》在当今数字化社交时代,Emoji已成为全球通用的视觉语言,本文主要为大家详细介绍了如何使用Python和PyQt5开发一个功能全面的... 目录概述功能特性1. 全量Emoji集合2. 智能搜索系统3. 高效交互设计4. 现代化UI展示效果

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

Mysql中的用户管理实践

《Mysql中的用户管理实践》:本文主要介绍Mysql中的用户管理实践,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录13. 用户管理13.1 用户 13.1.1 用户信息 13.1.2 创建用户 13.1.3 删除用户 13.1.4 修改用户

linux服务之NIS账户管理服务方式

《linux服务之NIS账户管理服务方式》:本文主要介绍linux服务之NIS账户管理服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、所需要的软件二、服务器配置1、安装 NIS 服务2、设定 NIS 的域名 (NIS domain name)3、修改主

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件

gradle第三方Jar包依赖统一管理方式

《gradle第三方Jar包依赖统一管理方式》:本文主要介绍gradle第三方Jar包依赖统一管理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景实现1.顶层模块build.gradle添加依赖管理插件2.顶层模块build.gradle添加所有管理依赖包