Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

执行quantize_torch_model.py后,pytorch模型export出的onnx模型并不是QNN模型 #543

Open
JiliangNi opened this issue Mar 12, 2024 · 9 comments

Comments

@JiliangNi
Copy link

执行quantize_torch_model.py后,pytorch模型export出的onnx模型并不是QNN模型,虽然export导出了一份json文件和onnx模型,但是有没有办法获得一个QNN量化后的int8模型(体积比原fp32模型小的)?

@Donaldkidd
Copy link

你platform那边选QNN平台,然后直接用SNPE_convert_dlc那个工具可以读取你的json和onnx模型转成dlc,QNN 可以用

@JiliangNi
Copy link
Author

感谢回答!但是获得一个dcl文件,可能不是我想要的QNN模型。

目前

export_ppq_graph(graph=quantized, platform=PLATFORM,
graph_save_to='Output/QDQ.onnx',
config_save_to='Output/QDQ.json')

如果 PLATFORM = TargetPlatform.QNN_DSP_INT8, quantize_torch_model.py会export出一个 .json 和 .onnx(看起来和fp32原模型一样);如果PLATFORM = TargetPlatform.ONNXRUNTIME,会生成一个.json 和 .onnx(体积比原模型小了,且是一个QDQ模型),如图
QDQ

但想问一下,如何生成一个QNN模型,比如intel的neural-compressor量化工具可以生成的那种QNN模型,如图:
QNN

@JiliangNi
Copy link
Author

对了,还想问个问题:

其实在使用Aimet工具量化,然后导出onnx时,也是导出一份encodings + fp32模型。用咱们ppl的工具也会导出一份json + fp32模型。这个我不是很理解,导出的内容有什么意义或者有什么用途。因为之前我用的intel量化工具,输入fp32模型,导出int8 QNN模型,体积变小,也可以直接推理和部署。Aimet和ppl导出的两份文件是否可以再次转成QNN模型,或者有别的用法?

@Donaldkidd
Copy link

根据我目前的了解Aimet这个东西不能直接生成一个int8模型,而是需要读取那个json文件(记录的是你的模型的量化参数)+你输出的量化模型,然后用SNPE-convert-dlc那个工具,读取这两个文件这才能生成一个int8的模型。PPL选QNN_DSP_INT8和Aimet是一样的

@JiliangNi
Copy link
Author

十分感谢大佬解答了我一直带有的疑惑!
我研究一下SNPE_convert_dlc如何生成int8模型吧,十分感谢!

@JiliangNi
Copy link
Author

您好,尝试了用SNPE-convert-dlc的工具,这个目前能转化出dlc文件,但想要一个QNN的int8 ONNX模型,好像还不行,是我使用的方式不对吗?

@Donaldkidd
Copy link

用QNN converter试试

@JiliangNi
Copy link
Author

JiliangNi commented Mar 19, 2024

是这个工具吗
https://docs.qualcomm.com/bundle/publicresource/topics/80-63442-50/converters.html
image

可是并不能生成onnx模型。

找了很久,好像目前很难找到QDQ 转Qoperator ONNX的工具,但是这么通用的两种format,怎么会没有转化工具呢

@Donaldkidd
Copy link

这个model.cpp QNN可以用我记得

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants