tensorflow分布式情况下,ps负载不均衡

       先说下问题背景,在tensorflow官方支持的分布式中,即ps,worker模式中,由于模型变量的因素,导致变量在ps上初始化的时候负载不均衡,到时影响训练性能,最近就遇到这种问题,测的是inception_v3这个模型,在分布式中,看各个ps所在机器cup利用率和网络带宽差异很大,然后就做了ps上变量的负载均衡,负载均衡后,性能提升大约在10%~20%左右,具体不多说,直接上代码:

ps_tasks = len(cluster._cluster_spec.get('ps'))
if "GLBS" == FLAGS.ps_updater:
    ps_strategy = tf.contrib.training.GreedyLoadBalancingStrategy(ps_tasks, tf.contrib.training.byte_size_load_fn)
elif "Random" == FLAGS.ps_updater:
    ps_strategy = tf.contrib.training.RandomStrategy(ps_tasks)
else:
    ps_strategy = None
clone_device_func = tf.train.replica_device_setter(
    worker_device=clone_device,
    cluster=cluster,
    ps_strategy=ps_strategy
)

 

tf.train.replica_device_setter这个函数主要实现变量在ps上初始化,其中提供了一个参数ps_strategy,即变量初始化的策略,这参数是可选的,不填的话默认循环去初始化。

我这里提供了两种变量初始化策略,一是每次变量放的时候随机选一个(Random),二是每次初始化像负载最小的ps放(GLBS)。

其实我觉得还有一种更优的方法,就是先把变量按大小排序后,然后每次初始化的时候向负载最小的ps上放,这种tensorflow没有提供方法,需要自己去实现。

有兴趣可以去官网自己看看这几种方法,尤其可以去看看它代码实现,像它实现Random策略的时候,他那个想法很有意思,具体我不多透露,自己去看吧。

参考链接:

https://www.tensorflow.org/versions/r1.8/api_docs/python/tf/train/replica_device_setter

https://www.tensorflow.org/versions/r1.8/api_docs/python/tf/contrib/training/GreedyLoadBalancingStrategy

https://www.tensorflow.org/versions/r1.8/api_docs/python/tf/contrib/training/RandomStrategy

 

 

发布了11 篇原创文章 · 获赞 12 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览