TensorFlow.js в Node

Процессор TensorFlow

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

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

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

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

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

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

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

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

Ванильный процессор

Версия TensorFlow.js, работающая с обычными операциями ЦП, может быть импортирована следующим образом:

import * as tf from '@tensorflow/tfjs'

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

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

Соображения по поводу производства

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

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

API

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

tf.browser

В обычном пакете TensorFlow.js, символы в tf.browser.* Пространство имена не будут использоваться в Node.js , поскольку они используют браузер конкретного API.

В настоящее время это:

  • tf.browser.fromPixels
  • tf.browser.toPixels

tf.node

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

TensorBoard - яркий пример API-интерфейсов, специфичных для Node.js.

Пример экспорта сводок в 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 purpose.
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();