0

Ce article suggère qu'il existe trois options pour la formation distribuéenuage ML type par défaut de formation du moteur distribué tf.estimator personnalisé

  1. de formation de données parallèles mises à jour synchrones.
  2. Formation parallèle aux données avec mises à jour asynchrones.
  3. Formation parallèle au modèle.

Le tutoriel va ensuite suggérer que le code qui suit effectue formation parallèle des données mises à jour asynchrones sur le Cloud ML Engine qui se comporte comme « Si vous diffusez 10.000 lots parmi les 10 nœuds de travail, chaque nœud travaille sur environ 1000 lots. "

Cependant, il n'est pas clair quelle partie du code spécifie réellement qu'il utilise une formation parallèle aux données avec des mises à jour asynchrones. Est-ce simplement la valeur par défaut pour le moteur ML si vous l'exécutez en mode d'entraînement distribué avec un tf.estimator personnalisé?

Répondre

1

La réponse courte est que tf.estimator est actuellement principalement construit autour de la formation parallèle aux données (2).

Vous obtenez une formation Modèle-parallèle simplement en utilisant les instructions with tf.device() dans votre code.

Vous pourriez essayer d'utiliser SyncReplicasOptimizer et probablement accomplir une formation synchrone (1).

Tout ce qui précède s'applique généralement à tf.estimator; rien n'est différent pour CloudML Engine.

+0

Merci! Ma question de suivi est postée ici: https://stackoverflow.com/questions/45989971/distributed-training-with-tf-estimator-resulting-in-more-training-steps - Je voulais d'abord confirmer que je devrais attendre la formation parallèle aux données, donc je suis assez confus par les performances que je vois avec les expériences distribuées ML Engine que je cours – reese0106

+0

Aussi, sont les instructions tf.device() nécessaires pour tirer parti des GPU?J'ai vu une documentation contradictoire suggérant que cela est nécessaire, mais j'observe une accélération entre BASIC et BASIC_GPU, mais je ne suis pas sûr si cela est dû au GPU ou juste que le BASIC_GPU a aussi un plus grand processeur. – reese0106

+0

Si vous avez un GPU (comme BASIC_GPU), il n'est pas strictement nécessaire de spécifier le périphérique (voir https://www.tensorflow.org/tutorials/using_gpu pour plus d'informations). Cela dit, le code GPU performant nécessite souvent de forcer certaines opérations sur un CPU. Voir https://www.tensorflow.org/performance/performance_guide#preprocessing_on_the_cpu pour plus d'informations à ce sujet. – rhaertel80

0

Cloud ML Engine ne détermine pas le mode d'entraînement distribué. Cela dépend de la façon dont l'utilisateur configure la formation en utilisant les bibliothèques TensorFlow. Dans l'exemple mnist lié à l'article, le code utilise des classes TF Learn spécifiquement un estimateur est construit en model.py

Ce code sélectionne l'optimiseur qui dans ce cas est l'AdamOptimizer qui utilise des mises à jour asynchrones. Si vous souhaitez effectuer des mises à jour synchrones, vous devez utiliser un optimiseur différent, tel que SyncReplicasOptimizer.

Pour plus d'informations sur la configuration de l'entraînement synchrone, référez-vous à doc.

+0

Ahh je ne savais pas que cela a été déterminé par l'optimisation, merci! Existe-t-il d'autres facteurs au-delà de l'optimiseur qui contrôlent le type de formation distribuée? L'optimiseur est-il aussi ce qui spécifie le "data-parallel"? – reese0106

+0

J'ai généré mon propre Estimator (en retournant tf.estimator.EstimatorSpec) et je cherche des informations supplémentaires pour comprendre comment la formation est distribuée. J'utilise aussi l'AdamOptimizer donc en fonction de votre réponse, je suppose qu'il s'agit d'un entraînement asynchrone parallèle aux données, mais je ne sais pas comment je pourrais confirmer le comportement si je devais choisir un autre estimateur. Je ne vois pas ce comportement lié à l'optimiseur documenté n'importe où afin que je puisse déterminer le comportement par moi-même. Pourriez-vous partager des liens pertinents? – reese0106