ORT Mobile Model Export Helpers
Es gibt eine Reihe von Tools, die beim Exportieren und Analysieren eines Modells für die Verwendung mit ORT Mobile hilfreich sind.
Inhalt
- ORT Mobile Model Usability Checker
- ONNX Model Opset Updater
- ONNX Model Dynamic Shape Fixer
- QDQ Format Model Helpers
- PyTorch Export Helpers
ORT Mobile Model Usability Checker
Der Model Usability Checker liefert Informationen darüber, wie gut ein Modell wahrscheinlich mit ORT Mobile laufen wird, einschließlich der Eignung für die Verwendung von NNAPI unter Android und CoreML unter iOS. Er kann auch empfehlen, spezifische Tools auszuführen, um das Modell zu aktualisieren, damit es besser mit ORT Mobile funktioniert.
Weitere Details finden Sie hier.
ONNX Model Opset Updater
Wenn Sie einen benutzerdefinierten Build erstellen, möchten Sie möglicherweise Ihre Zielmodelle auf denselben ONNX Opset oder Opsetts aktualisieren, damit der benutzerdefinierte Build eine kleinere Anzahl von Opsetts unterstützen kann, um die Binärgröße zu reduzieren. Die meisten ONNX-Modelle können mit diesem Tool auf eine neuere ONNX Opset aktualisiert werden.
Verwendung
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.
Beispielverwendung
python -m onnxruntime.tools.update_onnx_opset --opset 15 model.onnx model.opset15.onnx
ONNX Model Dynamic Shape Fixer
Wenn das Modell potenziell mit NNAPI oder CoreML verwendet werden kann, muss es möglicherweise die Eingabeformen ‘fixieren’, indem dynamische Dimensionsgrößen auf spezifische Werte gesetzt werden.
Informationen dazu finden Sie in der Dokumentation zu onnxruntime.tools.make_dynamic_shape_fixed.
QDQ Format Model Helpers
Abhängig von der Quelle eines QDQ-Formatmodells kann es notwendig sein, Aspekte davon zu optimieren, um eine optimale Leistung mit ORT zu gewährleisten. Der Helper onnxruntime.tools.qdq_helpers.optimize_qdq_model kann dafür verwendet werden.
Verwendung
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
Beachten Sie, dass, wenn keine Optimierungen vorgenommen werden, das output_model dasselbe wie das input_model ist und verworfen werden kann.
PyTorch Export Helpers
Beim Exportieren eines Modells aus PyTorch mit torch.onnx.export können die Namen der Modelleingaben angegeben werden und die Modelleingaben müssen korrekt zu einem Tupel zusammengestellt werden. Der Helper infer_input_info kann verwendet werden, um die von dem PyTorch-Modell verwendeten Eingabenamen automatisch zu ermitteln und die Eingaben für die Verwendung mit torch.onnx.export korrekt zu formatieren.
Im folgenden Beispiel geben wir die notwendigen Eingaben an, um das torchvision mobilenet_v2-Modell auszuführen. Die zurückgegebenen input_names und inputs_as_tuple können direkt in den torch.onnx.export-Aufruf verwendet werden. Dies ist am vorteilhaftesten, wenn das Modell mehrere Eingaben hat und/oder wenn diese Eingaben komplexere Datentypen wie Dictionaries beinhalten.
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, ...)