深度学习部署
深度学习部署平台特点:
深度学习的两个方面:
部署、训练
面临的挑战:现代深度学习部署平台要求:
- 支持多种不同的架构不同厂家
- 不同硬件
- 不同编程语言
- 不同终端:服务器、桌面、笔记本、手机、智能硬件、机器人、无人机
- 高性能:手机、机器人、无人机、智能硬件不会用性能很高的芯片
- 易于使用:Windows Linux Android IOS统一接口
深度学习部署平台的运算:
- 神经网络
- 图像处理
- 矩阵、向量运算
主流深度学习部署硬件架构及特性
挑战:高性能
性能与可维护性、可靠性冲突
使用最底层的编码方式
- Intrinsic汇编
- 时间长、难度大
生产率下降
- 原来10行,现在100行
- 原来处理一种情况,现在处理十种情况
调试、维护代价大
解决方法:
- 只处理最耗时、影响性能的部分
- 能用高层的语言/方式,就不用底层的
- 基础:20% 80%定理
现代主流处理器高性能编程方式
Intel
挑战:不同硬件类型
性能差别大
- 手机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接口改变,上层接口可能不变,改对应底层接口调用即可。