在线服务

概述

在线推荐服务是推荐必不可少的一环,PAI-Rec Engine一款基于 go 的在线推荐服务引擎的框架,其中预定义了多种召回、过滤,排序算法和策略,支持多种数据源和特征存储,集成了轻量级 A/B Test 实验平台,用户可以基于PAI-Rec Engine快速搭建起一套推荐在线服务。此外,PAI-Rec Engine也支持简单易用的扩展点,用户能很方便地定制化扩展自己的业务场景的策略和算法。 下面基于示例数据 及 前文中构建的Etrec召回和DBMTL多目标精排算法,我们来看下如何快速搭建一个推荐在线服务

使用流程

新建服务

  1. 推荐引擎配置:进入运维与实验操作台推荐引擎 > 推荐引擎配置 预发环境新增一个名叫pairec_config的配置,配置内容的填写可参考附录A填写。PAI-Rec Engine的详细的各项配置说明可以参考配置说明,配置完成以后点击发布,并点击克隆,克隆到生产环境

  2. 新增服务:进入推荐引擎 > 服务列表页面新增一个推荐服务,在本最佳实践中,我们使用标准的PAI-Rec镜像,用户也可以基于这个标准的镜像进一步扩展自定义的功能
    image.png

  3. 发布服务:进入推荐引擎 > 发布单管理页面新增一个发布单,选择刚新建的pairec_demo服务,镜像版本填写1.0.0,点击预发发布。则可以在 **机器学习PAI > 模型在线服务(EAS)**中看到相应的叫pairec_demo_prepub的预发服务(注:机器学习PAI指代的是阿里云机器学习PAI产品,不是运维与实验操作台中的一个页面)

调试服务

  1. 实验工具表:进入 基础配置 > 数据表管理 > 实验工具表 中新增一张物料基础信息表,用于推荐预发服务的调试。我们复用前文中已经导入到hologres的物料特征表rec_sln_demo_item_table_preprocess_all_feature_holo_v1做个演示,如下图所示进行配置。实际可以用线上的业务数据,可以包含更丰富的字段,如图片的url,视频的url等。
    image.png

  2. 服务调试:进入工具 > 推荐结果诊断页面,EAS数据源选择刚发布的pairec_demo_prepub服务,数据表选择刚创建的rec_sln_demo_item_table_preprocess_all_feature_holo_v1实验数据表。并构造一个请求body填写在请求数据中(其中uid建议从etrec的hologres表中获取)。点击开始诊断,就能在下方看到推荐的物品列表。

    1. 如果实验工具表中配置了图片url或视频url的话,相应的图片和视频也会展现在诊断结果中。

    2. 如果提示“查询失败”,请进入 **机器学习PAI > 模型在线服务(EAS)**的pairec_demo_prepub的模型服务中查看具体的请求服务日志,一般是由于配置错误或请求body构造错误引起的

{"uid":"100017524", "size":10, "scene_id":"home_page", "request_id":"e332fe9c-7d99-45a8-a047-bc7ec33d07f6", "features": {"page":"home","net_type":"wifi"}}

image.png

发布服务

  1. 推荐引擎配置发布生产:回到推荐引擎 > 推荐引擎配置 > 预发页面,选择刚调试完的配置,点击克隆,运行环境选择生产环境。选择刚克隆到生产环境的配置,点击发布

  2. 推荐服务发布到生产:回到推荐引擎 > 发布单管理页面,选择刚调试完的服务,点击测试通过后,点击生产发布,即可以在 **机器学习PAI > 模型在线服务(EAS)**中看到相应的叫pairec_demo的生产服务。可以用如上推荐结果诊断工具诊断生产服务的推荐结果。

如何节约EAS费用?

1、通过EAS动态扩缩容可以节约费用

 通过动态扩缩容节约费用,例如晚上7-10点高峰期是20个实例,凌晨流量最小的时候5个实例,当QPS超过10的时候就扩容。

2、通过预付费实例节约费用。

3、怎么应付固定的流量峰值?

  在EAS 实例配置中可设定定时增加实例,例如每天晚上8点是固定的用户访问高峰期,我们可以设置7点半定时将实例扩容到n个实例(提前半个小时是为了初始化各种数据)。如果某个时间有活动,预计会有大量用户到来,也可以提前设置定时扩容。

附录

附录A:PAI-Rec Engine服务配置

其中包含了一个前文中构建的Etrec召回和DBMTL多目标精排算法。其中,AlgoConfs中的EasModelVpcUrl和EasModelToken需要填写成部署的DBMTL精排模型的EAS VPC地址和Token,HologresConfs中hologres的DSN需要填写上开通的hologres的db信息

{
  "ListenConf": {
    "HttpAddr": "",
    "HttpPort": 8000
  },
  "FilterConfs": [],
  "RecallConfs": [    
    {
      "Name": "EtrecU2IRecall",
      "RecallType": "UserCustomRecall",
      "RecallCount": 1000,
      "DaoConf": {
        "AdapterType": "hologres",
        "HologresName": "pairec-holo",
        "HologresTableName": "public.home_page_demo_etrec_u2i2i_score_holo_v1"
      }
    }
  ],
  "SortNames": {
    "default": [
      "ItemRankScore"
    ]
  },
  "FilterNames": {
    "default": [
      "UniqueFilter"
    ]
  },
  "AlgoConfs": [    
    {
      "Name": "home_page_dbmtl",
      "Type": "EAS",
      "EasConf": {
        "Processor": "EasyRec",
        "Timeout": 300,
        "ResponseFuncName": "easyrecMutValResponseFunc",
        "Url": "<EasModelVpcUrl>",
        "Auth": "<EasModelToken>"
      }
    }
  ],
  "HologresConfs": {
    "pairec-holo": {
      "DSN": "postgres://<AccessID>:<AccessKey>@<Endpoint>:<Port>/<database>?sslmode=disable&connect_timeout=1"
    }
  },
  "LogConf": {
    "RetensionDays": 3,
    "DiskSize": 20,
    "LogLevel": "INFO"
  },
  "RankConf": {    
    "home_page": {
      "RankAlgoList": [
        "home_page_dbmtl"
      ],
      "RankScore": "${home_page_dbmtl_probs_is_click} + ${home_page_dbmtl_y_play_time} + ${home_page_dbmtl_probs_is_praise}",
      "BatchCount": 500,
      "Processor": "EasyRec"
    }
  },
  "SceneConfs": {
    "home_page": {
      "default": {
        "RecallNames": [
          "EtrecU2IRecall"
        ]
      }
    }
  },
  "FeatureConfs": {
    "home_page": {      
      "AsynLoadFeature": true,
      "FeatureLoadConfs": [
        {
          "FeatureDaoConf": {
            "AdapterType": "hologres",
            "HologresName": "pairec-holo",
            "FeatureKey": "user:uid",
            "UserFeatureKeyName": "user_id",
            "HologresTableName": "public.rec_sln_demo_user_table_preprocess_all_feature_holo_v1",
            "UserSelectFields": "*",
            "FeatureStore": "user"
            },
          "Features": [
            {
              "FeatureType": "new_feature",
              "FeatureName": "day_h",
              "Normalizer": "hour_in_day",
              "FeatureStore": "user"
            },
            {
              "FeatureType": "new_feature",
              "FeatureName": "week_day",
              "Normalizer": "weekday",
              "FeatureStore": "user"
            }
          ]
        }
      ]  
    }
  }
}

注:召回的表名称 public.home_page_demo_etrec_u2i2i_score_holo_v1 要根据实际情况调整下。 可以从 dataworks 的业务流程中找到。
image.png