Fluxo tensor distribuído: a diferença entre replicação no gráfico e replicação entre gráficos
Fiquei confuso sobre os dois conceitos:In-graph replication
eBetween-graph replication
ao ler oTreinamento replicado no tutorial oficial do tensorflow.
Dizem no link acima que
Replicação no gráfico. Nessa abordagem, o cliente cria um único tf.Graph que contém um conjunto de parâmetros (em tf.Nós variáveis fixados em / job: ps); ...
Isso significa que existemmúltiplo tf.Graph
pecadoBetween-graph replication
aproximação? Se sim, onde estão os códigos correspondentes nos exemplos fornecidos?
Embora já exista umBetween-graph replication
exemplo no link acima, alguém poderia fornecer umaIn-graph replication
implementação (pseudo-código é bom) e destaca suas principais diferençasBetween-graph replication
?
Desde já, obrigado!
Edit_1: mais perguntasMuito obrigado pelas explicações detalhadas e código de essência @mrry @YaroslavBulatov! Depois de analisar suas respostas, tenho as duas perguntas a seguir:
Há a seguinte declaração emTreinamento replicado:
Replicação entre gráficos. Nessa abordagem, há um cliente separado para cada tarefa / job: worker, normalmente no mesmo processo que a tarefa do worker. Cada cliente cria umgráfico semelhante contendo os parâmetros (fixados em / job: ps como antes de usar tf.train.replica_device_setter () para mapeá-los deterministicamente para as mesmas tarefas); e umcópia única da parte intensiva em computação do modelo, fixada na tarefa local em / job: worker.
Tenho duas sub-perguntas relacionadas às palavras acima em negrito.
(A) Por que dizemos que cada cliente criagráfico semelhante, mas nãomesmo gráfico? Gostaria de saber o gráfico construído em cada cliente no exemplo deTreinamento replicado deve ser o mesmo porque os códigos de construção do gráfico abaixo são compartilhados em todosworker
s .:
# Build model...
loss = ...
global_step = tf.Variable(0)
(B) Não deveria servárias cópias de parte intensiva em computação do modelo, já que temos váriosworkers
?
O exemplo emTreinamento replicado oferece suporte ao treinamento em várias máquinas, cada uma com várias GPUs? Caso contrário, podemos usar simultaneamente os doisIn-graph replication
para dar suporte ao treinamento em várias GPUs em cada máquina eBetween-graph replication
para treinamento entre máquinas? Eu faço essa pergunta porque @mrry indicou que oIn-graph replication
é essencialmente o mesmo da maneira usada emModelo de exemplo CIFAR-10 para várias GPUs.