Toybrick

标题: toolkit1.3.0+UbuntuPC模拟器+Pytorch DenseNet出错 [打印本页]

作者: 阿杰哥1992    时间: 2020-3-17 14:51
标题: toolkit1.3.0+UbuntuPC模拟器+Pytorch DenseNet出错
环境:toolkit1.3.0+UbuntuPC模拟器+Pytorch转换。
问题描述:在examples/pytorch/test.py中,我们将resnet18替换成densenet201,发现不能运行成功。rknn.init_runtime()运行过程中显示Restarting kernel...

作者: jefferyzhang    时间: 2020-3-17 15:04
pytorch版本?
log?
作者: 阿杰哥1992    时间: 2020-3-17 15:10
jefferyzhang 发表于 2020-3-17 15:04
pytorch版本?
log?

python3.5,pytorch 1.2.0+cpu。
rknn.init_runtime出问题的log如下:
I [setup_nodes:4017]name=convolution_at_9310_36
I [setup_nodes:4017]name=cat_at_input579.1_331
I [setup_nodes:4017]name=batch_norm_at_input580.1_250
I [setup_nodes:4017]name=relu__at_input581.1_169
I [setup_nodes:4017]name=convolution_at_input582.1_136
I [setup_nodes:4017]name=relu__at_input584.1_70
I [setup_nodes:4017]name=convolution_at_9388_37
I [setup_nodes:4017]name=cat_at_input585.1_332
I [setup_nodes:4017]name=batch_norm_at_input586.1_251
I [setup_nodes:4017]name=relu__at_input587.1_170
I [setup_nodes:4017]name=convolution_at_input588.1_137
I [setup_nodes:4017]name=relu__at_input590.1_71
I [setup_nodes:4017]name=convolution_at_9467_38
I [setup_nodes:4017]name=cat_at_input591.1_333
I [setup_nodes:4017]name=batch_norm_at_input592.1_252
I [setup_nodes:4017]name=relu__at_input593.1_171
I [setup_nodes:4017]name=convolution_at_input594.1_138
I [setup_nodes:4017]name=relu__at_input596.1_72
I [setup_nodes:4017]name=convolution_at_9547_39
I [setup_nodes:4017]name=cat_at_input597.1_334
I [setup_nodes:4017]name=batch_norm_at_input598.1_253
I [setup_nodes:4017]name=relu__at_input599.1_172
I [setup_nodes:4017]name=convolution_at_input600.1_139
I [setup_nodes:4017]name=relu__at_input602.1_73
I [setup_nodes:4017]name=convolution_at_new_features2.1_40
I [setup_nodes:4017]name=cat_at_input603.1_7
I [setup_nodes:4017]name=batch_norm_at_input604.1_6
I [setup_nodes:4017]name=relu__at_input605.1_5
I [setup_nodes:4017]name=adaptive_avg_pool2d_at_out.1_4
I [setup_nodes:4017]name=permute_3
I [setup_nodes:4017]name=trans_flatten_at_input606.1_2
I [setup_nodes:4017]name=addmm_at_9685_1
I [vnn_CreateRKNN:5249]Norm tensor initialize
I [vnn_CreateRKNN:5264]Const tensor initialize
I [vnn_CreateRKNN:5279]Virtual tensor initialize

Restarting kernel...
之前的步骤ret返回0,以上log还没保存至verbose_file,就把python kernel整挂了
作者: 阿杰哥1992    时间: 2020-3-17 15:17
jefferyzhang 发表于 2020-3-17 15:04
pytorch版本?
log?

另,我们采用的torchvision中的原生densenet201模型,
import torchvision.models as models
net = models.densenet201(pretrained=True)
谢谢
作者: jefferyzhang    时间: 2020-3-17 15:20
问题已提交
作者: 阿杰哥1992    时间: 2020-3-17 15:53
jefferyzhang 发表于 2020-3-17 15:20
问题已提交

期待你们的反馈!!!
作者: jefferyzhang    时间: 2020-3-18 20:29
请将模型或下载地址、转换脚本发给我
作者: jefferyzhang    时间: 2020-3-20 16:38
NPU部门答复:
densenet201的模型规模比较大,我这边转换都要花20多分钟,netron也打不开,通过分析,发现这个模型的concat的input数量(47个)已经超过了vip8000的硬件限制(16个),因此该模型在vip8000上暂时无法支持。
作者: 18022443868    时间: 2020-5-9 15:35
jefferyzhang 发表于 2020-3-20 16:38
NPU部门答复:
densenet201的模型规模比较大,我这边转换都要花20多分钟,netron也打不开,通过分析,发现 ...

Vip8000是什么?RK3399pRO上面的硬件吗?我的模型中有41个concat,那也同样不支持,这样理解没错吧?这个硬件支撑大概需要怎么调整,让他足够支持?
作者: jefferyzhang    时间: 2020-5-9 15:56
18022443868 发表于 2020-5-9 15:35
Vip8000是什么?RK3399pRO上面的硬件吗?我的模型中有41个concat,那也同样不支持,这样理解没错吧?这个 ...

NPU的硬件。
简单这么说,这个网络我们硬件限制,支持不了。
作者: 18022443868    时间: 2020-5-9 16:59
jefferyzhang 发表于 2020-5-9 15:56
NPU的硬件。
简单这么说,这个网络我们硬件限制,支持不了。

那如果说放在RK1808计算棒呢?是否能够支持?我在PC端插上计算棒也是同样的错误,估计也支持不了
作者: jefferyzhang    时间: 2020-5-9 21:13
18022443868 发表于 2020-5-9 16:59
那如果说放在RK1808计算棒呢?是否能够支持?我在PC端插上计算棒也是同样的错误,估计也支持不了 ...

你的网络我们NPU支持不了,你说的所有rknn目前都是这款NPU,无法支持
作者: 18022443868    时间: 2020-5-11 09:58
jefferyzhang 发表于 2020-5-9 21:13
你的网络我们NPU支持不了,你说的所有rknn目前都是这款NPU,无法支持

那我将concat 输入数量降低到16以下,RKNN是否就可以支持我的网络了?
作者: jefferyzhang    时间: 2020-5-11 10:02
18022443868 发表于 2020-5-11 09:58
那我将concat 输入数量降低到16以下,RKNN是否就可以支持我的网络了?

动手试试
作者: 18022443868    时间: 2020-5-19 11:38
jefferyzhang 发表于 2020-5-11 10:02
动手试试

可以,但是我加入out = F.interpolate(input,size=(skip.size(2), skip.size(3)),mode="bilinear",align_corners=True,)这个操作后,网络在RK3399ProD上面初始化又失败了,不加就可以运行
作者: jefferyzhang    时间: 2020-5-19 11:44
18022443868 发表于 2020-5-19 11:38
可以,但是我加入out = F.interpolate(input,size=(skip.size(2), skip.size(3)),mode="bilinear",align_ ...

加载失败一般都是模型转的有问题,看下转换过程有没有报错,再用UI工具看下转换完的rknn模型是不是正确
作者: 18022443868    时间: 2020-5-19 11:58
jefferyzhang 发表于 2020-5-19 11:44
加载失败一般都是模型转的有问题,看下转换过程有没有报错,再用UI工具看下转换完的rknn模型是不是正确 ...

转换过程未出错。应该是F.interpolate操作有点特殊,需要对应怎么去处理之类的?
作者: jefferyzhang    时间: 2020-5-19 12:00
18022443868 发表于 2020-5-19 11:58
转换过程未出错。应该是F.interpolate操作有点特殊,需要对应怎么去处理之类的? ...

pytorch我只能给NPU team报bug。。。
pytorch现在自定义op是否支持我也没关注,如果是tf或者caffe,一般做法就是自定义op自己写.
你这里的 F.interpolate 是对应nn. 里的哪个函数?
作者: 18022443868    时间: 2020-5-19 14:09
jefferyzhang 发表于 2020-5-19 12:00
pytorch我只能给NPU team报bug。。。
pytorch现在自定义op是否支持我也没关注,如果是tf或者caffe,一般 ...

torch.nn.functional.interpolate
作者: jefferyzhang    时间: 2020-5-19 14:36
18022443868 发表于 2020-5-19 14:09
torch.nn.functional.interpolate

已经报给NPU部门了
作者: 18022443868    时间: 2020-5-19 14:49
jefferyzhang 发表于 2020-5-19 12:00
pytorch我只能给NPU team报bug。。。
pytorch现在自定义op是否支持我也没关注,如果是tf或者caffe,一般 ...

试过pytorch中的几个上采样函数:torch.nn.functional.interpolate       torch.nn.functional.upsample    torch.nn.functional.upsample_bilinear 三种上采样操作,都不行,是不是目前RKNN还未支持pytorch的上采样操作?

作者: jefferyzhang    时间: 2020-5-19 15:02
18022443868 发表于 2020-5-19 14:49
试过pytorch中的几个上采样函数:torch.nn.functional.interpolate       torch.nn.functional.upsample   ...

你是toolkit 1.3.2 么?1.3.2加了大量pytorch op支持了啊
作者: 18022443868    时间: 2020-5-19 17:01
jefferyzhang 发表于 2020-5-19 15:02
你是toolkit 1.3.2 么?1.3.2加了大量pytorch op支持了啊

是的,API:1.3.2,DRV1.3.0。
我的pt文件上传一下,发麻烦帮忙看下到底是什么地方存在问题?
作者: jefferyzhang    时间: 2020-5-19 17:30
问题已经上报
作者: 18022443868    时间: 2020-5-19 17:34
jefferyzhang 发表于 2020-5-19 15:02
你是toolkit 1.3.2 么?1.3.2加了大量pytorch op支持了啊

后面给的是未超过16个concat的模型,我这个模型初始化老是失败。麻烦帮忙看下,万分感谢

作者: 18022443868    时间: 2020-5-19 18:50
jefferyzhang 发表于 2020-5-19 17:30
问题已经上报

好的,收到,等贵司回复
作者: 18022443868    时间: 2020-5-21 10:49
jefferyzhang 发表于 2020-5-19 17:30
问题已经上报

目前用的模型是FcHarDNet
作者: jefferyzhang    时间: 2020-5-25 20:07
NPU Team答复: 253180

尝试将out = F.interpolate(input,size=(skip.size(2), skip.size(3)),mode="bilinear",align_corners=True,)
改成out = F.interpolate(input,size=(int(skip.size(2)), int(skip.size(3))),mode="bilinear",align_corners=True,)
上采样的size必须是固定的不能是变化的




欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3