基于TensorFlow模型迁移到Ascend 910(NPU)调优过程简述
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
- 点赞
- 收藏
- 关注作者
评论(0)