Skip to content

Latest commit

 

History

History
52 lines (28 loc) · 2.28 KB

psf_describe.md

File metadata and controls

52 lines (28 loc) · 2.28 KB

PSF简介


作为标准的参数服务器系统,一般会提供基本的参数**获取(pull)和更新(push)**功能。

但实际应用中,各个算法对参数服务器上的参数获取和更新,却远远不只这么简单,尤其是当算法需要实施一些特定的优化的时候。

举个例子,有时候要得到矩阵中某一行的最大值,如果只有基本的参数获取的Pull接口,那么Client只能先将该行的所有列,都从参数服务器上拉取回来,然后在Worker上计算得到最大值,这样会产生很多的网络通信开销,对性能会有影响。

为了解决类似的问题,Angel对参数获取和更新的流程进行了抽像,提出了PSF的概念。

1. 步骤

Angel参数的获取和更新都是有固定的步骤,具体如下:

  • 参数获取

    1. 请求划分

      参数服务器的接口,操作的是整个模型参数。而模型参数是被划分成多个分区存储在不同的PS实例中的,因此在请求阶段,就要进行划分了

      • PS Client(参数服务器客户端)进行请求划分,生成一个请求列表,这个请求列表中,每一个请求都和一个模型参数分区对应
    2. 请求发送

      • Angel将请求列表中的所有请求,发送给模型参数分区所在的PS实例。
      • PS实例以模型参数分区为单位执行参数获取和更新操作,并返回相应的结果。
    3. 结果合并

      • 合并所有的模型分区级结果,得到最终的结果并返回
  • 参数更新

    1. PS Client(参数服务器客户端)进行请求划分,生成一个请求列表,这个请求列表中的每一个请求都和一个模型参数分区对应。

    2. 将请求列表中的所有请求发送给模型参数分区所在的PS实例。PS实例以模型参数分区为单位执行参数获取和更新操作,并返回相应的结果。

    3. 等待所有请求完成后返回

2. 接口

根据这两个共有流程Angel实现了两个通用的接口

  • get
  • update

而一些与具体流程相关的部分:

  • 参数划分方式,分区获取和更新和分区结果合并

等部分都可以交给应用程序实现。从而在不更改PS的前提下,用户可以方便的实现了对PS功能进行扩展。