onnx.load() | ALBert throws DecodeError: Error parsing message
onnx.load() | ALBert throws DecodeError: Error parsing message
目标:重新开发此 BERT Notebook to use textattack/albert-base-v2-MRPC。
内核:conda_pytorch_p36
。 PyTorch 1.8.1+cpu
.
我将 PyTorch / HuggingFace Transformers 模型转换为 ONNX 并存储它。 DecodeError
发生在 onnx.load()
。
我的 ONNX 文件是否已损坏? 这似乎是一个常见的解决方案;但我不知道如何检查这个。
ALBert Notebook and model files on Google Colab.
我也有这个Git Issue,详细调试。
问题不在于...
- 量化 - 我尝试的任何量化代码都会抛出相同的错误。
- 优化 - 有或没有优化都会出错。
2.2 节量化 ONNX 模型:
from onnxruntime.quantization import quantize_dynamic, QuantType
import onnx
def quantize_onnx_model(onnx_model_path, quantized_model_path):
onnx_opt_model = onnx.load(onnx_model_path)
quantize_dynamic(onnx_model_path,
quantized_model_path,
weight_type=QuantType.QInt8)
logger.info(f"quantized model saved to:{quantized_model_path}")
quantize_onnx_model('albert.opt.onnx', 'albert.opt.quant.onnx')
print('ONNX full precision model size (MB):', os.path.getsize('albert.opt.onnx')/(1024*1024))
print('ONNX quantized model size (MB):', os.path.getsize("albert.opt.quant.onnx")/(1024*1024))
回溯:
---------------------------------------------------------------------------
DecodeError Traceback (most recent call last)
<ipython-input-16-2d2d32b0a667> in <module>
10 logger.info(f"quantized model saved to:{quantized_model_path}")
11
---> 12 quantize_onnx_model('albert.opt.onnx', 'albert.opt.quant.onnx')
13
14 print('ONNX full precision model size (MB):', os.path.getsize("albert.opt.onnx")/(1024*1024))
<ipython-input-16-2d2d32b0a667> in quantize_onnx_model(onnx_model_path, quantized_model_path)
3
4 def quantize_onnx_model(onnx_model_path, quantized_model_path):
----> 5 onnx_opt_model = onnx.load(onnx_model_path)
6 quantize_dynamic(onnx_model_path,
7 quantized_model_path,
~/anaconda3/envs/pytorch_p36/lib/python3.6/site-packages/onnx/__init__.py in load_model(f, format, load_external_data)
119 '''
120 s = _load_bytes(f)
--> 121 model = load_model_from_string(s, format=format)
122
123 if load_external_data:
~/anaconda3/envs/pytorch_p36/lib/python3.6/site-packages/onnx/__init__.py in load_model_from_string(s, format)
156 Loaded in-memory ModelProto
157 '''
--> 158 return _deserialize(s, ModelProto())
159
160
~/anaconda3/envs/pytorch_p36/lib/python3.6/site-packages/onnx/__init__.py in _deserialize(s, proto)
97 '\ntype is {}'.format(type(proto)))
98
---> 99 decoded = cast(Optional[int], proto.ParseFromString(s))
100 if decoded is not None and decoded != len(s):
101 raise google.protobuf.message.DecodeError(
DecodeError: Error parsing message
输出文件:
albert.onnx # original save
albert.opt.onnx # optimised version save
问题在于为我的新模型更新 config
变量。
变化:
configs.output_dir = "albert-base-v2-MRPC"
configs.model_name_or_path = "albert-base-v2-MRPC"
然后我遇到了这个单独的问题,我没有正确 git cloned
我的模型。问答详解.
最后,对于 ALBert,HuggingFace 没有 等价于 BertOptimizationOptions
的东西。我曾在 ONNX 模型上尝试过 torch_optimizer 提供的通用 PyTorch 优化器,但它们似乎与 ONNX 模型不兼容。
欢迎发表评论以进一步说明。
目标:重新开发此 BERT Notebook to use textattack/albert-base-v2-MRPC。
内核:conda_pytorch_p36
。 PyTorch 1.8.1+cpu
.
我将 PyTorch / HuggingFace Transformers 模型转换为 ONNX 并存储它。 DecodeError
发生在 onnx.load()
。
我的 ONNX 文件是否已损坏? 这似乎是一个常见的解决方案;但我不知道如何检查这个。
ALBert Notebook and model files on Google Colab.
我也有这个Git Issue,详细调试。
问题不在于...
- 量化 - 我尝试的任何量化代码都会抛出相同的错误。
- 优化 - 有或没有优化都会出错。
2.2 节量化 ONNX 模型:
from onnxruntime.quantization import quantize_dynamic, QuantType
import onnx
def quantize_onnx_model(onnx_model_path, quantized_model_path):
onnx_opt_model = onnx.load(onnx_model_path)
quantize_dynamic(onnx_model_path,
quantized_model_path,
weight_type=QuantType.QInt8)
logger.info(f"quantized model saved to:{quantized_model_path}")
quantize_onnx_model('albert.opt.onnx', 'albert.opt.quant.onnx')
print('ONNX full precision model size (MB):', os.path.getsize('albert.opt.onnx')/(1024*1024))
print('ONNX quantized model size (MB):', os.path.getsize("albert.opt.quant.onnx")/(1024*1024))
回溯:
---------------------------------------------------------------------------
DecodeError Traceback (most recent call last)
<ipython-input-16-2d2d32b0a667> in <module>
10 logger.info(f"quantized model saved to:{quantized_model_path}")
11
---> 12 quantize_onnx_model('albert.opt.onnx', 'albert.opt.quant.onnx')
13
14 print('ONNX full precision model size (MB):', os.path.getsize("albert.opt.onnx")/(1024*1024))
<ipython-input-16-2d2d32b0a667> in quantize_onnx_model(onnx_model_path, quantized_model_path)
3
4 def quantize_onnx_model(onnx_model_path, quantized_model_path):
----> 5 onnx_opt_model = onnx.load(onnx_model_path)
6 quantize_dynamic(onnx_model_path,
7 quantized_model_path,
~/anaconda3/envs/pytorch_p36/lib/python3.6/site-packages/onnx/__init__.py in load_model(f, format, load_external_data)
119 '''
120 s = _load_bytes(f)
--> 121 model = load_model_from_string(s, format=format)
122
123 if load_external_data:
~/anaconda3/envs/pytorch_p36/lib/python3.6/site-packages/onnx/__init__.py in load_model_from_string(s, format)
156 Loaded in-memory ModelProto
157 '''
--> 158 return _deserialize(s, ModelProto())
159
160
~/anaconda3/envs/pytorch_p36/lib/python3.6/site-packages/onnx/__init__.py in _deserialize(s, proto)
97 '\ntype is {}'.format(type(proto)))
98
---> 99 decoded = cast(Optional[int], proto.ParseFromString(s))
100 if decoded is not None and decoded != len(s):
101 raise google.protobuf.message.DecodeError(
DecodeError: Error parsing message
输出文件:
albert.onnx # original save
albert.opt.onnx # optimised version save
问题在于为我的新模型更新 config
变量。
变化:
configs.output_dir = "albert-base-v2-MRPC"
configs.model_name_or_path = "albert-base-v2-MRPC"
然后我遇到了这个单独的问题,我没有正确 git cloned
我的模型。问答详解
最后,对于 ALBert,HuggingFace 没有 等价于 BertOptimizationOptions
的东西。我曾在 ONNX 模型上尝试过 torch_optimizer 提供的通用 PyTorch 优化器,但它们似乎与 ONNX 模型不兼容。
欢迎发表评论以进一步说明。