用户中心

资讯 > 自动化软件

如何让AI项目成功落地?你需要了解的AI项目流程及边缘设备开发注意事项

作者:www.cechina.cn2022.01.27阅读 1283

  
       在 AI项目落地的过程中,从模型训练和推理仅仅是一个开始,其实还有相当大一部分不AI的工作,这些工作甚至占据了项目开发的绝大部分时间。
  其中,也有很多值得我们思考和解决的问题:
  · 比如如何缩短项目开发周期,快速应对不同客户的多样需求,完成POC演示,推进项目落地?
  · 针对不同的实际场景,如何对算法硬件平台进行选型?
  · 如何综合现有技术手段,解决CV以及深度学习算法无法解决的盲区问题,为客户提供最优的解决方案?
  · 如何充分挖掘边缘计算设备的算力,降低单路视频分析的成本?
  · 如何形成数据的闭环,在项目部署后便捷地采集数据,不断迭代优化模型,提高客户的满意度?
  AI项目的一般开发交付流程
  首先,我们先了解下AI项目的一般开发交付流程。AI项目的开发过程中,通常包括以下环节:
  · 数据采集:现场数据采集、数据标定、数据集校验;
  · 模型训练:设计模型、训练模型;
  · 模型部署:模型转化、模型量化、模型裁剪、模型微调;
  · 业务开发:根据项目的需求,设计业务规则,完成相应业务逻辑处理代码的编写调试;
  · 项目部署:制作安装包或者docker镜像,安装部署在目标平台上;
  · 模型优化:根据现场的应用采集数据,优化模型。
  在整个流程有两个难点:一是数据,二是需求。
  有时候没有数据,模型达不到理想的效果,可能客户都不给试用的机会,更别提数据采集优化模型了;
  有时候客户很配合,数据不是问题,但是客户的需求很多,要求很高www.cechina.cn,甚至有些需求目前的AI根本做不到,但是为了生存也只能硬着头皮上,还要应对客户随时都可能“微调”的新要求。
  所以现实往往是:
  · 要么做了一堆没有客户愿意买单的POC项目,要么做了几个迟迟无法完成交付,钱也不多的小项目。
  · 客户以为我们提供的是个拿来即用的成熟产品,然而事实却仅仅是个待采集数据进一步优化的试验品。
  因此,面对纷繁复杂的应用场景,客户自己也可能不太清楚的不确定需求
  AI公司要想走出研发投入多、成本高、项目交付周期长的困局,必须要解决规模复制效益的问题,集中力量向某个方向发力,打造有技术壁垒或者市场壁垒的产品。
  哪怕是做项目,也应当按照做产品的思维设计和组织,把项目开发变成搭积木,因为只有可复制的产品,才能分摊高昂的研发成本,应对快速变化的市场需求。
  AI产品常见的3种交付形态
  了解了AI项目开发的流程,再看一下客户产品的交付。
  在工作中,面对不同的客户,通常需要交付不同的非标类产品,所以先聊一下常见的交付方式。行业场景和客户需求虽然五花八门,但总的来说,交付的产品通常有3种形态:
  1. 服务Service:
  AI模型的部署服务,客户端可以通过HTTP/REST或GRPC的方式来请求服务。
  输入一张图片/一段视频,输出图片/视频的分析结果,通常按次数收费或者按时间段授权。比如百度AI市场上提供的各种API服务:
       
  这种形式,业务流程相对是单一的,主要需要考虑的是充分利用GPU算力资源,能够提供稳定的高吞吐量的服务。这种服务通常部署在GPU服务器上,可能是客户局域网内的服务器,也可能是公有云上的服务器。
  市面上也有一些成熟的商用框架可以使用,如NVIDIA的Triton Inference Server, Google的TF Servering,百度的Paddle Serving等。Triton是 NVIDIA 推出的 Inference Server,专门做 AI 模型的部署服务。
  而客户端可以通过HTTP/REST或GRPC的方式来请求服务,特性包括以下方面:
  · 支持多种框架,例如 Tensorflow、TensoRT、Pytorch、ONNX甚至自定义框架后端;
  · 支持 GPU 和 CPU 方式运行,能最大化利用硬件资源;
  · 容器化部署,集成 k8s,可以方便的进行编排和扩展;
  · 支持并发模型,支持多种模型或同一模型的不同实例在同一GPU上运行;
  · 支持多种批处理算法,可以提高推理吞吐量。
  2. 开发包SDK或者功能组件
  有的中间商或集成商以及一些传统的非AI公司,需要用深度学习解决问题的能力
  把基于深度学习的算法能力,集成到自己的业务系统中,为最终用户提供服务。
  这时,他们会寻找第三方的合作伙伴,提供一套封装了深度学习算法能力的SDK或者功能组件
  向他们的业务系统赋能AI算法能力,比如百度的EasyDL-零门槛AI开发平台,云从科技的人脸识别服务等。下图是百度EasyDL开发平台的功能示意图:
       
  3. 应用Application:
  这种形式的产品,通常面向的是某个场景的最终用户
  因此交付的产品,是一整套包括交互界面在内的软件系统,有时也会将硬件一起捆绑交付。
  对这类产品www.cechina.cn,用户需要的其实只是应用的分析输出结果
  比如绘制了违规提醒框的实时画面,web、邮件甚至手机短信联动的告警消息,某个时段或者满足某种条件的数据分析报表等。
  这类产品一方面需要提供友好的操作界面供用户查看使用,同时可能还需要提供对接用户第三方平台的接口,将分析产生的告警结果等信息,推送到用户的业务管理平台。
       
  当然对于大多数中小型公司来说,主要做的还是应用类项目。这些项目,并不只是单个的功能,而是一套比较完整的系统。以视频分析为例,通常包括:视频结构化引擎、业务中台、管理平台等。
  为什么选择边缘计算设备?
  了解AI项目的开发流程、交付方式,以及基本架构,下面再回到本文的另外一个核心:边缘计算设备的开发。
  边缘计算设备,其实是相对于云计算而言的。不同于云计算的中心式服务,边缘服务是指在靠近物或数据源头的一侧,采用网络、计算、存储、应用核心能力为一体的开放平台,就近提供最近端服务。
  其应用程序在边缘侧发起,为了产生更快的网络服务响应。满足行业在实时业务、应用智能、安全与隐私保护等方面的基本需求。
  由于数据处理和分析,是在传感器附近或设备产生数据的位置进行的,因此称之为边缘计算。
  因此我们可以看出,边缘计算的优点:
  · 低延迟:计算能力部署在设备侧附近控制工程网版权所有,设备请求实时响应;
  · 低带宽运行:将工作迁移至更接近于用户,或是数据采集终端的能力,能够降低站点带宽限制所带来的影响;
  · 隐私保护:数据本地采集,本地分析,本地处理,有效减少了数据暴露在公共网络的机会,保护了数据隐私。
  很多工程师习惯使用GPU服务器做视频分析,对边缘计算设备接触不一定多,但是有的场景下,直接使用GPU服务器做视频分析,存在几个问题:
  · 许多场景下,数据源(摄像头)是分布式的,可能分布在不同的子网内,甚至分布在不同的城市,使用GPU服务器集中处理延时大、带宽占用高、能耗高(因为传输的数据中大部分是无效信息);
  · 对于分散的工地或者连锁店店铺等场景,如果要集中处理,不仅要占用宝贵的专线带宽,还要内网穿透,麻烦且不经济;
  · 有的场景下使用GPU,会造成算力过程、资源浪费,比如连锁店铺的客流统计,每个店铺可能只有2-4路摄像头,少的甚至只有1路,使用GPU显然大材小用;
  · 相比较纯软件的产品,客户更倾向于为软硬件一体的产品买单。
  由于部署在设备侧附近,可以通过算法即时反馈决策,并可以过滤绝大部分的数据,有效降低云端的负荷,使得海量连接和海量数据处理成为可能。
  因此,选择使用服务器还是边缘计算设备,主要还是考虑哪种方式更符合场景需求,哪种方式更便捷更经济。
  如果应用场景需要集中分析大量数据,比如几十路甚至上百路摄像头,那肯定还是应当选择x86服务器。
  当然这种情况不一定只有Nvidia GPU一种选择,比特大陆、华为、寒武纪都有PCIE的计算加速卡可以选择。
  如果应用场景分布在不同地点的节点,并且每个节点要分析的摄像头数量在10-20路以下,那么选择边缘计算设备显然更经济更有效。
  有的时候甚至可以直接选用带AI处理芯片的智能摄像头。
  边缘计算设备的选型思路
  通过前面边缘设备的介绍,我们知道市面上有很多款边缘计算设备。
  那么针对各种不同的边缘设备,当算法训练完成,想要用边缘设备部署时,如何选型?应该关注哪些参数和性能呢?
  其实主要是以下几点:
  · 性能:arm核心数量和主频、内存与AI模组专用内存、深度学习推理能力、视频编解码能力、jpeg编解码以及其他视觉运算硬件加速能力。
  · 价格:在性能都能满足要求的情况下,价格自然成为选型的决定因素。特别是同一个AI模组,其实会有多家厂商竞品可供选择。
  · 工具链:支持主流框架模型情况,算子及网络模型支持情况,接口易用程度,SDK、技术论坛完备程度和技术支持力度。
  · 外围接口:板载的外围接口是否能满足应用场景需求。
  · 功耗:有的客户可能因为作业环境的限制对功耗要求比较严格,比如是在野外使用太阳能供电,但通常较低的功耗也意味着较低的算力。
  下图是几种边缘设备主要参数的对比图:
       
       
  边缘计算设备开发与GPU服务器开发的区别
  我们再看一下,与GPU服务器相比,在边缘计算设备上的AI应用开发部署的主要区别有:
  · CPU架构不同:GPU服务器是x86架构,GPU插在主板的PCIE插槽内;
  · 而边缘计算设备是基于aarch64的整体设备,其中有ARM CPU和GPU以及NPU、TPU、VPU等;
  · 资源有限:边缘设备由于资源有限,底层要使用C/C++推理,程序需要充分优化,以压榨硬件资源性能;
  · 交叉编译:C/C++代码直接在边缘计算设备上编译比较耗时,有的甚至不支持在设备中编译,通常通过交叉编译的方式控制工程网版权所有,在宿主机上生成代码,再拷贝到边缘计算设备中执行;
  · 远程调试:由于需要使用gdb server远程调试,VSCode很好用;
  · 软件安装:边缘计算设备通常运行的是裁剪/定制的linux,debian/ubuntu可以使用apt在线安装库包,但有的边缘计算设备内的linux是精简版的,没有包管理工具,安装软件只能源码交叉编译。
  边缘计算设备的一般开发流程
  了解了边缘设备的内容,我们再看一下边缘设备的一般开发流程,通常由几部分组成:
  · 基础平台开发:深度学习分析引擎、业务中台、管理平台;
  · 模型转换、验证及优化:使用硬件平台厂商提供的模型转换工具套件将caffe、tensorflow、pytorch、mxnet、darknet、onnx等模型转换为目标平台模型,必要时进行模型量化以及模型finetune;对不支持的模型或层,自定义算子、插件实现
  · 视频结构化引擎代码适配:主要是视频流及图片编解码、推理等模块,任务管理、流程控制、前后处理等其他代码通常都是跨平台的;
  · 交叉编译及测试:使用交叉编译工具链编译及调试代码,交叉编译工具工具链主要包括2部分内容,linaro gcc g++编译及调试器和包含了目标平台系统环境及软件库的所有代码文件;
  · 业务代码实现:针对不同场景的业务需求开发业务逻辑处理代码;
  · 系统部署:通常使用docker部署,使用docker-compose编排多个docker容器或使用K8S管理多个分布式节点。
  开发过程中的常见问题
  当然在开发过程中,还会存在一些常见的问题,这里也罗列一些问题和解决方案工大家参考:
  (1)模型转换失败:
  解决方案:
  ① onnx模型转换失败,可能是onnx和opset的版本不支持,可以更换版本尝试;
  ② onnx模型转换失败,也可能是转换工具对onnx某些层支持不好,可以先使用onnx-simplifier简化模型,优化其中不必要的容易引起问题的层;
  ③ 如果是pytorch模型转换失败,需要注意pytorch有两种类型的保存格式,一种是只有权重的,一种是带有模型结构和权重的JIT模型;转换工具基本都要求JIT模型,应当使用torch.jit.trace保存。
  ④ 使用工具链提供的编程语言自定义算子实现不支持的层;
  ⑤ 将问题反馈给硬件厂商,询问是否有新版本的SDK或等待问题解决;
  ⑥ 反馈给算法同事,修改模型结构,尝试使用其他支持的等价算子,重新训练模型。
  (2)模型推理结果不对:
  解决方案:
  ① 检查前后处理(包括输入、输出层的scale因子);
  ② 检查模型转换后输出tensor的顺序;
  ③ 使用工具链中提供的工具保存中间层结果,逐步排查解决。
  (3)模型量化精度损失:
  解决方案:
  ① 量化是一定会有精度损失的,这个无法避免;
  ② 数量更多和内容更均衡的量化集,可以在一定程序改善量化模型的精度;
  ③ 如果仍无法满足要求,重新训练量化后的模型(不是所有的平台都支持)。
  (4)程序优化:
  解决方案:
  ① 首先,检查程序最耗时的部分是在哪里,找出制约性能的瓶颈:视频解码?任务队列?数据拷贝?还是算力资源不够,模型需要进一步裁剪优化?
  ② 然后,针对具体问题优化程序:使用更加高效的计算库或者硬件加速接口、优化多线程多进程、改进数据结构、使用多Batch推理或者根据任务实际设置合理的处理帧率等。
  总之,优化的主要原则就是减少不必要的数据拷贝、充分利用计算单元资源。
  ③ 通常,观察AIPU(GPU/NPU/TPU)的利用率情况,如果一直比较平稳,说明计算资源得到了充分的利用;
  如果起伏比较大,甚至有突然的高峰和低谷,说明某些时刻AIPU在等待数据。
  ④ 此外,某些AIPU可能对某种尺寸的数据、某些操作或特定参数的神经网络算子做了专门优化,在设计模型时应优先选用高效的结构和参数
  比如有的AI加速芯片的,若卷积层的输入不是8的倍数控制工程网版权所有,底层会额外进行多次padding操作;stride为3的卷积核比其他卷积核要更高效。
  输入尺寸是512的倍数时的计算效率 > 256的倍数时的计算效率 > 128的倍数时的计算效率等。
  本文作者白夜,主要从事边缘计算设备端侧,智能安防应用的开发与部署。2018年底开始接触并进入AI行业。从第一个深度学习项目——手写数字/汉字的识别,了解到图像分类的基本原理,之后慢慢地也开始接触目标检测、特征提取、目标追踪等相关的模型和算法。后来加入了公司的的项目工程化落地小组,开始参与基础平台的研发和具体项目的开发。本文节选自《白夜:一文看懂AI项目流程及边缘设备开发》,全文内容可点击阅读原文获取。
       
标签:AI,边缘计算,
版权声明:版权归控制工程网所有,转载请注明出处!

频道推荐

关于我们

控制工程网 & CONTROL ENGINEERING China 全球工业控制、自动化和仪器仪表领域的先锋媒体

CE全球

联系我们

商务及广告合作
任小姐(北京)                 夏小姐(上海)
电话:010-82053688      电话:18616877918
rendongxue@cechina.cn      xiashuxian@cechina.cn
新闻投稿:王小姐

关注我们的微信

关于我们 | 网站地图 | 联系我们
© 2003-2020    经营许可编号:京ICP证120335号
公安机关备案号:110102002318  服务热线:010-82053688