作为标准的参数服务器系统,一般会提供基本的参数获取(pull)和更新(push)功能。
但实际应用中,各个算法对参数服务器上的参数获取和更新,却远远不只这么简单,尤其是当算法需要实施一些特定的优化的时候。
举个例子,有时候要得到矩阵中某一行的最大值
,如果只有基本的参数获取的Pull接口,那么Client只能先将该行的所有列,都从参数服务器上拉取回来,然后在Worker上计算得到最大值,这样会产生很多的网络通信开销,对性能会有影响。
为了解决类似的问题,Angel对参数获取和更新的流程进行了抽像,提出了PSF
的概念。
Angel参数的获取和更新都是有固定的步骤,具体如下:
参数获取
请求划分
参数服务器的接口,操作的是整个模型参数。而模型参数是被划分成多个分区存储在不同的PS实例中的,因此在请求阶段,就要进行划分了
参数更新
PS Client(参数服务器客户端)进行请求划分,生成一个请求列表,这个请求列表中的每一个请求都和一个模型参数分区对应。
将请求列表中的所有请求发送给模型参数分区所在的PS实例。PS实例以模型参数分区为单位执行参数获取和更新操作,并返回相应的结果。
等待所有请求完成后返回
根据这两个共有流程Angel实现了两个通用的接口
而一些与具体流程相关的部分:
等部分都可以交给应用程序实现。从而在不更改PS的前提下,用户可以方便的实现了对PS功能进行扩展。