构建无处不在的深度学习部署系统

《SDCC 2017 人工智能技术实战线上峰会》学习笔记
刘文志

深度学习部署平台特点:

深度学习的两个方面:

部署、训练

面临的挑战:现代深度学习部署平台要求:

  • 支持多种不同的架构不同厂家
  • 不同硬件
  • 不同编程语言
  • 不同终端:服务器、桌面、笔记本、手机、智能硬件、机器人、无人机
  • 高性能:手机、机器人、无人机、智能硬件不会用性能很高的芯片
  • 易于使用:Windows Linux Android IOS统一接口

深度学习部署平台的运算:

  • 神经网络
  • 图像处理
  • 矩阵、向量运算

主流深度学习部署硬件架构及特性

构建无处不在的深度学习部署系统_第1张图片

挑战:高性能

性能与可维护性、可靠性冲突
使用最底层的编码方式
- Intrinsic汇编
- 时间长、难度大
生产率下降
- 原来10行,现在100行
- 原来处理一种情况,现在处理十种情况
调试、维护代价大
解决方法:
- 只处理最耗时、影响性能的部分
- 能用高层的语言/方式,就不用底层的
- 基础:20% 80%定理

现代主流处理器高性能编程方式

Intel
构建无处不在的深度学习部署系统_第2张图片

构建无处不在的深度学习部署系统_第3张图片

挑战:不同硬件类型

性能差别大
- 手机CPU、桌面CPU、。。。
编程方式差别大
- C OpenCL CUDA Verilog
优化难度差别大
- CUDA难,OPENCL更难,Verilog超难
程序性能在不同硬件上不一致
- NVIDA GPU上跑3ms好快,PC上跑100ms 还行,手机上跑2s
解决方法:
- 提前做性能预测、降低研发人员阈值
- 性能越低的平台,越做极致的优化

挑战 : 融入厂商的实现

厂商有各种实现,但不兼容
- Intel MKLDNN
- ARM ACL
- NVIDA CUDNN/TensorRT

解决方案:
- 加兼容层抽象
- 条件编译

挑战:统一使用接口

用户想使用自己喜欢的语言
- 服务器:java/go/ruby
- apple:objectC Swift
- 潜在的高层语言数量无限
维护人员只想使用一套接口
- 维护代价,保证一致性等等
解决方法:双层设计
- 底层:标准C接口
- 高层:应用接口、浅层封装
- C接口不变,高层接口不变
- C接口改变,上层接口可能不变,改对应底层接口调用即可。

人工智能部署平台支持不同的硬件架构

构建无处不在的深度学习部署系统_第4张图片


图形图像处理

硬件平台支持广泛

  • x86 / arm cpu/nvidia gpu/qualcomm gpu/arm gpu

常见图像处理函数

OpenCV

操作系统支持广泛

极高的性能

  • OpenCV
  • 高通FastCV

如何评估部署平台性能/效率

  • 哈佛架构
  • 存储器
  • 计算
  • 存储计算均衡
  • 资源竞争与备份

构建无处不在的深度学习部署系统_第5张图片

(PPL 该部署平台的名字)

嵌入式ARM人脸对比解决方案

构建无处不在的深度学习部署系统_第6张图片

驾驶员分析系统:
构建无处不在的深度学习部署系统_第7张图片

你可能感兴趣的:(深度学习)