Écosystème TensorFlow

Ce stockage contient des exemples d'intégration de TensorFlow avec d'autres Framework open-source. les exemples sont minimes et destinés à être utilisés comme Les utilisateurs peuvent personnaliser les modèles pour leurs propres cas d’utilisation.

Si vous avez des additions ou des améliorations, veuillez créer un problème ou pousser à la demande.

contenu

  • DocteurConfiguration Docker pour fonctionner TensorFlow Les gestionnaires de cluster.
  • Le CubeFlow- Une plate-forme native Kubernetes pour ML
    • Un K8s ressource personnalisée pour le fonctionnement distribuéEmploi TensorFlow
    • Images Jupyter pour différentes versions de TensorFlow
    • TF estDocker images et K8s modèles
  • Les cubes- Modèles pour fonctionner distribué TensorFlow sur Les cubes.
  • Marathon- Modèles pour fonctionner distribué TensorFlow en utilisant Marathon, déployé au-dessus du Mesos.
  • Hadoop- fichier TFRecord InputFormat/OutputFormat pour Hadoop MapReduce et le Spark.
  • connecteur spark-tensorflowConnecteur Spark TensorFlow
  • Distributeur spark-tensorflow- Pack Python qui aide les utilisateurs à effectuer des formations distribuées avec TensorFlow sur leurs clusters Spark.

Distribué TensorFlow

Voir leDistribué TensorFlow documentation pour une description de la façon dont il fonctionne. les exemples dans ce le repository se concentre sur la forme la plus courante de la formation distribuée: inter-graphes réplication avec des mises à jour asynchrones.

Développement commun pour la formation distribuée

Chaque programme de formation distribué a une certaine configuration commune. d'abord, définir les drapeaux ainsi que le travailleur connaît les autres travailleurs et sait quel rôle il joue dans Formation distribuée :

# Flags for configuring the task
flags.DEFINE_integer("task_index", None,
                     "Worker task index, should be >= 0. task_index=0 is "
                     "the master worker task the performs the variable "
                     "initialization.")
flags.DEFINE_string("ps_hosts", None,
                    "Comma-separated list of hostname:port pairs")
flags.DEFINE_string("worker_hosts", None,
                    "Comma-separated list of hostname:port pairs")
flags.DEFINE_string("job_name", None, "job name: worker or ps")

Puis, démarrez votre serveur. Parce que le travailleur et les serveurs de paramètres (pse emplois) sont généralement partage un programme commun, les serveurs de paramètres devraient s'arrêter à ce stade et donc ils Ils sont connectés au serveur.

# Construct the cluster and start the server
ps_spec = FLAGS.ps_hosts.split(",")
worker_spec = FLAGS.worker_hosts.split(",")

cluster = tf.train.ClusterSpec({
    "ps": ps_spec,
    "worker": worker_spec})

server = tf.train.Server(
    cluster, job_name=FLAGS.job_name, task_index=FLAGS.task_index)

if FLAGS.job_name == "ps":
  server.join()

Ensuite, votre code varie en fonction de la forme de formation distribuée que vous La forme la plus courante est la réplication intergraphale.

Réplication intergraphée

Dans ce mode, chaque travailleur construit séparément le même graphique. le travailleur alors exécute le graphique en isolement, seulement partageant les gradients avec le paramètre serveurs. cette configuration est illustrée par le diagramme suivant. N’oubliez pas que chaque boîte détachée indique une tâche. Diagram for Between-graph replication

Vous devez définir explicitement l'appareil avant la construction du graphique pour ce mode de Le code suivant est tiré de la TensorFlow, le tutoriel Il démontre la configuration :

with tf.device(tf.train.replica_device_setter(
    worker_device="/job:worker/task:%d" % FLAGS.task_index,
    cluster=cluster)):
  # Construct the TensorFlow graph.

# Run the TensorFlow graph.

Exigences pour exécuter les exemples

Pour faire nos exemples,Modèles de JinjaIl doit être installé :

# On Ubuntu
sudo apt-get install python-jinja2

# On most other platforms
sudo pip install Jinja2

Jinja est utilisée pour l'expansion du modèle. il y a d'autres cadres spécifiques Les exigences, veuillez consulter la page README de chaque cadre.