docstr: Args:
      towers(list[int]): list of GPU ids.
docstr_tok: ["Args",":","towers","(","list","[","int","]",")",":","list","of","GPU","ids","."]
code: def __init__(self, towers):
      """
      Args:
          towers(list[int]): list of GPU ids.
      """
      if len(towers) > 1:
          logger.info(
              "[DataParallel] Training a model of {} towers.".format(
                  len(towers)
              )
          )
          if not tf.test.is_built_with_cuda():
              logger.error(
                  "[DataParallel] TensorFlow was not built with CUDA support!"
              )
  
      self.towers = towers
  
imports: import copy
  import pprint
  import re
  from abc import ABCMeta, abstractmethod
  from contextlib import contextmanager
  import six
  import tensorflow
  from ..compat import tfv1
  from ..tfutils.common import get_tf_version_tuple
  from ..tfutils.gradproc import ScaleGradient
  from ..tfutils.tower import TrainTowerContext
  from ..utils import logger
  from ..utils.develop import HIDE_DOC
  from .utils import GradientPacker, LeastLoadedDeviceSetter, aggregate_grads_colocate, allreduce_grads_naive, allreduce_grads, allreduce_grads_hierarchical, merge_grad_list, override_to_local_variable, split_grad_list
label_desc: Use image node_id 1 to create a new DataParallelBuilder object from inherited base classes: GraphBuilder with example: obj = DataParallelBuilder(towers)