TensorFlow.js dans Node.js

Ce guide décrit les packages TensorFlow.js et les API disponibles pour Node.js.

Pour savoir comment installer TensorFlow.js dans Node.js, consultez le didacticiel de configuration . Pour plus d'informations sur l'installation et la prise en charge, consultez le référentiel TensorFlow.js pour Node.js .

Processeur TensorFlow

Le package CPU TensorFlow peut être importé comme suit :

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

Lorsque vous importez TensorFlow.js à partir de ce package, vous obtenez un module accéléré par le binaire TensorFlow C et exécuté sur le processeur. TensorFlow sur le processeur utilise l'accélération matérielle pour optimiser le calcul de l'algèbre linéaire.

Ce package fonctionne sur les plates-formes Linux, Windows et macOS où TensorFlow est pris en charge.

GPU TensorFlow

Le package GPU TensorFlow peut être importé comme suit :

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

Comme le package CPU, le module est accéléré par le binaire TensorFlow C. Mais le package GPU exécute des opérations tensorielles sur le GPU avec CUDA, il n'est donc disponible que sous Linux. Cette liaison peut être au moins un ordre de grandeur plus rapide que les autres options de liaison.

TensorFlow pour du JavaScript pur

Il existe également une version de TensorFlow.js qui exécute du JavaScript pur sur le processeur. Il peut être importé comme suit :

import * as tf from '@tensorflow/tfjs'

Ce package est le même package que vous utiliseriez dans le navigateur. Dans ce package, les opérations sont exécutées en JavaScript Vanilla sur le CPU. Ce package est beaucoup plus petit que les autres car il n'a pas besoin du binaire TensorFlow, mais il est également beaucoup plus lent.

Étant donné que ce package ne repose pas sur TensorFlow, il peut être utilisé sur davantage d'appareils prenant en charge Node.js. Cela ne se limite pas aux plates-formes Linux, Windows et macOS prenant en charge TensorFlow.

Considérations relatives à la production

Les liaisons Node.js fournissent un backend pour TensorFlow.js qui implémente les opérations de manière synchrone. Cela signifie que, par exemple, lorsque vous appelez une opération comme tf.matMul(a, b) , elle bloquera le thread principal jusqu'à ce que l'opération soit terminée.

Pour cette raison, les liaisons sont bien adaptées aux scripts et aux tâches hors ligne. Si vous souhaitez utiliser les liaisons Node.js dans une application de production telle qu'un serveur Web, vous devez configurer une file d'attente de tâches ou configurer des threads de travail afin que votre code TensorFlow.js ne bloque pas le thread principal.

Apis

Lorsque vous importez le package au tf à l'aide de l'une des options ci-dessus, tous les symboles TensorFlow.js normaux apparaissent sur le module importé.

tf.navigateur

Les API de l'espace de noms tf.browser.* ne sont pas utilisables dans Node.js car elles dépendent des API spécifiques au navigateur. Pour obtenir la liste des API tf.browser , consultez Navigateur .

tf.node

Les deux packages Node.js fournissent également un espace de noms, tf.node , qui contient des API spécifiques à Node.js (par exemple, TensorBoard).

Voici un exemple d'exportation de résumés vers TensorBoard dans 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();