class_docstr: This class uses a `RunnerMultiGPU` object to train a model on multiple
  GPUs. It mainly overrides the `_create_train_graph` to create a graph
  for adversarial training on multiple GPUs.
class_docstr_tok: ["This","class","uses","a","`","RunnerMultiGPU","`","object","to","train","a","model","on","multiple","GPUs",".","It","mainly","overrides","the","`","_create_train_graph","`","to","create","a","graph","for","adversarial","training","on","multiple","GPUs","."]
docstr: Clone variables unused by the attack on all GPUs. Specifically, the
  ground-truth label, y, has to be preserved until the training step.
  
  :param inputs: A list of dictionaries as the inputs to each step.
  :param outputs: A list of dictionaries as the outputs of each step.
  :param g0_inputs: Initial variables to be cloned.
  :return: Updated inputs and outputs.
docstr_tok: ["Clone","variables","unused","by","the","attack","on","all","GPUs",".","Specifically",",","the","ground-truth","label",",","y",",","has","to","be","preserved","until","the","training","step",".",":","param","inputs",":","A","list","of","dictionaries","as","the","inputs","to","each","step",".",":","param","outputs",":","A","list","of","dictionaries","as","the","outputs","of","each","step",".",":","param","g0_inputs",":","Initial","variables","to","be","cloned",".",":","return",":","Updated","inputs","and","outputs","."]
code: def clone_g0_inputs_on_ngpus(self, inputs, outputs, g0_inputs):
      """
      Clone variables unused by the attack on all GPUs. Specifically, the
      ground-truth label, y, has to be preserved until the training step.
  
      :param inputs: A list of dictionaries as the inputs to each step.
      :param outputs: A list of dictionaries as the outputs of each step.
      :param g0_inputs: Initial variables to be cloned.
      :return: Updated inputs and outputs.
      """
      assert len(inputs) == len(
          outputs
      ), "Inputs and outputs should have the same number of elements."
  
      inputs[0].update(g0_inputs)
      outputs[0].update(g0_inputs)
  
      # Copy g0_inputs forward
      for i in range(1, len(inputs)):
          # Create the graph for i'th step of attack
          device_name = inputs[i]["x"].device
          with tf.device(device_name):
              with tf.variable_scope("step%d" % i):
                  for k, v in g0_inputs.iteritems():
                      if k not in inputs[i]:
                          v_copy = clone_variable(k, v)
                          inputs[i][k] = v_copy
                          outputs[i][k] = v_copy
  
      return inputs, outputs
  
imports: from collections import OrderedDict
  import logging
  import math
  import time
  import os
  import numpy
  import six
  import tensorflow
  from cleverhans.utils_tf import batch_indices
  from cleverhans.utils_mnist import data_mnist
  import utils_cifar
  import utils_svhn
  from utils import preprocess_batch
  from make_model import make_model
  from evaluator import Evaluator
  from evaluator import create_adv_by_name
  from model import clone_variable
label_desc: Use image node_id 2 for calling the TrainerMultiGPU obj's underlying member method code with example usage: obj.clone_g0_inputs_on_ngpus(inputs, outputs, g0_inputs) and returns: inputs,  outputs