2 votes

L'algorithme word2vec peut-il être distribué sur plusieurs ordinateurs en utilisant tensorflow ?

Je souhaite entraîner le modèle word2vec sur un corpus très important, de sorte que les mots intégrés ne peuvent pas être alloués à la RAM.

Je sais qu'il existe des solutions pour la parallélisation des algorithmes, par exemple Mise en œuvre de Spark mais j'aimerais utiliser la bibliothèque tensorflow.

Est-ce possible ?

2voto

Maxim Points 28843

Oui, c'est possible dans Tensorflow. L'astuce consiste à utiliser le partitionnement des variables, par exemple tf.fixed_size_partitioner et la réplication du serveur de paramètres via tf.train.replica_device_setter pour répartir la variable sur plusieurs machines. Voici à quoi cela ressemble dans le code :

with tf.device(tf.train.replica_device_setter(ps_tasks=3)):
  embedding = tf.get_variable("embedding", [1000000000, 20],
                              partitioner=tf.fixed_size_partitioner(3))

L'avantage est que ces changements sont très locaux et qu'ils ne font aucune différence pour le reste du code de formation. En revanche, lors de l'exécution, il y a une grande différence, à savoir embedding sera découpé en 3 morceaux, chacun étant rattaché à un autre ps que vous pouvez exécuter sur une machine séparée. Voir aussi cette question pertinente .

1voto

vijay m Points 10299

Les auteurs de word2vec a mis en œuvre l'algorithme en utilisant un SGD asynchrone appelé : HogWild! . Vous pouvez donc rechercher une implémentation de cet algorithme sous forme de flux tensoriel.

En HogWild! Chaque thread prend un échantillon à la fois et effectue une mise à jour des poids sans aucune synchronisation avec les autres threads. Ces mises à jour provenant de différents threads peuvent potentiellement s'écraser l'une l'autre, ce qui conduit à des conditions de course aux données. Mais Hogwild! Les auteurs montrent qu'elle fonctionne bien pour les ensembles de données très éparses, où de nombreux échantillons sont en fait presque indépendants puisqu'ils écrivent pour la plupart des indices différents du modèle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X