gpt4 book ai didi

python - 分布式 Tensorflow 模型并不比独立模型快

转载 作者:行者123 更新时间:2023-12-03 21:30:28 25 4
gpt4 key购买 nike

我需要一些帮助来调试 Tensorflow,因为从单 GPU 模型转移到多机多 GPU 集群并不能提高性能。
我认为最好使用 Tensorflow 的 Github 问题页面中的模板,因此将其包含在下面。

系统信息

  • 我是否编写了自定义代码(而不是使用 TensorFlow 中提供的股票示例脚本) :
    我已经从 Tensorflow 模型动物园中获取了 Resnet code 并根据 https://www.tensorflow.org/deploy/distributed
  • 分发它
  • 操作系统平台和发行版(例如,Linux Ubuntu 16.04) :
    Ubuntu 16.04.1 LTS
  • TensorFlow 从(源代码或二进制文件) 安装:
    官方 Tensorflow-GPU docker 镜像
  • TensorFlow 版本(使用下面的命令) :
    ('v1.0.0-2378-g2259213', '1.1.0-rc0')
  • Bazel 版本(如果从源代码编译) :
    不适用
  • CUDA/cuDNN 版本 :
    版本 8
  • GPU 模型和内存 :
    在集群内的多个设置上进行测试
    4 台带有 2x Nvidia TitanX 12GB 的机器
    1 台带有 2x GeForce GTX 1080 8GB
  • 的机器
  • 重现 的精确命令:
    根据集群配置,机器之间的命令略有不同,但对于 1 PS 和 2 个工作人员,它看起来像这样:
  • CUDA_VISIBLE_DEVICES="" python resnet_main.py --dataset="cifar10" --train_data_path="/notebooks/cifar_data/data_batch*" --train_dir="/notebooks/tmp/resnet_model/train" --log_root="/notebooks/tmp/resnet_model" --job_name="ps" --task_index=0 --eval_data_path="/notebooks/cifar_data/test_batch.bin" --eval_dir="/notebooks/tmp/resnet_model/test" CUDA_VISIBLE_DEVICES=0 python resnet_main.py --dataset="cifar10" --train_data_path="/notebooks/cifar_data/data_batch*" --train_dir="/notebooks/tmp/resnet_model/train" --log_root="/notebooks/tmp/resnet_model" --job_name="worker" --task_index=0 --eval_data_path="/notebooks/cifar_data/test_batch.bin" --eval_dir="/notebooks/tmp/resnet_model/test" CUDA_VISIBLE_DEVICES=0 python resnet_main.py --dataset="cifar10" --train_data_path="/notebooks/cifar_data/data_batch*" --train_dir="/notebooks/tmp/resnet_model/train" --log_root="/notebooks/tmp/resnet_model" --job_name="worker" --task_index=1 --eval_data_path="/notebooks/cifar_data/test_batch.bin" --eval_dir="/notebooks/tmp/resnet_model/test"
    描述问题

    在分布式环境(异步、图间复制)中从 tf zoo 在 CIFAR10 上运行 Resnet 模型时,没有性能提升。

    在单个(非分布式)机器上运行 Resnet 110,单个 GPU 产生大约每秒 3 次迭代。这被认为是对以下配置的任何测试的基线 - 所有这些都导致每秒迭代次数大致相同,而与配置无关。
    注意:在所有情况下,每个 worker 都有自己的专用 GPU
    1. 1 PS,一台机器上2个 worker
    2. 1 PS 专用 GPU & 一台机器上的 1 个 worker ,另一台机器上的 1 个 worker
    3. 一台机器上有 1 个 PS 和 2 个 worker ,另一台机器上有 2 个 worker
    4. 一台机器上 1 个 PS 和 2 个 worker ,另外 3 台机器,每台 2 个 worker
    5. 4 台机器,每台 2 名 worker ,其中两台每台 1 PS
    6. 4台机器,每台有1个PS和2个 worker

    在启动工作人员时,每个工作人员都会在准备就绪后立即开始训练,并在每次迭代期间/之后将信息打印到终端。不同之处在于速度在视觉上很明显——当只有 1 个 worker 在运行时,它的速度和我预期的一样快。随着越来越多的 worker 开始运转,所有现有的 worker 都会减速。通过这种方式,我可以看到(在我的屏幕上有 8 个终端)整个集群随着更多 worker 开始而变慢。

    我在训练期间监视系统统计信息以排除瓶颈,并发现每台机器的以下内容:
    - CPU 使用率:任何机器的 CPU 使用率都不是 100%
    - GPU 使用率:GPU 使用率在 0% 到 ~80% 之间反复闪烁 - 每次迭代一次
    - 网络使用:任何给定机器的网络带宽输入/输出永远不会超过其容量的 80%。网络速度限制在1Gbps,并没有达到这个上限。我们将限制提高到 2Gbps,但使用率或性能没有增加。
    - 硬盘使用:批量从磁盘多线程加载。我在文件访问期间打印到屏幕上,几乎是即时的。

    对于输入管道,我还尝试在 tf.RandomShuffleQueuetf.train.shuffle_batch 之间切换,并针对这些批处理方法中的每一种尝试在 deque 等之后使用线程数/分钟。

    源代码/日志

    下面附上源代码文件 - cifar_input.py 对原始输入管道进行了小的修改。原始的 cifar 输入代码是文件 cifar_input_orig.py
    resnet_distrib.zip

    预先感谢您对此的任何了解!

    最佳答案

    TensorFlow 在适当配置时几乎可以完美地扩展到单台机器内的 8 个 GPU,以及跨具有多个 GPU 的机器集群。有关上下文,请参阅我们的基准测试页面:https://www.tensorflow.org/performance/benchmarks

    几个常见的陷阱:

  • 在启用优化的情况下编译 TensorFlow 很重要。 TensorFlow 的开源预编译版本在编译时禁用了优化,以确保它们可以在尽可能多的机器上运行。
  • 使用最新版本的 TensorFlow 很重要。 TensorFlow 1.0、1.1 和即将发布的 TensorFlow 1.2 都有显着的性能改进。
  • 运行优化的输入管道很重要。根据模型,驱动 TensorFlow 的 Python 代码可能是一个很大的开销。

  • 如果您想要可重现的性能基准,请查看 https://github.com/tensorflow/benchmarks 存储库。

    关于python - 分布式 Tensorflow 模型并不比独立模型快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43600673/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com