下载
中文
注册
迁移RSAN至NPU上loss不收敛问题

迁移RSAN至NPU上loss不收敛问题

2024/02/21

186

暂无评分
我要评分

问题信息

问题来源产品大类产品子类关键字
官方模型训练PyTorch--

问题现象描述

  • 硬件配置:
    • CANN 6.0.RC1
    • PyTorch 1.8.1
    • Python 3.7.5
    • 镜像 ascendhub.huawei.com/public-ascendhub/pytorch-modelzoo:22.0.RC3-1.8.1
  • 问题现象:

    GPU和CPU能正常跑通,但PyTorch框架RSAN训练迁移失败,loss不收敛,精度评估为0,如下图所示:

  • 源码地址及代码修改:
    • 源码地址:https://github.com/Anery/RSAN
    • 代码修改:
      1. 利用torch_npu自动迁移接口进行迁移,并取消encoder和decoder对输入的padding和squeeze。
      2. 执行训练,训练loss不收敛,精度评估结果一直为0。
      3. 添加混合精度模块,再次进行训练,训练加快,但loss依然不收敛,精度评估结果仍为0。

原因分析

  1. 版本太老,有已知算子精度问题。
  2. 固定随机种子,用pdb或者dump工具比对精度误差。

排查方法

  1. 升级为最新的cann、驱动固件、及配套的PyTorch Adapter后,运行demo,发现仍然不收敛。
  2. 通过pdb定位到如下代码做数据切分时,cpu和npu有差异。

解决措施

  1. 规避方案,将数据切分放到cpu上做。

  2. loss和gpu基本一致,并收敛,结果如下所示:

本页内容