Firefly开源社区

打印 上一主题 下一主题

[人工智能] RKNN是否支持部署Transformer模型?

44

积分

0

威望

0

贡献

技术小白

积分
44

RKNN是否支持部署Transformer模型?

发表于 2022-12-2 16:11:42      浏览:6415 | 回复:1        打印      只看该作者   [复制链接] 楼主
  • 固件类型: 官方提供的固件
  • 固件文件名称: ITX-3588J_Ubuntu20.04-Gnome-r21199_v1.0.1b_220812.
  • 固件下载地址: 官方下载地址
  • Log日志: none.zip
问题描述及复现步骤:
最近在使用transformer模型做图像拼接任务,需要在RK3588上部署,所以尝试将该pytorch模型转ONNX再转RKNN,目前的情况是使用rknn toolkit2转换成功了,获得的rknn模型在PC端使用python接口可以正常运行,但在RK3588板子上使用C接口运行rknn_run时报错。我是分别使用了rknn toolkit2_1.3.0和rknn toolkit2_1.4.0生成的rknn模型并分别在对应的rknpu2_1.3.0与1.4.0下运行模型,以下图片贴出了两个版本的模型分别的报错内容(打印信息里有表明rknn版本信息)以及报错的层"Conv:ReduceSum_99_2conv"的可视化信息:

关于该模型的rknn部署工作我前前后后持续了有相当长的一段时间,也进行了许多尝试,最初模型运行时报错信息的“Div, unsupported type”,感兴趣可以看我之前的帖子《关于rknn多输入情况下模型推理出现错误》。后来查到是rknn的int8量化下的模型不支持div的广播操作(或者说有限的支持,经过我的测试仅支持除数与被除数shape完全一样或者被除数是数字的情形)。于是为了解决不能广播的问题,我手动重写了LayerNorm算子,在div之前,手动将除数的维度扩大(简单说就是把1x1200x32 div 1x1200x1的手动变成1x1200x32 div 1x1200x32),从而避开了rknn不支持div的广播的问题。
紧接着rknn toolkit2_1.3.0模型转换又报错不支持sqrt算子,sqrt就是个开根号的算子,为啥会不支持呢,我又用pow(0.5)也就是0.5次方代替了根号操作,至此又解决一个问题。
紧接着就又遇到了开头提到的问题。我用netron可视化仔细对比了一下ONNX模型与RKNN模型,发现报错的层"Conv:ReduceSum_99_2conv"对应ONNX模型中的“ReduceMean”算子。想来想去也没能理解一个求均值的操作为啥要用卷积来实现,以及为啥会在卷积这一层报错。至于RKNPU2_1.4.0的报错信息“Segementation fault”就更是无从下手。

以上就是我的整个transformer模型在RK3588上的部署经历,希望有大佬能帮忙答疑解惑,或者我的整个过程哪里有问题都可以帮忙指正,感谢不吝赐教。或者如果rknn目前就是不支持transformer(因为我发现迄今为止遇到的所有错误信息都是在LayerNorm中产生的,而它又可以说是transformer的关键),也可以直接告知。感谢!

微信图片_20221202152111.png (36.79 KB, 下载次数: 632)

微信图片_20221202152111.png

微信图片_20221202152131.png (36.61 KB, 下载次数: 626)

微信图片_20221202152131.png

微信图片_20221202152136.png (14.36 KB, 下载次数: 591)

微信图片_20221202152136.png

none.zip

144 Bytes, 下载次数: 0, 下载积分: 灯泡 -1 , 经验 -1

回复

使用道具 举报

3

积分

0

威望

0

贡献

吃瓜的群众

积分
3
发表于 2023-4-26 17:16:33        只看该作者  沙发
我看RKNN官方的model zoo里面已经支持lite transformer,可以看看,https://github.com/airockchip/rk ... mo/RKNPU2/README.md
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表