TensorFlow.js предоставляет возможность запускать
модели машинного обучения на JavaScript как в браузере, так и на
сервере. Для серверной среды Node.js используется пакет
@tensorflow/tfjs-node, который обеспечивает аппаратное
ускорение через C++ бэкенд, существенно повышая производительность по
сравнению с чисто JavaScript-реализацией.
node -v
Установка производится через npm или yarn:
npm install @tensorflow/tfjs-node
или
yarn add @tensorflow/tfjs-node
Важно различать две версии:
@tensorflow/tfjs-node — версия с поддержкой CPU и
некоторых операций на GPU через OpenCL;@tensorflow/tfjs-node-gpu — версия с нативной
поддержкой CUDA для ускорения на графических процессорах NVIDIA.Для использования GPU необходимо предварительно установить:
CUDA_HOME и
PATH, чтобы Node.js корректно находил библиотеки CUDA.После установки важно убедиться, что пакет функционирует корректно:
const tf = require('@tensorflow/tfjs-node');
console.log(tf.version.tfjs);
const tensor = tf.tensor([1, 2, 3, 4]);
tensor.print();
Если вывод содержит версию TensorFlow.js и массив корректно отображается, установка завершена успешно.
tfjs-node поддерживает несколько стратегий
оптимизации:
Использование мультипоточности Node.js может задействовать несколько потоков для выполнения операций. Для явного указания количества потоков используется переменная окружения:
export TF_CPP_MIN_LOG_LEVEL=2
export OMP_NUM_THREADS=4
TF_CPP_MIN_LOG_LEVEL — управление логами C++ бэкенда (2
— вывод только ошибок).OMP_NUM_THREADS — количество потоков OpenMP для
вычислений.Настройка кэша для операций TensorFlow.js хранит
промежуточные тензоры для повторного использования. Чтобы снизить
потребление памяти, можно использовать метод
tf.engine().startScope() и
tf.engine().endScope() для локальной очистки:
tf.engine().startScope();
const a = tf.tensor([1, 2, 3]);
const b = a.square();
b.print();
tf.engine().endScope(); // все промежуточные тензоры освобожденыВыбор устройства для вычислений В
tfjs-node по умолчанию используется CPU. Для GPU (если
установлен @tensorflow/tfjs-node-gpu) вычисления
автоматически переключаются на доступный графический процессор.
Проверить доступность GPU можно так:
console.log(tf.getBackend()); // 'tensorflow'
console.log(tf.engine().backendInstance.binding.TFE_ContextListDevices());tfjs-node позволяет загружать модели, экспортированные
из Keras, в формате HDF5 или
TensorFlow SavedModel. Пример загрузки модели Keras:
const modelPath = 'file://./model/model.json';
const model = await tf.loadLayersModel(modelPath);
const input = tf.tensor2d([[0.5, 0.2, 0.1]]);
const prediction = model.predict(input);
prediction.print();
Ключевые моменты:
file:// в
Node.js.loadLayersModel и predict полностью
совместимы с Keras API.npm outdated или yarn outdated.tfjs-node следует учитывать
совместимость с Node.js и установленными CUDA/cuDNN библиотеками.package.json.Для детальной отладки операций доступен флаг:
export TF_CPP_MIN_LOG_LEVEL=0
Это позволяет видеть все предупреждения и ошибки C++ бэкенда, включая предупреждения о несовместимых операциях и памяти.
tf.nextFrame() для поэтапного
выполнения.