ONNX Runtime Web предоставляет возможность запускать модели машинного обучения прямо в браузере на JavaScript, обеспечивая при этом высокую производительность и кроссплатформенность. Одной из ключевых задач при работе с большими моделями является эффективное кэширование, позволяющее сократить время загрузки и снизить сетевую нагрузку. В веб-контексте для этих целей используются Cache API и IndexedDB.
ONNX Runtime Web загружает модели в формате .onnx или
.ort и выполняет их через WebAssembly (WASM) или WebGPU.
Поскольку загрузка модели с сервера может занимать значительное время,
особенно для крупных сетей, кэширование позволяет:
Используемые методы кэширования должны обеспечивать надежное хранение бинарных данных и быстрый доступ.
Cache API — стандартный механизм браузеров для хранения сетевых ресурсов. Он хорошо подходит для кэширования моделей, если модель загружается по URL.
Response объектов fetch;async function cacheONNXModel(modelUrl) {
const cache = await caches.open('onnx-models');
const cachedResponse = await cache.match(modelUrl);
if (cachedResponse) {
return cachedResponse.arrayBuffer();
}
const response = await fetch(modelUrl);
await cache.put(modelUrl, response.clone());
return response.arrayBuffer();
}
В этом примере:
onnx-models;cache.delete.IndexedDB — объектная база данных в браузере, позволяющая хранить бинарные данные и управлять ими более гибко. Это оптимальный выбор для больших моделей или сложных структур, требующих версионирования.
ArrayBuffer, Blob,
TypedArray;idb;import { openDB } from 'idb';
async function saveModelToIndexedDB(modelName, arrayBuffer) {
const db = await openDB('ONNXModelsDB', 1, {
upgrade(db) {
db.createObjectStore('models');
}
});
await db.put('models', arrayBuffer, modelName);
}
async function loadModelFromIndexedDB(modelName) {
const db = await openDB('ONNXModelsDB', 1);
return db.get('models', modelName);
}
В этом примере:
ONNXModelsDB с хранилищем
models;modelName;ArrayBuffer обеспечивает совместимость с
ONNX Runtime Web.Комбинированная стратегия:
Проверка актуальности модели:
Асинхронная загрузка и инициализация:
Управление объемом данных:
async function loadONNXModel(modelUrl, modelName) {
// Проверка IndexedDB
let modelBuffer = await loadModelFromIndexedDB(modelName);
if (modelBuffer) return modelBuffer;
// Проверка Cache API
modelBuffer = await cacheONNXModel(modelUrl);
// Сохранение в IndexedDB для будущих сессий
await saveModelToIndexedDB(modelName, modelBuffer);
return modelBuffer;
}
Эта схема обеспечивает:
Использование Cache API и IndexedDB в ONNX Runtime Web позволяет создавать высокопроизводительные веб-приложения с локальным хранением моделей, снижая сетевую нагрузку и обеспечивая мгновенный доступ к большим нейронным сетям. Правильная комбинация этих инструментов является основой для эффективного и надежного кэширования в современных браузерных решениях.