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 можно импортировать следующим образом:

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

Как и пакет CPU, модуль ускоряется бинарным файлом TensorFlow C. Но пакет GPU выполняет тензорные операции на GPU с помощью 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.browser

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

tf.node

Два пакета Node.js также предоставляют пространство имен tf.node , которое содержит специфичные для Node.js API (например, 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();