Après s’être démocratisées, les API d’intelligence artificielle, « Machine Learning » et « Deep Learning », font leur entrée dans le navigateur, via JavaScript. Vous n’aurez donc plus d’excuses pour ne pas vous intéresser à cette technologie qui est en passe de transformer le système d’information. D’ores et déjà, il y a le choix : TensorFire, Deeplearn.js, voire ML.js.

Le contraire eut été étonnant. A savoir que les API d’Intelligence Artificielle ne puissent pas conquérir à leur tour le monde des navigateurs. Mais ce qui est étonnant, c’est la vitesse avec laquelle cette mutation s’est produite. Ce qui montre bien que, grâce à JavaScript, il n’y a guère de domaines qui vont échapper au « browser » que l’on croyait pourtant, il y a peu, condamné à la simple problématique des interfaces utilisateurs. Incapable en tout cas d’embarquer une algorithmique complexe.

Mais le fait est là. Désormais, tout en restant dans votre navigateur favori, vous allez pouvoir investir dans des technologies d’IA sophistiquées, directement dans vos pages HTML et sans quitter JavaScript. C’est décidément la grande surprise de cette fin 2017.

Après TensorFlow, voici TensorFire

On pourrait s’y méprendre et manifestement la confusion est souhaitée. Une équipe du MIT vient de mettre au point une bibliothèque JavaScript, TensorFire, qui embarque le traitement d’AI dans le browser, sans avoir besoin par conséquent d’une API spécifique pour exploiter les qualités d’un processeur graphique GPU. Elle se fonde directement sur WebGL, un système multi-plate-forme de rendu graphique « posé » sur les processeurs GPU.

Pour bien comprendre l’intérêt de la démarche des développeurs MIT, il faut se rappeler que WebGL utilise des petits programmes, dits « shaders » écrits avec un langage dédié, GLSL (OpenGLShading Language), ou « langage de programmation de shaders OpenGL », pour traiter spécifiquement certains aspects graphiques, tels que le calcul d’une trame filaire ou d’une ombre portée, le tout en 3D évidemment. Conceptuellement, GLSL ressemble à DirectX et à son langage HLSL.

Le code GLSL s’exécute dans le processeur graphique GPU et non pas dans la CPU de votre machine.

L’astuce développée par le MIT a consisté à utiliser les « shaders », non pas pour faire du rendu graphique 3D, mais du prévisionnel, de la modélisation et du réseau neuronal. Le principe étant de paralléliser ces traitements pour les rendre très performants en les embarquant dans des « shaders », qui ont l’avantage de déjà tourner dans le pipeline WebGL. En gros, on se sert d’une architecture pour un usage, qui n’était pas prévu à l’origine.

Pour faire bonne mesure, TensorFire est capable d’importer les bibliothèques TensorFlow de Google et Keras-js, qui eux font un emploi plus classique des GPU.

La nouvelle API présente au moins quatre avantages clairs :

  • elle est portable et fonctionne sur la quasi-totalité des browsers actuels, y compris sur les smartphones, à condition qu’ils soient compatibles avec le mode WebGL. Ce qui veut dire que l’on pourra lancer des traitements très sophistiqués de « learning machine », directement dans un mobile, une partie ou la totalité d’un traitement.
  • elle est sécurisée, en ce sens que le modèle de « learning machine » s’exécutant localement sur des données tout aussi locales, vous pourrez faire tourner des petits modèles, sans passer par un « up loading » des données et leur traitement sur un serveur centralisé, de Cloud, entre autre. Evidemment, il ne faudra pas s’attende à monter des modèles très ambitieux de Big Data, mais il y aura de nombreux contextes où cette fonctionnalité sera largement suffisante.
  • elle s’affranchit de l’utilisation des cartes graphiques et du choix entre la norme CUDA de NVidia et OpenCL d’AMD, les performances des GPU étant adaptées aux traitements qui leur sont confiés.
  • elle est réutilisable dans d’autres contextes que celui spécifique du « Learning Machine », grâce au code GLSL de bas niveau. Si vous voulez paralléliser des travaux « lourds » dans le navigateur, ce qui effectivement donnera de (bonnes) idées aux développeurs confrontés au problème de performances des applications locales.

Bref, vous l’avez compris. On va faire de la modélisation IA dans le navigateur, sans craindre de le faire exploser, tout en assurant une portabilité rassurante.

L’API TensorFire est disponible sous licence MIT.

Une bonne dizaine de solutions existent déjà qui permettent d’embarquer un apprentissage neuronal en JavaScript dans le navigateur, parmi lesquels les plus récents TensorFire et Deeplearn.js.
Deeplearn.js dans la même mouvance

Une autre API du même type que TensorFire est proposée par Google, une sorte de pendant de TensorFlow, qui permet également de faire tourner des modèles neuronaux dans le navigateur. Il s’agit de Deeplearn.js, une autre API d’accélération matérielle via les GPU, capable de réaliser localement des traitements d’apprentissage.

Elle est basée sur le même principe que TensorFire, mais n’a pas « a priori » la même portabilité que sa « rivale » (uniquement sur Chrome à ses débuts). Et bien entendu, elle est fondée sur le même framework JavaScript WebGL, suffisant pour exécuter des traitements en mode déconnecté, par exemple, des applications interactives sophistiquées ou du prototypage, avant de passer à une architecture plus « normale ».

Sur le principe, Deeplearn.js s’inspire fortement de TensorFlow, mais aussi de NumPy, une bibliothèque scientifique écrite en Python.

L’un de ses intérêts sera sans doute de pouvoirrépartir les traitements d’apprentissage intelligent entre les serveurs et les postes clients, des mobiles surtout, Google ayant annoncé qu’il fournira des outils pour importer les « weights » de TensorFlow dans le navigateur et ainsi réaliser le lien avec lui.

A noter que l’API a été écrite en TypeScript de Microsoft, un transpiler JavaScript, mais rien ne vous empêchera de travailler directement en JavaScript.

Un écosystème se construit

En fait, TensorFire et Deeplearn.js s’inscrivent dans un écosystème qui s’étoffe de jour en jour.

Une bonne dizaine de librairies sont disponibles, qui le plus souvent, en plus de JavaScript, sont fondées sur trois piliers : le navigateur bien sûr, Node.js pour les serveurs, mais aussi TypeScript, qui est souvent choisi comme langage de haut niveau pour produire du JavaScript.

On pourra s’intéresser par exemple à Brain, Deep Playground, Flappy Learning, Synaptic, DeepForge, ConvNetJS (plus ancien et un peu moribond), NeuroJS, voire Machine_Learning.

De quoi meubler les longues soirées d’hiver.