MindSpore开发NLP模型中遇到的问题和解决经验分享

本文分享我在参与MindSpore的NLP模型开发中遇到的一些问题以及最终是如何解决的。如果大家有遇到类似的问题欢迎讨论交流。

问题一:训练时性能差。

一开始mindspore实现的模型使用八卡跑22个小时都跑不完训练,每一步需要跑3000+ms。

 

QQ图片20211119165911.png   QQ图片20211119165919.png

后来得知由于Ascend芯片矩阵运算的设计,会存在需要和16对齐的要求。尝试后发现,MindSpore的mindspore.nn.Embedding()函数中的两个参数vocab_size和embedding_size需要设置为16的倍数,不然会对性能有很大的影响。修改后使用八卡跑完训练只需要半个小时,每步只需要300+ms,性能提高了10倍以上。

问题二:处理得到的mindrecord数据训练中使用报错。

将处理好的mindrecord数据读出来用于训练时发现维度多了一维,而直接处理数据并送入模型不会出错,因此将问题定位在了数据处里为mindrecord格式和读取mindrecord那里。尝试后发现,在数据处理为mindrecord的时候就将batch size设置为了8,而在读取mindrecord时又将参数batch_size设置为了8,导致数据读出来后直接多了一维。最终将数据在处理为mindrecord时的batch size设置为1就可以解决这个问题了。

问题三:静态图中有的算子会报错。

MindSpore中mindspore.nn、mindspore.ops、mindspore.numpy中有一些同名参数相同功能也相同的算子,但有的使用后在动态图中不会报错但静态图中会报错,替换为不同的包里的同名函数后静态图不会报错。推测可能是这些同名算子中有的能够支持静态图而有的不行。

 

posted @ 2021-12-25 15:45  MS小白  阅读(60)  评论(0)    收藏  举报