基于TensorFlow模型迁移到Ascend 910(NPU)调优过程简述

举报
Tianyi_Li 发表于 2021/07/29 13:44:54 2021/07/29
【摘要】 主要介绍Char CNN和DS CNN两个网络模型的从GPU上TensorFlow代码迁移到Ascend 910(NPU)上TensorFlow代码的过程。

1. CharCNN模型

1. 直接上结果,最终性能调优对比如下:

注意的是,根据环境系统负载,数据存在一定波动。性能和精度表现一般,其实不太行,有同学调试的非常好,应该已经合并到仓库了,可以对比原始代码查看差异,得到一些启示,具体代码可见官方仓库:

(调优后)一位调试的很好的同学的代码:https://gitee.com/ascend/modelzoo/tree/master/contrib/TensorFlow/Research/nlp/char-level_cnn/CharCNN_tf_hw09124698

(调优前)官方原始代码:https://gitee.com/ascend/modelzoo/tree/master/contrib/TensorFlow/Research/nlp/char-level_cnn/CharCNN_tf_huangjinsai

2. 性能和精度调优过程(仅供参考,有同学做的更好,可以直接在论坛搜过相关经验分享帖)

首先来说,在默认脚本下,精度和性能都是不达标的,主要工作在于性能的提升,且要保证性能提升的同时,精度不下降(与GPU相比),还有就是精度提升。先来介绍一下:基于官方仓库的初始代码进行调试:

(1)调整batch size等超参数,寻求最佳超参数组合,具体一些尝试和结果如下:

觉得调参这方面提升不大,还有就是数据加载部分耗时很大,明显感受到等待时间很长,在依瞳环境下,一般需要接近20分钟时间,这个解决办法,qoooqqq同学给了一个办法,就是一次性获取完整epoch所需要的数据获得最优数据输入耗时!,具体介绍可参考他的帖子

下面尝试下官方提供的性能调优工具。

(3)Auto Tune

这是一个官方提供的自动优化用的工具,在Terminal里执行即可,注意仅在该Terminal下有效,具体操作如下:

· 在新建的Terminal下执行如下命令:

# 注意这是在依瞳环境下,如果使用其他环境,比如ModelArts,请参看相关文档
export install_path=/home/HwHiAiUser/Ascend/ascend-toolkit/latest
#export LD_LIBRARY_PATH=${install_path}/driver/lib64/common/:${install_path}/driver/lib64/driver:$LD_LIBRARY_PATH
export PATH=${install_path}/fwkacllib/ccec_compiler/bin:${install_path}/fwkacllib/bin:$PATH
export LD_LIBRARY_PATH=${install_path}/fwkacllib/lib64:$LD_LIBRARY_PATH
export PYTHONPATH=${install_path}/fwkacllib/python/site-packages:$PYTHONPATH
export PYTHONPATH=${install_path}/tfplugin/python/site-packages:$PYTHONPATH
export ASCEND_OPP_PATH=${install_path}/opp
export TE_PARALLEL_COMPILER=8
export REPEAT_TUNE=False
sudo chmod -R 777 ${install_path}/fwkacllib/data

如果报没有权限的错误,只要赋予其权限就行了,具体参考上述最后一条指令。之后执行你的代码,启动训练。

其实,和DS CNN类似,不太行,会报错,得到回复说是暂不支持动态shape。

下面是Profiling,这方面我没什么好的优化办法,上面提到的同学提出了一些方法,可以到上面帖子中参考。


总的来说,Ascend 910(NPU)和GPU各有优势,得益于AI Core的先天性优势,一般来说比GPU是要快的,但GPU的生态更加完善,这也是目前昇腾所努力的,经过黄金赛,看到了很多同学很好的尝试和努力,觉得他们还是很厉害的,有这样的开发者支持(当然还有很多企业的支持,记得有Powered by Ascend),昇腾的生态也在不断完善和发展,感受很深的是,遇到问题,工程师响应还是很迅速的,回答也比较专业,能迅速定位问题,查找解决办法,还能修改底层算子,执行力非常强大。在这之中,相比之下,自己还有很多不足,需要改进和努力,期待日后的中国软件开源创新大赛·第二赛道:开源任务挑战赛(模型王者挑战赛)能继续参与,尝试。


2. DS CNN模型

1. 直接上结果,最终性能调优对比如下:

基础条件 Acc 速度
论文 95.4% 暂无数据
GPU(Tesla V100 16GB,单卡) 96.26% 0.027s / step
Ascend 910A(单卡) 96.18% 0.068s / step

注意的是,根据环境系统负载,数据存在一定波动。

2. 性能和精度调优过程

首先来说,在默认脚本下,DS CNN的精度基本是达标的,主要工作在于性能的提升,且要保证性能提升的同时,精度不下降(与GPU相比)。但是这里也进行了精度提升的调试,先来介绍一下:注意一下均在数据集划分test和val比例均为10%下,基于官方仓库的初始代码进行调试:

(1)调整batch size等超参数,寻求最佳超参数组合,在train.py的最下面涉及很多超参数,可以进行调试,我尝试了一些,但是精度影响不大,但是对性能有一定影响,暂时不做考虑,留作性能调优时调整。

(2)调整优化损失函数和优化器,一般来讲,损失函数或优化器改进对最终精度还是有比较大影响的,但是考虑到是复现,损失函数只做了一点调整,并未做太多或太大的改动,主要尝试了不同的优化器,一般来说,不同的优化器对收敛速度和最终精度有些影响,但这里发现原始代码的优化器比较好,虽然其他优化器可以更快,但是精度略有损失。

(3)Auto Tune

这是一个官方提供的自动优化用的工具,在Terminal里执行即可,注意仅在该Terminal下有效,具体操作如下:

· 在新建的Terminal下执行如下命令:

# 注意这是在依瞳环境下,如果使用其他环境,比如ModelArts,请参看相关文档
export install_path=/home/HwHiAiUser/Ascend/ascend-toolkit/latest
#export LD_LIBRARY_PATH=${install_path}/driver/lib64/common/:${install_path}/driver/lib64/driver:$LD_LIBRARY_PATH
export PATH=${install_path}/fwkacllib/ccec_compiler/bin:${install_path}/fwkacllib/bin:$PATH
export LD_LIBRARY_PATH=${install_path}/fwkacllib/lib64:$LD_LIBRARY_PATH
export PYTHONPATH=${install_path}/fwkacllib/python/site-packages:$PYTHONPATH
export PYTHONPATH=${install_path}/tfplugin/python/site-packages:$PYTHONPATH
export ASCEND_OPP_PATH=${install_path}/opp
export TE_PARALLEL_COMPILER=8
export REPEAT_TUNE=False
sudo chmod -R 777 ${install_path}/fwkacllib/data

如果报没有权限的错误,只要赋予其权限就行了,具体参考上述最后一条指令。


之后执行你的代码,启动训练。

其实,这个不太行,会报错,得到回复说是暂不支持动态shape,但是可以运行一部分,得到一些优化,具体如下:

但是由于后来环境无法使用,这一部分未能合并到知识库中使用,所以不知道最终结果,但应该会有一点性能的提升。


之后也尝试过Profiling,具体分析耗时算子,但是暂未能找到相应优化办法。

在运行中,可以发现AI Core最高利用率为26%左右,且是间歇性的,一般都是0,这说明未能充分利用AI Core,应该把更多计算放到AI Core上进行,因为这是相比于参考对象GPU来说,Ascend 910或者说NPU最具有优势的地方,AI Core的计算效率胜于GPU,特别是对于CNN来说,未来应该还有优化空间,期待感兴趣的同学和大佬来尝试,官方原始提供的代码可到官方仓库查看,链接如下:https://gitee.com/ascend/modelzoo/tree/master/contrib/TensorFlow/Research/speech/ds-cnn/ds-cnn_tf_huangjinsai




【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。