Флаги логирования и уровни severity

ONNX Runtime Web (ORT Web) предоставляет механизм логирования, позволяющий отслеживать внутренние процессы работы движка и управлять объемом выводимой информации. Логирование играет ключевую роль при отладке моделей, оптимизации производительности и диагностике ошибок в браузерных или Node.js-приложениях.

Конфигурация логирования

Для инициализации среды ONNX Runtime Web используется объект OrtEnv, который принимает параметры конфигурации логирования. Основные опции:

const env = new ort.Env({ 
    loggingLevel: 'warning', 
    logId: 'MyAppLogger'
});
  • loggingLevel — уровень логирования (severity). Определяет, какие сообщения будут выводиться.
  • logId — идентификатор логгера, используется для группировки сообщений при множественных инстанциях среды.

Уровни severity

ONNX Runtime Web поддерживает следующие уровни severity, перечисленные в порядке возрастания детализации:

  1. verbose — максимально подробные сообщения, включающие трассировку вызовов, внутренние состояния ядра и данные о вычислительных потоках. Используется для глубокой диагностики работы движка.
  2. info — информационные сообщения о ключевых событиях, таких как загрузка моделей, инициализация сессий и создание тензоров.
  3. warning — предупреждения о потенциальных проблемах, которые не приводят к остановке выполнения, но могут повлиять на точность или производительность.
  4. error — сообщения об ошибках, которые прерывают выполнение операций. К этому уровню относятся исключения при некорректных входных данных, несовпадении форматов тензоров или проблемах с загрузкой модели.
  5. fatal — критические ошибки, которые приводят к полной остановке среды ONNX Runtime. Обычно связаны с внутренними сбоями движка или несоответствием платформы.

Использование флагов логирования

Флаги логирования определяют, какие категории сообщений будут активны для конкретного экземпляра среды. В ONNX Runtime Web они задаются при создании OrtEnv или сессии:

const env = new ort.Env({ 
    loggingLevel: 'info',
    logId: 'SessionLogger'
});

Дополнительно можно изменять уровень логирования динамически через метод setLoggingLevel:

env.setLoggingLevel('verbose');

Это полезно, когда необходимо включить детальное логирование только в определенные моменты работы приложения, например, при отладке проблем с конкретной моделью.

Примеры логирования в процессе выполнения

При загрузке модели через ort.InferenceSession сообщения будут выводиться в соответствии с заданным уровнем severity:

const session = await ort.InferenceSession.create('model.onnx', { 
    executionProviders: ['wasm'], 
    env 
});
  • Если уровень задан как info, будут отображены сообщения о:

    • Загрузке модели;
    • Инициализации входных и выходных тензоров;
    • Используемых провайдерах выполнения.
  • При уровне verbose дополнительно будут выводиться:

    • Размеры тензоров;
    • Подробности операций на каждом узле графа;
    • Временные затраты на выполнение отдельных слоев.

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

  • Разработка и отладка: рекомендуется использовать verbose или info для понимания работы модели и выявления узких мест.
  • Тестирование и эксплуатация: оптимально установить warning или error, чтобы лог не засорялся подробными внутренними сообщениями, но фиксировал критические события.
  • Производственная среда с высокой нагрузкой: чаще всего выбирается error или fatal, чтобы минимизировать накладные расходы на логирование.

Влияние логирования на производительность

Логирование на высоких уровнях детальности может существенно замедлять выполнение сессий, особенно при работе с большими моделями и большим числом запросов. Поэтому важно:

  • Избегать постоянного использования verbose в продуктивной среде;
  • Включать высокий уровень только на этапе анализа или диагностики;
  • Использовать идентификаторы логеров (logId) для фильтрации сообщений от различных компонентов.

Интеграция с внешними системами логирования

ONNX Runtime Web поддерживает интеграцию с системами стороннего логирования через перехватчики сообщений. Метод setLogger позволяет перенаправлять сообщения ORT в собственный обработчик:

env.setLogger((level, message) => {
    console.log(`[ORT-${level}] ${message}`);
});
  • level соответствует уровню severity (verbose, info, warning, error, fatal);
  • message — текст сообщения, сгенерированного движком.

Это позволяет объединять логирование ONNX Runtime Web с уже существующими системами мониторинга и аналитики приложений.