详情页标题前

阿里云人工智能平台PAIWorkQueue-云淘科技

详情页1

在大规模分布式异步训练中,您可以使用WorkQueue进行弹性数据切分,以缓解长尾效应,从而降低模型训练所需的时间。本文介绍WorkQueue的调用格式、参数及其提供的方法。同时,以文件数据源和MaxCompute数据源为例,介绍实现数据切分的经典示例。

背景信息

在大规模分布式异步训练中,如果每个Worker读取相同数量的样本,则慢节点的训练时长会远大于其他节点,造成长尾效应。并且随着训练规模扩大,长尾效应会越来越严重,导致训练的整体数据吞吐降低,进而增加训练时间。

为解决该问题,PAI提供了pai.data.WorkQueue类,支持对多种数据源进行弹性数据切分,让慢节点获取较少的训练数据,快节点获取更多的训练数据,以缓解长尾效应,从而降低模型训练所需的时间。

版本配套关系

  • Python版本:Python 2.7
  • PAI-TensorFlow版本:PAI-TensorFlow 1.12

pai.data.WorkQueue

  • 功能

    工作项队列类,用于统一管理所有Worker上的工作项。每个Worker的当前剩余工作项被消费完后,会从同一个WorkQueue获得新的工作项,并将其作为数据源进行训练,从而使得训练快的Worker获得更多的工作项进行训练,以减少长尾效应。

  • 格式
    class pai.data.WorkQueue(works, num_epochs=1, shuffle=True, seed=None, 
                                prefix=None, num_slices=None, name='work_queue')
  • 参数
    参数名 描述 类型 是否必选 默认值
    works 文件名或表名列表。 LIST of STRING
    num_epochs 读取全部数据的次数。 INT 1
    shuffle 是否每个Epoch都随机重洗数据,取值如下:

    • True:每个Epoch都随机重洗数据。
    • False:不进行数据重洗。
    BOOL True
    seed 重洗数据的随机种子。取值为None时,表示系统自动选取随机种子。 INT None
    prefix 工作项(文件名或表名)的前缀。取值为None时,表示无前缀。 STRING None
    num_slices 工作项的总数量。集群越不稳定,需要将工作项总数量配置的越大,通常为Worker数量的10倍以上。取值为None时,表示不分片。 INT None
    num_clients 工作队列支持的最大工作抢占并发数。 INT 1
    name 工作队列的名称。 STRING work_queue
  • 返回值

    返回WorkQueue对象,您可以使用该对象调用pai.data.WorkQueue类提供的方法。

pai.data.WorkQueue提供的方法

pai.data.WorkQueue类提供以下方法:

  • take
    • 功能

      从全局工作队列获取一个工作项,并下载至本地。

    • 格式
      WorkQueue.take()
    • 参数

    • 返回值

      返回值类型为tensorflow.Tensor

  • input_dataset
    • 功能

      返回一个Dataset,其每个元素为一个工作项。

    • 格式
      WorkQueue.input_dataset()
    • 参数

    • 返回值

      返回值类型为tensorflow.data.Dataset

  • input_producer
    • 功能

      返回全局工作队列在本地的代理队列,为Reader类Op使用。

    • 格式
      WorkQueue.input_producer()
    • 参数

    • 返回值

      返回值类型为tensorflow.FIFOQueue

  • add_summary
    • 功能

      在Tensorboard中显示WorkQueue的资源水位信息。

    • 格式
      WorkQueue.add_summary()
    • 参数

    • 返回值

典型示例

pai.data.WorkQueue类支持对多种数据源进行弹性数据切分,以下分别以文件数据源和MaxCompute表数据源为例,介绍如何使用pai.data.WorkQueue类实现弹性数据切分(仅提供核心代码片段):

  • 文件数据源
    import pai
    # ...
    # path1、path2及path3表示需要读取的文件列表。
    # shuffle取值为True,表示每个Epoch都随机化打散文件路径。
    work_queue = pai.data.WorkQueue([path1, path2, path3], shuffle=True)
    
    # 让WorkQueue支持TensorBoard。
    work_queue.add_summary()
    
    # 创建文件读取器。
    reader = tf.TextLineReader()
    # 从文件列表中读取2条记录。
    keys, values = reader.read_up_to(work_queue.input_producer(), num_records=2)
    with tf.train.MonitoredTrainingSession() as sess:
      sess.run(...)
  • MaxCompute表数据源
    • TableRecordDataset数据源
      import pai
      #...
      # odps_path1、odps_path2及odps_path3表示需要读取的MaxCompute表列表。
      # shuffle取值为True,表示每个Epoch都随机化打散表路径。
      # num_slices为工作项总数量。
      # FLAGS.num_workers为训练中的Worker数量。
      work_queue = pai.data.WorkQueue([odps_path1, odps_path2, odps_path3],shuffle=True,
                          num_slices=FLAGS.num_workers * 10)
      # 创建文件名Dataset。
      filenames_dataset = work_queue.input_dataset()
      
      # 将dataset作为文件名传入TableRecordDataset。
      dataset = tf.data.TableRecordDataset(filenames_dataset, record_defaults=...)

      关于tf.data.TableRecordDataset接口的调用,请参见TableRecordDataset。

    • TableRecordReader数据源
      import pai# ...# odps_path1、odps_path2及odps_path3表示需要读取的MaxCompute表列表。# shuffle取值为True,表示每个Epoch都随机化打散表路径。# num_slices为工作项总数量。# FLAGS.num_workers为训练中的Worker数量。work_queue = pai.data.WorkQueue(  [odps_path1, odps_path2, odps_path3], shuffle=True, num_slices=FLAGS.num_workers * 10)# 创建表读取器。reader = tf.TableRecordReader()# 从表中读取2条记录。keys, values = reader.read_up_to(work_queue.input_producer(), num_records=2)

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

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

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

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

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

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

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

相关推荐

  • 阿里云日志服务SLScreate_logstore-云淘科技

    调用CLI命令创建Logstore。 注意事项 在使用CLI命令之前,您需要注意以下事项: 已开通日志服务。具体操作,请参见如何开始使用日志服务?。 已安装日志服务CLI,并完成配置。具体操作,请参见安装CLI和配置CLI。 已创建日志服务Project。具体操作,请参见create_project。 命令格式 aliyunlog log create_lo…

    阿里云日志服务SLS 2023年12月10日
  • 阿里云人工智能平台PAI岭回归训练-云淘科技

    岭回归(Tikhonov regularization)算法是对不适定问题进行回归分析时,最常用的正则化方法。岭回归训练组件基于该算法,支持稀疏、稠密两种数据格式,且支持带权重样本的训练。本文为您介绍岭回归训练组件的配置方法。 使用限制 支持的计算引擎为MaxCompute和Flink。 算法原理 岭回归是一种专用于共线性数据分析的有偏估计回归方法,实质上是…

    阿里云人工智能平台PAI 2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云日志服务SLSParquet格式-云淘科技

    日志服务将日志投递到OSS后,支持存储为不同的文件格式,本文介绍Parquet格式。 参数配置 在配置投递规则时,如果选择存储格式为Parquet,对应的参数配置如下所示。 相关参数说明如下表所示。 参数 说明 Key名称 您可以在日志服务的原始日志页签中查看日志字段的Key,将您需要投递到OSS的字段名(Key)有序填入,在投递时将按照此顺序组织Parqu…

    阿里云日志服务SLS 2023年12月10日
  • 阿里云RDS数据库简介-云淘科技

    空间/时空数据(Spatial/Spatio-temporal Data,统称时空数据)是带有时间/空间位置信息的图形图像数据,用来表示事物的位置、形态、变化及大小分布等多维信息。 概述 ApsaraDB PostgreSQL Ganos时空引擎(简称Ganos)提供一系列的数据类型、函数和存储过程,用于在阿里云RDS PostgreSQL中对空间/时空数据…

    阿里云数据库 2023年12月9日
  • 阿里云日志服务SLSCloudLens概述-云淘科技

    CloudLens基于日志服务构建统一的云产品可观测能力,通过日志、指标、配置计量等数据的关联分析,提供阿里云产品的用量分析、性能监控、安全分析、数据保护、异常检测、访问分析等服务。从成本、性能、安全、数据保护、稳定性、访问分析六个维度,助力您快速构建云产品的可观测性,更好地使用云产品。 CloudLens系列应用 目前,CloudLens系列的应用包括: …

    2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

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