ORT Mobile 模型导出助手
有一系列工具可用于帮助导出和分析模型,以便在 ORT Mobile 中使用。
目录
ORT Mobile 模型可用性检查器
模型可用性检查器提供关于模型在 ORT Mobile 中运行效果的信息,包括其是否适合在 Android 上使用 NNAPI 和在 iOS 上使用 CoreML。它还可以推荐运行特定工具来更新模型,使其更好地与 ORT Mobile 配合使用。
有关更多详细信息,请参见此处。
ONNX 模型 opset 更新器
如果您正在进行自定义构建,您可能希望将目标模型更新到相同的 ONNX opset 或多个 opset,这样自定义构建就可以支持较少的 opset,从而减小二进制文件大小。大多数 ONNX 模型可以使用此工具更新到更新的 ONNX opset。
用法
python -m onnxruntime.tools.update_onnx_opset --help
usage: update_onnx_opset.py:update_onnx_opset_helper [-h] [--opset OPSET] input_model output_model
Update the ONNX opset of the model. New opset must be later than the existing one. If not specified will update to opset 15.
positional arguments:
input_model Provide path to ONNX model to update.
output_model Provide path to write updated ONNX model to.
optional arguments:
-h, --help show this help message and exit
--opset OPSET ONNX opset to update to.
示例用法
python -m onnxruntime.tools.update_onnx_opset --opset 15 model.onnx model.opset15.onnx
ONNX 模型动态 shape 修复器
如果模型可能与 NNAPI 或 CoreML 一起使用,可能需要通过将任何动态维度大小设置为特定值来使输入 shape 变为“固定”。
有关如何操作的信息,请参阅关于 onnxruntime.tools.make_dynamic_shape_fixed 的文档。
QDQ 格式模型助手
根据 QDQ 格式模型的来源,可能需要对其某些方面进行优化,以确保在 ORT 中获得最佳性能。可以使用 onnxruntime.tools.qdq_helpers.optimize_qdq_model 助手来完成此操作。
用法
python -m onnxruntime.tools.qdq_helpers.optimize_qdq_model --help
usage: optimize_qdq_model.py [-h] input_model output_model
Update a QDQ format ONNX model to ensure optimal performance when executed using ONNX Runtime.
positional arguments:
input_model Provide path to ONNX model to update.
output_model Provide path to write updated ONNX model to.
optional arguments:
-h, --help show this help message and exit
请注意,如果没有进行任何优化,输出模型将与输入模型相同,并且可以丢弃。
PyTorch 导出助手
当使用 PyTorch 的 torch.onnx.export 导出模型时,可以指定模型输入的名称,并且需要将模型输入正确地组合成一个元组。infer_input_info 助手可用于自动发现 PyTorch 模型中使用的输入名称,并以正确的格式构建输入,以便与 torch.onnx.export 一起使用。
在下面的示例中,我们提供了运行 torchvision mobilenet_v2 模型所需的输入。返回的 input_names 和 inputs_as_tuple 可以直接在 torch.onnx.export 调用中使用。当模型有多个输入,和/或这些输入涉及更复杂的数据类型(例如字典)时,此功能带来的好处最大。
import torch
import torchvision
from onnxruntime import tools
model = torchvision.models.mobilenet_v2(pretrained=True)
model.eval()
input0 = torch.zeros((1, 3, 224, 224), dtype=torch.float32)
input_names, inputs_as_tuple = tools.pytorch_export_helpers.infer_input_info(model, input0)
# input_names and inputs_as_tuple can be directly passed to torch.onnx.export
torch.onnx.export(model, inputs_as_tuple, "model.onnx", input_names=input_names, ...)