社会焦点

教程 | TensorFlow 官方解读:如何在多系统和网络拓扑中构建高性能模型(3)

字号+ 作者: 来源: 2017-05-07

带有 3 个变量的分布式复制模式中,变量读取和更新的单个工作器。每一步骤标上了数字,所有步骤被用于每一个变量。 NCCL 为了在同一台主机的不同 GPU 上传播变量和聚合梯度,我们可以使用 Tensorflow 默认的隐式复

  教程 | TensorFlow 官方解读:如何在多系统和网络拓扑中构建高性能模型

带有 3 个变量的分布式复制模式中,变量读取和更新的单个工作器。每一步骤标上了数字,所有步骤被用于每一个变量。

  NCCL

为了在同一台主机的不同 GPU 上传播变量和聚合梯度,我们可以使用 Tensorflow 默认的隐式复制机制。

然而,我们也可以选择 NCCL(tf.contrib.nccl)。NCCL 是英伟达的一个库,可以跨不同的 GPU 实现数据的高效传输和聚合。它在每个 GPU 上分配一个协作内核,这个内核知道如何最好地利用底层硬件拓扑结构,并使用单个 SM 的 GPU。

通过实验证明,尽管 NCCL 通常会加速数据的聚合,但并不一定会加速训练。我们的假设是:隐式副本基本是不耗时的,因为它们本在 GPU 上复制引擎,只要它的延迟可以被主计算本身隐藏起来,那么。虽然 NCCL 可以更快地传输数据,但是它需要一个 SM,并且给底层的 L2 缓存增加了更多的压力。我们的研究结果表明,在 8 个 GPU 的条件下,NCCL 表现出了更优异的性能;但是如果 GPU 更少的情况下,隐式副本通常会有更好的表现。

分段变量

我们进一步介绍一种分段变量模式,我们使用分段区域来进行变量读取和更新。与输入管道中的软件流水线类似,这可以隐藏数据拷贝的延迟。如果计算所花的时间比复制和聚合的时间更长,那么可以认为复制本身是不耗时的。

这种方法的缺点是所有的权重都来自之前的训练步骤,所以这是一个不同于 SGD 的算法,但是通过调整学习率和其他超参数,还是有可能提高收敛性。

脚本的执行

这一节将列出执行主脚本的核心命令行参数和一些基本示例(tf_cnn_benchmarks.py)

注意:tf_cnn_benchmarks.py 使用的配置文件 force_gpu_compatible 是在 Tensorflow 1.1 版本之后引入的,直到 1.2 版本发布才建议从源头建立。

主要的命令行参数

  • model:使用的模型有 resnet50、inception3、vgg16 和 alexnet。

  • num_gpus:这里指所用 GPU 的数量。

  • data_dir:数据处理的路径,如果没有被设置,那么将会使用合成数据。为了使用 Imagenet 数据,可把这些指示 (https://github.com/tensorflow/tensorflow/blob/master/tensorflow_models/inception#getting-started) 作为起点。

  • batch_size:每个 GPU 的批量大小。

  • variable_update:管理变量的方法:parameter_server 、replicated、distributed_replicated、independent。

  • local_parameter_device:作为参数服务器使用的设备:CPU 或者 GPU。

  • 单个实例

      # VGG16 training ImageNet with 8 GPUs using arguments that optimize for

      # Google Compute Engine.

      python tf_cnn_benchmarks.py --local_parameter_device=cpu --num_gpus=8

      --batch_size=32--model=vgg16 --data_dir=/home/ubuntu/imagenet/train

      --variable_update=parameter_server --nodistortions

      # VGG16 training synthetic ImageNet data with 8 GPUs using arguments that

      # optimize for the NVIDIA DGX-1.

      python tf_cnn_benchmarks.py --local_parameter_device=gpu --num_gpus=8

      --batch_size=64--model=vgg16 --variable_update=replicated --use_nccl=True

      # VGG16 training ImageNet data with 8 GPUs using arguments that optimize for

      # Amazon EC2.

      python tf_cnn_benchmarks.py --local_parameter_device=gpu --num_gpus=8

      --batch_size=64--model=vgg16 --variable_update=parameter_server

      # ResNet-50 training ImageNet data with 8 GPUs using arguments that optimize for

      # Amazon EC2.

      python tf_cnn_benchmarks.py --local_parameter_device=gpu --num_gpus=8

      --batch_size=64--model=resnet50 --variable_update=replicated --use_nccl=False

    分布式命令行参数

    1)ps_hosts:在<host>:port 的格式中(比如 10.0.0.2:50000),逗号分隔的主机列表用做参数服务器。

    2)worker_hosts:(比如 10.0.0.2:50001),逗号分隔的主机列表用作工作器,在<host>:port 的格式中。

    3)task_index:正在启动的 ps_host 或 worker_hosts 列表中的主机索引。

    4)job_name:工作的类别,例如 ps 或者 worker。

    分布式实例

    如下是在两个主机(host_0 (10.0.0.1) 和 host_1 (10.0.0.2))上训练 ResNet-50 的实例,这个例子使用的是合成数据,如果要使用真实数据请传递 data_dir 参数。

      # Run the following commands on host_0 (10.0.0.1):

      python tf_cnn_benchmarks.py --local_parameter_device=gpu --num_gpus=8

      --batch_size=64--model=resnet50 --variable_update=distributed_replicated

      --job_name=worker --ps_hosts=10.0.0.1:50000,10.0.0.2:50000

      --worker_hosts=10.0.0.1:50001,10.0.0.2:50001--task_index=0

      python tf_cnn_benchmarks.py --local_parameter_device=gpu --num_gpus=8

      --batch_size=64--model=resnet50 --variable_update=distributed_replicated

      --job_name=ps --ps_hosts=10.0.0.1:50000,10.0.0.2:50000

      --worker_hosts=10.0.0.1:50001,10.0.0.2:50001--task_index=0

      # Run the following commands on host_1 (10.0.0.2):

      python tf_cnn_benchmarks.py --local_parameter_device=gpu --num_gpus=8

      --batch_size=64--model=resnet50 --variable_update=distributed_replicated

      --job_name=worker --ps_hosts=10.0.0.1:50000,10.0.0.2:50000

      --worker_hosts=10.0.0.1:50001,10.0.0.2:50001--task_index=1

      python tf_cnn_benchmarks.py --local_parameter_device=gpu --num_gpus=8

      --batch_size=64--model=resnet50 --variable_update=distributed_replicated

      --job_name=ps --ps_hosts=10.0.0.1:50000,10.0.0.2:50000

    转载请注明出处。


    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • 案例 | 抑郁症、精神分裂,初中生家境优渥,父母为何不让吃药

      案例 | 抑郁症、精神分裂,初中生家境优渥,父母为何不让吃药

    • 实录 |12名女大学生被侵犯,色魔竟然是个老乞丐

      实录 |12名女大学生被侵犯,色魔竟然是个老乞丐

    • 微信群的多人语音和视频聊天功能,你要试试 | 有轻功 #081

      微信群的多人语音和视频聊天功能,你要试试 | 有轻功 #081

    • 为了不让你坐过站,香港人居然做了这款 App | AppWall 精选 #060

      为了不让你坐过站,香港人居然做了这款 App | AppWall 精选 #060