-
Notifications
You must be signed in to change notification settings - Fork 5.6k
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
目前的paddle框架不支持导出半精度ONNX模型 #57194
Comments
你好,目前Paddle确实暂时不支持导出半精度ONNX模型。我们有计划在近期对这个功能进行开发。感谢提议! |
@vvwomen 您好,您这个fp16的模型在什么位置下载的呀 |
我用如下方法是没有办法导出Paddle静态图模型的:
|
paddle提供的API是不支持生成FP16的静态图的。你可以先 生成FP32的静态图,然后使用convert_to_mixed_precision 将FP32的静态图转为FP16的静态图即可。 |
我的报错和您不一致,我这边出现的错误如下:
|
您的环境是在哪一个版本的paddle下测试的 |
我觉得不是环境的问题,应该是paddlenlp套件里的 paddlenlp/transformers/ernie_layout/modeling.py 文件中的 _calc_img_embeddings 函数中有这样一句 |
我还简单测试了一下convert_to_mixed_precision,这个API似乎也没办法直接将模型转换成FP16。我输入的模型是 from paddle.inference import PrecisionType, PlaceType
from paddle.inference import convert_to_mixed_precision
import argparse
if __name__ == "__main__":
black_list = set()
src_model = "ResNet18_infer/fp32_inference/inference.pdmodel"
src_params = "ResNet18_infer/fp32_inference/inference.pdiparams"
dst_model = "./ResNet18_infer/fp16_inference/inference.pdmodel"
dst_params = "./ResNet18_infer/fp16_inference/inference.pdiparams"
convert_to_mixed_precision(
src_model, # fp32模型文件路径
src_params, # fp32权重文件路径
dst_model, # 混合精度模型文件保存路径
dst_params, # 混合精度权重文件保存路径
PrecisionType.Half, # 转换精度,如 PrecisionType.Half
PlaceType.GPU, # 后端,如 PlaceType.GPU
False, # 保留输入输出精度信息,若为 True 则输入输出保留为 fp32 类型,否则转为 precision 类型
black_list # 黑名单列表,哪些 op 不需要进行精度类型转换
) |
会在下面的PR中修复Paddle2ONNX 无法原生导出FP16模型的Bug |
@vvwomen 大佬您好,这个模型的输入你能给一个例子吗?我测试一下 |
我构造个随机数的例子吧: |
好的感谢,我是做CV的,不了解NLP |
Since you haven't replied for more than a year, we have closed this issue/pr. |
需求描述 Feature Description
paddle框架提供的paddle.onnx.export 不支持导出半精度ONNX模型,会直接报错[ERROR] Float16 is not supported.
paddle.onnx.export最小的实现示例:
`
import paddle
from paddlenlp.transformers import UIEX # 从模型代码中导入模型
model = UIEX.from_pretrained("uie-x-base") # 实例化模型
model.to(dtype="float16") # 加载预训练模型参数
model.eval() # 将模型设置为评估状态
input_spec = [
paddle.static.InputSpec(shape=[None, None], dtype="int64", name="input_ids"),
paddle.static.InputSpec(shape=[None, None], dtype="int64", name="token_type_ids"),
paddle.static.InputSpec(shape=[None, None], dtype="int64", name="position_ids"),
paddle.static.InputSpec(shape=[None, None], dtype="int64", name="attention_mask"),
paddle.static.InputSpec(shape=[None, None, 4], dtype="int64", name="bbox"),
paddle.static.InputSpec(shape=[None, 3, 224, 224], dtype="float16", name="image"),
] # # 定义输入数据
print("Exporting ONNX model to %s" % "./uiex_fp16.onnx")
paddle.onnx.export(model, "./uiex_fp16", input_spec=input_spec) # ONNX模型导出
print("ONNX model exported.")
`
同paddle2onnx也不支持导出半精度ONNX模型,paddle2onnx最小的实现示例:
`
paddle2onnx --model_dir ./paddle_model_static_onnx_temp_dir/ --model_filename model.pdmodel --params_filename model.pdiparams --save_file ./bs4_paddle2onnx.onnx --opset_version 11
`
其中,model及参数均为fp16数据类型
网上提供的工具https://zenn.dev/pinto0309/scraps/588ed8342e2182 将FP32的onnx模型转为FP16后,此FP16的onnx模型存在问题不能在onnxruntime上使用。
补充信息:
paddle版本信息
paddle.onnx.export 报错信息
paddle2onnx的报错信息
`
[Paddle2ONNX] Start to parse PaddlePaddle model...
[Paddle2ONNX] Model file path: ./paddle_model_static_onnx_temp_dir/model.pdmodel
[Paddle2ONNX] Paramters file path: ./paddle_model_static_onnx_temp_dir/model.pdiparams
[Paddle2ONNX] Start to parsing Paddle model...
[ERROR] Float16 is not supported.
`
The text was updated successfully, but these errors were encountered: