开发者学堂课程【PAL 平台学习路线:机器学习入门到应用:EasyRec 使用介绍】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/855/detail/14100
EasyRec 使用介绍
内容介绍:
一、EasyRec 简介
二、DataWorks 上EasyRec 训练评估导出的流程
三、EasyRec config 文件的配置工作
一、EasyRec 简介
EasyRec 是阿里云easy 学习平台自研的适用于推荐广告、搜索场景的深度学习算法库,它实现了多种业界常用的推广搜模型,包括DSM、mand 召回模型、deptfm、多塔、din等排序模型,还有ESMM、DBSTL 等多目标模型,用户也可以基于EasyRec 进行自定义算法的开发。另外,EasyRec 兼容ODPS、OSS、HDFS 等多种输入,支持多种类型的特征,损失函数、优化器以及评估指标,支持大规模的并行训练。使用EasyRec,只需要简单的配置config 文件,就可以通过命令行调用的方式,实现训练、评估、导出、推理等功能,不需要进行代码的开发,就可以帮助用户快速的搭建推广搜算法。
二、DataWorks 上EasyRec 训练评估导出的流程
(1)训练任务
输入-name easy_rec_ext 对PAI下面的EasyRec ext 算法进行调用,设置dcmd=train,并且输入dtrain_tables 配置一张训练表,输入deral_tables 配置一张评估表。然后,输入dcluster 申请训练任务所需要的集群资源信息。
此处申请了两个ps 节点,八个worker 节点,并为每个节点申请了十个cpu 以及40G 的内存。deval_method=separate 表示八个节点中有一个节点用来做训练,一个节点用来做评估,其他七个节点用来做训练。
如果想八个节点都用来做训练,那可以设置deval-method=arn,并且提供一个config 文件以及模型路径。darn=act:ram:xxx:role/aliyunodpspaidefaultrole’,dbuckets=’oss://xiaoyue-bj.oss-cn-beijing-internal.aliyuncs.aliyuncs.com/’,dosshost=oss-cn-beijing-internal.aliyuncs.com/’ 表示配置PAI 访问oss 所需要的权限信息。
(2)评估任务
Dconfig=oss://xiaoyue-bi/video_demo/multitowei.config 与dcluster表示评估任务与导出任务同样需要一个config 文件以及 cluster 信息,注意此处 cluster 评估任务与导出任务都只需要配置一个worker 节点,并不需要配置ps 节点。Tables 表示待评估的表以及模型路径和 checkpoint 路径。如果 checkpoint 路径不提供,则默认为模型路径下最新的checkpoint 文件。模型评估的结果会打印在模型下面的 eval result 中。在 eval result 中,1200度对应的aoc 为0.612。
(3)导出任务
Dcluster=’{“worker”:{“count=1,”“cpu”:1000,“memory”:40000}}’表示导出命令只需要配置一个worker 节点,并且提供模型路径和checkpoint 路径,额外还需要提供一个 exportdir,dexport_dir=oss://xiaoyue-bj/video_demo/checkpoint/easyrec_tb_multitower_demo/export/best 表示模型 fiwmodel 的输出路径。
(4)离线推理
此处用户需要输入 pai_online_project/tables/easyrec_demo_taobao_test_data 来提供一张带推理的表,以及输入tables/easyrec_demo_taobao_test_data_pred_res 推理结果表和模型上面导出的 fiwModel 路径,dexcluded_cols=label,dreserved_cols=all_columns 指定一下模型打印所需要的结果列。dcluster='{“worker”:{“count”:,“cpu”:1000表示用户可以用五个节点同时做离线推理。最后,推理结果打印在 dateworks里,props 列即为模型的输出值。
三、EasyRec config 文件的配置工作
(1)train_config
此处输入 adam_optimizer 使用的为adam 为优化器,innitial_learning_rate:1000表示它以0.001为初始学习率,然后 decay_factor:0.5表示程序每1000步会进行0.5倍的衰减。log_step_count_steps:100表示每100步会打印一下模型 的 log 信息,save_checkpoints_steps:100表示每100步会保存模型的checkpoint 文件。sync_replicas=true 表示这里是同步训练任务,如果想使用异步训练的方式,可以将此处置为false。num_steps=5000表示模型训练5000步就停止,此处推荐用 num_steps 来控制,而不是 applc 来控制。
(2)eval_config
Eval_config{表示此处使用 aoc 为评估指标,也可以使用 mse、required、top k 等其他指标。
(3)data_config
因为模型是在 ODPS 上读取 max compute 表来进行训练,所以 input_type 是 ODPS input_v2,如果用户想要在本地训练,那么 inputv2 应为 csfin-input。然后,用户需要对每一个需要用到的类型及需要用到的字段设置一个input fields,这里面需要指定每一个字段的名字以及字段的类型。如果不指定字段类型,默认为 string 类型。
(4)feature_config
EasyRec 主要支持了 IdFeature、RawFeature、TagFeature、SequenceFeature 以及 ComboFeature 五种特征类型,最常用的是 IdFeature、RawFeature、TagFeature,尤其是 IdFeature,IdFeature 适合于 item_id、category-id 以及一些星座、年龄段的离散值特征。此处用 hash_bucket_size、num_buckets 或者v ocab_list 来控制特征的映射。
第二种是 RawFeature,RawFeature 适用于连续值特征。例如,用户历史期间的点击次数、用户历史七天的购买次数等等这种连续值特征。但是并不建议将连续直接未尽模型,推荐的做法是先使用分箱组件得到分箱信息,然后将分箱信息导入到 config 中直接进行训练。这里面模型的输入是连续值,但是内部会进行离散化,这样处理方式就与ID特征是一致的。
接下来是 TagFeature,TagFeature 适用于像商品标签这类取值为多值的 ID 特征。因此,它的配置与 IdFeature 大同小异。这里支持对多个 lookup 的特征进行聚合,比如均值聚合、sum 聚合以及带权重的聚合。
(5)model_config
这里面指定了一个多塔模型,将特征分为 user 、item、combo 三个 feature_groups,并为每个 Feature_groups 配置一个 tower 网络,然后每个group 就会进入到各自的 tower 网络中,得到一个高维的 featureinbrandding,最后将三个 featureinbrandding 聚合起来拼接后,进入到 final_dnn 网络中,得到最后模型的输出。同时,为了缓解模型过拟合,我们也配置了L2正则、embedding 正则这些手段,EasyRec 同样也支持dropout 的手段。如果用户想更换模型,通常情况下只需要修 改 model config,此处替换为 deephidmodel,然后切换成 deephidmodel 的配置即可,通常不需要修改其他模块的配置。
(6)export_config
这里指定了 best 导出,设置 aoc 为衡量是否 best 标准,这里也可以使用 final 导出,这样就会在训练的最后给予最新的 checkpoint,导出一份 PB 文件。