ONNX Runtime Web (ORT Web) позволяет запускать модели машинного
обучения напрямую в браузере с использованием JavaScript. Для
эффективного использования моделей в веб-приложениях критически важно
минимизировать размер модели и ускорить время её инициализации. Два
ключевых инструмента для этого — onnxoptimizer и
onnx-simplifier (onnxsim).
onnxoptimizer предоставляет набор оптимизаций на графе
модели, которые уменьшают количество операций и улучшают
производительность без изменения поведения модели.
Основные категории оптимизаций:
Пример применения в Node.js:
const fs = require('fs');
const onnx = require('onnxjs-node');
const optimizer = require('onnxoptimizer');
const modelBuffer = fs.readFileSync('model.onnx');
const optimizedModel = optimizer.optimize(modelBuffer, [
'eliminate_identity',
'fuse_consecutive_transposes',
'fuse_bn_into_conv'
]);
fs.writeFileSync('model_optimized.onnx', optimizedModel);
Ключевой момент — последовательность оптимизаций влияет на итоговую структуру графа, поэтому рекомендуется экспериментировать с набором правил для каждой конкретной модели.
onnx-simplifier (или onnxsim) решает задачу
упрощения графа после базовой оптимизации, удаляя избыточные
вычислительные зависимости и делая модель более предсказуемой для ORT
Web.
Преимущества упрощения:
Пример использования в Python (так как onnxsim чаще
применяется через Python-интерфейс):
import onnx
from onnxsim import simplify
model = onnx.load('model_optimized.onnx')
model_simplified, check = simplify(model)
if check:
onnx.save(model_simplified, 'model_simplified.onnx')
Проверка check гарантирует, что упрощённая модель
сохраняет точность оригинальной.
Оптимизация веса и структуры
onnxoptimizer для удаления лишних операций
и константного свёртывания.Стабилизация и упрощение графа
onnx-simplifier для унификации размеров
тензоров и упрощения ветвлений.Сжатие модели для веб-исполнения
Тестирование на целевом бэкенде
wasm,
webgl, webgpu.onnxoptimizer, затем onnx-simplifier.Оптимизация моделей должна быть частью CI/CD процесса. Скрипт автоматической оптимизации:
onnxoptimizer с заранее выбранными
правилами.onnxsim.Такой подход гарантирует, что каждая сборка использует максимально эффективную версию модели, что снижает время загрузки и увеличивает плавность работы в браузере.