TensorFlow.js в Node.js

В этом руководстве описаны пакеты TensorFlow.js и API, доступные для Node.js.

Чтобы узнать, как установить TensorFlow.js в Node.js, смотрите руководство по установке . Дополнительную информацию об установке и поддержке см. в репозитории TensorFlow.js для Node.js.

Процессор TensorFlow

Пакет ЦП TensorFlow можно импортировать следующим образом:

import * as tf from '@tensorflow/tfjs-node'

Когда вы импортируете TensorFlow.js из этого пакета, вы получаете модуль, который ускоряется двоичным файлом TensorFlow C и работает на ЦП. TensorFlow на ЦП использует аппаратное ускорение для оптимизации вычислений линейной алгебры.

Этот пакет работает на платформах Linux, Windows и macOS, где поддерживается TensorFlow.

Графический процессор TensorFlow

Пакет TensorFlow GPU можно импортировать следующим образом:

import * as tf from '@tensorflow/tfjs-node-gpu'

Как и пакет ЦП, модуль ускоряется с помощью двоичного файла TensorFlow C. Но пакет графического процессора выполняет тензорные операции на графическом процессоре с помощью CUDA, поэтому он доступен только в Linux. Эта привязка может быть как минимум на порядок быстрее, чем другие варианты привязки.

TensorFlow для чистого JavaScript

Существует также версия TensorFlow.js, которая запускает чистый JavaScript на процессоре. Его можно импортировать следующим образом:

import * as tf from '@tensorflow/tfjs'

Этот пакет аналогичен тому, который вы используете в браузере. В этом пакете операции выполняются на обычном JavaScript на процессоре. Этот пакет намного меньше остальных, поскольку ему не нужен двоичный файл TensorFlow, но он также намного медленнее.

Поскольку этот пакет не использует TensorFlow, его можно использовать на большем количестве устройств, поддерживающих Node.js. Это не ограничивается платформами Linux, Windows и macOS, поддерживающими TensorFlow.

Производственные соображения

Привязки Node.js предоставляют серверную часть для TensorFlow.js, которая реализует операции синхронно. Это означает, что, например, когда вы вызываете такую ​​операцию, как tf.matMul(a, b) , она блокирует основной поток до тех пор, пока операция не завершится.

По этой причине привязки хорошо подходят для сценариев и автономных задач. Если вы хотите использовать привязки Node.js в рабочем приложении, таком как веб-сервер, вам следует настроить очередь заданий или рабочие потоки, чтобы ваш код TensorFlow.js не блокировал основной поток.

API

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

tf.браузер

API в пространстве имен tf.browser.* невозможно использовать в Node.js, поскольку они зависят от API, специфичных для браузера. Список API tf.browser см. в разделе Браузер .

tf.node

Два пакета Node.js также предоставляют пространство имен tf.node , которое содержит API-интерфейсы, специфичные для Node.js (например, TensorBoard).

Вот пример экспорта сводок в TensorBoard в Node.js:

const model = tf.sequential();
model.add(tf.layers.dense({ units: 1, inputShape: [200] }));
model.compile({
  loss: 'meanSquaredError',
  optimizer: 'sgd',
  metrics: ['MAE']
});

// Generate some random fake data for demo purposes.
const xs = tf.randomUniform([10000, 200]);
const ys = tf.randomUniform([10000, 1]);
const valXs = tf.randomUniform([1000, 200]);
const valYs = tf.randomUniform([1000, 1]);

// Start model training process.
async function train() {
  await model.fit(xs, ys, {
    epochs: 100,
    validationData: [valXs, valYs],
    // Add the tensorBoard callback here.
    callbacks: tf.node.tensorBoard('/tmp/fit_logs_1')
  });
}
train();