美文网首页
多卡训练的数据并行

多卡训练的数据并行

作者: 飞奔的卤蛋 | 来源:发表于2018-08-02 12:28 被阅读0次

最近在做多卡的实验,当然是使用最新的TensorFlow dataset API。在思考如何使每个卡取不同的数据,同时尽可能的提速,在论坛搜索了一下,思考有如下三种思路:

1、使用Dataset.batch()构造大batch的dataset,如4卡每卡batch size=6,那么就batch(24) 。然后在Iterator.get_next()之后tf.split(..., self.num_gpus),让每卡分到不同的batch。这应该是最简单的思路,不过split应该会降低速度。

2、用Dataset.batch()构造小batch的dataset,如每卡batch size=6,那么batch(6),然后在每卡上Iterator.get_next()。需要区分的是,如果Iterator.get_next()放在for i in range(num_gpus)之前,那么每卡读的batch应该是一样的。因此这种方法是指Iterator.get_next()放在循环里面。

3、创建多个iterator,每个GPU一个。在pipeline中使用dataset.Shard()对数据进行分片,请注意,此方法将消耗主机上的更多资源,因此可能需要减少buffer sizes 和degrees of parallelism。样例如下:

def input_fn(tfrecords_dirpath, num_gpus, batch_size,

            num_epochs, gpu_device, gpu_index):

    tfrecord_filepaths = tf.data.Dataset.list_files('{}/*.tfrecord'.format(tfrecords_dirpath))

    dataset = tf.data.TFRecordDataset(tfrecord_filepaths, num_parallel_reads= int(64 / num_gpus))

    dataset = dataset.shard(num_gpus, gpu_index)

    # use fused operations (shuffle_and_repeat, map_and_batch)

    dataset = dataset.apply(tf.contrib.data.shuffle_and_repeat(10000, num_epochs))

    dataset = dataset.apply(tf.contrib.data.map_and_batch(lambda x: parse_record(x), batch_size))

    # stage batches for processing by loading them pre-emptively on the GPU

    dataset = dataset.apply(tf.contrib.data.prefetch_to_device(gpu_device))

    iterator = dataset.make_one_shot_iterator()

    images_batch, labels_batch = iterator.get_next()

    return images_batch, labels_batch        

# create a separate inference graph in every GPU

gpu_devices = ['/gpu:{}'.format(i) for i in range(num_gpus)]

with tf.variable_scope(tf.get_variable_scope()):

    for i, gpu_device in enumerate(gpu_devices):

        # create a dataset and iterator per GPU

        image_batch, label_batch = input_fn(tfrecords_dirpath, num_gpus, batch_size_per_tower,

                                            num_epochs, gpu_device, i)

        with tf.device(gpu_device):

            with tf.name_scope('{}_{}'.format('tower', i)) as scope:

                # run inference and compute tower losses

                ...

相关文章

  • Pytorch单机多卡分布式训练 数据并行

    Pytorch单机多卡训练(数据并行训练) Pytorch的数据并行训练,已经被封装的十分完善。全程只需两步: 1...

  • 多卡训练的数据并行

    最近在做多卡的实验,当然是使用最新的TensorFlow dataset API。在思考如何使每个卡取不同的数据,...

  • 踩过的pytorch坑

    1. 多卡训练模型 如果使用torch.nn.DataParallel(model)多卡并行训练模型的话需要注意:...

  • tensorflow multi-gpu

    单机多卡,数据并行实现的关键点: 给每块卡都分配bs的数据 将模型参数副本分配到每张卡上,进行计算 计算梯度平均的...

  • 是时候放弃tensorflow集群投入horovod的怀抱

    当数据较多或者模型较大时,为提高机器学习模型训练效率,一般采用多GPU的分布式训练。 按照并行方式,分布式训练一般...

  • 5.data_parallel_tutorial

    1 多GPU与数据并行 2 数据并行 Authors: Sung Kim[https://github.com/h...

  • [tensorflow](十) Tensorflow 计算加速

    20181204 qzd 1 Tensorflow使用GPU 2 深度学习训练并行模式 3 多GPU并行 4 分布...

  • 2020-10-29 Pytorch 程序单卡到多卡

    在多卡上训练的过程为先将模型和数据加载到第一张卡上,然后copy至其他卡。batchsize最好设为卡的整数倍,比...

  • pytorch多GPU并行

    一、pytorch多GPU并行 (1)引用库 (2)加载模型 (3) 并行化 二、GPU数据转成list (1)引...

  • 常用的GCD记录一下

    子线程并行 串行 主线程 串行队列 子线程 并行队列 子线程 栅栏函数 控制执行顺序 避免数据竞争 多线...

网友评论

      本文标题:多卡训练的数据并行

      本文链接:https://www.haomeiwen.com/subject/lbmjvftx.html