1. 边缘计算设备

边缘计算设备,是相对于云计算而言的。不同于云计算的中心式服务,边缘服务是指在靠近物或数据源头的一侧,采用网络、计算、存储、应用核心能力为一体的开放平台,就近提供最近端服务。其应用程序在边缘侧发起,为了产生更快的网络服务响应。满足行业在实时业务、应用智能、安全与隐私保护等方面的基本需求。由于数据处理和分析,是在传感器附近或设备产生数据的位置进行的,因此称之为边缘计算。

  1. 低延迟:计算能力部署在设备侧附近,设备请求实时响应;
  2. 低带宽运行:将工作迁移至更接近于用户,或是数据采集终端的能力,能够降低站点带宽限制所带来的影响;
  3. 隐私保护:数据本地采集,本地分析,本地处理,有效减少了数据暴露在公共网络的机会,保护了数据隐私;

某些场景下,直接使用GPU服务器做视频分析,存在几个问题:

  1. 许多场景下,数据源(摄像头) 是分布式的,可能分布在不同的子网内,甚至分布在不同的城市,使用GPU服务器集中处理延时大、带宽占用高、能耗高;
  2. 有的场景下使用GPU,会造成算力过剩、资源浪费;
  3. 相比较纯软件的产品,客户更倾向于为软硬件一体的产品买单。

2. 边缘计算设备的特点

(1) 算力有限:常常在几丁~几十T INT8 OPS之间。

(2) 功耗低:功耗在5-30W,可以通过太阳能供电,进行户外移动作业。

(3) 硬件接口丰富:便于与其他设备/系统对接。

(4))体积小,重量轻:安装简便灵活,便于分布式部署和扩展。

3. 几种边缘计算设备平台

(1) 训练平台:通常以英伟达Nvidia-GPU为主;

(2) 推理平台:云端和设备端, CPU(x86 arm), GPU, NPU, TPU, FPGA, ASIC;

4. 边缘计算设备的一般开发流程

(1)基础平台开发:深度学习分析引擎、业务中台、管理平台;

(2)模型转换、验证及优化:使用硬件平台厂商提供的模型转换工具套件将caffe、tensorflow、pytorch、 mxnet、darknet、onnx等模型转换为目标平台模型,必要时进行模型量化以及模型fnetune;对不支持的模型或层,自定义算子、插件实现;

(3)视频结构化引擎代码适配:主要是视频流及图片编解码、推理等模块,任务管理、流程控制、前后处理等其他代码通常都是跨平台的;

(4)交叉编译及测试:使用交叉编译工具链编译及调试代码,交叉编译工具工具链主要包括2部分内容,linaro gcc g++编译及调试器和包含了目标平台系统环境及软件库的所有代码文件;

(5)业务代码实现:针对不同场景的业务需求开发业务逻辑处理代码;

(6) 系统部署:通常使用docker部署,使用docker-compose编排多个docker容器或使用K8S管理多个分布式节点。

5. 常见部署方案

目前大多数深度学习算法模型要落地对算力要求比较高,如果在服务器上,可以使用GPU进行加速,但是在边缘端或者算力匮乏的开发板子上,不得不对模型进一步的压缩或者改进,也可以针对特定的场景使用市面上现有的推理优化加速框架进行推理。目前来说比较常见的几种部署方案为:

  • nvidia GPU: pytorch->onnx->TensorRT
  • intel CPU: pytorch->onnx->openvino
  • 移动端(手机、开发板等):pytorch->onnx->MNN、NCNN、TNN、TF-lite、Paddle-lite、RKNN#S

TensorRT的优化原理:

  1. 算子融合(网络层合并):通过融合一些计算op或者去掉一些多余op来减少数据流通次数以及显存的频繁使用来提速,融合之后的计算图的层次更少了,占用的CUDA核心数也少了,因此整个模型结构会更小,更快,更高效;
  2. 低精度量化:量化即IN8量化或者FP16以及TF32等不同于常规FP32精度的使用,这些精度可以显著提升模型执行速度并且不会保持原先模型的精度,更低的数据精度将会使得内存占用和延迟更低,模型体积更小;
  3. cuda核自动调整:根据不同的品卡构架、SM数量、内核频率等,选择不同的优化策略以及计算方式,寻找最合适当前构架的计算方式,不同的硬件TensorRT 都会做对应的优化,得到优化后的engine;
  4. 动态张量显存:在每个tensor的使用期间,TensorRT会为其指定显存,避免显存重复申请,减少内存占用和提高重复使用效率;
  5. 多流执行:使用CUDA中的stream技术,最大化实现井行操作。

算子op补充:

  • 算子即Operator,简称op。op是深度学习的基础操作,任意深度学习框架中都包含了数百个op,这些op用于各种类型的数值、tensor运算。在深度学习中,通过nn.Module这样搭积木的方式搭建网络,而op就是更基础的,用于制作积木的配方和原材料。
  • 譬如一个简单的网络由各种nn.Module如Linear、ReLU、Softmax搭建而成,但从本质上,这些nn.Module则是由一个个基础op拼接,从而完成功能的。这其中就包含了Matmul、Relu、Softmax等op。