Атрибуты узлов и метаданные модели

ONNX Runtime Web (ORT Web) предоставляет возможность работы с моделями в формате ONNX непосредственно в браузере. Основу взаимодействия с моделью составляют узлы вычислительного графа и метаданные модели, которые позволяют управлять поведением модели, оптимизировать её выполнение и интегрировать с веб-приложениями.

Узлы вычислительного графа

В ONNX каждая модель представлена в виде графа, состоящего из узлов (nodes). Каждый узел выполняет конкретную операцию над входными тензорами и возвращает результат на выход.

Основные компоненты узла:

  • Имя узла (name): уникальный идентификатор внутри графа. Используется для отладки и логирования.
  • Операция (opType): тип вычисления, которое выполняет узел (например, Conv, Relu, Add).
  • Входные и выходные тензоры (inputs, outputs): ссылки на имена тензоров, которые поступают на вход и выдаются на выход узла.
  • Атрибуты узла (attributes): дополнительные параметры, которые влияют на выполнение операции.
Атрибуты узлов

Атрибуты являются ключевым элементом конфигурации узлов. В ONNX они могут быть нескольких типов:

  • int, float, string — простые значения. Например, атрибут axis в Softmax определяет ось, по которой проводится вычисление.
  • int[], float[], string[] — массивы значений. Например, kernel_shape в сверточных слоях.
  • Tensor — тензорные константы, используемые внутри узла.
  • Graph — вложенные графы для сложных операторов (например, If или Loop).

В ORT Web доступ к атрибутам узла осуществляется через API для анализа модели. С помощью метода session.inputMetadata или session.outputMetadata можно получить список входов и выходов узлов, а через session.modelMetadata — общую информацию о модели.

Пример получения атрибутов узла в браузере:

const session = await ort.InferenceSession.create('model.onnx');
const metadata = session.modelMetadata;
console.log(metadata.domain, metadata.producerName);

for (const inputName in session.inputNames) {
  const inputMeta = session.inputMetadata[inputName];
  console.log(`Input: ${inputName}, Type: ${inputMeta.type}, Shape: ${inputMeta.dimensions}`);
}

Метаданные модели

Метаданные содержат информацию о модели и её предназначении. Основные поля:

  • producerName — имя инструмента или библиотеки, с помощью которой была создана модель.
  • domain — область применения модели (например, ai.onnx).
  • version — версия модели, соответствующая ONNX.
  • description — текстовое описание назначения модели.
  • customMetadataMap — набор пользовательских метаданных в формате ключ-значение. Используется для хранения дополнительной информации, например, ссылок на документацию или исходные данные.

Метаданные модели в ORT Web обеспечивают:

  • Документирование модели: можно хранить версию, автора и описание.
  • Совместимость и проверку: версия модели позволяет убедиться, что приложение использует правильный формат данных.
  • Оптимизацию загрузки: анализ метаданных помогает определить размер входов и выходов, что важно для предвычисления и управления памятью в браузере.

Пример доступа к пользовательским метаданным:

const customData = session.modelMetadata.customMetadataMap;
for (const key in customData) {
  console.log(`${key}: ${customData[key]}`);
}

Практическое применение атрибутов и метаданных

  1. Динамическое определение размеров тензоров Для веб-приложений важно заранее знать размеры входов и выходов модели. Использование inputMetadata позволяет создать корректные HTML-формы для загрузки данных или подготовить массивы для вычислений.

  2. Анализ и модификация поведения узлов В некоторых случаях требуется изменить атрибуты узлов перед выполнением. Например, можно изменить коэффициенты нормализации в BatchNormalization или параметры фильтров в сверточных слоях при адаптации модели под разные устройства.

  3. Отслеживание происхождения и авторства модели Метаданные помогают управлять жизненным циклом модели, особенно при обновлениях: можно автоматически проверять совместимость версии или логировать источник данных.

  4. Оптимизация выполнения в браузере Знание метаданных и атрибутов позволяет эффективно распределять память и выбирать подходящие вычислительные бэкенды (WebGL, WebAssembly) в ORT Web.

Ограничения и особенности

  • Не все атрибуты могут быть изменены в рантайме; большинство изменений требуют сохранения модифицированной модели.
  • В браузере доступ к ресурсам ограничен памятью и вычислительной мощностью, поэтому предварительный анализ метаданных критически важен для крупных моделей.
  • Атрибуты сложных узлов (Loop, If) требуют дополнительной обработки, так как содержат вложенные графы и управляющие параметры.

Итоговая структура взаимодействия

  1. Создание сессии ORT Web через InferenceSession.create.
  2. Извлечение метаданных модели для получения информации о версии, авторе, описании.
  3. Получение информации о входах и выходах через inputMetadata и outputMetadata.
  4. Анализ атрибутов узлов для корректного формирования данных на входе и оптимизации выполнения.
  5. Использование customMetadataMap для хранения и передачи дополнительных сведений о модели.

Атрибуты узлов и метаданные модели являются фундаментальной частью работы с ONNX Runtime Web. Глубокое понимание этих элементов позволяет создавать более производительные и управляемые веб-приложения с машинным обучением.