ONNX Runtime Web (ORT Web) предоставляет высокопроизводительную среду
выполнения моделей машинного обучения в браузере и Node.js. Эффективное
управление памятью является критическим аспектом при работе с большими
моделями, особенно в ограниченных ресурсах веб-браузера. Два ключевых
механизма, влияющих на распределение и повторное использование памяти, —
это arenaExtendStrategy и
memPatternEnabled.
arenaExtendStrategyarenaExtendStrategy определяет стратегию расширения
арены памяти — внутреннего пула, который ONNX Runtime использует для
динамического выделения тензоров во время инференса. Механизм арены
позволяет избегать частых системных вызовов выделения памяти, что
повышает производительность.
Возможные значения:
kNextPowerOfTwo — арена увеличивается
до ближайшей степени двойки, превышающей текущий размер. Обеспечивает
быстрый рост при больших нагрузках, минимизирует фрагментацию памяти, но
может временно использовать больше памяти, чем фактически
требуется.kSameAsRequested — арена расширяется
строго на размер, необходимый для нового тензора. Экономит память, но
может чаще вызывать перераспределение и снижать производительность при
интенсивной работе с большими моделями.kReuse — старая память
переиспользуется, если возможно. Подходит для сценариев, где размер
тензоров относительно стабильный между вызовами инференса.Пример настройки при инициализации сессии:
const session = await ort.InferenceSession.create(modelUrl, {
executionProviders: ['wasm'],
arenaExtendStrategy: 'kNextPowerOfTwo'
});
Особенности применения:
kNextPowerOfTwo для сложных
моделей с непредсказуемыми размерами входных тензоров.kSameAsRequested подходит для компактных моделей и
приложений с жесткими ограничениями памяти.memPatternEnabledmemPatternEnabled — это флаг, управляющий использованием
паттернов памяти (memory patterns). Паттерн памяти —
это заранее рассчитанный план размещения всех тензоров во время
инференса. Он позволяет повторно использовать заранее выделенные блоки
памяти, снижая накладные расходы на выделение и освобождение памяти.
Параметры:
true — включение использования
паттернов памяти. При повторных инференсах с одинаковыми формами
тензоров достигается максимальная производительность.false — отключение паттернов памяти.
Сценарии с динамическими входными данными различной формы не смогут
использовать оптимизацию, но потребление памяти будет более
предсказуемым.Пример настройки:
const session = await ort.InferenceSession.create(modelUrl, {
executionProviders: ['wasm'],
memPatternEnabled: true
});
Преимущества включения:
Ограничения:
arenaExtendStrategy и memPatternEnabledЭти два параметра совместно определяют стратегию управления памятью для всех промежуточных тензоров:
arenaExtendStrategy отвечает за
динамическое расширение пула памяти.memPatternEnabled позволяет
использовать заранее рассчитанные паттерны размещения, минимизируя
перераспределения.Оптимальная комбинация зависит от характера модели и сценариев использования:
arenaExtendStrategy = kNextPowerOfTwo,
memPatternEnabled = true.arenaExtendStrategy = kSameAsRequested,
memPatternEnabled = false.arenaExtendStrategy = kReuse,
memPatternEnabled = true.memPatternEnabled, чтобы уменьшить количество аллокаций и
ускорить повторные инференсы.kSameAsRequested, чтобы предотвратить чрезмерное выделение
памяти, особенно на устройствах с ограниченной RAM.arenaExtendStrategy и
memPatternEnabled позволяет находить баланс между
производительностью и экономией памяти.Эти механизмы управления памятью являются критически важными для достижения высокой производительности при работе с ONNX Runtime Web. Правильная настройка позволяет обеспечить стабильный инференс даже для сложных и ресурсоемких моделей.