Экспорт модели PyTorch в формат ONNX является первым шагом для последующего запуска модели в браузере с использованием ONNX Runtime Web. Этот процесс предполагает преобразование динамической модели PyTorch в статический граф вычислений, понятный ONNX, с сохранением всех слоёв и параметров.
Перед экспортом важно убедиться, что модель переведена в режим
inference с помощью метода .eval(). Это
отключает поведение, характерное для обучения, такое как дропаут или
нормализация батчей:
import torch
import torchvision.models as models
model = models.resnet18(pretrained=True)
model.eval()
ONNX требует конкретного размера входного тензора для корректного построения графа. Обычно используется пример батча фиксированного размера:
dummy_input = torch.randn(1, 3, 224, 224) # 1 изображение, 3 канала, 224x224
Важно, чтобы размерность соответствовала ожидаемой модели.
Метод torch.onnx.export выполняет сериализацию модели в
файл .onnx. Основные параметры включают:
Пример:
torch.onnx.export(
model,
dummy_input,
"resnet18.onnx",
export_params=True,
opset_version=17,
do_constant_folding=True,
input_names=['input'],
output_names=['output']
)
Для контроля корректности экспорта можно использовать модуль
onnx для загрузки и проверки модели:
import onnx
onnx_model = onnx.load("resnet18.onnx")
onnx.checker.check_model(onnx_model)
Эта проверка выявляет ошибки совместимости и несоответствия версий операторов.
ONNX Runtime Web выполняет модели в браузере, и важно, чтобы граф был оптимизирован:
Файл .onnx должен храниться в статическом виде и быть
доступным для загрузки через HTTP. Рекомендуется проверить размер и
структуру модели с помощью Netron или аналогичных
инструментов для визуализации графа.
eval()
объединяет параметры в константы.torch.autograd.Function с поддержкой ONNX или заменить
стандартными эквивалентами.eval().torch.onnx.export с настройкой имен, версии
opset и оптимизаций.Экспорт модели PyTorch в ONNX обеспечивает совместимость с ONNX Runtime Web, создавая основу для эффективного выполнения нейронных сетей на клиентской стороне.