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 模型动态形状修复器
如果模型可能与 NNAPI 或 CoreML 一起使用,则可能需要通过将任何动态维度大小设置为特定值来“固定”输入形状。
有关如何操作的信息,请参阅关于 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
请注意,如果没有优化,output_model 将与 input_model 相同,可以丢弃。
PyTorch 导出助手
当使用 torch.onnx.export 从 PyTorch 导出模型时,可以指定模型输入的名称,并且需要将模型输入正确组合成元组。 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, ...)