pslite技术内幕(二):实战篇

ps-lite项目实现了参数服务器框架中的通信模块,简化了原paper中的设计,将集群中节点分为scheduler, worker和server三类,主要解决节点间的通信问题。

核心类

类名 功能 代码位置
SimpleApp 基础消息通信类,消息包括一个int类型的head和一个string类型的body ps-lite/include/ps/simple_app.h
KVWorker 表示一个Worker节点,继承自SimpleApp类,实现了key-value键值对数组的Pull和Push操作 ps-lite/include/ps/kv_app.h
KVServer 表示一个Server节点,也继承自SimpleApp类,所有的Server节点一起维护全局的key-value键值对数组 ps-lite/include/ps/kv_app.h
Customer 客户类,负责处理所在节点内接收到的msg.meta.customed_id等于自身customer_id的所有消息,负责维护所有request和response消息的状态信息 ps-lite/include/internal/customer.h
Postoffice 全局管理类,单例对象,读取启动时的环境变量配置集群的全局信息,如server,worker数量,角色 ps-lite/include/internal/postoffice.h
Van Postoffice的核心成员变量,实现集群内节点间的通信,底层依赖zmq库,实现对socket等通信细节的封装 ps-lite/include/internal/van.h
KVPirs 主要有keys,values,lens3个数组类型的成员变量 ps-lite/include/ps/common.h
SArray 数组的实现类,为了避免了数组的深拷贝做了特别是设计 ps-lite/include/ps/sarry.h

通信机制

按照参数服务器框架设计和实现的分布式训练算法,训练过程中节点间会有很多的通信,主要分为control控制类的通信和数据类通信.

控制类的通信主要用于管理和协调集群工作,比如启动同步,容错恢复,节点注册,心跳同步,等等;数据类的通信主要用于worker和server节点间参数的拉取和推送操作。另外,开发者还可以自定义自己的消息类型。

本文以参数的pull操作为例,分一下ps-lite中的通信机制。

  • pull操作由worker端发起,因为若干个server节点共同维护参数,所以pull操作会根据每个server负责维护的参数key的范围,切分请求后发往若干个不同的server节点。
  • server节点处理并返回worker端请求的key的参数值.
  • server返回的参数值经过合并后,返回给worker端pull操作的调用者。
  • pull操作是异步操作,不等待server处理返回,调用者可以选择传入回掉函数,或则接着调用wait操作来等待server节点的返回值。

在这里插入图片描述

push操作的过程比较类似,不再介绍。

数据一致性

pslite并没有实现paper中非常灵活的数据一致性方面的设计,而是简化了这方面的设计,不支持有限延迟一致性。因此当我们采用同步wait方式的时候,就选择了线性一致性,当我们不采用wait方式的时候,就选择了最终一致性。

集群性能调优指南

衡量分布式机器学习集群性能的指标包括:

指标 含义
集群QPS 集群整体训练数据的吞吐效率
单机负载 单机的负载

集群性能调优目标一般来说,就是提高集群QPS,同时要保证单机负载控制在安全合理的范围内。单机的负载太低,说明集群资源的利用率低,负载太高,加大了机器故障的概率,同样不合理。

采用pslite的训练集群,为了提高性能,可以从几个方面考虑:

  • 参数更新采用异步还是同步: 同步更新会导致性能高的节点等待性能差的节点,所以一般来说,异步更新集群的QPS更高。
  • 训练数据的切分是否合理: 数据切分不均匀会导致部分节点利用率低,延长整体的训练时间。
  • server,worker节点的数量比例是否匹配: 需要根据worker和server的运算量设置合理的节点数量比例,否则会造成参数推拉操作延迟高的问题。
  • server,worker节点的绝对数量是否合理: 一般来说更多的节点数量会造成通信次数的增加,但同时单次通信的数据量可能会变小。pslite通过节点间的长连接的方式一定程度克服了链接建立和断开的开销。
发布了52 篇原创文章 · 获赞 105 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/gaofeipaopaotang/article/details/88605589
今日推荐