ncnn icon indicating copy to clipboard operation
ncnn copied to clipboard

加载 PNNX 导出的模型时出现 layer aten::exp not exists or registered

Open csukuangfj opened this issue 1 year ago • 5 comments

error log | 日志或报错信息 | ログ

layer aten::exp not exists or registered

layer pnnx.Expression not exists or registered

model | 模型 | モデル

  1. original model

针对 https://github.com/k2-fsa/icefall/blob/master/egs/librispeech/ASR/pruned_transducer_stateless2/decoder.py 当使用 torch.jit.trace() 时,可以成功导出成 torchscript model, 命名为 decoder_jit_trace.pt.

how to reproduce | 复现步骤 | 再現方法

源码编译 master 分支的 PNNX, 然后运行:

src/pnnx /path/to/decoder_jit_trace.pt

生成如下文件:

-rw-r--r-- 1 kuangfangjun root  503K Jul 30 20:58 icefall/decoder_jit_trace.ncnn.bin
-rw-r--r-- 1 kuangfangjun root   615 Jul 30 20:58 icefall/decoder_jit_trace.ncnn.param
-rw-r--r-- 1 kuangfangjun root 1005K Jul 30 20:58 icefall/decoder_jit_trace.pnnx.bin
-rw-r--r-- 1 kuangfangjun root   956 Jul 30 20:58 icefall/decoder_jit_trace.pnnx.param
-rw-r--r-- 1 kuangfangjun root   605 Jul 30 20:58 icefall/decoder_jit_trace_ncnn.py
-rw-r--r-- 1 kuangfangjun root  2.5K Jul 30 20:58 icefall/decoder_jit_trace_pnnx.py

decoder_jit_trace.ncnn.param 的内容如下:

7767517
9 9
Input                    in0                      0 1 in0
MemoryData               pnnx_unique_0            0 1 1
aten::exp                pnnx_10                  1 1 1 2
Embed                    embed_0                  1 1 in0 3 0=512 1=500 2=0 3=256000
BinaryOp                 mul_0                    2 1 3 2 4 0=2
Permute                  permute_2                1 1 4 5 0=1
ConvolutionDepthWise1D   convdw1d_4               1 1 5 6 0=512 1=2 2=1 3=1 4=0 5=0 6=1024 7=512
Permute                  permute_3                1 1 6 7 0=1
ReLU                     relu_1                   1 1 7 out0

然后使用从 master 编译的python 版本 ncnn 读取上面生成的 ncnn 模型

import ncnn

decoder = ncnn.Net()
decoder.load_param("/path/to/decoder_jit_trace.ncnn.param")

会出现如下错误:

layer aten::exp not exists or registered

然后就是 Segmentation fault


针对 https://github.com/k2-fsa/icefall/blob/master/egs/librispeech/ASR/pruned_transducer_stateless2/conformer.py 重复上面的方法,会出现如下错误:

layer pnnx.Expression not exists or registered

导致上述错误的 param 文件,部分内容如下: (注意,在下半部分出现了 pnnx.Expression pnnx_expr_2155 1 1 21 23)

7767517
1387 1759
Input                    in0                      0 1 in0
Input                    in1                      0 1 in1
ExpandDims               unsqueeze_300            1 1 in0 2 -23303=1,0
Convolution              conv_75                  1 1 2 3 0=8 1=3 11=3 12=1 13=1 14=1 2=1 3=1 4=1 5=1 6=72
Split                    splitncnn_0              1 2 3 4 5
BinaryOp                 sub_0                    1 1 4 6 0=1 1=1 2=1.000000e+00
Sigmoid                  sigmoid_0                1 1 6 7
BinaryOp                 mul_1                    2 1 5 7 8 0=2
Convolution              conv_76                  1 1 8 9 0=32 1=3 11=3 12=1 13=2 14=0 2=1 3=2 4=0 5=1 6=2304
Split                    splitncnn_1              1 2 9 10 11
BinaryOp                 sub_2                    1 1 10 12 0=1 1=1 2=1.000000e+00
Sigmoid                  sigmoid_1                1 1 12 13
BinaryOp                 mul_3                    2 1 11 13 14 0=2
Convolution              conv_77                  1 1 14 15 0=128 1=3 11=3 12=1 13=2 14=0 2=1 3=2 4=0 5=1 6=36864
Split                    splitncnn_2              1 2 15 16 17
BinaryOp                 sub_4                    1 1 16 18 0=1 1=1 2=1.000000e+00
Sigmoid                  sigmoid_2                1 1 18 19
BinaryOp                 mul_5                    2 1 17 19 20 0=2
Split                    splitncnn_3              1 2 20 21 22
pnnx.Expression          pnnx_expr_2155           1 1 21 23
Permute                  transpose_239            1 1 22 24 0=0
Tensor.reshape           view_shape_0             2 1 24 23 25
MemoryData               encoder_embed.out_norm   0 1 26
InnerProduct             linear_78                1 1 25 27 0=512 1=1 2=1245184
Split                    splitncnn_4              1 2 27 28 29
BinaryOp                 pow_6                    1 1 28 30 0=6 1=1 2=2.000000e+00
aten::exp                pnnx_60                  1 1 26 31
Reduction                mean_176                 1 1 30 32 0=3 1=0 -23303=1,-1 4=1 5=1
BinaryOp                 add_7                    2 1 32 31 33 0=0
BinaryOp                 pow_8                    1 1 33 34 0=6 1=1 2=-5.000000e-01
BinaryOp                 mul_9                    2 1 29 34 35 0=2
Split                    splitncnn_5              1 3 35 36 37 38

csukuangfj avatar Jul 30 '22 13:07 csukuangfj

我在YOLOv6n通过 torchscript->pnnx->ncnn也遇到了相同的问题

DataXujing avatar Aug 05 '22 01:08 DataXujing

还是自己看代码,自己解决吧

csukuangfj avatar Aug 05 '22 01:08 csukuangfj

大佬们解决了吗,我也遇到了这个问题

sungh66 avatar Aug 11 '22 10:08 sungh66

大佬们解决了吗,我也遇到了这个问题

这个要修改 pnnx 的源代码. pnnx 目前不支持 把 aten::exp 转成 ncnn 中的 UnaryOp.

csukuangfj avatar Aug 11 '22 11:08 csukuangfj

大佬们解决了吗,我也遇到了这个问题

你可以参考 https://github.com/csukuangfj/ncnn/pull/1 这个,添加对 aten::exp 的处理。

但是,可能在转换的过程中,你的模型里面,还有 pnnx 未支持的 op, 你自己还要再改 pnnx 的源代码.

csukuangfj avatar Aug 11 '22 11:08 csukuangfj

我在YOLOv6n通过 torchscript->pnnx->ncnn也遇到了相同的问题

你好,请问你后来解决了吗,yolov6n能部署到安卓上吗

Clara2333333 avatar Dec 13 '22 02:12 Clara2333333

我在YOLOv6n通过 torchscript->pnnx->ncnn也遇到了相同的问题

你好,请问你后来解决了吗,yolov6n能部署到安卓上吗

这是我的处理方式:

https://github.com/DataXujing/ncnn_android_yolov6#1%E6%A8%A1%E5%9E%8B%E8%BD%ACncnn

DataXujing avatar Dec 13 '22 03:12 DataXujing

我在YOLOv6n通过 torchscript->pnnx->ncnn也遇到了相同的问题

你好,请问你后来解决了吗,yolov6n能部署到安卓上吗

这是我的处理方式:

https://github.com/DataXujing/ncnn_android_yolov6#1%E6%A8%A1%E5%9E%8B%E8%BD%ACncnn

非常感谢!我去试试!!!

Clara2333333 avatar Dec 13 '22 03:12 Clara2333333

我在YOLOv6n通过 torchscript->pnnx->ncnn也遇到了相同的问题

你好,请问你后来解决了吗,yolov6n能部署到安卓上吗

这是我的处理方式:

https://github.com/DataXujing/ncnn_android_yolov6#1%E6%A8%A1%E5%9E%8B%E8%BD%ACncnn

您好,打扰啦~请问为什么最后生成的是四个文件呢yolov6n.param,yolov6n.bin,yolov6_opt.param和yolov6n_opt.bin,之前在Android studio部署中见过前两个,请问yolov6_opt.param和yolov6n_opt.bin是什么呢,是如何调用的呢

Clara2333333 avatar Dec 14 '22 06:12 Clara2333333

aten::exp 支持了

nihui avatar May 16 '23 02:05 nihui