Tensorflow: API wrapper Node.js (JavaScript)

Créé le 9 nov. 2015  ·  246Commentaires  ·  Source: tensorflow/tensorflow

Parce que JavaScript est génial

contributions welcome

Commentaire le plus utile

+1 !

Tous les 246 commentaires

+1 !

+1

:+1:

+1

Juste ce que je cherchais. :+1:

Cité sur le site officiel http://www.tensorflow.org/

nous espérons vous inciter à contribuer aux interfaces SWIG dans votre langage préféré, que ce soit Go, Java, Lua, Javascript ou R.

Je suis nouveau dans tout ce truc de SWIG, mais j'ai cherché et trouvé ceci. http://www.swig.org/Doc3.0/Javascript.html

Je ne sais pas vraiment comment cela fonctionne. Avons-nous besoin d'écrire un fichier d'interface swig spécifiquement pour Javascript ou est-il généré automatiquement lors de l'exécution de certaines commandes ou quelqu'un y travaille-t-il déjà (ce serait génial) ?

+1 :+1:

+1

+1

+1

+1

??

:+1:

+1 !

Je commence à peine sur un, mais nouveau dans l'écriture d'un addon nodejs. Vérifier les fichiers d'interface swig pour voir s'ils vont être utiles, ou si je devrais simplement utiliser l'API c++.

+1

+1

+1

+1

Il est peu probable que l'équipe principale de TensorFlow s'attaque à ce problème dans un avenir proche. Si vous souhaitez y contribuer, n'hésitez pas ! Je recommanderais de faire circuler une proposition d'implémentation sur la liste de diffusion de discussion dès le début, afin qu'un consensus sur l'endroit où une telle API pourrait résider (dans repo / off repo / dans le répertoire 'contrib') puisse être atteint à l'avance.

Quelqu'un est-il prêt à écrire une bibliothèque NodeJS ? :+1:
Je pense que ce serait mieux avec une API NodeJS officielle mais une communauté sera aussi (sinon plus) intéressante à mon avis. Je sais qu'il existe plusieurs façons d'aborder cela, mais je recommande fortement node-gyp pour les performances. Je contribuerai volontiers de toutes les manières possibles, cependant, c'est quelque chose que je ne pourrai pas faire seul. Ce serait mieux si quelques autres personnes sont également intéressées, en particulier quelqu'un ayant des connaissances en C++.

:+1:

@Foorack Je suis prêt à y contribuer si certaines personnes sont également intéressées. Est-il possible de déplacer la discussion vers un canal slack ? (voir #31)

@tngan La chaîne slack est privée, mais j'ai pu me joindre avec le lien herokuapp. :+1:

Nous espérons que plus de développeurs discuteront et contribueront. Nous avons maintenant un canal slack nommé nodejs (voir #31), et un node-tensorflow du référentiel Github est réservé. Merci @Foorack !

Je suis prêt à contribuer. Merci pour l'initiative les gars !

@miguelalche Contente de voir que ça t'intéresse ! Veuillez rejoindre le canal slack et quelqu'un vous ajoutera au référentiel. ^^

J'ai hâte de contribuer (spécialement avec #132) !!

+1

Hourra pour le nœud ! Faisons cela.

+1

+1

Voici un article sur la façon de charger et d'exécuter des graphiques TensorFlow à l'aide de l'API C : https://medium.com/jim-fleming/loading-tensorflow-graphs-via-host-languages-be10fd81876f (code source inclus)

La proposition sera publiée la semaine prochaine. Continuez à suivre sur https://github.com/node-tensorflow/node-tensorflow.

+1

J'ai publié mon point de départ -- https://github.com/nikhilk/node-tensorflow qui sera publié plus tard sur npm.

@jimfleming - comme votre approche (nous utilisons tous les deux ffi ... je l'ai fait pour commencer rapidement). Allez-vous créer des API de type framework de niveau supérieur pour reproduire l'expérience python ? C'est ma prochaine étape.

@nikhilk Merci. Quelque chose comme new tf.Tensor() au lieu de tf.NewTensor() pourrait être un bon ajout, mais je n'ai pas l'intention de l'étendre pour le moment. Je ne m'intéresse qu'au chargement de graphes créés en python et je pense que j'aime le minimalisme.

+1

La proposition est publiée ici avec les progrès actuels.
https://github.com/node-tensorflow/node-tensorflow/tree/1.0.0

Il y a une question ouverte pour la discussion.
https://github.com/node-tensorflow/node-tensorflow/issues/2

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

Ce serait formidable de pouvoir exécuter facilement des réseaux tensorflow dans des serveurs basés sur node.js.

+1

+1

+1

+1

+1

+1

Je suis très disposé à contribuer. @Foorack s'il vous plaît ajoutez-moi à tout ce que vous pouvez! J'ai un cas d'utilisation réel pour cela, donc ce sera génial de le développer et de le tester en même temps !!

@pushtheworldllc Je suis content que vous soyez intéressé. :)
Le référentiel et la proposition peuvent être trouvés ici : https://github.com/node-tensorflow/node-tensorflow/
Vous pouvez utiliser ce lien pour rejoindre notre chaîne Slack : https://tensor-flow-talk-invite.herokuapp.com/

+1

+1

+1

+1 :+1:

+1 :+1:

J'ai un prototype fonctionnel utilisant SWIG ici : https://github.com/node-tensorflow/node-tensorflow/pull/13

Les prochaines étapes consisteraient à définir les domaines que les liaisons couvriraient initialement (doit être dans l'API C++) et à commencer à implémenter les fichiers d'interface SWIG pour ceux-ci.

Si quelqu'un a de l'expérience avec SWIG, j'adorerais collaborer, car il semble qu'une énorme quantité d'interfaces python SWIG soient des remplacements personnalisés, etc. et je tiens à ne pas reproduire leur travail. De plus, ce serait formidable d'obtenir des éclaircissements de l'équipe tensorflow sur les API qu'il serait bon de couvrir au départ, car je suis sûr que leur feuille de route a de nombreux changements en cours, et je ne voudrais pas entrer en conflit. (cc @martinwicke ? )

+1

+1 :+1:

+1

+1

+1

+1

+1

s'il vous plaît essayez d'utiliser le bouton réactions --> http://www.geekwire.com/2016/github-adds-reactions-keep-comments-track/ plus de +1 commentaires xD

+1

:+1:

+1

+1

+1

@peterbraden désolé pour le silence prolongé. Nous développons l'API C++, et elle grandira avec le temps. Je m'attends à ce que les bits les plus utiles soient les parties nécessaires pour exécuter un graphique existant. L'API de création de graphes C++ est en cours de refonte, il n'est donc pas particulièrement utile de passer beaucoup de temps dessus.

J'adorerais que vous prépariez un PR pour mettre ces liaisons dans contrib/nodejs.

@martinwicke merci pour les encouragements. J'ai fait un premier essai ici: https://github.com/tensorflow/tensorflow/pull/2206 - c'est juste une preuve de concept qui met la chaîne de version dans nodejs. Je vais commencer à travailler sur l'ajout des interfaces swig pour l'exécution du graphe.

+10000

+1

+1

+1

+1

+1

+1

Ce serait intéressant pour une exportation de graphes front-end pure pour une utilisation directe sur des clients Web. Même si les entrées/sorties souhaitées demandées à partir du graphique seraient codées en dur dans la fonction équivalente JS "sess.run" exportée.

+1

:+1:

+1

+1

+1

+1

+1

J'ai trouvé cela en cherchant si les liaisons existaient déjà ou non. Je vais apprendre quelques flux tenseurs via l'API python actuelle avant de faire des recherches plus approfondies, mais j'ai déjà construit des liaisons nodejs pour les bibliothèques C++ et je peux vous dire par expérience que swig est dans le mauvais sens.

Si vous utilisez simplement les liaisons swig, vous aurez un code de blocage synchrone dans un environnement asynchrone. Les liaisons swig n'exécutent pas les choses sur les threads IO, elles s'exécutent sur la boucle d'événement principale d'après ce que j'ai compris/expérimenté.

Une fois que j'aurai une certaine expérience de base en flux tensoriel à mon actif, je serai probablement intéressé par la construction de fixations appropriées. Donc, si quelqu'un est sérieux à ce sujet et/ou veut plus de détails sur le travail avec les modules v8, faites-le moi savoir.

Existe-t-il un lien lié à la liaison node-gyp pour l'API de flux tensoriel ??

@dmcmorris Je suis sérieusement intéressé à donner un coup de main ! Quelles ressources recommandez-vous pour travailler avec les modules v8 ? Nous pouvons constituer une équipe ici et commencer à plonger dans les matériaux dès que possible car ce projet est en retard :)

+1

+1

+1

+1s

Y a-t-il une mise à jour ??

Le 31 octobre 2016 à 12h06, "willshion" [email protected] a écrit :

+1s

-
Vous recevez ceci parce que vous avez commenté.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/tensorflow/tensorflow/issues/37#issuecomment-257222936 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/ANrvwrbmShC9c0_wsNpTudKSCb0-8qt8ks5q5Yx3gaJpZM4Ge5NV
.

Joyeux anniversaire TensorFlow !

https://research.googleblog.com/2016/11/celebrating-tensorflows-first-year.html

Je remarque que TensorFlow est désormais accessible depuis Go, Rust et Haskell. Pourquoi ignorer JavaScript ?

Vraiment en attente d'une bibliothèque de machines en JavaScript.

+1

+1

👍

+1

+1.0000000000000000000000001

+1

+1

+1

+1

J'ai hâte de voir une API Node.js officielle. Mais je pense qu'il y a quelques problèmes.

  1. JavaScript n'a qu'un seul thread, la formation peut bloquer l'ensemble du processus à moins d'utiliser des rappels ou d'autres astuces.
  2. manque d'autres laboratoires scientifiques, comme numpy
  3. JavaScript ne prend en charge que la précision de 53 bits.

en tout cas, JavaScript est génial !

Est-ce que quelqu'un travaille là-dessus ?

Ça a l'air très difficile.

+1

bien besoin !

@stackOverMind. J'ai fait une petite recherche sur ces puces. Je n'ai essayé aucun d'entre eux et ils pourraient ne pas être efficaces à utiliser / exécuter, mais il semble qu'il existe des choses qui existent pour potentiellement résoudre ces problèmes.

+1

+1

+1 pweeettyyy pwease !!!

+1

+1

J'attends ça avec impatience. ??

+1

J'attends ça avec impatience. :+1:

??

+1

+1. J'ai une certaine expérience avec Node et je vais y jeter un œil.

+1

+1 J'ai hâte, Python est génial, Node et JS sont super aussi

+1

+1 juste pour le plaisir

+1 !

+1

image

+1

+1

+1 serait cool af

+1 <3

??

??

+100

+1

+1

:+1:

+2

+1 ;)

marque

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

:+1:

+1

+1

+1

??
S'il te plaît !

+1

+1

La date du PO était de 2015, c'est maintenant 2017 et il n'a vraiment été repris par personne sur le projet. Je pense que je pourrais juste avoir l'indice que rien ne se passera concernant ce problème.

Est-ce que quelqu'un sait s'il y a eu une discussion saine concernant tensorflow et node ailleurs car ces +1 ne semblent pas faire grand chose :(

+1

# +1

??

+1

+1

:+1:

ça fait 2 ans et toujours pas de chance ?

Bon. Putain Javascript.

+1.0/0.0

Inspiré de deep_recommend_system , j'essaie maintenant un autre moyen d'accéder au modèle avec Node.js, via le service tensorflow. Ceci est toujours en cours.

https://github.com/tngan/tensornode

cela pourrait être utile keras-js

@sarkistlt Malheureusement non, nous ne parlons PAS d'une implémentation javascript de Tensorflow, ce que fait keras.js , mais nous parlons d'avoir un wrapper nodejs autour de l'api C++ de Tensorflow, il faut donc comprendre comment écrire un ajout natif -ons pour NodeJs .
Autre source utile.
Malheureusement, mon travail quotidien n'est pas de coder et cela nécessite une maîtrise du C++, que je n'ai personnellement pas.

Au fait, keras.js ne fait que de l'inférence, pas de formation, donc pas de rétropropagation.
Les développeurs de Google ont implémenté une petite partie de Tensorflow en Javascript dans leur terrain de jeu , la mise en œuvre du réseau de neurones est ici et inclut la rétro-propagation .

J'ai commencé à travailler sur l'implémentation native de nodejs Tensorflow, ce serait formidable si quelqu'un se joignait
https://github.com/nodejs-tensorflow/nodejs-tensorflow

+1

+1

+1

+1

Je suis tellement heureux d'apprendre que vous essayez @JIoJIaJIu. Le potentiel d'impact dans la résolution de ce problème est énorme. C'est notre problème le plus élevé.

À première vue, jusqu'à présent, vous semblez faire la bonne chose. Vous l'avez créé dans un projet distinct et utilisez l'API TensorFlow C, comme @martinwicke l'a recommandé précédemment.

Un bon moyen d'attirer des contributeurs à votre projet serait de partager un document de conception avec la liste de diffusion TensorFlow , comme Vincent l'a recommandé il y a quelques années. De cette façon, nous pouvons construire un consensus autour de votre vision et l'aider à être la meilleure vision possible.

L'équipe TensorFlow souhaite que la communauté NodeJS bénéficie de TensorFlow. Nous sommes donc absolument intéressés à aider la personne qui se consacre à la réalisation de cet objectif à réussir.

Si quelqu'un écoute, cela semble être la fonctionnalité la plus demandée pour Tensorflow :

https://github.com/tensorflow/tensorflow/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aopen%20sort%3Areactions-%2B1-desc

+1

Salut à tous, j'ai créé la bibliothèque de pontage Node.js pour Tensorflow à l'adresse : https://github.com/yorkie/tensorflow-nodejs sans SWIG, elle a pris en charge "l'exécution de graphe prédéfinie" et une "construction de graphe" très simple, je suis prévoit également de prendre en charge plus de fonctionnalités client à l'avenir :)

En même temps, je serais très heureux que cela soit fusionné par le groupe officiel Tensorflow, ce serait un PR sans frais pour moi :)

@yorkie Ça a l'air intéressant, je vais l'essayer ! Cependant, nous ne pouvons pas fusionner le code GPL dans TensorFlow.

@yorkie ça a l'air génial, voudriez-vous vous joindre au projet et unir vos forces ?

@ry sûr que je peux changer la licence sûrement :)
@JIoJIaJIu Je ne sais pas quel est le meilleur endroit pour déplacer ce référentiel pour le moment, si ce référentiel ne convient pas pour déplacer l'organisation tensorflow, je pense que nodejs-tensorflow est le bon endroit :)

Cependant, nous ne pouvons pas fusionner le code GPL dans TensorFlow.

@ry a mis à jour la licence au MIT et @JIoJIaJIu a rejoint le groupe, merci pour l'invitation :)

+1

+1

+1

+1

+1

Les API JavaScript pour TensorFlow ont été annoncées plus tôt ce mois-ci. Voir les détails sur la page d'accueil de deeplearn.js .
Je vais fermer ce bogue (large) maintenant. N'hésitez pas à ouvrir d'autres FR plus spécifiques.

deeplearn.js est pour le navigateur avec webgl, pas un sdk pour node.js

Assez juste. Je vois maintenant que le titre du bogue fait directement référence à Node.js.

@vincentvanhoucke il ne s'agit même pas de node.js dans le titre. Parler de "deeplearn.js" et "Tensorflow API for Javascript", c'est comme parler de pommes et de poires.

Tout d'abord, deeplearn.js est une bibliothèque qui ne reflète que dans une certaine mesure "le style de l'API TensorFlow" et fonctionne uniquement dans le navigateur et l'autre serait une API directe pour l'ensemble de la qualité Tensorflow. De plus, ce n'est même pas près d'être appelé une alternative à Tensorflow... peut-être pour les amateurs mais pas pour un usage commercial, où il faudrait des grappes de machines pour diriger le processus informatique. Je le considère comme une démo de ce que vous pouvez réaliser avec JavaScript et les réseaux de neurones... un avant-goût des choses à venir... ;-)

+1

+999

Jésus-Christ, arrête d'envoyer des notifications inutiles aux gens, il y a une raison pour laquelle GitHub a introduit des réactions 👍 et 👎.

+1 et +999 agacent simplement les gens et n'ajoutent aucune valeur.

+1000

:+1:

+1

+1

ATTENTION

😄 Les gars s'il vous plaît avant de commenter +1 ou + quoi que ce soit - S'il vous plaît jeter un oeil au commentaire de @k1sul1

Jésus-Christ, arrête d'envoyer des notifications inutiles aux gens, il y a une raison pour laquelle GitHub a introduit des réactions 👍 et 👎. +1 et +999 agacent simplement les gens et n'ajoutent aucune valeur.

@ shahen94 nous l'avons tous vu mais quand même... nous sommes js dev.

+1

@BruceHem ne

Vous savez tous que "+1" ne fait que rendre ce sujet illisible ? Je comprends que nous avons tous le désir de soutenir ce cas mais ne pouvons que déduire que sur la fonctionnalité la plus proche de "vote" de github est implémentée avec des "réactions" et non avec un nombre de commentaires dans le fil... ou est-ce que j'ai raté quelque chose ? ;-P

Lol :P ce fil est mort il y a des années.
.
+1 Googolplex !

+1

D'accord avec @thefill absolument "+1" rend ce sujet illisible, et en fait, nous avons eu des implémentations communautaires, alors si quelqu'un veut utiliser TensorFlow avec Node.js ou JavaScript, essayez simplement le ou les deux ci-dessus, je pense que cela pourrait être un bon début que de commenter les votes ici.

Quant à moi, je travaillais sur https://github.com/yorkie/tensorflow-nodejs pour le rendre suffisamment fonctionnel comme Python possible, et il lui reste encore beaucoup de temps, mais il a essentiellement une implémentation complète pour l'API officielle language_bindings . Cela signifie que vous pouvez toujours utiliser Python pour créer un graphique, mais charger des modèles et l'exécuter dans un environnement d'exécution Node.js. D'autres langages, à l'exception de Python, peuvent également le faire actuellement.

Je demandais également l'aide de @ry pour que mon référentiel personnel soit officiellement pris en charge, il y a peu de choses que nous devons faire comme construire des exemples de modèles, en particulier des cas RNN, mais malheureusement je dois travailler sur d'autres domaines et avoir pas le temps pour ces quelques mois, si quelqu'un est intéressé à ce que cela se produise, envoyez-moi un e-mail, j'aimerais vous expliquer comment commencer. Faisons quelque chose d'utile pour la communauté dans les meilleurs voeux :)

En ce qui concerne les projets en cours qui ont été lancés, et en particulier les défis de travailler avec l'API C, j'ai une suggestion sur la mise en œuvre qui a bien fonctionné pour moi.

Étant donné que python est toujours le wrapper le plus robuste, le plus convivial pour les développeurs et le plus complet autour de l'API Tensorflow, plutôt que d'essayer de "recréer" l'API python pour js, pourquoi ne pas créer des liaisons directement vers l'API python ? Cela nécessiterait toujours de créer d'abord un module complémentaire de nœud C++, mais plutôt que de vous lier directement à l'API C, vous pouvez utiliser python "intégré" pour exécuter des méthodes python directement à partir de C++.

Ceci est différent des autres solutions JS => Python qui suggèrent simplement de générer un script python... une solution non viable pour les problèmes d'apprentissage de taille raisonnable en raison du coût important du transfert de données (temps) entre les processus. Avec python intégré cependant, la mémoire accessible par votre script python / tableaux numpy pointe directement vers vos tampons js Float32Array.

Cette solution fonctionne très bien pour moi (bien qu'il soit vrai que le fonctionnement du flux js => C++ => python initial était un peu pénible). Étant donné que j'ai des besoins spécifiques, je n'ai pas effectué la tâche de liaison à chaque méthode Python TensorFlow individuelle, et à la place, je transmets simplement mes données et mes hyperparamètres à quelques méthodes qui construisent la majeure partie du graphique. La liaison individuelle complète ne serait pas trop mauvaise à partir de mon point de départ actuel.

Je suis preneur de toute idée ou suggestion sur l'approche décrite ci-dessus. Merci.

@djimoh5 Réflexions impressionnantes sur les API complètes de JavaScript vers Python ! D'un autre côté, nous pourrions également mettre en œuvre une implémentation d'un serveur RPC pour les API Python TensorFlow avec une fonction d'introspection, afin que JavaScript et d'autres clients de langage puissent accéder au Python en temps réel. (Je le ferai quand je serai disponible, aha)

Mais voici quelque chose qui explique pourquoi recréer certaines fonctionnalités Python pour JavaScript, car elles sont écrites en JavaScript, elles sont plus amies des développeurs JavaScript, et il est facile pour ces développeurs de modifier le code source pour vérifier si quelque chose de différent est possible, pas juste les flux en amont :)

+1

Je suis également intéressé par l'API tensorflow nodejs pour pouvoir l'utiliser dans un flux node-red qui enchaînerait des graphes tensorflows et peut être d'autres types de nœuds d'analyse de données. Je ne sais toujours pas grand-chose sur le tensorflow. Ce n'est peut-être pas le bon endroit pour demander, mais j'aimerais savoir pourquoi d'autres développeurs recherchent un api/add-on nodejs pour tensorflow ? Quels seraient vos cas d'utilisation ?

La réponse de

Les plus gros avantages viendraient à coup sûr des applications côté serveur qui fonctionnent sur node.js qui pourraient interagir directement avec Tensorflow, mais aussi node-webkit (applications de bureau) pourrait potentiellement engendrer des dizaines de projets intéressants.

Les organisateurs de la communauté / l'administrateur de ce fil ne sont-ils pas en mesure de simplement supprimer les messages de ces personnes qui trollent intensionnellement avec tous les "+1" peut-être même les interdire? Lol

Est-ce que quelqu'un travaillant sur cette intégration a envisagé d'utiliser WebAssembly (wasm) ? C'est potentiellement la solution la plus élégante à ce problème, évitant tout le JS parlant à Python parlant à C++, vous savez. Je ne sais vraiment pas grand-chose sur les composants internes de TensorFlow, mais je pense que les parties C++ de TensorFlow pourraient être compilées sur wasm (vérifiez les fonctionnalités MVP prises en charge, mais Unreal Engine 4 a été compilé sur le prédécesseur de wasm et s'est exécuté avec succès dans FireFox). Une fois l'API C/C++ compilée en wasm, il vous suffit de vous assurer que l'API nécessaire est exposée. wasm fonctionnera dans Node.js, tous les principaux navigateurs, et même en dehors de ceux-ci, car il est censé être un bytecode extrêmement portable. Cela me semble être la meilleure voie à suivre.

Ressources/discussion connexes :

+1... nous ne vivons plus dans la partie médiévale de l'ère de l'information. Veuillez prendre en charge node.js.

Pourquoi quelqu'un aurait-il besoin d'une autre bibliothèque Javascript ? Pourquoi quelqu'un utiliserait-il une bibliothèque JS pour former des NN ? Javascropt est un langage mal conçu.

@AyalaSaenzJorge lol (puisque tu

Pour ceux d'entre vous qui sont plus sérieux que ce troll, consultez le https://deeplearnjs.org ... Il est influencé par tensorflow et soutenu par Google ... Peut-être que plutôt que de partir de zéro, nous pourrions envisager de le porter sur Node.js à la place

@AyalaSaenzJorge c'est un endroit pour des commentaires informatifs, pas un allume-feu opiniâtre.
@somombo s'il vous plaît voir mon commentaire du 26 août où j'explique pourquoi deeplearnjs n'est pas pertinent pour ce débat.

Ok désolé pour le commentaire.

El dic. 12, 2017 18:46, "Filip Dabrowski" [email protected]
description :

@AyalaSaenzJorge https://github.com/ayalasaenzjorge c'est un endroit pour
commentaires informatifs, pas un allume-feu opiniâtre.
@somombo https://github.com/somombo s'il vous plaît voir mon commentaire du 26 août
où j'explique pourquoi deeplearnjs n'est pas pertinent dans ce débat.

-
Vous recevez ceci parce que vous avez été mentionné.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/tensorflow/tensorflow/issues/37#issuecomment-351232483 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AeZvKtru1EQjtRnoz6ZR36Kh-DTfVNozks5s_xBVgaJpZM4Ge5NV
.

+1

@cpple N'oubliez pas de ne pas ajouter de +1, ils provoquent du bruit et ont été remplacés par des réactions. Essayez de donner un coup de pouce au premier commentaire

Je veux juste partager une mise à jour - https://github.com/nikhilk/node-tensorflow remanié avec l'intention d'avoir cette prise en charge en utilisant les graphiques TensorFlow (et plus tard, les modèles enregistrés) pour la prédiction/inférence dans node.js. J'ai pensé partager car un certain nombre de personnes ont exprimé leur intérêt sur cette question.

J'ai créé un fork de headless-gl qui fonctionne avec deeplearnjs (qui à son tour fonctionne avec tensorflow) - cela permet aux modèles d'être exécutés nativement sur le GPU à partir de node.js (notez qu'il n'a été testé que sur OSX jusqu'à présent).

Vous pouvez trouver les instructions d'installation et un exemple de base sur https://github.com/dfoody/headless-gl
Et, bien sûr https://deeplearnjs.org pour plus de détails.

Instructions générales pour installer sur OSX :

brew install pkg-config cairo pango libpng jpeg giflib
npm install deeplearn-gl
npm install deeplearn

Et un exemple rapide pour montrer comment il est utilisé avec deeplearnjs :

var gl = require('deeplearn-gl')
var dl = require('deeplearn');
var math = new dl.NDArrayMath('webgl');
var size = 3000;

var start = Date.now();

var a = dl.Array2D.ones([size, size]);
var b = dl.Array2D.ones([size, size]);

var result = math.matMul(a, b);

var promise = result.data().then(function(data) {
  console.log("done in ", (Date.now()-start)/1000, "seconds with value", data[0]);
}).catch(console.log);

@dfoody merci d'avoir partagé cela avec la communauté mais la déclaration "qui à son tour fonctionne avec tensorflow" est incorrecte. Deeplearn.js vient de fournir (citation de leur site Web) "un modèle d'exécution reflétant l'API TensorFlow" - c'est tout ce qu'il a en commun avec le projet TF, j'en ai peur ;-(

Veuillez également consulter mon commentaire du 26 août où j'explique pourquoi deeplearnjs n'est pas pertinent pour ce débat.

@nikhilk incroyable, continuez ! Je garderai un œil sur votre projet c'est sûr ;-D

+1

@ 7ammer propelml.org semble plutôt prometteur. Merci de partager ça avec nous ;-)

Parce que NodeJS c'est rapide ! ;RÉ

Si un membre ambitieux de la communauté veut avoir la gloire de résoudre ce problème et de le fusionner dans la base de code de contribution TensorFlow, voici quelques conseils sur la façon dont je le ferais. Veuillez noter que je ne vais pas le faire.

Vous pouvez ajouter Node à workspace.bzl comme TensorBoard l'a fait dans js.bzl .
Veuillez noter que TensorFlow ne peut pas dépendre de rules_nodejs .

load("@io_bazel_rules_closure//closure:defs.bzl", "filegroup_external")

filegroup_external(
    name = "org_nodejs",
    # MIT with portions licensed:
    # - MIT
    # - Old MIT
    # - 2-Clause-BSD
    # - 3-Clause-BSD
    # - ISC
    # - Unicode
    # - zlib
    # - Artistic 2.0
    licenses = ["notice"],
    sha256_urls_extract_macos = {
        "910395e1e98fb351c62b5702a9deef22aaecf05d6df1d7edc283337542207f3f": [
            "https://mirror.bazel.build/nodejs.org/dist/v6.9.1/node-v6.9.1-darwin-x64.tar.xz",
            "http://nodejs.org/dist/v6.9.1/node-v6.9.1-darwin-x64.tar.xz",
        ],
    },
    sha256_urls_windows = {
        "1914bfb950be8d576ce9e49c8a0e51c9f2402560fe3c19093e69bc1306a56e9e": [
            "https://mirror.bazel.build/raw.githubusercontent.com/nodejs/node/v6.9.1/LICENSE",
            "https://raw.githubusercontent.com/nodejs/node/v6.9.1/LICENSE",
        ],
        "513923b0490ebb7466a56483a62595814ed9d036d6f35476debb0cd606bec526": [
            "https://mirror.bazel.build/nodejs.org/dist/v6.9.1/win-x64/node.exe",
            "http://nodejs.org/dist/v6.9.1/win-x64/node.exe",
        ],
        "3951aefa4afd6fb836ab06468b1fc2a69fa75bd66ec2f5a0e08c4e32547681e3": [
            "https://mirror.bazel.build/nodejs.org/dist/v6.9.1/win-x64/node.lib",
            "http://nodejs.org/dist/v6.9.1/win-x64/node.lib",
        ],
    },
    sha256_urls_extract = {
        "d4eb161e4715e11bbef816a6c577974271e2bddae9cf008744627676ff00036a": [
            "https://mirror.bazel.build/nodejs.org/dist/v6.9.1/node-v6.9.1-linux-x64.tar.xz",
            "http://nodejs.org/dist/v6.9.1/node-v6.9.1-linux-x64.tar.xz",
        ],
    },
    strip_prefix = {
        "node-v6.9.1-darwin-x64.tar.xz": "node-v6.9.1-darwin-x64",
        "node-v6.9.1-linux-x64.tar.xz": "node-v6.9.1-linux-x64",
    },
    executable = [
        "node",
        "node.exe",
    ],
    default_visibility = ["//tensorflow/contrib/node:__subpackages__"],
)

Disons maintenant que vous voulez avoir un programme Node, par exemple tsc.js , que vous voulez transformer en quelque chose que vous pouvez bazel run //tensorflow/contrib/node:generate . Un moyen rapide de le faire dans Bazel consiste à définir une macro dans tensorflow/contrib/node/defs.bzl :

def node_binary(name, srcs, data=None, visibility=None, testonly=None, **kwargs):
  native.sh_binary(
      name = name,
      srcs = [name + ".sh"],
      data = srcs + data + ["@org_nodejs"],
      testonly = testonly,
      visibility = visibility,
      **kwargs
  )

  native.genrule(
      name = name + "_sh",
      srcs = [srcs[0]],
      outs = [name + ".sh"],
      cmd = "cat >$@ <<'EOF'\n" +
            "#!/bin/bash\n" +
            "NODE=external/org_nodejs/bin/node\n" +
            "if [[ -e external/org_nodejs/node.exe ]]; then\n" +
            "  NODE=external/org_nodejs/node.exe\n" +
            "fi\n" +
            "exec $${NODE} $(location " + srcs[0] + ") \"$$@\"\n" +
            "EOF",
      executable = True,
      testonly = testonly,
      visibility = ["//visibility:private"],
  )

Maintenant pour la partie amusante. J'écrirais un seul fichier .js (même s'il devait faire 30 000 lignes comme tex.web ) sans aucune dépendance autre que la bibliothèque standard Node. Les entrées de ce programme seraient ops.pbtxt et tous les autres fichiers pbtxt dans API TensorFlow C et l' Node C++ Addon sur la base de cet exemple .

load("//tensorflow/contrib/node:defs.bzl", "node_binary")
load("@domain_registry//java/google/registry/builddefs:zip_file.bzl", "zip_file")

node_binary(
    name = "generate",
    srcs = ["generate.js"],
    data = [
        "//tensorflow/core:ops/ops.pbtxt",
        "//tensorflow/core/api_def:base_api_def",
    ],
)

genrule(
    name = "api",
    srcs = [
        "//tensorflow/core:ops/ops.pbtxt",
        "//tensorflow/core/api_def:base_api_def",
    ],
    cmd = "$(location :generate) $(location api.cc) $(SRCS)",
    outs = ["api.cc"],
    tools = [":generate"],
)

zip_file(
    name = "tfnode",
    srcs = [
        "package.json",
        "README.md",
        "api.cc",
        "binding.gyp",
        "tfnode.js",
    ],
    mappings = {"tensorflow/contrib/node": "package"},
)

Ensuite, vous bazel build //tensorflow/contrib/node:tfnode.zip et bam vous avez votre projet NodeJS tout regroupé et prêt à être distribué à des endroits comme NPM.

Si j'écrivais ceci (ce que je ne ferai pas), ce serait un mappage direct simple des définitions de l'API TensorFlow. Ensuite, j'encouragerais nos amis de la communauté à revêtir la bibliothèque. Il existe une diversité de visions sur les API JS et ML idiomatiques modernes et conviviales de haut niveau, chacune répondant à différents cas d'utilisation. Cependant, ils pourraient tous partager cette liaison en commun.

Veuillez noter qu'il existe des exemples où nous générons déjà des liaisons de langue. Voir tensorflow/go/genop/main.go et tensorflow/go/op/generate.go pour l'inspiration.

Il semble que l'équipe TensorFlow en fasse désormais une priorité absolue : https://js.tensorflow.org/faq/

Nous pourrions vouloir déplacer cette discussion ici : https://github.com/tensorflow/tfjs/issues/36

La progression des liaisons Node.js à l'API C sera suivie à ce problème.

En guise de mise à jour de ce problème, nous avons ouvert la liaison Node.js pour TFJS : https://github.com/tensorflow/tfjs-node

Nous travaillons dur pour obtenir une version NPM appropriée et la publierons bientôt !

Je vais clore ce sujet. Veuillez suivre tensorflow/tfjs et tensorflow/tfjs-node pour d'autres mises à jour.

Connexe et peut-être intéressant : j'ai réussi à faire fonctionner TF dans le navigateur via Webassembly. Voir https://humantoanimal.com pour une démo ; Je fournirai plus de détails à l'avenir.

@nuchi , alors avez-vous compilé le code TensorFlow nécessaire de l'API C vers WebAssembly ? Ou utilisez-vous TensorFlow.js ?

@lastmjs J'explique plus en détail dans le lien que j'ai fourni. Version courte : j'ai ajouté Webassembly comme cible de compilation XLA. Je n'ai en aucun cas utilisé Tensorflow.js.

@nuchi Excellent travail ! et je connais une autre recherche WebAssemble sur TensorFlow ici :
https://medium.com/@tomasreimers/compiling -tensorflow-for-the-browser-f3387b8e1e1c

Heureux de voir qu'il y a des progrès officiels à ce sujet. J'aimerais avoir une puissance de calcul GPU rapide et parallèle à portée de main avec la facilité et la composabilité de JS.

J'ai commencé à travailler sur une liaison NodeJS pour TensorFlow il y a quelque temps, mais je n'ai pas eu beaucoup de temps libre à y consacrer ces derniers temps.

Le concept est similaire à l'approche suggérée par @jart .

J'avais trois objectifs en tête pour le projet :

1. Ne nécessite pas la construction ou l'installation de tensorflow

Au lieu de cela, il doit télécharger et utiliser les binaires python multi-plateformes pré-construits et télécharger tous les fichiers sources nécessaires à la volée.

2. Ne nécessite pas une reproduction ou une abstraction complète en C++ ou JS de l'API

Au lieu de cela, il devrait fournir une interface 1 à 1 complète avec l'API C, fournissant autant que possible des

3. Ne pas maintenir l'API C liaisons par main

Au lieu de cela, il devrait utiliser un script swig pour mapper les structures de données de base entre Tensorflow/stdc++/V8/node et le reste suivra.


Je suis allé assez loin avec cela, mais la dernière fois que je me souviens, j'avais des problèmes avec les erreurs de segmentation liées à TF_Session.

En ce moment, il ne fait que ramasser la poussière, donc si quelqu'un veut intervenir et aider avec cela, j'accepterais volontiers les relations publiques.

Fermeture car cela est résolu

Cette page vous a été utile?
0 / 5 - 0 notes