全部产品

自定义算法开发

更新时间:2017-06-07 13:26:11   分享:   

本节简要说明在RecEng中开发自定义算法的过程,具体技术细节参见离线算法开发手册在线算法开发手册实时修正算法开发手册

自定义算法和RecEng预置的系统算法的区别在于自定义算法只有开发者自己可见,而系统算法所有客户可见。

离线算法开发

RecEng的离线计算都运行在MaxCompute(原ODPS)上,所有的离线算法都用Java编写,需要符合MaxCompute的要求。MaxCompute支持的三类离线算法,包括SQL脚本,MapReduce程序,和基于图模型的算法,这三类算法都可以用于开发RecEng的自定义算法。RecEng做的工作是把离线算法组织成为算法流程,以类似批处理的方式运行。为了达到这个目的,RecEng提供了一套SDK,负责向客户自定义算法传递上下文参数,并接收客户自定义算法的输出,根据算法流程的配置再将其传递到对应的算法节点。

所以客户在开发自定义算法时分为以下几个步骤:

1.下载离线算法开发SDK包,包中已经包含所需的MaxCompute依赖库。

2.将SDK包集成到本地开发工具,如eclipse中。

3.开发遵循MaxCompute规范的离线算法,可以是SQL脚本,MapReduce程序,或图模型程序,并单元测试。MaxCompute上离线算法的开发和测试请参考大数据计算服务MaxCompute快速入门手册中运行SQL、编写MapReduce、编写Graph等章节。

4.利用RecEng的SDK将算法集成到RecEng框架中。

5.在RecEng的算法注册页面上将开发好的jar包注册到RecEng中。客户只需要把自己开发的程序编入jar包即可,SDK及依赖包都不需要编入。

6.注册完成后即可在算法流程配置界面中使用自定义算法。

也可以参考离线算法开发样例

在线算法开发

在线算法开发相对简单。在线算法由Node.js编写,都运行在RecEng的在线环境中,客户不需要准备运行环境,直接在RecEng的在线代码开发页面上编写代码并提交即可。

和离线算法一样,在线算法也是有类别的,如前所述,在线算法的类别由输入输出的标准数据集决定,客户在编写在线算法时,首先在在线代码开发页上确定在线算法的类别,明确算法的输入输出后即可编写。编写完成后可利用自定义的默认参数功能进行单元测试。

所有这些操作都在RecEng中完成,客户不需要配置Node.js环境。

虽然RecEng提供了多种实时流程,应用在这些实时流程中的自定义在线算法其实区别并不大。以推荐流程的在线流程(rec_path->online_flow)为例,自定义在线算法需要从环境变量CTX中获取各种必要的数据,也可根据需要去指定读/写保存在在线存储中的某些数据,不过出于安全的考虑,所有读/写外部的在线存储都需要通过指定的SDK进行访问,不允许自定义代码直接访问外部在线存储。获得了所有必要的信息后自定义代码执行逻辑,并将最终输出的结果也保存在环境变量CTX中。RecEng会自动将CTX中的结果发送出去。

实时计算和离线计算最大的区别在于实时计算要追求低延迟,用到的数据是在某个窗口之内的,而离线计算用到的是全量数据。所以在编写在线算法的时候要注意算法的效率,每一次访问在线存储,每一次大循环都会造成round-trip(RT)的增加。比如对推荐API来说,不考虑传输延时的情况下,仅由计算导致的时延不要超过50毫秒;一般来说,每次读取在线存储的时间代价大约是2-5毫秒;此外还需要预留一些时间给系统,这部分时间大约是15-20毫秒左右,所以推荐API中,所有自定义在线算法的总时延最好不要超过20毫秒。

本文导读目录
本文导读目录
以上内容是否对您有帮助?