根据整体的架构图,GetFunc和UpdateFunc是Angel中,最基本的2个psf类。我们不建议用户直接继承它们,从头开始写自定义的psFunc,但是了解它们的功能和运行,对于写出合理而高效的psFunc,有一定的帮助。
Pull类的请求,分为3个阶段:
-
请求划分
-
参数服务器的接口,操作的是整个模型参数。而模型参数是被划分成多个分区存储在不同的PS实例中的,因此在请求阶段,就要进行划分了
-
PS Client(参数服务器客户端)进行请求划分,生成一个请求列表,这个请求列表中,每一个请求都和一个模型参数分区对应
-
-
请求发送
- Angel将请求列表中的所有请求,发送给模型参数分区所在的PSServer。
- PSServer以模型参数分区为单位执行参数获取和更新操作,并返回相应的结果。
-
结果合并
- 合并所有的模型分区级结果,得到最终的结果并返回
Update类的请求,也分为3个阶段:
-
请求划分
PSClient进行请求划分,生成一个请求列表,这个请求列表中的每一个请求都和一个模型参数分区对应。
-
请求发送
- 将请求列表中的所有请求发送给模型参数分区所在的PS实例。
- PS实例以模型参数分区为单位执行更新操作
-
等待完成 等待所有请求完成后返回
无论是Get还是Update,具体的这3个阶段,其过程都是可以自定义的,从而实现千变万化的psFunc。