寒武纪加速平台(MLU200系列) 摸鱼指南(三)--- 模型移植-分割网络实例

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

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。

  这里最终的效果就是分割出输入图片里面的汽车。最终网络效果测试如下图:

rep_img

  这个时候,我们也得到了一个可以用于移植和测试的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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值