docs/apis/Task.md
--
Task是Angel的元计算类,所有的机器学习算法,都要通过继承它,来实现训练或者预测过程。它运行于Worker之内,Task可以共享一个Worker中的某些资源。
理解Task,对了解Angel编程原则有很重要的帮助
一个Task的执行流程如图所示:
Task基本流程主要有2步:
训练数据读取
原始的数据存在分布式文件系统之上,且格式一般不能直接被机器学习算法使用。所以Angel抽象出了训练数据准备这一过程:在这个过程中,Task将分布式文件系统上的数据拉取到本地,然后解析并转换成所需的数据结构,放入DataBlock之中。这一步包括了preProcess和parse
计算(训练 or 预测)
对于一般的模型训练,这一步会进行多轮的迭代计算,最后输出一个模型;对于预测,数据只会被计算一次,输出预测结果。这一步一般叫run
为了让应用程序定制所需的计算流程,Angel抽象出了BaseTaskInterface接口,并在其基础上提供BaseTask,TrainTask和PredictTask等基类。应用程序可以根据自己的需求扩展这些基类。
Task在计算过程中,需要用到一些系统配置信息和控制迭代进度等,这些是通过TaskContext来提供的
BaseTaskInterface定义了一个算法的计算流程接口。KEYIN和VALUEIN表示原始输入数据的类型;VALUEOUT表示预处理输出的数据类型,同时它也是训练过程的输入数据。
parse
VALUEOUT parse(KEYIN key, VALUEIN value)preProcess
void preProcess(TaskContext taskContext)run
void run(TaskContext taskContext) throws AngelException为了进一步简化应用程序编程接口,Angel定义了两个BaseTask的子类TrainTask和PredictTask(这两个类的VALUEOUT均为LabeledData),分别用于训练和预测模式下。应用程序可以根据需求扩展TrainTask和PredictTask。
void train(TaskContext taskContext)predict
def predict(taskContext: TaskContext)应用程序可以通过TaskContext来获取任务配置,Task运行信息等。除此之外,也可以将计算过程中的一些指标保存在TaskContext中以便任务页面展示。
getReader
<K, V> Reader<K, V> getReader()getConf
Configuration getConf()getTotalTaskNum
int getTotalTaskNum()getIteration
int getIteration()incIteration
void incIteration()getMatrixClock
int getMatrixClock(int matrixId)globalSync
void globalSync()setCounter
定义:void setCounter(String counterName, int updateValue)
功能描述:设置Counter值
参数
返回值:无
updateCounter
void updateCounter(String counterName, int updateValue)