切换版块
×
基础软件平台
PyTorch开发
TensorFlow开发
编解码及SDK开发
BANG语言与计算库
开发工具链
MagicMind开发
软件栈百科
云平台集成
硬件产品专区
MLU370系列AI加速卡
MLU270系列AI加速卡
MLU220系列AI加速产品
经验方案交流区
经验案例与实践分享
开发者服务
开发者活动
公告与版务
高校支持
《智能计算系统》
签到
版块
社区
文档
SDK下载
370系列
200系列
开发平台
官网首页
注册
登录
全部版块
基础软件平台
硬件产品专区
经验方案交流区
开发者服务
高校支持
发布新帖
登录/注册
LV.1
tiger_k
168
积分
3
赞
23
帖子
113
回复
0
收藏
TA的动态
TA的帖子
TA的回复
关于dump结果分析
我的回复:#1andy_marvelous回复您好:1. 网络误差并非逐层增大,因为量化的关系,有一些层的误差会偏大,但是有一些层能够将误差减小。例如,例如mlu上的某层conv有较多的-1到0之间的输出,而cpu上对应层的conv有较多的0到1之间的输出,此时mlu与cpu的误差会变大,若该conv层后接一个relu层,则会将大量-1到0之间的输出变为0,而cpu上对应的0到1的输出将保持原值,此时,误差将减小。2. 同上3. 您这边指的误差是mlu的最后一层的输出与cpu的输出的mse吗?还是指其他?4. 该问题与具体的conv输入有关。同时可参考第1点回复。5. 通常来说,精度不及预期可检查量化效果是否符合预期。mlu使用min-max量化,可以检查异常层的scale 与 pos,然后手动套用min-max量化公式检查pt内的weight是否符合量化预期。展开这是我打印出来的网络 (model): Sequential( (0): Conv( (conv): Conv2d(3, 32, kernel_size=(6, 6), stride=(2, 2), padding=(2, 2)) (act): SiLU() ) (1): Conv( (conv): Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1)) (act): SiLU() ) (2): C3( (cv1): Conv( (conv): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1)) (act): SiLU() ) (cv2): Conv( (conv): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1)) (act): SiLU() ) (cv3): Conv( (conv): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1)) (act): SiLU() ) (m): Sequential( (0): Bottleneck( (cv1): Conv( (conv): Conv2d(32, 32, kernel_size=(1, 1), stride=(1, 1)) (act): SiLU() ) (cv2): Conv( (conv): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (act): SiLU() ) ) ) ) 我从dump结果猜测,误差是出现在cov函数中,所有我对cov函数进行cpu替换 class Conv(nn.Module): # Standard convolution def __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True): # ch_in, ch_out, kernel, stride, padding, groups super().__init__() self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p), groups=g, bias=False) self.bn = nn.BatchNorm2d(c2) self.act = nn.SiLU() if act is True else (act if isinstance(act, nn.Module) else nn.Identity()) # def forward(self, x): # return self.act(self.bn(self.conv(x))) # def forward_fuse(self, x): # return self.act(self.conv(x)) def forward(self, x): x = x.to(\"cpu\") cpu_cov = self.conv.to(\"cpu\") cpu_act = self.act.to(\"cpu\") cpu_bn = self.bn.to(\"cpu\") x = cpu_act(cpu_bn(cpu_cov(x))) x = x.to(ct.mlu_device()) return x def forward_fuse(self, x): x = x.to(\"cpu\") cpu_cov = self.conv.to(\"cpu\") cpu_act = self.act.to(\"cpu\") return cpu_act(cpu_cov(x)).to(ct.mlu_device()) 但是报错 RuntimeError: torch_mlu::conv2d() Expected a value of type \'Tensor\' for argument \'_7\' but instead found type \'NoneType\'. Position: 7 Value: None Declaration: torch_mlu::conv2d(Tensor _0, Tensor _1, Tensor _2, int[] _3, int[] _4, int[] _5, int _6, Tensor _7, Tensor _8) -> (Tensor _0) 是不是这里边cpu的cov2d 在转torch_mlu::conv2d时出错了呢
0
关于dump结果分析
我的回复:#1andy_marvelous回复您好:1. 网络误差并非逐层增大,因为量化的关系,有一些层的误差会偏大,但是有一些层能够将误差减小。例如,例如mlu上的某层conv有较多的-1到0之间的输出,而cpu上对应层的conv有较多的0到1之间的输出,此时mlu与cpu的误差会变大,若该conv层后接一个relu层,则会将大量-1到0之间的输出变为0,而cpu上对应的0到1的输出将保持原值,此时,误差将减小。2. 同上3. 您这边指的误差是mlu的最后一层的输出与cpu的输出的mse吗?还是指其他?4. 该问题与具体的conv输入有关。同时可参考第1点回复。5. 通常来说,精度不及预期可检查量化效果是否符合预期。mlu使用min-max量化,可以检查异常层的scale 与 pos,然后手动套用min-max量化公式检查pt内的weight是否符合量化预期。展开您说的异常层,在这里可以看作是第一二层吗 _00001_model.0.act_out errRate = 0.03537113219499588 _00002_model.1.conv_in errRate = 0.03537113219499588 ******************* _00002_model.1.conv_out errRate = 0.06306491792201996 ******************* _00003_model.1.act_in errRate = 0.06306491792201996 _00003_model.1.act_out errRate = 0.07197665423154831 _00004_model.2.cv1.conv_in errRate = 0.07197665423154831 _00004_model.2.cv1.conv_out errRate = 0.06885150820016861 _00005_model.2.cv1.act_in errRate = 0.06885150820016861 _00005_model.2.cv1.act_out errRate = 0.0884501039981842 _00006_model.2.m.0.cv1.conv_in errRate = 0.0884501039981842 ******************* _00006_model.2.m.0.cv1.conv_out errRate = 0.15424127876758575 ******************* 我需要检查这两层的scale和pos来进一步确定问题 对于最终的结果误差 我就直接参考最后一次的输出误差来判断 可以吗
0
云平台转离线模型的问题
我的回复:我找到了问题 是模型本身的问题并非操作的问题
0
关于set `torch.nn.Module.dump_patches = True`的警告
我的回复:#1onlinedj回复你对源代码做了修改?这是提示回退patch我查到这是一个torch版本之间的一个警告。可以 model = torch.load(old_model_path) torch.save(model, new_model_path) 重新保存一下就没有警告了, 目前没有发现警告有什么影响
0
我的回复:麻烦问一下 这里边的config.ini文件 在我自己的yolov5移植的时候也可以通用吗?
0
关于添加firstconv
我的回复:#4tiger_k回复逐层模式推理的代码model = Model('models/yolov5s.yaml')state_dict = torch.load('Yolov5s_int8.pth')quantized_net = torch_mlu.core.mlu_quantize.quantize_dynamic_mlu(model)quantized_net.load_state_dict(state_dict,strict=False)quantized_net.eval()ct.set_core_number(1)ct.set_core_version("MLU270")ct.set_input_format(0)dump_utils.register_dump_hook(quantized_net)#注册dumpquantized_net.to(ct.mlu_device())pred = quantized_net(im.to(ct.mlu_device()))dump_utils.save_data("output/", "mlu")#保存dump结果 展开如果不加dump调试的话 就可以运行但是结果不对,加了dump调试就会报错Segmentation fault (core dumped)
0
关于添加firstconv
我的回复:逐层模式推理的代码model = Model('models/yolov5s.yaml')state_dict = torch.load('Yolov5s_int8.pth')quantized_net = torch_mlu.core.mlu_quantize.quantize_dynamic_mlu(model)quantized_net.load_state_dict(state_dict,strict=False)quantized_net.eval()ct.set_core_number(1)ct.set_core_version("MLU270")ct.set_input_format(0)dump_utils.register_dump_hook(quantized_net)#注册dumpquantized_net.to(ct.mlu_device())pred = quantized_net(im.to(ct.mlu_device()))dump_utils.save_data("output/", "mlu")#保存dump结果
0
关于添加firstconv
我的回复:逐层模式打印的信息Model Summary: 213 layers, 7225885 parameters, 0 gradients Model( (model): Sequential( (0): Conv( (conv): MLUConv2d( 3, 32, kernel_size=(6, 6), stride=(2, 2), padding=(2, 2), scale=Parameter containing: tensor([127.00000, 4.45803]), quantized_mode=Parameter containing: tensor([1], dtype=torch.int32), input_mean=Parameter containing: tensor([0., 0., 0.]), input_std=Parameter containing: tensor([255., 255., 255.]) ) (act): SiLU() ) (1): Conv( (conv): MLUConv2d( 32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), scale=Parameter containing: tensor([ 2.11397, 119.14012]), quantized_mode=Parameter containing: tensor([1], dtype=torch.int32), input_mean=None, input_std=None )
0
关于添加firstconv
我的回复:上面是我在逐层模式中打印的模型信息
0
关于添加firstconv
我的回复:我用cpu模式加载量化后的模型数据,推理结果是正常的,我觉得是融合模式这块有问题
0
上一页
1
2
3
4
5
6
7
8
下一页
Github
开发平台
文档中心
新手必读
官方微信
版权所有 © 2024 寒武纪 Cambricon.com 备案/许可证号:
京ICP备17003415号-1
关闭