我需要一些帮助调试Tensorflow,因为从单GPU模式转向多机,多GPU集群并不能提高性能。 我认为最好使用Tensorflow的Github问题页面中的模板,因此将其包含在下面。
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动物园运行CIFAR10上的Resnet模型(异步,图形间复制)时,没有性能提升。
在单个(非分布式)计算机上运行Resnet 110,单个GPU每秒产生大约3次迭代。这被认为是以下配置的任何测试的基线 - 所有这些都导致每秒的迭代次数大致相同,无论配置如何。 注意:在所有情况下,每个工作人员都有自己的专用GPU 1. 1台PS,一台机器上有2名工人 2. 1 PS,专用GPU&一台机器上有1名工人,另一台机器上有1名工人 3. 1 PS&一台机器上有2名工人,另一台机器上有2名工人 4. 1 PS&一台机器上有2名工人,另外3台机器上有2名工人 5. 4台机器,每台2名工人,其中两台每台1 PS 6. 4台机器,每台机器有1个PS& 2名工人
当启动工作人员时,每个人都会在准备就绪后立即开始训练,在每次迭代期间/之后将信息打印到终端。不同之处在于速度在视觉上是显而易见的 - 当只有一名工人在运行时,它的速度和我预期的一样快。随着越来越多的工人开始工作,所有现有员工都在放慢脚步。通过这种方式,我可以看到(屏幕上有8个终端)整个群集随着更多工作人员的开始而减慢。
我在培训期间监控系统统计信息,将事情排除在瓶颈之外,并为每台机器找到以下内容: - CPU使用率:任何机器的CPU使用率都不是100% - GPU使用:GPU使用率在0%到80%之间反复闪烁 - 每次迭代一次 - 网络使用:任何给定机器的网络带宽输入/输出不超过其容量的约80%。网络速度限制在1Gbps,并没有达到这个上限。我们将限制提高到2Gbps,并没有增加使用或性能。 - HDD使用:批量从磁盘多线程加载。我在文件访问期间打印到屏幕上,它几乎是瞬间的。
对于输入管道,我也尝试在tf.RandomShuffleQueue
和tf.train.shuffle_batch
之间切换,并且在deque等之后使用每个批处理方法的线程数/分钟数无效。
下面附带的源代码文件 - cifar_input.py
对原始输入管道进行了少量修改。原始的cifar输入代码是文件cifar_input_orig.py
提前感谢您对此有所了解!
答案 0 :(得分:0)
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存储库。
答案 1 :(得分:0)
我无法在基准网站上生成保存结果。我从每晚构建的docker运行tensorflow