我们分析了Tensorflow的参数服务器,发现参数服务器应用梯度op只消耗20us,但参数服务器中的RunGraphAsync总共需要200us(梯度是用RunGraphAsync RPC调用发送的,在recv op中没有碎片GRPC请求)。
Tensorflow中有如此繁重的参数服务器设计的原因是什么?
我的理解是ops可以重复用于单个或集群,此外,为什么我们需要在参数服务器中运行繁重的子图?更简单的参数服务器可以在分发模式下带来令人难以置信的性能。
Tensorflow的PS运行来自worker,变量/梯度的子图需要来自worker的send / recv,这是一个碎片化的GRPC请求。 与参数服务器相比,我们分析了Tensorflow的PS可以处理来自工作人员的10K请求(RunGraphAsync),但是基于KV的参数服务器可以处理100K或更多的请求表单工作者。