Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Módulo: tf.distribute

TensorFlow 1 versión

Biblioteca para el funcionamiento de un cálculo a través de múltiples dispositivos.

La intención de esta biblioteca es que se puede escribir un algoritmo de una manera estilizada y será utilizable con una variedad de diferentes tf.distribute.Strategy implementaciones. Cada descendiente implementará una estrategia diferente para distribuir el algoritmo a través de múltiples dispositivos / máquinas. Por otra parte, estos cambios pueden estar ocultos dentro de las capas específicas y otras clases de biblioteca que necesitan un tratamiento especial para funcionar en un entorno distribuido, por lo que el modelo de código de definición la mayoría de los usuarios pueden ejecutar sin cambios. El tf.distribute.Strategy API funciona del mismo modo con la ejecución ansiosos y gráfico.

guías

tutoriales

Glosario

  • Paralelismo de datos es donde se corre varias copias del modelo en diferentes trozos de los datos de entrada. Esto está en contraste con el modelo de paralelismo, donde dividimos una sola copia de un modelo a través de múltiples dispositivos. Nota: sólo se da soporte paralelismo de datos por el momento, pero la esperanza de añadir soporte para el modelo de paralelismo en el futuro.
  • Un dispositivo es un CPU o acelerador (por ejemplo, las GPU, TPUs) en una máquina que TensorFlow puede ejecutar operaciones sobre (véase, por ejemplo tf.device ). Es posible tener varios dispositivos en una sola máquina, o estar conectado a dispositivos en múltiples máquinas. Dispositivos utilizados para los cálculos de ejecución se denominan dispositivos trabajador. Dispositivos utilizados para almacenar las variables son dispositivos de parámetros. Para algunas estrategias, como tf.distribute.MirroredStrategy , los dispositivos de los trabajadores y de los parámetros serán los mismos (ver las variables reflejadas a continuación). Para otros que serán diferentes. Por ejemplo, tf.distribute.experimental.CentralStorageStrategy pone las variables en un dispositivo único (que puede ser un dispositivo de trabajo o puede ser la CPU), y tf.distribute.experimental.ParameterServerStrategy pone las variables en máquinas separadas denominados servidores de parámetros (véase abajo).
  • Una réplica es una copia del modelo, que se ejecuta en una rebanada de los datos de entrada. En este momento cada réplica se ejecuta en su propio dispositivo de trabajo, pero una vez que agregamos soporte para el modelo de paralelismo una réplica puede abarcar varios dispositivos trabajador.
  • Un host es el dispositivo de CPU en una máquina con dispositivos trabajador, típicamente utilizados para el funcionamiento de las tuberías de entrada.
  • Un trabajador se define para ser la máquina física (s) que contiene los dispositivos físicos (por ejemplo, las GPU, TPUs) en las que se ejecuta el cálculo replicada. Un trabajador puede contener uno o más réplicas, pero contiene al menos una réplica. Típicamente un trabajador corresponderá a una máquina, pero en el caso de muy grandes modelos con modelo de paralelismo, un trabajador puede abarcar varias máquinas. Nos suelen llenar una tubería de entrada por trabajador, la alimentación de todas las réplicas en ese trabajador.
  • Sincrónica, o más comúnmente sincronización, la formación es donde las actualizaciones de cada réplica se agregan juntos antes de la actualización de las variables del modelo. Esto está en contraste con la formación asíncrono o asíncrono, donde cada réplica actualiza las variables del modelo de forma independiente. Usted también puede tener réplicas particionados en grupos que están en sincronización dentro de cada grupo, pero asíncrona entre los grupos.
  • Servidores de parámetros: Se trata de máquinas que tienen una sola copia de los parámetros / variables, utilizado por algunas estrategias (en este momento simplemente tf.distribute.experimental.ParameterServerStrategy ). Todas las réplicas que quieren operar en una variable recuperarlo al comienzo de un paso y enviar una actualización para ser aplicado al final de la etapa. Estos lata en apoyo priniciple cualquiera de sincronización o la formación asíncrono, pero en este momento sólo tenemos apoyo a la formación asincrónica con los servidores de parámetros. Comparar a tf.distribute.experimental.CentralStorageStrategy , que pone todas las variables en un solo dispositivo en la misma máquina (y hace el entrenamiento de sincronización), y tf.distribute.MirroredStrategy , que refleja las variables a múltiples dispositivos (véase más adelante).

  • Réplica contexto vs contexto Cross-vs réplica de Actualización de Contexto

    Un contexto réplica se aplica cuando se ejecuta la función de cálculo que se llamó con strategy.run . Conceptualmente, estás en el contexto de réplica al ejecutar la función de cálculo que se replica.

    Una actualización del contexto se introduce en un tf.distribute.StrategyExtended.update llamada.

    Un contexto cruzada réplica se introduce cuando se introduce una strategy.scope . Esto es útil para llamar tf.distribute.Strategy métodos que operan a través de las réplicas (como reduce_to() ). Por defecto se inicia en un contexto de réplica (el "contexto sola réplica por defecto") y, a continuación algunos métodos que puede cambiar una y otra.

  • Valor distribuida: Distributed valor está representado por la clase base tf.distribute.DistributedValues . tf.distribute.DistributedValues es útil para representar valores en múltiples dispositivos, y que contiene un mapa de ID de la réplica a los valores. Dos tipos representativos de tf.distribute.DistributedValues son valores "Mirrored" "PerReplica" y.

    existen valores "PerReplica" en los dispositivos de los trabajadores, con un valor diferente para cada réplica. Se producen por iteración a través de un conjunto de datos distribuida devuelto por tf.distribute.Strategy.experimental_distribute_dataset y tf.distribute.Strategy.experimental_distribute_datasets_from_function . También son el resultado típico devuelto por tf.distribute.Strategy.run .

    valores "Mirrored" son como valores "PerReplica", excepto que sabemos que el valor de todas las réplicas son los mismos. Podemos leer de forma segura un valor "espejo" en un contexto cruzada réplica utilizando el valor en cualquier réplica.

  • Desenvolver y la fusión: Considere llamar a una función fn de varias réplicas, como strategy.run(fn, args=[w]) con un argumento w que es un tf.distribute.DistributedValues . Este medio de w tendrán un mapa teniendo réplica de Identificación del 0 al w0 , réplica de Identificación del 1 al w1 , etc. strategy.run() desenvuelve w antes de llamar a fn , por lo que llama a fn(w0) en el dispositivo d0 , fn(w1) en el dispositivo d1 , etc. a continuación, combina los valores de retorno de fn() , que conduce a un objeto común si los valores devueltos son el mismo objeto de cada réplica, o una DistributedValues objeto de otra manera.

  • Reducciones y todo reducir: reducción A es un método de la agregación de múltiples valores en un valor, como "suma" o "media". Si una estrategia de formación de sincronización está haciendo, vamos a realizar una reducción de los gradientes a un parámetro de todas las réplicas antes de aplicar la actualización. All-reducir es un algoritmo para la realización de una reducción en los valores de varios dispositivos y haciendo que el resultado disponible en todos esos dispositivos.

  • Las variables de espejo: Estas son las variables que se crean en múltiples dispositivos, donde guardamos las variables de sincronización mediante la aplicación de las mismas actualizaciones para cada copia. Las variables de espejo se crean con tf.Variable(...synchronization=tf.VariableSynchronization.ON_WRITE...) . Normalmente sólo se utilizan en la formación sincrónica.

  • las variables SyncOnRead

    Las variables SyncOnRead son creados por tf.Variable(...synchronization=tf.VariableSynchronization.ON_READ...) , y que son creados en varios dispositivos. En el contexto de réplicas, cada variable componente en la réplica local puede realizar lee y escribe sin sincronización entre sí. Cuando la variable SyncOnRead se lee en contexto transversal réplica, los valores de variables de los componentes se agregan y devueltos.

    Las variables SyncOnRead traer mucha dificultad configuración personalizada a la lógica subyacente, por lo que no recomendamos a los usuarios a la variable y el uso instantiate SyncOnRead por su propia cuenta. Hemos utilizado principalmente para las variables SyncOnRead casos de uso como norma por lotes y métricas. Por motivos de rendimiento, a menudo no es necesario mantener estas estadísticas en sincronía cada paso y que se puede acumular en cada réplica de forma independiente. La única vez que queremos sincronizar está informando o puntos de control, que normalmente ocurre en el contexto cruzada réplica. Las variables SyncOnRead también se utilizan a menudo por los usuarios avanzados que deseen controlar cuando se agregan valores de las variables. Por ejemplo, los usuarios a veces quieren mantener gradientes de forma independiente en cada réplica de un par de pasos sin agregación.

  • Capas distribuir-aware

    Las capas se denominan generalmente en un contexto de réplica, excepto cuando se define un modelo funcional Keras. tf.distribute.in_cross_replica_context le permitirá determinar cuyo caso que se encuentre. Si en un contexto de réplica, la tf.distribute.get_replica_context función devolverá el contexto de réplica por defecto fuera de un ámbito estrategia, None dentro de un ámbito estrategia, y una tf.distribute.ReplicaContext objeto dentro de un alcance estrategia y dentro de un tf.distribute.Strategy.run función. El ReplicaContext objeto tiene una all_reduce método para la agregación de todas las réplicas.

Tenga en cuenta que proporcionamos una versión por defecto de tf.distribute.Strategy que se utiliza cuando no hay otra estrategia es en su alcance, que proporciona la misma API con el comportamiento por defecto razonable.

módulos

cluster_resolver módulo: las importaciones de biblioteca para ClusterResolvers.

experimental módulo: biblioteca estrategia de distribución Experimental.

clases

class CrossDeviceOps : La clase base para la reducción en varios dispositivos y algoritmos de radiodifusión.

class DistributedDataset : Representa un conjunto de datos distribuidas entre los dispositivos y máquinas.

class DistributedIterator : Un iterador sobre tf.distribute.DistributedDataset .

class DistributedValues : La clase base para la representación de valores distribuidos.