详情页标题前

阿里云人工智能平台PAI使用TensorFlow实现分布式DeepFM算法-云淘科技

详情页1

本文为您介绍如何使用TensorFlow实现分布式DeepFM算法。

前提条件

  • 开通OSS,并创建Bucket,详情请参见开通OSS服务和创建存储空间。


    注意 创建Bucket时,不要开通版本控制,否则同名文件无法覆盖。

  • 完成OSS访问授权,详情请参见云产品依赖与授权:Designer。

背景信息

DeepFM算法对应Wide&Deep部分,且将LR替换为FM,从而避免人工特征工程。

训练数据源为pai_online_project.dwd_avazu_ctr_deepmodel_train,测试数据源为pai_online_project.dwd_avazu_ctr_deepmodel_test,都是公开数据源,您可以直接使用。

操作步骤

  1. 下载模型文件。
  2. 修改模型配置代码。
    1. 修改特征参数,每个特征需要配置embedding_dim、hash_buckets及default_value。
      self.fields_config_dict['hour'] = {'field_name': 'field1', 'embedding_dim': self.embedding_dim, 'hash_bucket': 50, 'default_value': '0'}
      self.fields_config_dict['c1'] = {'field_name': 'field2', 'embedding_dim': self.embedding_dim, 'hash_bucket': 10, 'default_value': '0'}

      DeepFM模型中,需要将所有特征的embedding_dim配置为相同值,而Wide&Deep模型无此限制。对于user_id和itemid,建议将hash_buckets配置为较大值,而其他取值较少的特征建议将hash_buckets配置为较小值。

    2. 配置模型,推荐使用DeepFM(deepfm)和Wide&Deep(wdl)。
      tf.app.flags.DEFINE_string("model", 'deepfm', "model {'wdl', 'deepfm'}")
    3. 配置分布式参数。
      tf.app.flags.DEFINE_string("job_name", "", "job name")
      tf.app.flags.DEFINE_integer("task_index", None, "Worker or server index")
      tf.app.flags.DEFINE_string("ps_hosts", "", "ps hosts")
      tf.app.flags.DEFINE_string("worker_hosts", "", "worker hosts")

      提交训练任务时,只需要配置cluster(详情请参见下述提交训练任务步骤),系统自动生成分布式参数。

    4. 配置输入数据。
        def _parse_batch_for_tabledataset(self, *args):
          label = tf.reshape(args[0], [-1])
          fields = [tf.reshape(v, [-1]) for v in args[1:]]
          return dict(zip(self.feas_name, fields)), label
      
        def train_input_fn_from_odps(self, data_path, epoch=10, batch_size=1024, slice_id=0, slice_count=1):
          with tf.device('/cpu:0'):
            dataset = tf.data.TableRecordDataset([data_path], record_defaults=self.record_defaults,
                               slice_count=slice_count, slice_id=slice_id)
            dataset = dataset.batch(batch_size).repeat(epoch)
            dataset = dataset.map(self._parse_batch_for_tabledataset, num_parallel_calls=8).prefetch(100)
            return dataset
      
        def val_input_fn_from_odps(self, data_path, epoch=1, batch_size=1024, slice_id=0, slice_count=1):
          with tf.device('/cpu:0'):
            dataset = tf.data.TableRecordDataset([data_path], record_defaults=self.record_defaults,
                               slice_count=slice_count, slice_id=slice_id)
            dataset = dataset.batch(batch_size).repeat(epoch)
            dataset = dataset.map(self._parse_batch_for_tabledataset, num_parallel_calls=8).prefetch(100)
            return dataset

      如果需要进行特征变换,建议在模型外通过MaxCompute实现,从而节约训练开销。如果在模型中进行特征变换,建议在_parse_batch_for_tabledataset函数中实现。

  3. 上传已修改的模型文件至OSS。
  4. 可选:提交训练任务。


    说明 如果没有训练完成的模型文件,则必须执行该步骤。反之,可以跳过该步骤,直接提交离线推理任务。

    根据配置的模型类型,选择提交命令:

    • DeepFM
      pai -name tensorflow1120_ext
      -project algo_public
      -Dbuckets='oss://bucket_name.oss-cn-region-internal.aliyuncs.com/'
      -Darn=''
      -Dscript='oss://bucket_name.oss-cn-region-internal.aliyuncs.com/demo/deepfm_pai_ctr.py'
      -Dtables='odps://pai_online_project/tables/dwd_avazu_ctr_predict_deepmodel_train,odps://pai_online_project/tables/dwd_avazu_ctr_predict_deepmodel_test'
      -DuserDefinedParameters="--task_type='train' --model='deepfm' --checkpoint_dir='oss://bucket_name/path/' --output_dir='oss://bucket_name/path/'"
      -Dcluster='{\"ps\":{\"count\":2,\"cpu\":1200,\"memory\":10000},\"worker\":{\"count\":8,\"cpu\":1200,\"memory\":30000}}';

      需要根据实际情况修改project_name、bucket_name、账号arn(请参见角色ARN)及地域。

    • Wide&Deep
      pai -name tensorflow1120_ext-project algo_public-Dbuckets='oss://bucket_name.oss-cn-region-internal.aliyuncs.com/'-Darn=''-Dscript='oss://bucket_name.oss-cn-region-internal.aliyuncs.com/demo/deepfm_pai_ctr.py'-Dtables='odps://pai_online_project/tables/dwd_avazu_ctr_predict_deepmodel_train,odps://pai_online_project/tables/dwd_avazu_ctr_predict_deepmodel_test'-DuserDefinedParameters="--task_type='train' --model='wdl' --checkpoint_dir='oss://bucket_name/path/' --output_dir='oss://bucket_name/path/'"-Dcluster='{\"ps\":{\"count\":2,\"cpu\":1200,\"memory\":10000},\"worker\":{\"count\":8,\"cpu\":1200,\"memory\":30000}}';

      需要根据实际情况修改project_name、bucket_name、账号arn(请参见角色ARN)及地域。

    因为该版本为PS分布式,所以需要配置cluster。示例中的cluster参数表示申请两个PS节点和8个Worker节点。同时,每个PS节点拥有12个CPU和10 GB内存,每个Worker节点拥有12个CPU及30 GB内存。各参数的具体介绍请参见PAI-TF任务参数介绍。

  5. 提交离线推理任务。
    pai -name tensorflow1120_ext
    -project algo_public
    -Dbuckets='oss://bucket_name.oss-cn-region-internal.aliyuncs.com/'
    -Darn=''
    -Dscript='oss://bucket_name.oss-cn-region-internal.aliyuncs.com/demo/deepfm_pai_ctr.py'
    -Dtables='odps://pai_online_project/tables/dwd_avazu_ctr_predict_deepmodel_train,odps://pai_online_project/tables/dwd_avazu_ctr_predict_deepmodel_test'
    -DuserDefinedParameters="--task_type='predict' --model='deepfm' --checkpoint_dir='oss://bucket_name/path/' --output_dir='oss://bucket_name/path/'"
    -Dcluster='{\"worker\":{\"count\":8,\"cpu\":1200,\"memory\":30000}}'
    -Doutputs='odps://project_name/tables/output_table_name';

    需要根据实际情况修改project_name、bucket_name、账号arn(请参见角色ARN)及地域。

    离线推理需要一张已创建的outputs表,每次执行推理任务的结果会覆盖该表。创建表的示例命令如下。

    drop table project_name.output_table_name;
    create table project_name.output_table_name
    (
       probabilities STRING
       ,logits STRING
    )STORED AS ALIORC;
  6. 导出训练完成的模型文件。
    pai -name tensorflow1120_ext
    -project algo_public
    -Dbuckets='oss://bucket_name.oss-cn-region-internal.aliyuncs.com/'
    -Darn=''
    -Dscript='oss://bucket_name.oss-cn-region-internal.aliyuncs.com/demo/deepfm_pai_ctr.py'
    -Dtables='odps://pai_online_project/tables/dwd_avazu_ctr_predict_deepmodel_train,odps://pai_online_project/tables/dwd_avazu_ctr_predict_deepmodel_test'
    -DuserDefinedParameters="--task_type='savemodel' --model='deepfm' --checkpoint_dir='oss://bucket_name/path/' --output_dir='oss://bucket_name/path/'"
    -Dcluster='{\"ps\":{\"count\":2,\"cpu\":1200,\"memory\":10000},\"worker\":{\"count\":8,\"cpu\":1200,\"memory\":30000}}';

    需要根据实际情况修改project_name、bucket_name、账号arn(请参见角色ARN)及地域。系统实际使用单Worker执行导出模型任务。

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/165260.html

(0)
上一篇 2023年12月10日
下一篇 2023年12月10日
详情页2

相关推荐

  • 阿里云日志服务SLS自定义授权日志采集与同步-云淘科技

    在使用日志审计服务进行跨账号采集云产品日志时,需先授予日志服务采集相关云产品日志的权限以及授权多个主账号之间的数据同步。您可以直接使用具备特定权限的RAM用户的密钥或者参见本文进行自定义授权。 背景信息 日志审计服务支持采集同一主账号下的云产品日志,也支持跨主账号采集云产品日志。 进行跨账号采集云产品日志时,当前主账号和其他主账号需要进行双向授权。 说明 当…

    阿里云日志服务SLS 2023年12月10日
  • 阿里云日志服务SLSCLI概述-云淘科技

    为满足越来越多的自动化日志服务配置需求,日志服务提供命令行工具CLI(Command Line Interface)。 主要功能 日志服务命令行工具CLI的主要功能包括: 支持大部分的日志服务REST接口。例如管理Project、Logstore、机器组、消费组和Logtail配置等。 支持多账号,便于跨地域操作日志。 支持基本查询和拉取日志。 支持Elas…

    阿里云日志服务SLS 2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云RDS数据库一键上云-云淘科技

    本文介绍如何通过RDS PostgreSQL的一键上云功能将ECS或IDC自建PostgreSQL数据库迁移到RDS PostgreSQL。该功能采用物理流复制方式,具有速度快、操作简单、稳定性好、场景覆盖全等特点,能够有效提高迁移效率。 前提条件 RDS PostgreSQL实例需满足以下条件。 实例大版本与自建PostgreSQL相同,当前支持Postg…

    2023年12月9日
  • 阿里云日志服务SLSLogstash消费-云淘科技

    日志服务支持通过Logstash消费数据,您可以通过配置日志服务的Input插件对接Logstash获取日志服务中的数据并写入到其他系统中,例如Kafka、HDFS等。 功能特性 分布式协同消费:可配置多台服务器同时消费某一个Logstore。 高性能:基于Java ConsumerGroup实现,单核消费速度可达20 MB/s(压缩前)。 高可靠性:消费进…

    阿里云日志服务SLS 2023年12月10日
  • 阿里云大数据开发治理平台 DataWorksKafka数据源-云淘科技

    Kafka数据源为您提供读取和写入Kafka的双向通道,本文为您介绍DataWorks的Kafka数据同步的能力支持情况。 支持的版本 支持阿里云Kafka,以及=0.10.2且<=2.2.x的自建Kafka版本。 说明 对于<0.10.2版本Kafka,由于Kafka不支持检索分区数据offset,并且Kafka数据结构可能不支持时间戳,进而无…

    2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。