摘要:近期大热的图像识别处理核赔技术,可应对剁手党们冲动购物之后汹涌而至的退货场景。那么,这背后运用的技术原理是怎样? AI计算平台又能否重构企业业务引擎呢?

随着AI技术的挖掘与应用落地,也为每一年的电商大促带来了更多新鲜和惊喜。双11、618等活动走到今天已经有十多年的时间了,从开始的价格战到现如今的全方位的购物体验的比拼,电商大促已不再是个单纯的购物狂欢,更是对电商行业方方面面的一次全面“大阅兵”。

电商大促其中,有关计算机视觉技术的应用也是层出不穷。基于CV进行以图搜图的“拍照购”,用户在互联网或现实中看到了感兴趣的商品,可以拍照或截图,通过拍照购在电商平台中搜索同款;电商大促节过后,随之而来的则是“退货潮”。针对这种情况,电商金融平台将引入图像识别技术处理核赔,以应对大批剁手党冲动购物之后汹涌而至的退货要求。那么,这背后应用的技术运行的原理是怎样的? AI计算平台能否满足客户的需求,重构企业业务引擎呢?

从卷积神经网络中的矩阵乘法(GEMM)说起

说起AI业务,就不得不提最经典的AlexNet,AlexNet模型于2012年提出,其被认为是计算机视觉领域最有影响力的模型之一。AlexNet网络主要包含八层,前五层是卷积层,最后三层是全连接层。 配合pooling及norm运算,以下列出所有卷积层和全连接层的参数规模以及每层的浮点计算量,从图中可以看出AlexNet网络的参数规模达到了6千万量级,计算量达到720MFlops。通过在横向比较几个经典的分类网络,参数规模以及计算量都是巨大的。那么从计算量的角度来看计算中99%以上都是卷积运算,本质都是矩阵运算。

在如此级别的规模参数及计算量下,矩阵运算如何加速,成为了视觉计算领域亟需解决的问题。举例:一个典型的16*16的两个矩阵乘运算,在不同硬件上是如何进行计算的?

在CPU中矩阵乘需要做3个for循环,每一位依次进行乘加运算,理论上需要16*16*16*2的时钟周期。

GPU中矩阵乘做了相关的优化,GPU是可以直接进行向量的乘加运算,那么上述运算可以拆解为16*16个乘加运算,即需要256个时钟周期。

昇腾处理器提供专门的矩阵乘运算单元,一个时钟周期就可以完成一次矩阵乘运算。其凭借着在AI推理上的优异性能以及超低功耗,被应用于昇腾AI计算解决方案。

昇腾AI计算解决方案,力算云上新视界

昇腾AI计算解决方案以极致算力,端边云融合、全栈创新,开放生态的硬核实力,助力行业客户在图片分类、目标检测、人体检测、人脸识别、车辆检测等AI 视觉类计算领域取得亮眼的成绩。

在IAAS层,昇腾AI计算解决方案可提供昇腾Ai推理实例——包括Ai1,KAi1,及可用于Ai训练的裸机实例KAt1。Ai1正在热卖中,点击购买。

在算子层,昇腾AI计算解决方案可支持主流框架TensorFlow与Caffe的算子,以及自定义算子的能力。基于算子层还提供Matrix标准化接口,用户可以通过基于Matrix标准化接口构建昇腾业务引擎。

同时,用户还可以使用华为昇腾Serving,对外提供RestFull API或gRPC请求,轻松解耦业务。上层再配合AI容器服务,轻松实现弹性伸缩,大大缩短业务部署周期。

如何用Matrix接口实现业务引擎

用户可以使用标准的Matrix接口实现业务引擎,通过SDK方式对外释放昇腾AI加速能力。

Matrix为通用业务流程执行引擎,运行于操作系统之上,业务应用之下。可以屏蔽操作系统差异,为应用提供统一的标准化接口,包括流程编排接口(支持C/C++语言、Python语言)和模型管家接口(支持C++语言)。

对于一个典型的业务流,通常包含数据读取,数据的预处理(图片的解码,前处理),模型推理,数据后处理等过程。

那么在Matrix框架中,可以把上述每个过程抽象为一个engine,engine就是特定功能的计算引擎。若干engine构成Graph,Graph负责对engine进行管理。Matrix是一个通用的业务流程执行引擎,能够管理Graph的生成,执行以及销毁。

Matrix计算流程

关于Matrix的计算流程,我们从创建流程、执行流程、销毁流程展开来看。

创建流程,如红色箭头所示:

根据Graph配置创建Graph对象。

上传离线模型文件和配置文件到Device侧。

初始化engine,推理Engine通过离线模型管家(AIModelManager)的Init接口加载模型。

执行流程,如灰色箭头所示:

输入数据

预处理Engine调用dvpp的api接口,进行数据预处理,例如对视频/图像进行编解码、抠图、缩放。

推理Engine调用离线模型管家(AIModelManager)的Process接口进行推理计算。

推理Engine调用Matrix提供的SendData接口将推理结果返回给DestEngine。DestEngine通过回调函数将推理结果返回给APP。

销毁流程,如蓝色箭头所示:

结束程序,销毁Graph对象。

Matrix数据流向和调用流程的双BUFF加成

数据流“0”拷贝

我们可以看到,在Matrix框架中数据流的传输性能是至关重要的。

在框架中单独提供了一套内存分配和释放接口,包括HIAI_DMalloc/HIAI_DFree、 HIAI_DVPP_DMalloc/HIAI_DVPP_DFree,支持C/C++语言。

其中,

HIAI_DMalloc/HIAI_DFree接口主要用于申请内存,再配合SendData接口从Host侧搬运数据到Device侧;

HIAI_DVPP_DMalloc/HIAI_DVPP_DFree接口主要用于申请Device侧DVPP使用的内存。

通过调用HIAI_DMalloc/HIAI_DFree、 HIAI_DVPP_DMalloc/HIAI_DVPP_DFree接口申请内存,能够尽量少拷贝,减少流程处理时间。

HIAI_Dmalloc在跨侧传输以及模型推理阶段,性能最优,主要优势体现在:

申请的内存是可以用于数据搬运对的,这样可以避免Matrix与数据传输模块间的数据拷贝。

申请的内存可以直接使能模型推理零拷贝机制,减少数据拷贝时间。

HIAI_DVPP_Dmalloc接口体现在:

申请的内存可以给DVPP使用,同时可以在DVPP使用完后透传给模型推理时使用。

如果不需要做模型推理,申请的内存中的数据可以直接回传给Host侧。

对用户友好的Host-Device的数据传输

在Host-Device间数据传输情况下,用HIAI_REGISTER_SERIALIZE_FUNC对自定义数据类型进行序列化/反序列化,可以实现高性能数据传输,节省传输时间。

Matrix通过“控制信息+数据信息”的形式描述要传输的数据,控制信息指用户自定义的数据类型,数据信息指需要传输的数据内容。为保证Host和Device之间的数据传输,Matrix提供如下机制:

在传输数据前,用户可调用HIAI_REGISTER_SERIALIZE_FUNC宏注册用户自定义数据类型、用户自定义序列化函数、用户自定义反序列化函数。

用户在本端调用SendData接口发送数据后,Matrix会做如下处理,处理流程如下:

调用用户自定义的序列化函数对控制信息序列化,将序列化后的控制信息放入内存(ctrlBuf)。

通过DMA(Direct Memory Access)映射将控制信息拷贝一份存放到对端的内存中,并保持本端与对端之间控制信息的映射关系。 指向数据信息的内存(dataBuf)指针已通过SendData接口的入参传入,dataBuf是由用户调用HIAI_DMalloc/HIAI_DVPP_DMalloc接口申请的,申请该内存后系统将本端的数据信息通过DMA映射拷贝一份存放到对端的内存中,并保持本端与对端之间数据信息的映射关系。

拼装消息发送给对端,主要将ctrlBuf的地址及大小、dataBuf的地址及大小发送到对端。

对端收到消息后,Matrix会调用用户自定义的反序列化函数解析对端已获取到的控制信息和数据信息,并将解析后的数据发送给对应的接收Engine进行处理。

对端解析数据后,控制信息已使用完成,因此可以释放掉存放控制信息的内存(ctrlBuf),但由于存放控制消息的内存是在本端申请的,因此对端需要给本端发送释放ctrlBuf的消息。

本端收到消息后,释放ctrlBuf。

Engine在收到数据并完成所有处理后,便可以释放dataBuf了,但由于Matrix并不知道用户何时会使用完dataBuf,因此需要用户在实现反序列化函数时,dataBuf以智能指针返回并绑定析构器hiai::Graph::ReleaseDataBuffer。当智能指针结束生命周期析构时,便会自动调用析构器给本端发送释放dataBuf内存消息。

本端收到消息后,释放dataBuf。

以上,我们详细介绍了如何使用Matrix接口构建业务引擎,同时用户还可以集成昇腾Serving对外提供标准RestFull API或者gRPC请求,提供解耦的标准推理接口能力。或者配合AI容器服务,提供弹性伸缩,易于部署的能力,模型热替换的能力。

近期,618大战如火如荼,各商家不仅是销售额的比拼,更是技术间的较量。开发者关心的是什么?华为云官方揭秘618背后的神秘黑科技:聊聊有哪些厉害的技术,能为618大促保驾护航?能大大提高程序员的幸福感?欢迎点击我们的黑科技攻略专题,也欢迎留下你的想法哦~~

点击这里,了解更多精彩内容

昇腾AI计算,无惧618冲动消费相关推荐

  1. 【华为云技术分享】解密如何使用昇腾AI计算解决方案构建业务引擎

    摘要:昇腾AI计算解决方案以极致算力,端边云融合.全栈创新,开放生态的硬核实力.用户可以使用标准的Matrix接口实现业务引擎,对外释放昇腾AI加速能力. 从卷积神经网络中的矩阵乘法(GEMM)说起 ...

  2. 加速AI计算生态构建,华为昇腾布道西安开发者

    数字爆炸时代,信息飞速增长,算力需求愈加急迫. 当下,华为布局了"一云.两翼.三引擎"以及开放的产业生态,并始终围绕信息采集.信息传送.信息存储.信息的学习推理与分发呈现整个信息流 ...

  3. 昇腾产业全解析:顶尖AI计算炼成记

    文|智能相对论 作者|叶远风 绝对优势摘金,得分超出第二名近20倍! 不久前,国际超算大会(ISC21)最新一期IO500排行榜上演了神奇一幕,基于昇腾AI基础软硬件的"鹏城云脑II&quo ...

  4. 对话实录 | 看华为云如何使能AI计算行业创新

    在LiveVideoStackCon2019深圳音视频技术大会前夕,我们邀请到了华为云异构计算产品总监赵刚接受采访,从职业生涯聊到华为云昇腾云服务器生态,更是首次独家曝光华为云昇腾AI计算解决方案.华 ...

  5. 真香!全场景AI计算开源框架MindSpore,我爱了

    [摘要] 本文主要通过两个实际应用案例:一是基于本地 Jupyter Notebook 的 MNIST 手写数据识别:二是基于华为云服务器的 CIFAR-10 图像分类,对开源框架 MindSpore ...

  6. 华为全场景AI计算框架MindSpore正式开源,赋能开发者昇腾万里

    [中国,深圳,2020年3月28日]今日,在华为开发者大会2020(Cloud)第二天,华为宣布全场景AI计算框架MindSpore在码云正式开源,企业级AI应用开发者套件ModelArts Pro在 ...

  7. 华为AI计算框架昇思MindSpore零基础快速入门 (上)

    一.基础介绍 门槛最低的深度学习引导 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/463019160MindSpore入门实践 - 知乎 (zhihu.c ...

  8. 【昇腾学院】昇腾AI处理器软件栈--框架管理器(Framework)离线模型生成

    离线模型生成 以卷积神经网络为例,在深度学习框架下构造好相应的网络模型,并且训练好原始数据,再通过离线模型生成器进行算子调度优化.权重数据重排和压缩.内存优化等,最终生成调优好的离线模型.离线模型生成 ...

  9. 解密昇腾AI处理器--DaVinci架构(存储系统)

    AI Core的片上存储单元和相应的数据通路构成了存储系统.众所周知,几乎所有的深度学习算法都是数据密集型的应用.对于昇腾AI芯片来说,合理设计的数据存储和传输结构对于最终系统运行的性能至关重要.不合 ...

最新文章

  1. checkbox的常见问题
  2. 「安全技术」针对常见混淆技术的反制措施
  3. boost::python::to_python_converter相关的测试程序
  4. JavaWeb课程复习资料(六)——DAO与DAOImpl层封装
  5. Angular self study 2 - compile how is hello {{ name }} compiled
  6. sqlite性能优化
  7. Hbase读写数据的原理解析
  8. Springsecurity搭建自定义登录页面
  9. 《偶像爱豆出身的编程语言排行第一得主!谁还敢嘲python没实力?》Python应用与实践
  10. linux mysql 编码修改吗_Linux下mysql 修改编码
  11. mysql截取身份证号前几位_EXCEL中怎样截取身份证号前六位数字
  12. 学Python,用Python自动创建PDF文档,实现办公自动化
  13. 从头学计量-中介效应理论介绍
  14. Java内存泄漏检测工具 JRockit Memory Leak Detector
  15. 最出色的员工往往最先离职,却不是因为钱,到底为什么?
  16. 北京冬奥村:让科技蕴含温度
  17. 计算机考研大纲代码,2017考研大纲:计算机考研大纲文字版之计算机组成原理...
  18. PYthon打印10000以内的所有素数
  19. 自动修复.dll文件异常
  20. 操作系统学习笔记(三十三)~I/O系统单元测试

热门文章

  1. CSS 清理浮动 clear属性
  2. oracle 安装时的日志文件,oracle10g安装的日志文件 Oracle10g怎么查看操作日志
  3. 脉冲列输入型脉冲比较数字伺服系统的原理图
  4. 视觉SLAM笔记(26) 状态估计问题
  5. 中移物联网答案java_【分享】中移物联网校园招聘笔试-java
  6. (matlab)自定义图像(matlab)
  7. 软件测试2019:第五次作业
  8. 前端学习之路之CSS (一)
  9. python入门:输出1-100之内的所有奇数和偶数
  10. HTML中文网页乱码问题