关于昇腾众智项目中提交了5个模型这件事

网友投稿 758 2022-05-29

关于在昇腾众智项目中提交了5个模型这件事

我负责了学校华为模型迁移的对接工作,自己也参与其中。项目周期中总共完成了5个模型的迁移。其中MindSpore模型一个,Tensorflow模型四个。想通过这篇博客分享一下模型开发过程,一起其中遇到的一些问题,希望可以和开发者们共同进步。

1.所用到的工具

昇腾全栈AI软硬件平台产品非常完善,这次我参与的众筹项目是把给定的几个模型在昇腾环境上跑通训练脚本,精度达标后跑通离线推理。我主要涉及ModelArts平台、ModelZoo仓库、MindSpore和Tensorflow软件框架三个产品的使用。

2.迁移的步骤

首先是本地跑通模型的代码,跑通本之后,由于目前昇腾环境只对Tensorflow1.15做了适配,所以我们要在本地先把训练脚本迁移到1.15的版本。

本地跑通之后,需要使用ModelArts来跑代码,ModelArts可以提供装有CANN和Ascend NPU硬件的训练环境。我当时使用的是Pycharm ToolKit工具,可以很方便的调试Python代码,一键就能上传代码、数据集,然后拉起训练任务。

当你在ModelArts跑通了之后,说明你本地的1.15版本移植是正确的,这时候需要按照模型迁移手册,指定模型创建的Session下沉到NPU去运行。

调参、调参、调参。

精度达标后,又要读离线推理的文档。主要工作是将模型的ckpt转换成pb,然后使用CANN提供的ATC命令将pb转换成om,最后使用离线推理工具msame运行om文件。

3. 一些经验

关于在昇腾众智项目中提交了5个模型这件事

3.1keras的迁移和转pb并不比session麻烦

迁移首先需要解决Tensorflow的版本问题,之后就是把Session下沉到NPU。按照迁移手册也就是几行代码的事情,根据Tensorflow写法,迁移最长见的是以下两类:

session.run(config=config)

keras.backend

第一类是最简单的情况,只需要构造NPU Session Config,然后传进去即可。keras也只需要通过backend设置 NPU Session Config。框架的本质就是session,所以基于keras的模型,NPU Session Config也是使用backend.set_session()方法迁移的。只要通过keras.backend.get_session()方法获取到session,那么后续转ckpt、转pb、转om的步骤都是一样的。没有像文档中所说的,对keras的支持那么不友好。

3.2 对数据和模型有充分理解再开始工作

在做模型的过程中,最经典的就是动态shape问题。由于TF支持程度一开始对NPU支持不太友好,我们需要规避动态shape问题,很多小伙伴看到报错就大失所望,其实只要静下来读一读代码,知道了输入数据的形状,网络的结构大致是怎么样的,就很好解决动态shape问题。只需要把shape的第一维度None设置成给定的batch size,就可以解决大部分问题了。

3.3 离线推理中的模型转换

模型转换的一般步骤就是先把ckpt转换为pb再转换为om。这个过程中,需要你对模型的输入数据、输出数据的形状有特别清晰的认识。不然你在使用ATC命令,阅读msame工具文档的时候,会有很多名词对不上。输入数据的形状固定了,那么网络中各个阶段的输入也就固定了。在完成模型迁移的时候,一定要慢慢来,把模型和数据研究透彻,再开始做。

3.4 离线推理中的数据格式

由于msame工具仅支持使用bin文件的形式进行推理,数据处理一般都是python中用一个迭代器取数据。我认为最好用的方式是使用numpy的tofile()方法,指定文件名为bin即可。但是我在实践中发现,有很多om精度不达标的问题,都出在tofile()导出的时候,没有给定数据格式。如果数据精度和tofile()默认保存的精度不一样,那么喂给om之后得到的结果肯定也是错的。在tofile()的方法中就要指定好数据精度,在pb转om的过程中,要保证输入数据的精度和tofile()时的精度一致。

4. 总结和收获

要增强对问题的描述能力,Issue写的好,才能和研发工程师们高效交流。回顾很多Issue,如果某个问题换个说法,可以更快解决

工欲善其事必先利其器,写代码不要着急动手,要读完相关文档再行动

5. 比较重要的文档:

Wiki上比较重要的教程

[简历个人分支&提交代码]([https://gitee.com/ascend/modelzoo/wikis/002 建立个人分支&提交PR?sort_id=3282131](https://gitee.com/ascend/modelzoo/wikis/002 建立个人分支&提交PR?sort_id=3282131))

如何规避动态shape

离线推理案例分享

官方文档:

ATC命令文档

基于Session.run的迁移

基于Keras的迁移

AI 代码迁移 昇腾

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python程序员面试常用基础问题解析
下一篇:无线边缘联邦学习初探
相关文章