建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

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

确定
我再想想
选择版块
直达楼层
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

采纳成功

您已采纳当前回复为最佳回复

张辉

发帖: 180粉丝: 105

发消息 + 关注

更新于2021年04月24日 19:28:26 709 41
直达本楼层的链接
楼主
显示全部楼层
[技术干货] 【昇腾CANN训练营第一期模型营】0414作业记录(连载完毕)

模型营最后一课,主题为《TF网络训练性能分析》

钟老师在直播课中,介绍了如何做性能分析。

先仔细看视频:(为了省钱,必须仔细看视频。。)

讲座中提到:

ModelArts环境用来获取性能数据。AI1S平台用于解析性能数据。

什么叫做混合精度训练:

如何使用CANN平台提供得Profiling工具做性能分析

等等。

当前性能如何判断好坏?需要有基准数据。

如果当前数据比预期得慢很多。就可能出现性能问题。

举例:MobileNet V3从GPU迁移到昇腾910平台,网络训练性能远远超越了gpu(V100)的性能。(将近3倍关系)

speed:吞吐率。

提高性能的三种方法:

  • 数据预处理:
  • 使用混合精度训练
  • 采用工具分析升级网络性能


(1)数据预处理

CANN平台在Device侧支持的算子有map,batch,map_and_batch,其他的均在host执行。

如果发现网络速度慢,可以考虑把所有的预处理算子都放到Host执行。

上图中,map,batch在device执行,但是shuffle在host执行,这样的操作会造成device和host交互比较多,产生性能瓶颈。

在最后追加一个prefetch(策略看图)。这样所有算子都会在host执行。可以减少数据预处理的性能耗时。


针对多卡训练:

需要均衡当前处理的CPU个数。把训练进程绑定到指定的Host CPU上(taskset -c)。进行合理分配。

(二)混合精度训练:

一般训练会选择FP32。(4个字节存储和计算)如果使用FP16的话,会使得存储和计算更少。所以如果将FP32和FP16混合,会加速并减少内存使用。但是会影响精度。

这样可以考虑选择一定的折衷点。(推荐:allow_mix_precision内置的优化策略)

设置方法:

参看上图,仅需加入一行即可。(感觉这条对作业应该有用)










举报
分享

分享文章到朋友圈

分享文章到微博

采纳成功

您已采纳当前回复为最佳回复

张辉

发帖: 180粉丝: 105

发消息 + 关注

发表于2021年04月17日 13:55:48
直达本楼层的链接
沙发
显示全部楼层

重点讲述使用Profiling工具进行网络优化:

举例:有个195ms的单算子提升到65微秒左右。。(?)

四个步骤:

注:ModelArts环境没有toolkit包。

Ai1S环境有这个toolkit包。可以用它将采集到的数据进行解析。

可以共享Ai1S环境(下面有示例)

下面开始从ModelArts采集Profilling数据

(1)在Python代码中加:Estimator方式采集数据:

需要导入Profiling Config包

加一个profiling_options配置项。

再将配置项加入NPURunConfig中。

看配置项参数:

  • output: 如果不存在,需要在代码中手工创建。
  • task_trace:当前任务配置项:on
  • aicpu:捕捉AI CPU性能:on

其他参数是进阶篇内容(可以不配置)。

(2)在Python代码中加:sess.run方式采集:

配置项与前面类似。

(3)通过环境变量方式加:

按上述方法设置好Profilling之后,执行10次迭代左右,不能手动ctrl-c退出(会影响性能解析),可以在代码中将迭代次数改为10-20次。

在output路径下会生成JOB开头的profiling数据。

还得将ModelArts采集到的结果拷贝到OBS上(使用mox.file.copy_parallel)

评论
张辉 2021-4-17 15:17 评论

打问号的部分在后面得到了验证。。

... 查看全部
点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

张辉

发帖: 180粉丝: 105

发消息 + 关注

发表于2021年04月17日 14:09:37
直达本楼层的链接
板凳
显示全部楼层

解析需要用到toolkit的工具包。

需要在Ai1S下安装:

解析Profiling:导入刚刚从ModelArts采集的profiling数据。

python 3.7.5 msprof.pyc import -dir JOBXXXXXXXXXXXXX

查询job信息

python 3.7.5 msprof.pyc query -dir JOBXXXXXXXXXXXXX

导出timeline数据

python 3.7.5 msprof.pyc export timeline 

导出summary数据

python 3.7.5 msprof.pyc export summary

会生成2个文件夹,包含每个算子的耗时情况。

(可以放到一个shell  run_msprof.sh执行)

training_trace可以不用设置。

aicpu_0_1_csv AI CPU算子

fusion_op_0_1 融合算子

op_summary 所有算子的展开

op_statistic 每个算子迭代多少次。

下面示例:

F:op_name 算子名称

G: op_type 算子类型

J: Task Duration:执行时间,可以排序。判断哪个算子耗时最大(重点关注)最好是微秒级别。

K:Task Wait:算子执行等待的时间

AICPU算子在aicpu_0_1_csv 文件中有。

点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

张辉

发帖: 180粉丝: 105

发消息 + 关注

更新于2021年04月17日 23:36:53
直达本楼层的链接
地板
显示全部楼层

接着钟老师以Alexnet sess.run方式的代码为例:

https://gitee.com/ascend/canncamp/tree/master/training_camp/sample-alexnet

Git地址:https://gitee.com/ascend/canncamp.git 

介绍了具体的优化方法:

在cfg.py中,按图示增加profiling的相关代码:

在run_1p.sh中查看迭代次数:

可以向昇腾小助手申请Ai1S环境所需要的镜像。




点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

张辉

发帖: 180粉丝: 105

发消息 + 关注

发表于2021年04月17日 14:37:44
直达本楼层的链接
5#
显示全部楼层

谭老师的环境跟目前ModelArts的CANN版本不匹配,所以要按照钟老师的方式申请即可

购买ECS,北京4。AI加速型,2C8G

选择前面共享的3月1日的镜像:

按流量计费:

命名:ecs-profiling

购买(一块多一个小时)

点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

张辉

发帖: 180粉丝: 105

发消息 + 关注

发表于2021年04月17日 14:52:06
直达本楼层的链接
6#
显示全部楼层

查看ModelArts训练中有没有产生profiling数据

使用OBS Browser+将其下载到本地。

等待Ai1S创建成功:连接服务器环境

将刚才下载的数据(npu_profiling目录)上传到AI1S环境

在仓库下有shell文件:https://gitee.com/ascend/canncamp/blob/master/training_camp/sample-alexnet/alexnet_session/scripts/run_msprof.sh 

将其也上传到AI1S环境。(注意MSPROF_DIR不同环境不一样)

在服务器上执行这个shell:

sh run_msprof.sh /root/npu_profilling

解析之后,在原目录下多了summary和timeline。

将其下载回windows本地。

打开查看csv文件即可:

查看J列。对 TaskDuration降序排列。

可以看到较慢的算子。就可以考虑对其进行优化。

可以在op_statistic中看出平均耗时。

再看AICPU算子耗时情况:

点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

张辉

发帖: 180粉丝: 105

发消息 + 关注

发表于2021年04月17日 14:55:43
直达本楼层的链接
7#
显示全部楼层

如果发现某算子耗时较大,也可以到Ascend/modelzoo提issue。把profilling数据提供后,华为专家会对此进行分析,以及对算子优化。

从几百毫秒到几十微秒。。

点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

张辉

发帖: 180粉丝: 105

发消息 + 关注

发表于2021年04月17日 15:04:14
直达本楼层的链接
8#
显示全部楼层

下面老师布置了这次的作业:

使用Tensorflow1.15和Python3.7.5和Kaggle官网CAT数据集,将GitHub上开源的BigGAN网络源码迁移到Ascend910上。大作业只考虑img_size为128的情况,修改超惨batch_size的值,设置为32或64测试即可。

要求:

在ModelArts平台上可以正常跑通,NPU利用率不为0,训练迭代次数不限。 【20分】
使用Profiling工具分析网络性能。拿到profiling数据,并在Ai1S环境上使用toolkti工具包中的msprof工具进行算子耗时的简单分析。【10分】
根据模型营所学的知识,尽可能的优化训练迭代耗时。 【10分
尽可能完善自己源码下的README,描述如何迁移的,做了什么修改/适配以及优化,最终需要提交完整代码PR,方便营长复现你的作业。

注意:必须跑在ascend NPU上。

下载CAT数据集:

第一步:ModelArts上,不需要全部训练完,仅仅需要将网络跑通,将profilling数据跑通即可。

跑100步,最多1000步即可。(没几分钟)

Github上的BigGAN代码需要略有修改,就可以在TF 1.15+Python3.7.5上跑起来。

跑完后,(1000-2000次)

第二步:在Ai1S环境下做个性能分析:主要处理:ai_cpu,op_summary,op_statistic,根据算子耗时好低排序,贴出来即可。

第三步,优化,迭代。(感觉能力有限。。。做不了。。。。)

作业需要提交PR,钟老师会复现。所以不能骗人。。。

点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

张辉

发帖: 180粉丝: 105

发消息 + 关注

发表于2021年04月17日 15:16:24
直达本楼层的链接
9#
显示全部楼层

其实上面都没开始干活。。。。

本楼开干吧。。。

对于第一大步。

要跑通ModelArts上的大GAN,最好现在本地GPU环境跑通。

所以先去github下载源代码:(然而github是无法下载的,所以转从gitee下载)

导入后:

获取地址:https://gitee.com/zhanghui_china/BigGAN-Tensorflow.git

git clone https://gitee.com/zhanghui_china/BigGAN-Tensorflow.git

然后需要下载数据集:钟老师提供了华为云下载地址:https://public-obs.obs.cn-north-4.myhuaweicloud.com/archive.zip

有4.04G

耐心等待下载结束。。

点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

Jack20

发帖: 193粉丝: 173

发消息 + 关注

发表于2021年04月17日 16:18:41
直达本楼层的链接
10#
显示全部楼层

大哥又在努力学习了

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册

结贴

您对问题的回复是否满意?
满意度
非常满意 满意 一般 不满意
我要反馈
0/200