Kэширование модели в браузере — важный аспект оптимизации производительности при работе с Keras.js. Библиотека Keras.js позволяет загружать и запускать нейронные сети, экспортированные из Keras, полностью на стороне клиента, что делает эффективное управление ресурсами критически важным.
Keras.js работает с двумя основными компонентами: архитектурой модели
(model.json) и весами (*.bin). Эти файлы могут
занимать значительный объем, что при повторных загрузках увеличивает
время отклика. Для оптимизации используется кэширование через
IndexedDB, что позволяет хранить данные локально между
сессиями браузера.
Пример загрузки модели:
const model = new KerasJS.Model({
filepath: 'model/model.json',
gpu: true
});
model.ready()
.then(() => console.log('Модель загружена и готова к работе'))
.catch(err => console.error(err));
IndexedDB предоставляет возможность хранения бинарных данных больших объемов. Keras.js поддерживает сохранение весов модели в IndexedDB автоматически, если указать соответствующую опцию при инициализации:
const model = new KerasJS.Model({
filepath: 'model/model.json',
gpu: true,
filesystem: true
});
Опция filesystem: true активирует внутреннее кэширование
весов в IndexedDB. При повторной загрузке модели Keras.js сначала
проверяет наличие сохранённых весов в кэше и использует их, сокращая
сетевой трафик и ускоряя инициализацию.
При обновлении модели необходимо учитывать версию, чтобы не использовать устаревшие веса из кэша. Практика включает добавление хэш-суммы или номера версии к имени файла:
const model = new KerasJS.Model({
filepath: `model/model_v1.2.json`,
gpu: true,
filesystem: true
});
Если хэш или версия изменяется, Keras.js автоматически перезапишет кэшированную версию в IndexedDB, гарантируя актуальность данных.
Kеширование можно управлять программно, используя методы
getFile и setFile библиотеки Keras.js для
работы с IndexedDB напрямую. Это позволяет сохранять веса до выполнения
модели или очищать кэш при необходимости:
// Сохранение весов в IndexedDB
model.setFile('weights.bin', arrayBuffer)
.then(() => console.log('Веса сохранены в кэше'))
.catch(err => console.error(err));
// Получение весов из кэша
model.getFile('weights.bin')
.then(buffer => console.log('Веса загружены из кэша', buffer))
.catch(err => console.log('Веса отсутствуют в кэше'));
Такой подход полезен при работе с большим количеством моделей или динамическим обновлением параметров.
gpu: true
ускоряет вычисления на клиентской стороне, но не влияет на процесс
кэширования. Тем не менее, это важно учитывать при планировании времени
инициализации модели.Для управления жизненным циклом кэша Keras.js предоставляет методы очистки IndexedDB. Это позволяет удалить устаревшие весовые файлы или освободить место:
KerasJS.clearFilesystem()
.then(() => console.log('Кэш моделей очищен'))
.catch(err => console.error(err));
Применение этой функции особенно актуально для веб-приложений с частыми обновлениями моделей или ограниченным хранилищем браузера.
Кэширование модели в браузере с Keras.js обеспечивает высокую скорость работы и уменьшает сетевые запросы, что критично для интерактивных приложений и динамических веб-интерфейсов, использующих глубокое обучение.