目 录CONTENT

文章目录

华为海思-深度学习模型调测

解小风
2021-04-16 / 0 评论 / 0 点赞 / 5 阅读 / 3830 字

项目详情描述

(1)根据开源平台(如 GitHub)上深度学习网络模型(TensorFlow / Keras / PyTorch)的热度、重要性等因素评估优先级;

(2)借鉴开源项目代码,在 NVIDIA GPU 上复现了多个深度学习网络模型(如 ResNet / LSTM / Elmo / Albert / GCN / MiniGo 等);

(3)以 GPU 作为竞品,将深度学习网络模型迁移至华为昇腾 AI 910 芯片(NPU)上,并进行模型性能、精度等方面的对比、调优与测试验证。


项目涉及技术

NPU 性能调优手段

(1)Profiling 性能分析:使用华为提供的 profiling 工具深入分析模型执行过程,获取算子级别的耗时统计、内存使用情况、计算效率等关键指标。

(2)算子融合优化:将多个相邻的简单算子融合为一个复合算子,减少中间结果的内存读写开销。常见融合模式包括:Conv+BN+ReLU 融合、MatMul+Add 融合等,融合后的性能提升可达 20-40%。

(3)开启混合精度模式(mix_precision) :所有算子优先使用 FP16 精度模式进行计算以提升速度,对于不支持 FP16 模式的算子(如 Conv2D ),才使用 FP32 精度模式。


NPU 精度调优手段

(1)Loss Scale 技术: 对于开启了混合精度模式的网络,由于所有算子优先使用 FP16 精度模式,在计算过程中可能会损失精度,导致网络最终精度受到影响。因此在梯度更新时,添加 loss_scale 系数 S ,使用 S 乘上梯度值以避免精度损失,在梯度更新后,再除以 S 以还原最初精度值。由此既使用了混合精度模式来提高性能,又添加 loss_scale 系数来尽可能的降低精度损失。

具体为:为防止 FP16 计算中的梯度下溢,引入损失缩放因子 S,梯度更新公式为:\theta_{t+1} = \theta_t - \eta \cdot \frac{\nabla L \cdot S}{S} = \theta_t - \eta \cdot \nabla L,其中缩放和反缩放操作相互抵消,但避免了中间计算的精度损失。

(2)动态 Loss Scale:根据训练过程中的梯度溢出情况动态调整缩放因子,算法流程为:如果检测到溢出,则S = S / 2;如果连续 N 步无溢出,则S = S \times 2,其中 N 通常设为 2000。

(3)溢出检测:检测网络训练过程中,是否有算子出现计算溢出。对于溢出的算子,加入黑名单(即强制使用 fp32 精度模式)以避免精度损失。


0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区