PS:要转载请注明出处,本人版权所有。
PS: 这个只是基于《我自己》的理解,
如果和你的原则及想法相冲突,请谅解,勿喷。
环境说明
- Ubuntu 18.04
- MLU270 加速卡一张
- 寒武纪Pytorch-Docker移植环境
前言
阅读本文前,请务必须知以下前置文章概念:
- 《寒武纪加速平台(MLU200系列) 摸鱼指南(一)— 基本概念及相关介绍》 ( https://blog.csdn.net/u011728480/article/details/121194076 )
- 《寒武纪加速平台(MLU200系列) 摸鱼指南(二)— 模型移植-环境搭建》 ( https://blog.csdn.net/u011728480/article/details/121320982 )
经过了前面两篇文章的介绍,我们也对寒武纪加速平台有了一个朴实的了解。为了加深我们对寒武纪平台的理解,我这里将会使用一个分割网络的实例来展示寒武纪平台整个模型移植和部署过程。
若文中引用部分存在侵权,请及时联系我删除。
实例基本介绍
这里对这个简单的分割网络做一个简介,这里训练使用的是CamVid数据集。输入是1*3*480*480。输出是480*480。
这里最终的效果就是分割出输入图片里面的汽车。最终网络效果测试如下图:
这个时候,我们也得到了一个可以用于移植和测试的pth模型文件。
移植模型基本步骤
其实Pytorch的模型移植还是比较简单的,按照一定流程进行测试即可。我总结的基本流程如下:
- 在docker里面,跑cpu版本的模型推理代码。
- 在docker里面,跑cpu版本的量化模型生成代码,同时进行量化模型的测试。
- 在docker里面,将量化模型转换为离线模型。
在Docker里运行cpu推理代码
至今为止,根据寒武纪官方文档描述,现在的docker环境里面存在的是pytorch1.3环境,这个可能和主流模型支持的pytorch 1.7+有差异。所以,为了后续工作的顺利展开,我们不要一上来就开始量化模型,先保证模型能够在pytorch 1.3环境能够正常工作。
当我们训练好模型后,得到pth文件,然后在训练环境里面还会做一个测试pth文件的脚本,判断模型的效果。同理,我们应该将此测试脚本放到移植环境里面再跑一次,一般来说都会多多少少出点问题。
至今为止,我们遇到过两大类问题,一类为pytorch1.3某些算子不支持,可以更换为其他类似算子,或者自己实现这个算子。第二类为一些版本问题,比如模型保存的格式在pytorch1.6后使用的是zip格式(详情见torch.save api说明注释里面),旧版本要加载模型,需要使用_use_new_zipfile_serialization=False重新存储一下模型文件。
一般来说,大致的模型转换代码如下:
# 存在一个模型test.pth(zip格式)
# 存在一个获取的模型网络结构类:TestModel
import torch
model = TestModel()
state_dict = torch.load('test.pth', map_location=torch.device('cpu'))
model.load_state_dict(state_dict, strict=True)
torch.save(model, 'new_test.pth', _use_new_zipfile_serialization

本文详细介绍寒武纪MLU270加速卡上的模型移植流程,包括模型测试、量化、生成离线模型等关键步骤,并提供代码示例。
最低0.47元/天 解锁文章
2420

被折叠的 条评论
为什么被折叠?



