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

请教一下导出到onnx的问题 #329

Closed
Pzzzzz5142 opened this issue Dec 13, 2022 · 4 comments
Closed

请教一下导出到onnx的问题 #329

Pzzzzz5142 opened this issue Dec 13, 2022 · 4 comments

Comments

@Pzzzzz5142
Copy link

在使用 ONNXRUNTIME 平台导出时,我有如下几个问题:

  1. 问题 1:
    以一个 conv 为例:
    image

    这里 ppq 量化出来的结果是这样的:
    image

    令我感到疑惑的点在于为何是先 quant 再 dequant?这样不就是依然在用 fp32 计算 conv 了吗?

  2. 问题 2:
    在指定 shape 之后,似乎在 quant 和 dequant 算子中并没有关于 shape 的额外描述。而只在其他地方有关于 shape 的描述,请问一下这是正常的吗?因为我在后续开发中没有这个信息可能还得额外处理一下。
    image

  3. 问题 3:
    同样是那个 demo 代码,似乎是新版本的 export_ppq_graph 函数新增了一个 config_save_to 参数。这个参数看起来是用来描述每一个 tensor 的量化策略的。请问一下如果我拿到了完整的 onnx model,是不是这些 policy 就已经存放在 onnx 里了,从而不需要管这个 config 文件呢?(同时那个 policy 里面的 LINEAR 是什么意思不太明白,但看起来好像所有 LINEAR 属性的值都是 true,是不是不用管(()

烦请赐教!

@ZhangZhiPku
Copy link
Collaborator

关于这个先quant再dequant的问题,是onnx自己规定的:
onnx的定义中conv算子的输入输出只能是fp32的,不可以是int8,所以就产生了这样的情况。

quant, dequant算子没有正确shape的问题将在 #326 这个补丁中修复。
但即便如此,你的程序逻辑仍然不应该依赖于这个shape信息,这个shape信息是可选的,并不一定会存在,只起到提示的作用。

如果你的模型使用 quant, dequant 节点来传递量化信息,那么应当不再需要 config_save_to 参数,所有的量化参数都已经写入onnx之中。TQC上的 policy LINEAR 指明使用线性量化,与之对应的可以使用 FLOATING 指明使用浮点量化。

@Pzzzzz5142
Copy link
Author

Pzzzzz5142 commented Dec 14, 2022

感谢回复!这里虽然 shape 是可选的,在我的实际开发中其实也是可选的,但是我在程序中有一个假设就是如果 input 指定了 shape,那么整张 onnx 图就应该是都带 shape 的。这里没有 shape 会导致逻辑上不太好处理(((

@Pzzzzz5142
Copy link
Author

另,目前ppq在int8上表现不好的原因有可能就是因为导出格式的问题所导致的。因为相比未量化的模型,ppq导出的模型不仅额外引入了量化与反量化的操作,还使用了fp32进行计算。这里onnx官方的int8模型并不是这样导出的,而是使用了 QLinearConv 等量化数据专用算子进行运算。如图所示:
image
同时 onnx 官方给的 int8 模型也考虑到了图优化,并没有频繁的插入反量化算子,供参考。

@vacing
Copy link

vacing commented Dec 15, 2022

模型只是一种表示,实际推理ort 还会对图做一次优化,最终也是走的linearconv 和linearadd

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

3 participants