ONNX Runtime Web (ORT Web) предоставляет возможность выполнять инференс моделей ONNX прямо в браузере с использованием различных бэкендов. Наиболее производительный из них — WebGL, позволяющий задействовать графический процессор устройства. Настройка WebGL-бэкенда требует понимания параметров contextId и powerPreference, которые определяют создание контекста и выбор уровня производительности GPU.
При инициализации бэкенда WebGL в ORT Web создаётся контекст для работы с GPU. Этот контекст представляет собой объект, через который библиотека отправляет команды на графический процессор. contextId служит уникальным идентификатором контекста, что позволяет:
Пример инициализации с указанием contextId:
import * as ort from 'onnxruntime-web';
const session = await ort.InferenceSession.create('model.onnx', {
executionProviders: ['webgl'],
webgl: {
contextId: 'myWebGLContext'
}
});
В этом примере создаётся отдельный контекст с идентификатором
"myWebGLContext". Повторное создание с тем же
contextId позволит библиотеке использовать уже
существующий контекст, что экономит ресурсы и уменьшает время
загрузки.
Параметр powerPreference используется для указания браузеру, какой тип GPU предпочтителен:
Пример настройки с powerPreference:
const session = await ort.InferenceSession.create('model.onnx', {
executionProviders: ['webgl'],
webgl: {
contextId: 'myWebGLContext',
powerPreference: 'high-performance'
}
});
Использование high-performance рекомендуется для моделей глубокого обучения, где время отклика критично. Low-power может быть полезно на мобильных устройствах для экономии батареи.
session.dispose();
if (!ort.env.webgl.isSupported) {
console.warn('WebGL не поддерживается, переключение на CPU');
}
const options = {
executionProviders: ['webgl'],
webgl: {
contextId: 'sharedContext',
powerPreference: 'high-performance'
}
};
const session = await ort.InferenceSession.create('model.onnx', options);
// Использование сессии для инференса
const inputTensor = new ort.Tensor('float32', inputData, [1, 3, 224, 224]);
const feeds = { input: inputTensor };
const results = await session.run(feeds);
Эта конфигурация обеспечивает максимальную производительность на GPU с возможностью повторного использования контекста в рамках одной страницы.
Настройка contextId и powerPreference является ключевым элементом оптимизации WebGL-бэкенда в ONNX Runtime Web, позволяя управлять ресурсами GPU, ускорять инференс и обеспечивать стабильную работу моделей на различных устройствах.