Глобальные настройки env: флаги, пути к wasm-файлам

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

Инициализация глобального окружения

Глобальное окружение создаётся при загрузке модуля ONNX Runtime Web и управляется объектом ort.env. Он предоставляет методы и свойства для настройки движка выполнения моделей до создания сессий. Основные цели настройки:

  • Указание местоположения WASM-движка и вспомогательных файлов.
  • Настройка флагов оптимизации вычислений.
  • Конфигурация режимов отладки и логирования.

Пример базовой инициализации:

import * as ort from 'onnxruntime-web';

await ort.env.wasm.setWasmPaths({
  'ort-wasm.wasm': '/path/to/ort-wasm.wasm',
  'ort-wasm-simd.wasm': '/path/to/ort-wasm-simd.wasm',
  'ort-wasm-threaded.wasm': '/path/to/ort-wasm-threaded.wasm'
});

Здесь setWasmPaths позволяет указать разные версии WASM-модуля:

  • ort-wasm.wasm — базовая версия без SIMD и многопоточности.
  • ort-wasm-simd.wasm — с SIMD-инструкциями для ускорения.
  • ort-wasm-threaded.wasm — с поддержкой многопоточности через Web Workers.

Основные флаги и их влияние

ONNX Runtime Web поддерживает несколько глобальных флагов, которые управляют поведением движка:

  • NUM_THREADS — количество потоков для многопоточного WASM. По умолчанию используется один поток. Увеличение значения может повысить производительность на многоядерных системах, но требует поддержки SharedArrayBuffer.
await ort.env.wasm.setEnvironmentVariable('NUM_THREADS', '4');
  • WASM_SIMD — включение SIMD-инструкций. Позволяет ускорить вычисления на процессорах с поддержкой SIMD. Значение true или false.
await ort.env.wasm.setEnvironmentVariable('WASM_SIMD', 'true');
  • WASM_THREADING — включение многопоточности. Требует разрешений для SharedArrayBuffer в браузере.
await ort.env.wasm.setEnvironmentVariable('WASM_THREADING', 'true');

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

Пути к WASM-файлам и стратегия загрузки

ONNX Runtime Web предоставляет несколько стратегий загрузки WASM-модулей:

  • Статическая загрузка — указание конкретных файлов через setWasmPaths. Используется, когда файлы уже размещены на сервере.
  • Динамическая загрузка — библиотека сама подбирает оптимальный файл в зависимости от поддержки SIMD и многопоточности в браузере. В этом случае можно задать базовый путь:
await ort.env.wasm.setWasmPaths({ base: '/assets/onnxruntime/' });

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

Настройки логирования и диагностики

Для отладки моделей и анализа производительности можно включить логирование через глобальные флаги:

  • LOG_LEVEL — уровень логирования (verbose, info, warning, error).
  • ENABLE_CPU_MEM_ARENA — включение управления памятью на CPU, что позволяет отслеживать утечки.
await ort.env.wasm.setEnvironmentVariable('LOG_LEVEL', 'verbose');
await ort.env.wasm.setEnvironmentVariable('ENABLE_CPU_MEM_ARENA', 'true');

Логирование выводится в консоль браузера или Node.js, что позволяет контролировать процесс и выявлять узкие места при запуске моделей.

Особенности работы в Node.js

В Node.js глобальные настройки отличаются:

  • WASM-файлы загружаются из локальной файловой системы или через URL.
  • Для многопоточности используются Worker Threads Node.js.
  • Путь к WASM-модулю можно задать напрямую:
ort.env.wasm.setWasmPaths({
  'ort-wasm.node.wasm': './node_modules/onnxruntime-web/wasm/ort-wasm.node.wasm'
});

Флаги NUM_THREADS и WASM_THREADING работают аналогично браузерной версии, но нужно убедиться, что Node.js поддерживает выбранный режим.

Рекомендации по конфигурации

  • Указывать пути к WASM-файлам до создания первой сессии модели.
  • Для мобильных устройств и слабых процессоров использовать базовый WASM без SIMD и многопоточности.
  • Для десктопных систем с многоядерными процессорами включать WASM_SIMD и WASM_THREADING для максимальной производительности.
  • Контролировать логирование через LOG_LEVEL, чтобы выявлять ошибки загрузки и выполнения модели.

Настройка env является критически важной для оптимальной работы ONNX Runtime Web, так как от неё зависит скорость выполнения моделей, совместимость с устройствами и возможность масштабирования вычислений на многопоточных системах.