ONNX Runtime Web предоставляет мощный инструмент для запуска и
оптимизации моделей машинного обучения в браузере. Важной частью работы
с моделями является их валидация и проверка корректности структуры перед
использованием. Две ключевые возможности, которые позволяют обеспечить
надежность модели, — это onnx.checker и
shape inference.
onnx.checker:
проверка корректности моделиonnx.checker — это утилита для проверки модели ONNX на
соответствие стандарту ONNX. Она гарантирует, что структура графа
модели, типы данных и связи между узлами не содержат ошибок, способных
привести к сбоям при исполнении.
Основные функции onnx.checker:
Проверка схемы и типов данных: Каждый узел графа
проверяется на соответствие требованиям схемы. Например, если оператор
ожидает float32 на входе, а получает int64,
checker выбросит ошибку.
Проверка связей между узлами: Проверяется, что все входы и выходы корректно подключены, и нет разрывов или лишних ссылок.
Выявление недостающих атрибутов: Некоторые операторы ONNX требуют обязательные атрибуты. Отсутствие их приведет к ошибке.
Пример использования:
import * as onnx from 'onnxruntime-web';
// Загрузка модели (массив байт или URL)
const modelBuffer = await fetch('model.onnx').then(res => res.arrayBuffer());
// Проверка модели
try {
onnx.checker.checkModel(modelBuffer);
console.log('Модель корректна');
} catch (err) {
console.error('Ошибка проверки модели:', err);
}
При этом checkModel выполняется синхронно и позволяет
выявить большинство структурных ошибок до запуска модели.
После проверки модели важно знать размеры тензоров на каждом этапе вычислений. Shape inference позволяет автоматически вывести форму выходов каждого узла, даже если модель была сохранена без полной информации о формах.
Преимущества shape inference:
Пример использования shape inference:
import * as onnx from 'onnxruntime-web';
import { InferenceSession, Tensor } from 'onnxruntime-web';
import { inferShapes } from 'onnxruntime-web/shapeInference';
// Загрузка модели
const modelBuffer = await fetch('model.onnx').then(res => res.arrayBuffer());
// Инференс форм
const inferredModel = inferShapes(modelBuffer);
console.log('Выводы узлов с формами:');
inferredModel.graph.node.forEach(node => {
console.log(node.output.map(output => ({
name: output,
shape: inferredModel.graph.valueInfo.find(info => info.name === output)?.type.tensorType.shape
})));
});
Ключевые моменты работы с shape inference:
onnx.checker), что минимизирует риск ошибок.batch_size может быть
?).checker и shape inferenceИспользование onnx.checker и shape inference в связке
обеспечивает комплексную проверку:
checker.InferenceSession
и подавать данные, не опасаясь ошибок несовпадения типов или форм.Эта последовательность особенно важна при работе с веб-приложениями, где модель может быть загружена из сети и должна корректно работать на разных устройствах.
onnxruntime-web execution
providers, чтобы избежать лишних ошибок исполнения.Использование onnx.checker и shape inference делает
работу с ONNX Runtime Web более предсказуемой, снижает вероятность
runtime ошибок и упрощает отладку сложных моделей.