Экспортёр ONNX на основе torch.export
Создано: 10 июн. 2025 | Последнее обновление: 30 янв. 2026
- Обзор
- Зависимости
- Простой пример
- Просмотр модели ONNX с помощью графического интерфейса
- Если преобразование завершается с ошибкой
- Метаданные
- Справочник по API
Обзор
Для создания трассированного графа, представляющего только вычисления с тензорами в функции, в режиме опережающей компиляции (Ahead-of-Time, AOT) используется механизм torch.export. Полученный трассированный граф (1) содержит нормализованные операторы из функционального набора операторов ATen (а также любые заданные пользователем пользовательские операторы), (2) не содержит потока управления и структур данных Python (за некоторыми исключениями) и (3) записывает набор ограничений на формы, необходимых для подтверждения корректности такой нормализации и устранения потока управления для будущих входных данных, после чего преобразуется в граф ONNX.
Кроме того, в процессе экспорта значительно сокращается использование памяти.
Зависимости
Для работы экспортёра ONNX требуются дополнительные пакеты Python:
Их можно установить с помощью pip:
pip install --upgrade onnx onnxscript
Затем onnxruntime можно использовать для выполнения модели на самых разных процессорах.
Простой пример
Ниже показана работа API экспортёра на простом многослойном перцептроне (MLP):
import torch
import torch.nn as nn
class MLPModel(nn.Module):
def __init__(self):
super().__init__()
self.fc0 = nn.Linear(8, 8, bias=True)
self.fc1 = nn.Linear(8, 4, bias=True)
self.fc2 = nn.Linear(4, 2, bias=True)
self.fc3 = nn.Linear(2, 2, bias=True)
self.fc_combined = nn.Linear(8 + 8 + 8, 8, bias=True) # Combine all inputs
def forward(self, tensor_x: torch.Tensor, input_dict: dict, input_list: list):
"""
Forward method that requires all inputs:
- tensor_x: A direct tensor input.
- input_dict: A dictionary containing the tensor under the key 'tensor_x'.
- input_list: A list where the first element is the tensor.
"""
# Extract tensors from inputs
dict_tensor = input_dict['tensor_x']
list_tensor = input_list[0]
# Combine all inputs into a single tensor
combined_tensor = torch.cat([tensor_x, dict_tensor, list_tensor], dim=1)
# Process the combined tensor through the layers
combined_tensor = self.fc_combined(combined_tensor)
combined_tensor = torch.sigmoid(combined_tensor)
combined_tensor = self.fc0(combined_tensor)
combined_tensor = torch.sigmoid(combined_tensor)
combined_tensor = self.fc1(combined_tensor)
combined_tensor = torch.sigmoid(combined_tensor)
combined_tensor = self.fc2(combined_tensor)
combined_tensor = torch.sigmoid(combined_tensor)
output = self.fc3(combined_tensor)
return output
model = MLPModel()
# Example inputs
tensor_input = torch.rand((97, 8), dtype=torch.float32)
dict_input = {'tensor_x': torch.rand((97, 8), dtype=torch.float32)}
list_input = [torch.rand((97, 8), dtype=torch.float32)]
# The input_names and output_names are used to identify the inputs and outputs of the ONNX model
input_names = ['tensor_input', 'tensor_x', 'list_input_index_0']
output_names = ['output']
# Exporting the model with all required inputs
onnx_program = torch.onnx.export(model,(tensor_input, dict_input, list_input), dynamic_shapes=({0: "batch_size"},{"tensor_x": {0: "batch_size"}},[{0: "batch_size"}]), input_names=input_names, output_names=output_names, dynamo=True,)
# Check the exported ONNX model is dynamic
assert onnx_program.model.graph.inputs[0].shape == ("batch_size", 8)
assert onnx_program.model.graph.inputs[1].shape == ("batch_size", 8)
assert onnx_program.model.graph.inputs[2].shape == ("batch_size", 8)
Как видно из приведённого выше кода, достаточно передать torch.onnx.export() экземпляр модели и её входные данные. Затем экспортёр вернёт экземпляр torch.onnx.ONNXProgram, содержащий экспортированный граф ONNX и дополнительную информацию.
Модель в памяти, доступная через onnx_program.model_proto, представляет собой объект onnx.ModelProto, соответствующий спецификации ONNX IR. Затем модель ONNX можно сериализовать в файл Protobuf с помощью API torch.onnx.ONNXProgram.save().
onnx_program.save("mlp.onnx")
Просмотр модели ONNX с помощью графического интерфейса
Экспортированную модель можно просмотреть с помощью Netron.
Если преобразование завершается с ошибкой
Функцию torch.onnx.export() следует вызвать ещё раз с параметром report=True. Для помощи в устранении проблемы пользователем создаётся отчёт в формате Markdown.
Метаданные
При экспорте в ONNX каждому узлу ONNX добавляются метаданные, помогающие определить его происхождение и контекст в исходной модели PyTorch. Эти метаданные полезны для отладки, изучения модели и понимания соответствия между графами PyTorch и ONNX.
К каждому узлу ONNX добавляются следующие поля метаданных:
-
namespace
Строка, представляющая иерархическое пространство имён узла и состоящая из стека вызовов модулей и методов.
Пример:
__main__.SimpleAddModel/add: aten.add.Tensor -
pkg.torch.onnx.class_hierarchy
Список имён классов, представляющих иерархию модулей, ведущую к этому узлу.
Пример:
['__main__.SimpleAddModel', 'aten.add.Tensor'] -
pkg.torch.onnx.fx_node
Строковое представление исходного узла FX, включающее его имя, число потребителей, целевой оператор torch, аргументы и именованные аргументы.
Пример:
%cat : [num_users=1] = call_function[target=torch.ops.aten.cat.default](args = ([%tensor_x, %input_dict_tensor_x, %input_list_0], 1), kwargs = {}) -
pkg.torch.onnx.name_scopes
Список областей имён (методов), представляющих путь к этому узлу в модели PyTorch.
Пример:
['', 'add'] -
pkg.torch.onnx.stack_trace
Стек вызовов из исходного кода, в котором был создан этот узел, если он доступен.
Пример:
File "simpleadd.py", line 7, in forward return torch.add(x, y)
Эти поля метаданных хранятся в атрибуте metadata_props каждого узла ONNX; их можно просмотреть с помощью Netron или программно.
Для графа ONNX в целом доступны следующие metadata_props:
-
pkg.torch.export.ExportedProgram.graph_signature
Это свойство содержит строковое представление graph_signature исходной программы ExportedProgram в PyTorch. Сигнатура графа описывает структуру входных и выходных данных модели и их соответствие графу ONNX. Входные данные определяются как объекты
InputSpec, которые включают тип входных данных (например,InputKind.PARAMETERдля параметров,InputKind.USER_INPUTдля входных данных, заданных пользователем), имя аргумента, целевой объект (которым может быть определённый узел модели) и признак постоянства входных данных. Выходные данные определяются как объектыOutputSpec, указывающие тип выходных данных (например,OutputKind.USER_OUTPUT) и имя аргумента.Подробнее о сигнатуре графа см. в документации torch.export.
-
pkg.torch.export.ExportedProgram.range_constraints
Это свойство содержит строковое представление ограничений диапазонов, заданных в исходной программе ExportedProgram в PyTorch. Ограничения диапазонов задают допустимые диапазоны символьных форм или значений в модели и могут быть важны для моделей с динамическими формами или символьными размерностями.
Пример:
s0: VR[2, int_oo], указывающий, что размер входного тензора должен быть не меньше 2.Подробнее об ограничениях диапазонов см. в документации torch.export.
Для каждого входного значения графа ONNX могут присутствовать следующие свойства метаданных:
-
pkg.torch.export.graph_signature.InputSpec.kind
Тип входных данных, определённый перечислением InputKind в PyTorch.
Примеры значений:
- “USER_INPUT”: входные данные модели, предоставленные пользователем.
- “PARAMETER”: параметр модели (например, вес).
- “BUFFER”: буфер модели (например, скользящее среднее в BatchNorm).
- “CONSTANT_TENSOR”: аргумент — тензор-константа.
- “CUSTOM_OBJ”: входные данные — пользовательский объект.
- “TOKEN”: входной токен.
-
pkg.torch.export.graph_signature.InputSpec.persistent
Указывает, являются ли входные данные постоянными (то есть должны ли они сохраняться как часть состояния модели).
Примеры значений:
- “True”
- “False”
Для каждого выходного значения графа ONNX могут присутствовать следующие свойства метаданных:
-
pkg.torch.export.graph_signature.OutputSpec.kind
Тип выходных данных, определённый перечислением OutputKind в PyTorch.
Примеры значений:
- “USER_OUTPUT”: выходные данные, видимые пользователю.
- “LOSS_OUTPUT”: выходное значение функции потерь.
- “BUFFER_MUTATION”: указывает, что буфер был изменён.
- “GRADIENT_TO_PARAMETER”: выходные данные с градиентом параметра.
- “GRADIENT_TO_USER_INPUT”: выходные данные с градиентом входных данных пользователя.
- “USER_INPUT_MUTATION”: указывает, что входные данные пользователя были изменены.
- “TOKEN”: выходной токен.
Каждое инициализированное значение, входные и выходные данные имеют следующие метаданные:
-
pkg.torch.onnx.original_node_name
Исходное имя узла графа FX в PyTorch, создавшего это значение, если значение было переименовано. Это помогает проследить инициализаторы до их источника в исходной модели.
Пример:
fc1.weight
Справочник API
-
torch.onnx.export(model, args=(), f=None, *, kwargs=None, verbose=None, input_names=None, output_names=None, opset_version=None, dynamo=True, external_data=True, dynamic_shapes=None, custom_translation_table=None, report=False, optimize=True, verify=False, profile=False, dump_exported_program=False, artifacts_dir='.', export_params=True, keep_initializers_as_inputs=False, dynamic_axes=None, training=<TrainingMode.EVAL: 0>, operator_export_type=<OperatorExportTypes.ONNX: 0>, do_constant_folding=True, custom_opsets=None, export_modules_as_functions=False, autograd_inlining=True)[исходный код] -
Экспортирует модель в формат ONNX.
Установка
dynamo=Trueвключает новую логику экспорта ONNX, основанную наtorch.export.ExportedProgramи более современном наборе правил преобразования. Это рекомендуемый способ экспорта моделей в ONNX, используемый по умолчанию.Когда
dynamo=True:Экспортёр использует следующие стратегии, чтобы получить ExportedProgram для преобразования в ONNX.
- Если модель уже является ExportedProgram, она будет использоваться без изменений.
- Использовать
torch.export.export()и установитьstrict=False. - Использовать
torch.export.export()и установитьstrict=True.
- Параметры:
-
- model (torch.nn.Module | torch.export.ExportedProgram | torch.jit.ScriptModule | torch.jit.ScriptFunction) – Модель для экспорта.
- args (tuple[Any, ...]) – Примеры позиционных входных данных. Все аргументы, не являющиеся Tensor, будут жестко заданы в экспортированной модели; аргументы Tensor станут входными данными экспортированной модели в том порядке, в котором они указаны в кортеже.
-
f (str | os.PathLike | None) – Путь к файлу выходной модели ONNX. Например, «model.onnx». Этот аргумент сохранён для обратной совместимости. Рекомендуется не указывать его (None) и вместо этого использовать возвращённый
torch.onnx.ONNXProgramдля сериализации модели в файл. - kwargs (dict[str, Any] | None) – Необязательные примеры именованных входных данных.
- verbose (bool | None) – Включить ли подробное журналирование.
- input_names (Sequence[str] | None) – имена, назначаемые входным узлам графа, по порядку.
- output_names (Sequence[str] | None) – имена, назначаемые выходным узлам графа, по порядку. Это только метки, они не влияют на порядок выходных данных. Если модель возвращает словарь, выходные данные разворачиваются в порядке итерации по словарю независимо от указанных здесь имён.
-
opset_version (int | None) – Версия набора операторов по умолчанию (ai.onnx), на которую нужно ориентироваться. Укажите
opset_versionв соответствии с версиями набора операторов, поддерживаемыми целевой средой выполнения или компилятором, в которых будет использоваться экспортированная модель. Оставьте значение по умолчанию (None), чтобы использовать рекомендуемую версию, либо обратитесь к документации по операторам ONNX для получения дополнительной информации. -
dynamo (bool) – Экспортировать ли модель с помощью ExportedProgram на основе
torch.exportвместо TorchScript. - external_data (bool) – Сохранять ли веса модели во внешнем файле данных. Это требуется для моделей с большими весами, превышающими ограничение размера файла ONNX (2 ГБ). Если значение False, веса сохраняются в файле ONNX вместе с архитектурой модели.
-
dynamic_shapes (dict[str, Any] | tuple[Any, ...] | list[Any] | None) – Словарь или кортеж динамических форм входных данных модели. Дополнительные сведения см. в
torch.export.export(). Используется (и предпочтителен) только при значении dynamo=True. Обратите внимание: dynamic_shapes предназначен для экспорта модели с dynamo=True, тогда как dynamic_axes используется при dynamo=False. -
custom_translation_table (dict[Callable, Callable] | None) – Словарь пользовательских декомпозиций операторов модели. Ключом словаря должна быть целевая вызываемая сущность в узле fx (например,
torch.ops.aten.stft.default), а значением — функция, строящая этот граф с помощью ONNX Script. Этот параметр действителен только при dynamo=True. - report (bool) – Создавать ли отчёт в формате Markdown о процессе экспорта. Этот параметр действителен только при dynamo=True.
- optimize (bool) – Оптимизировать ли экспортированную модель. Этот параметр действителен только при dynamo=True. Значение по умолчанию — True.
- verify (bool) – Проверять ли экспортированную модель с помощью ONNX Runtime. Этот параметр действителен только при dynamo=True.
- profile (bool) – Профилировать ли процесс экспорта. Этот параметр действителен только при dynamo=True.
-
dump_exported_program (bool) – Сохранять ли
torch.export.ExportedProgramв файл. Это полезно для отладки экспортёра. Этот параметр действителен только при dynamo=True. - artifacts_dir (str | os.PathLike) – Каталог для сохранения отладочных артефактов, например отчёта и сериализованной экспортированной программы. Этот параметр действителен только при dynamo=True.
-
export_params (bool) –
Если указан ``f``: если значение false, параметры (веса) не будут экспортированы.
Также можно не указывать этот параметр и использовать возвращённый
torch.onnx.ONNXProgram, чтобы управлять обработкой инициализаторов при сериализации модели. -
keep_initializers_as_inputs (bool) –
Если указан ``f``: если значение True, все инициализаторы (обычно соответствующие весам модели) в экспортированном графе также будут добавлены в граф как входные данные. Если значение False, инициализаторы не добавляются в граф как входные данные, и входными данными становятся только пользовательские входы.
Установите True, если планируете передавать веса модели во время выполнения. Установите False, если веса статические, чтобы обеспечить более эффективную оптимизацию (например, свёртку констант) бэкендами и средами выполнения.
Также можно не указывать этот параметр и использовать возвращённый
torch.onnx.ONNXProgram, чтобы управлять обработкой инициализаторов при сериализации модели. -
dynamic_axes (Mapping[str, Mapping[int, str]] | Mapping[str, Sequence[int]] | None) –
Устарело: при
dynamo=Trueрекомендуется указыватьdynamic_shapes.По умолчанию формы всех входных и выходных тензоров экспортированной модели будут в точности соответствовать формам, заданным в
args. Чтобы указать динамические оси тензоров (то есть известные только во время выполнения), задайтеdynamic_axesв виде словаря со следующей схемой:-
-
KEY (str): an input or output name. Each name must also be provided in input_names or -
output_names.
-
-
- ЗНАЧЕНИЕ (dict или list): если это dict, ключами являются индексы осей, а значениями — имена осей. Если это
-
list, каждый элемент является индексом оси.
Например:
class SumModule(torch.nn.Module): def forward(self, x): return torch.sum(x, dim=1) torch.onnx.export( SumModule(), (torch.ones(2, 2),), "onnx.pb", input_names=["x"], output_names=["sum"], )Даёт:
input { name: "x" ... shape { dim { dim_value: 2 # axis 0 } dim { dim_value: 2 # axis 1 ... output { name: "sum" ... shape { dim { dim_value: 2 # axis 0 ...Тогда как:
torch.onnx.export( SumModule(), (torch.ones(2, 2),), "onnx.pb", input_names=["x"], output_names=["sum"], dynamic_axes={ # dict value: manually named axes "x": {0: "my_custom_axis_name"}, # list value: automatic names "sum": [0], }, )Даёт:
input { name: "x" ... shape { dim { dim_param: "my_custom_axis_name" # axis 0 } dim { dim_value: 2 # axis 1 ... output { name: "sum" ... shape { dim { dim_param: "sum_dynamic_axes_1" # axis 0 ... -
- training (_C_onnx.TrainingMode) – Устаревший параметр. Вместо этого задайте режим обучения модели перед экспортом.
- operator_export_type (_C_onnx.OperatorExportTypes) – Устаревший параметр. Поддерживается только ONNX.
- do_constant_folding (bool) – Устаревший параметр.
- custom_opsets (Mapping[str, int] | None) – Устаревший параметр.
- export_modules_as_functions (bool | Collection[type[torch.nn.Module]]) – Устаревший параметр.
- autograd_inlining (bool) – Устаревший параметр.
- Возвращает:
-
torch.onnx.ONNXProgram, если dynamo имеет значение True, иначе None. - Тип возвращаемого значения:
-
ONNXProgram | None
Изменено в версии 2.6: Параметр
trainingтеперь устарел. Вместо этого задайте режим обучения модели перед экспортом. Параметрoperator_export_typeтеперь устарел. Поддерживается только ONNX. Параметрdo_constant_foldingтеперь устарел. Он всегда включён. Параметрexport_modules_as_functionsтеперь устарел. Параметрautograd_inliningтеперь устарел.Изменено в версии 2.7: Теперь по умолчанию имеет значение True:
optimize.Изменено в версии 2.9: Теперь по умолчанию имеет значение True:
dynamo.Изменено в версии 2.11: Параметр
fallbackудалён.
-
class torch.onnx.ONNXProgram(model, exported_program) -
Класс, представляющий программу ONNX, которую можно вызвать с тензорами torch.
- Переменные:
-
- model – Модель ONNX в виде объекта модели ONNX IR.
- exported_program – Экспортированная программа, создавшая модель ONNX.
-
apply_weights(state_dict)[исходный код] -
Применяет к модели ONNX веса из указанного словаря состояний.
Используйте этот метод для замены FakeTensors или других весов.
-
call_reference(*args, **kwargs)[исходный код] -
Запускает модель ONNX с помощью эталонного бэкенда.
-
compute_values(value_names, args=(), kwargs=None)[исходный код] -
Вычисляет значения указанных имён в модели ONNX.
Этот метод вычисляет значения указанных имён в модели ONNX. Значения возвращаются в виде словаря, сопоставляющего имена с тензорами.
-
initialize_inference_session(initializer=<function _ort_session_initializer>)[исходный код] -
Инициализирует сеанс выполнения ONNX Runtime.
-
property model_proto: ModelProto -
Возвращает объект ONNX
ModelProto.
-
optimize()[исходный код] -
Оптимизирует модель ONNX.
Этот метод оптимизирует модель ONNX, выполняя свёртку констант и устраняя избыточность в графе. Оптимизация выполняется на месте.
-
release()[исходный код] -
Освобождает сеанс выполнения.
Вызовите этот метод, чтобы освободить ресурсы, используемые сеансом выполнения.
-
rename_axes(rename_mapping)[исходный код] -
Переименовывает оси модели в соответствии с указанным сопоставлением имён.
Пример:
batch = onnx_program.model.graph.inputs[0].shape[0] seq_len = onnx_program.model.graph.inputs[0].shape[2] rename_mapping = { batch: "batch", seq_len: "seq_len", } onnx_program.rename_axes(rename_mapping)- Параметры:
-
rename_mapping (dict[str | SymbolicDim, str]) –
Словарь, сопоставляющий старые оси с новыми именами осей. В качестве ключей можно использовать:
- Строковые имена осей (например, «s1», «s2»)
- Объекты SymbolicDim, полученные из модели (например, onnx_program.model.graph.inputs[0].shape[0])
Значения должны быть строками, представляющими новые имена осей.
-
save(destination, *, include_initializers=True, keep_initializers_as_inputs=False, external_data=None)[исходный код] -
Сохраняет модель ONNX в указанное место назначения.
Если
external_data—Trueили размер модели превышает 2 ГБ, веса сохраняются как внешние данные в отдельном файле.Способы сериализации инициализаторов (весов модели):
-
include_initializers=True,keep_initializers_as_inputs=False(по умолчанию): инициализаторы включаются в сохранённую модель. -
include_initializers=True,keep_initializers_as_inputs=True: инициализаторы включаются в сохранённую модель и остаются входными данными модели. Выберите этот вариант, если хотите иметь возможность переопределять веса модели во время инференса. -
include_initializers=False,keep_initializers_as_inputs=False: инициализаторы не включаются в сохранённую модель и не указываются как входные данные модели. Выберите этот вариант, если хотите добавить инициализаторы в модель ONNX отдельным этапом постобработки. -
include_initializers=False,keep_initializers_as_inputs=True: инициализаторы не включаются в сохранённую модель, но указываются как входные данные модели. Выберите этот вариант, если хотите передавать инициализаторы во время инференса и уменьшить размер сохранённой модели.
- Параметры:
-
- destination (str | PathLike) – Путь для сохранения модели ONNX.
- include_initializers (bool) – Включать ли инициализаторы в сохранённую модель.
-
keep_initializers_as_inputs (bool) – Оставлять ли инициализаторы в качестве входных данных сохранённой модели. Если
True, инициализаторы добавляются в модель как входные данные, а значит, их можно переопределить, передав инициализаторы в качестве входных данных модели. - external_data (bool | None) – Сохранять ли веса как внешние данные в отдельном файле.
- Вызывает исключение:
-
TypeError – Если
external_data—True, аdestinationне является путём к файлу.
-
-
class torch.onnx.ExportableModule(*args, **kwargs) -
Абстрактный интерфейс для модулей, экспортируемых в ONNX.
Унаследуйте этот класс и реализуйте определённые абстрактные методы, чтобы создать модуль, который можно экспортировать в формат ONNX.
Пример:
class Model(torch.nn.Module): def forward(self, x): return x * 2 class MyExportableModule(torch.onnx.ExportableModule): def __init__(self): super().__init__() self.model = Model() def forward(self, x): return self.model(x) def example_arguments(self): return (torch.randn(2, 3, 224, 224),), None def input_names(self): return ("input",) def output_names(self): return ("output",) def dynamic_shapes(self): return ({0: "batch_size"},) exportable_module = MyExportableModule() onnx_program = exportable_module.to_onnx() # The model can also be supplied directly to torch.onnx.export onnx_program = torch.onnx.export(exportable_module)-
dynamic_shapes()[исходный код] -
Возвращает спецификации динамических форм входных данных модели.
Переопределите этот метод, чтобы указать, какие измерения входных тензоров следует считать динамическими при экспорте в ONNX. Это позволит экспортированной модели принимать входные данные с различными размерами по указанным измерениям.
Пример:
def dynamic_shapes(self): # Specify batch dimension as dynamic for input named 'x' return {"x": {0: "batch_size"}} def dynamic_shapes(self): # Multiple dynamic dimensions return { "input": {0: "batch_size", 2: "height", 3: "width"}, "mask": {0: "batch_size"}, }Примечание
Реализация по умолчанию возвращает None, указывая, что все измерения являются статическими.
- Возвращает:
-
Спецификация динамических форм, совместимая с
torch.export.export. Возвращает None, если все измерения входных данных должны быть статическими. Формат может быть следующим:- Словарь, сопоставляющий имена входных данных спецификациям измерений
- Кортеж/список спецификаций измерений, соответствующих входным данным
- Любой формат, поддерживаемый параметром
dynamic_shapesфункцииtorch.export.export
- Тип возвращаемого значения:
-
abstract example_arguments()[исходный код] -
Возвращает примеры аргументов для метода forward модели.
Этот метод должны реализовать подклассы, чтобы предоставить примеры входных данных, которые можно использовать для трассировки, тестирования и экспорта в ONNX. Возвращаемые аргументы должны представлять ожидаемые формы и типы входных данных при выполнении инференса.
Пример:
def example_arguments(self): # For a model expecting a single tensor input return (torch.randn(1, 3, 224, 224),), None def example_arguments(self): # For a model with multiple inputs and keyword arguments return (torch.randn(1, 3, 224, 224), torch.randn(1, 512)), { "temperature": 1.0 }- Возвращает:
-
- Кортеж позиционных аргументов, передаваемых методу forward
- Словарь именованных аргументов (или None, если именованные аргументы не нужны)
- Тип возвращаемого значения:
-
Кортеж, содержащий
-
input_names()[исходный код] -
Возвращает имена входных тензоров модели.
Переопределите этот метод, чтобы задать пользовательские имена входных тензоров в экспортированной модели ONNX. Эти имена будут использоваться как идентификаторы в графе ONNX и могут быть полезны при отладке и анализе модели.
Пример:
def input_names(self): return ["image", "mask"] def input_names(self): # For a single input return ["input_tensor"]Примечание
Реализация по умолчанию возвращает None, в результате чего имена генерируются автоматически.
- Возвращает:
-
Последовательность строк, представляющих имена входных данных, или None, чтобы использовать имена по умолчанию. Количество имён должно совпадать с количеством позиционных аргументов метода forward.
- Тип возвращаемого значения:
-
Sequence[str] | None
-
output_names()[исходный код] -
Возвращает имена выходных тензоров модели.
Переопределите этот метод, чтобы задать пользовательские имена выходных тензоров в экспортированной модели ONNX. Эти имена будут использоваться как идентификаторы в графе ONNX и могут быть полезны при отладке и анализе модели.
Пример:
def output_names(self): return ["logits", "probabilities"] def output_names(self): # For a single output return ["prediction"]Примечание
Реализация по умолчанию возвращает None, в результате чего имена генерируются автоматически.
- Возвращает:
-
Последовательность строк, представляющих имена выходных данных, или None, чтобы использовать имена по умолчанию. Количество имён должно совпадать с количеством выходных данных метода forward. Для моделей, возвращающих несколько выходных данных, укажите имя для каждого из них.
- Тип возвращаемого значения:
-
Sequence[str] | None
-
to_onnx(**kwargs)[исходный код] -
Экспортирует модуль в формат ONNX.
Этот метод представляет собой удобную обёртку над
torch.onnx.export, которая автоматически использует заданные модулем примеры аргументов, динамические формы, а также имена входных и выходных данных. Дополнительные параметры экспорта можно указать с помощью именованных аргументов.См. также:
torch.onnx.export— полная документация по параметрам экспорта.- Параметры:
-
**kwargs (Any) –
Дополнительные именованные аргументы, передаваемые в
torch.onnx.export. К часто используемым параметрам относятся:-
opset_version(int): целевая версия opset ONNX -
optimize(bool): применять ли оптимизации к экспортируемой модели
-
- Возвращает:
-
Объект ONNXProgram, содержащий экспортированную модель и метаданные.
- Тип возвращаемого значения:
-
-
torch.onnx.is_in_onnx_export()[исходный код] -
Возвращает, выполняется ли в данный момент экспорт в ONNX.
- Тип возвращаемого значения:
-
class torch.onnx.OnnxExporterError -
Ошибки, возникающие при экспорте в ONNX. Это базовый класс для всех ошибок экспортера.
-
class torch.onnx.InputObserver(value_if_missing=None) -
Перехватывает метод forward для сбора входных и выходных данных. Эта информация используется для вывода динамических форм и аргументов экспорта.
- Параметры:
-
value_if_missing (dict[str | int, Any] | None) – Если аргумент отсутствует, его значение по умолчанию будет взято из этого словаря. Это используется, когда после этапа предварительного заполнения аргумент исчезает (например,
pixel_values), а другой добавляется (например,past_key_values). Значения используются только для вывода динамических форм и аргументов, а не для выполнения модели.
Примеры
>>> input_observer = InputObserver() >>> with input_observer(model): >>> model(x1, y1) >>> model(x2, y2) >>> ep = torch.export.export( # or torch.onnx.export >>> model, >>> input_observer.infer_arguments(), >>> dynamic_shapes.input_observer.infer_dynamic_shapes(), >>> )
Для LLM:
>>> input_observer = InputObserver() >>> with input_observer(model): >>> model.generate(input_ids) >>> ep = torch.export.export( # or torch.onnx.export >>> model, >>> (), >>> kwargs=input_observer.infer_arguments(), >>> dynamic_shapes.input_observer.infer_dynamic_shapes(), >>> )
В последнем примере рассматривается LLM, принимающая изображения и текст в качестве входных данных. Первый вызов метода forward, который мы пытаемся экспортировать, содержит
pixel_values, но не содержитpast_key_values. В следующих вызовах нетpixel_values, но естьpast_key_values. Наблюдатель понимает, что нужныpixel_valuesиpast_key_values, но они не обязательно должны быть указаны одновременно. Посколькуpixel_valuesпоявляется только в первом вызове, наблюдатель не может определить, как вывести пустой тензор для этого аргумента. Для этого и нужен аргументvalue_if_missing. Следующий пример — не просто условный пример: он демонстрирует, как использовать его сtransformers.from transformers import pipeline model_id = "tiny-random/gemma-3" pipe = pipeline( "image-text-to-text", model=model_id, device="cpu", trust_remote_code=True, max_new_tokens=3, dtype=torch.float16, ) messages = [ { "role": "system", "content": [{"type": "text", "text": "You are a helpful assistant."}], }, { "role": "user", "content": [ { "type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG", }, {"type": "text", "text": "What animal is on the candy?"}, ], }, ] observer = InputObserver( value_if_missing=dict( pixel_values=torch.empty((0, 3, 896, 896), dtype=torch.float16) ) ) with observer(pipe.model): pipe(text=messages, max_new_tokens=4)Добавлено в версии 2.11.0.
-
check_discrepancies(onnx_program, atol=0.0001, rtol=0.1, progress_bar=False, initializer=<function _ort_session_initializer>, skip_none=True)[исходный код] -
Вычисляет расхождения между сохранёнными входными и выходными данными и сохранённой моделью ONNX.
- Параметры:
-
- onnx_program (torch.onnx.ONNXProgram) – Экспортированная модель для проверки.
- atol (float) – Абсолютный допуск; рекомендуемые значения: 1e-4 для float, 1e-2 для float16.
- rtol (float) – Относительный допуск.
-
progress_bar (bool) – Отображает индикатор выполнения (требуется
tqdm). -
initializer (Callable[[str | bytes], ort.InferenceSession]) – Функция, вызываемая для инициализации сеанса инференса ONNX Runtime с указанной моделью. По умолчанию используется функция
_ort_session_initializer. - skip_none (bool) – Не проверяет расхождения, если выходное значение равно None.
- Возвращает:
-
Список словарей, готовый для передачи в dataframe.
- Тип возвращаемого значения:
Функция перехватывает исключения и отображает ошибку в возвращаемой сводке.
-
infer_arguments(index_or_args_or_kwargs=None, flat=False, as_args_kwargs=False)[исходный код] -
Выводит аргументы на основе собранных тензоров.
- Параметры:
-
- index_or_args_or_kwargs (tuple[Any] | dict[str, Any] | int | None) – Если значение не указано, метод выбирает один набор входных данных из доступных, обычно тот, который содержит наибольшее количество тензоров. Затем он заменяет значения None и отсутствующие тензоры пустыми тензорами. Если значение указано, это может быть целое число, позволяющее получить один из сохранённых наборов входных данных.
-
flat (bool) – Если True, возвращает плоский список тензоров; если False, возвращает кортеж или словарь, сохраняющий вложенную структуру. Плоская версия используется внутри метода. Она формирует единый список тензоров, который проще обрабатывать или изменять, чем вложенную структуру с теми же тензорами. Исходную структуру можно восстановить с помощью
torch.utils._pytree.tree_unflatten(flat_list, self.aligned_spec). Этот механизм используется для замены значений None пустыми тензорами. -
as_args_kwargs (bool) – Если True, метод всегда возвращает
(args, kwargs); в противном случае возвращает либо кортеж (только args), либо словарь (только kwargs), либо вызывает исключение, если это невозможно.
- Возвращает:
-
Выведенные аргументы, в которых каждый необязательный тензор заменён пустым тензором.
- Тип возвращаемого значения:
-
list[Tensor | None] | tuple[Tensor, …] | dict[str, Tensor] | tuple[list[Tensor] | tuple[Tensor, …], dict[str, Tensor]]
-
infer_dynamic_shapes(set_batch_dimension_for=None)[исходный код] -
Выводит динамические формы. Обычно модели поддерживают измерение размера пакета, но это измерение имеет одинаковое значение для всех примеров входных данных. Вместо выполнения инференса на новых примерах можно использовать аргумент
set_batch_dimension_for, чтобы указать, что первое измерение является динамическим для определённого набора входных данных, заданного их именами (str) или позициями (int).- Параметры:
-
set_batch_dimension_for (set[int | str] | bool | None) – Набор идентификаторов входных данных (по позиции, как
int, или по имени, какstr), для которых первое измерение следует считать динамическим измерением размера пакета. ЕслиNone, ни одно измерение не помечается явно как динамическое. - Тип возвращаемого значения:
-
tuple[dict[int, Any] | None, …] | dict[str, dict[int, Any] | None]
-
num_obs()[исходный код] -
Возвращает количество сохранённых наборов входных данных.
- Тип возвращаемого значения:
© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/onnx_export.html