docs/design/psf_get.md
请求划分
参数服务器的接口,操作的是整个模型参数。而模型参数是被划分成多个分区存储在不同的PS实例中的,因此在请求阶段,就要进行划分了
请求发送
结果合并
接口
GetResult get(GetFunc get) throws AngelException;
参数
get型psFunc的参数类型是一个GetFunc对象,该对象封装了get psf方法的参数和执行流程:
public abstract class GetFunc {
protected final GetParam param;
public GetFunc(GetParam param) {
this.param = param;
}
public GetParam getParam() {return param;}
public abstract PartitionGetResult partitionGet(PartitionGetParam partParam);
public abstract GetResult merge(List<PartitionGetResult> partResults);
}
GetFunc对象的参数类型为GetParam
get型psFunc的执行流程分为两步,分别由接口partitionGet和merge方法表示。
这2步分别需要Worker端和PSServer端完成:
具体的流程如下图所示,左子图表示Worker端处理流程,右子图表示PS端处理流程:
由于getFunc的接口太底层,建议普通用户,从AggrFunc开始继承编写psFunc,这样需要Cover的细节较少
public final class Sum extends UnaryAggrFunc {
...
@Override
public GetResult merge(List<PartitionGetResult> partResults) {
double sum = 0.0;
for (PartitionGetResult partResult : partResults) {
sum += ((ScalarPartitionAggrResult) partResult).result;
}
return new ScalarAggrResult(sum);
}
将代码编译后打成jar包,在提交任务时通过参数--angel.lib.jars上传该jar包,然后就可以在应用程序中调用了。调用方式如下:
Sum sumFunc = new Sum(new SumParam(matrixId, rowIndex));
double result = ((SumResult)psModel.get(sumFunc)).getResult();
Amax
Amin
Asum
Max
Min
Sum
Dot
Nnz
Nrm2