Сохранение в IndexedDB, LocalStorage, файловую систему

TensorFlow.js предоставляет гибкие механизмы для сохранения и загрузки моделей, позволяя интегрировать машинное обучение непосредственно в браузерные приложения. Основные варианты хранения моделей включают IndexedDB, LocalStorage и файловую систему через Node.js. Каждый из методов имеет особенности, связанные с объемом данных, производительностью и областью применения.


IndexedDB

IndexedDB — это встроенная в браузер база данных, предназначенная для хранения структурированных данных больших объемов. TensorFlow.js поддерживает сохранение моделей напрямую в IndexedDB с использованием метода tf.io.browserIndexedDB.

Сохранение модели:

// Сохранение модели в IndexedDB
await model.save('indexeddb://my-model');

Ключевые моменты:

  • Производительность: IndexedDB подходит для хранения моделей большого размера, поскольку данные хранятся асинхронно и не блокируют поток UI.
  • Идентификатор модели: При сохранении используется уникальный идентификатор вида indexeddb://имя_модели.
  • Версионирование: Повторное сохранение модели с тем же именем перезаписывает существующую версию.

Загрузка модели:

const loadedModel = await tf.loadLayersModel('indexeddb://my-model');

Это позволяет быстро и безопасно загружать модели при повторных запусках приложения без необходимости обращения к сети.


LocalStorage

LocalStorage — более простой способ хранения данных в браузере, который работает синхронно и ограничен примерно 5–10 МБ на домен.

Сохранение модели:

await model.save('localstorage://my-model');

Особенности:

  • Синхронная работа: LocalStorage блокирует основной поток, что может негативно влиять на производительность при работе с большими моделями.
  • Ограничение объема: Хранение моделей размером более нескольких мегабайт может вызвать ошибки.
  • Удобство: Подходит для небольших моделей или для временного хранения параметров.

Загрузка модели:

const loadedModel = await tf.loadLayersModel('localstorage://my-model');

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


Файловая система в Node.js

В среде Node.js TensorFlow.js позволяет сохранять модели в локальную файловую систему, что удобно для серверных приложений и проектов с большим объемом данных.

Сохранение модели:

// Путь к директории для сохранения модели
await model.save('file://./my-model');

Ключевые моменты:

  • Асинхронная работа с файлами: Метод не блокирует основной поток, что повышает производительность.
  • Директория модели: TensorFlow.js создаёт папку с JSON-файлом метаданных (model.json) и бинарными весами (.bin).
  • Объем модели: Нет ограничений на размер, кроме ограничений файловой системы.

Загрузка модели:

const loadedModel = await tf.loadLayersModel('file://./my-model/model.json');

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


Выбор метода хранения

  • IndexedDB подходит для браузерных приложений с большими моделями, требующих постоянного хранения.
  • LocalStorage используется для небольших моделей или быстрых прототипов.
  • Файловая система Node.js предпочтительна для серверных приложений и сложных моделей, где ограничение объема и производительность критичны.

Каждый метод интегрируется с API TensorFlow.js через стандартные схемы URI (indexeddb://, localstorage://, file://) и позволяет использовать одинаковые методы загрузки и сохранения модели без изменения кода нейросети. Это обеспечивает единообразие и упрощает миграцию моделей между клиентом и сервером.


Асинхронность и обработка ошибок

При работе с любым механизмом хранения важно учитывать асинхронность операций и обрабатывать возможные исключения:

try {
  await model.save('indexeddb://my-model');
  console.log('Модель успешно сохранена');
} catch (error) {
  console.error('Ошибка сохранения модели:', error);
}

Асинхронная обработка предотвращает зависание интерфейса и позволяет корректно реагировать на ошибки, связанные с нехваткой места или проблемами доступа к хранилищу.


Миграция и совместимость

TensorFlow.js поддерживает перенос моделей между хранилищами:

// Сохранение модели из LocalStorage в IndexedDB
const model = await tf.loadLayersModel('localstorage://my-model');
await model.save('indexeddb://my-model');

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


Хранение моделей в TensorFlow.js обеспечивает стабильность, удобство и масштабируемость приложений, интегрирующих машинное обучение на клиенте и сервере, с минимальной дополнительной настройкой.