一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

静态数据处理系统中对数据执行向量化的系统及方法与流程

2022-09-03 19:58:48 来源:中国专利 TAG:
1.本公开涉及一种数据处理技术。更具体地说,本公开涉及一种用于静态数据处理过程中对数据执行向量化的系统及其方法。
背景技术
::2.在深度学习普及的现在,越来越多的模型以及规模越来越大的数据使得深度学习的训练已经不能在单台计算设备上实现。为此人们提出了分布式计算。随着分布式计算的普及,大型的作业或大张量会通过分割而将不同部分的数据部署到不同的分布式数据处理系统的各个计算设备上进行处理,并在各个部分计算过程需要进行中间参数的交互。3.在深度学习中,表征向量(embedding)是深度推荐系统中的一个重要模块,大规模embedding的实现也是大规模深度推荐系统需要解决的核心问题之一,主要是两种技术方法,一个是基于模型并行的大规模embedding,另一个是cpu/gpu混合embedding,这些方案现在看来存在以下问题:一方面,模型并行方案需要将所有参数放到显存中,随着规模的扩大,需要的gpu数量就越多,比如criteo1t数据集中包含大概1e9个特征id,如果表象向量维度(embedding_dims)配置为128,那么总共需要512gb显存来容纳embedding参数,相当于至少13张a10040g的gpu,如果使用adamoptimizer,这个数值还要变成前面的3倍,而根据百度快手等放出的文档显示,目前调整的规模比上述还有高出几个数量级,gpu数量提高的同时,会带来更高的网络硬件需求以及成本要求,同时也会导致通信效率的下降(频繁的数据交互);相对与对显存的大量需求,推荐网络对计算的需求往往又比较低,上述规模的数据集,在mlperf最新的结果中,使用64张80ga100可以在2分钟内完成训练。另一个,深度推荐网络中的一个特点是可以对输入的词表的id进行去重处理,这样可以显著的降低embedding通信和计算的需求,但是去重会产生动态的结果,不能很好的和sbp(一种现有的静态并行策略机制)兼容,动态导致的另一个问题是内存放大,由于静态并行数据处理系统(例如,oneflowlazy)使用的是静态的内存分配,必须按照最坏的结果分配内存,比如每个协处理器(例如一个rank或gpu)都要将去重后的id发送到另一个rank去查询embedding,比如去重前id数量是n,那么在目的rank上,要按照n*num_ranks分配内存,这就必然会增加内存的需求。然而,深度推荐网络中的数据分布往往不是均匀分布的,而是powerlaw分布,cpu/gpu混合embedding方案就是根据这个特点设计的,将高频的id部署在gpu上,将低频的id部署在cpu上,通过cpu内存扩大embedding规模,这个方案同样面对和前面类似的灵活与静态之间的兼容问题,还需要用户首先在整个数据集范围内对频率进行统计,提高了使用难度。4.因此,人们需要一种能够在利用静态并行数据处理系统(例如oneflow深度学习系统)的大规模并行数据处理的优势的情况下,解决大规模embedding的问题,实现灵活的分层存储,实现数据加载、数据交换、查表、计算多级流水线,并且支持内置的编码,无需用户输入的id在一定的范围内连续编码。技术实现要素:5.为此,本发明的一个目的是解决至少上述问题,具体而言,本公开提供一种用于静态数据处理系统中对数据执行向量化的系统,包括:用于将待输入的一个批次的词表的编号平均划分成与并行运行的多个协处理器数量相等的多个初始数据词表分片并分配输入给对应的协处理器的词表划分组件,以及对应每个协处理器部署的数据向量化前向组件以及数据向量化后向组件,数据向量化前向组件包括流式部署的多个数据向量化前向执行体,数据向量后向化组件包括流式部署的多个数据向量化后向执行体,其中所述多个数据向量化前向执行体针对输入的连续批次的词表执行不同阶段的流式并行处理,并包括:第一去重前向执行体,用于对所接收到的初始词表分片进行特征序号去重处理,获得为本地协处理器所使用的第一无重复数据词表分片以及预存第一用于复原的数据词表分片;词表梳理前向执行体,按照数据的序号将本地第一无重复数据词表分片基于预定分割规则不属于本地协处理器的数据词表分割出来发送到其所属的协处理器,并接收从其他协处理器的词表梳理前向执行体发送过来的数据词表,从而形成本批次词表中的基于预定分割规则属于本地协处理器的第一待处理词表分片;第二去重前向执行体,用于在接收到词表梳理前向执行体完成交换的消息时,对第一待处理词表进行去重处理,获得为本地协处理器所使用的第二无重复数据的待处理词表分片并预存第二用于复原的待处理词表分片;词表数据预取前向执行体,用于从第二去重前向执行体获得其完成去重的消息时,按照预定的预取数量,根据本地协处理器所使用的第二无重复数据的待处理词表分片预取预定数量的词表数据;词表向量化查询前向执行体,在从词表数据预取前向执行体获得其完成预取的消息以及前一批次词表的表征向量被所述数据向量化后向组件更新完成的消息时,基于预定的向量化规则对预定数量的词表数据执行向量化查询处理,从而获得所预取的预定数量的词表数据的所对应的预取数量的表征向量分片;第二复原前向执行体,在从词表向量化查询前向执行体获得其完成向量化查询处理的消息后,基于所预存的第二用于复原的待处理词表分片以及预取数量的表征向量分片对所预存的第二用于复原的待处理词表分片中的对应的重复的词表执行对应的向量化复原,获得与所预存的第二用于复原的待处理词表分片对应的第二重复表征向量分片,由此第二重复表征向量分片与预取数量的表征向量分片形成第二复原表征向量分片;表征向量逆梳前向执行体,在从第二复原前向执行体获得其完成复原的消息时,将所述第二复原表征向量分片中的词表梳理前向执行体从其他协处理器所获得的数据词表所对应的表征向量返还发送到所述其他协处理器并进行本地删除,以及接收从其他协处理器的表征向量逆梳前向执行体所返还的与本地词表梳理前向执行体所发送出去的数据词表所对应的表征向量,形成与所述本地协处理器所使用的第一无重复数据词表分片对应的第一无重复表征向量分片;以及第一复原前向执行体,在从表征向量逆梳前向执行体获得其完成表征向量交换的消息之后,基于所预存的第一用于复原的数据词表分片以及第一无重复表征向量分片,对所预存的第一用于复原的数据词表分片中的对应的重复的词表执行对应的向量化复原,获得与所预存的第一用于复原的数据词表分片对应的第一重复表征向量分片,由此第一重复表征向量分片与第一无重复表征向量分片形成第一复原表征向量分片。6.根据本公开的用于静态数据处理系统中对数据执行向量化的系统,其中所述数据向量化后向组件包括:向量差分执行体,对经过损失函数执行体处理后的第一复原表征向量分片进行差分处理;第一归并(reduce)后向执行体,对向量差分执行体输出的表征向量差分结果基于预存第一用于复原的数据词表分片的序号执行去重处理,获得第一不重复的表征向量差分结果;表征向量差分梳理后向执行体,基于预存第二用于复原的待处理词表分片的序号,从第一不重复的表征向量差分结果分割出不属于本地协处理器的表征向量差分结果并发送到对应的其他协处理器,以及接收从其他协处理器的表征向量差分梳理后向执行体发送来的属于本地协处理器的表征向量差分,从而形成属于本地协处理器的第二不重复的表征向量差分结果;表征向量值更新后向执行体,基于词表向量化查询前向执行体获得的表征向量的值以及预定的学习频率,更新第二不重复的表征向量差分结果的值;以及表征向量更新后向执行体,用于利用所更新的第二不重复的表征向量差分结果的值以及所预取的预定数量的词表数据的上下文对初始数据词表分片进行更新。7.根据本公开的用于静态数据处理系统中对数据执行向量化的系统,其中所述词表划分组件、第一去重前向执行体和词表梳理前向执行体、词表数据预取前向执行体和词表向量化查询前向执行体、以及数据向量化后向组件被部署在并行的四个任务流中。8.根据本公开的用于静态数据处理系统中对数据执行向量化的系统,其中所述词表梳理前向执行体、表征向量逆梳前向执行体、表征向量差分梳理后向执行体通过nccl通讯方式在不同协处理器之间进行数据交换。9.根据本公开的另一个方面,提供了一种用于静态数据处理系统中对数据执行向量化的方法,包括:通过词表划分组件将待输入的一个批次的词表的编号平均划分成与并行运行的多个协处理器数量相等的多个初始数据词表分片并分配输入给对应的协处理器的,其中对应每个协处理器部署的数据向量化前向组件以及数据向量化后向组件,数据向量化前向组件包括流式部署的多个数据向量化前向执行体,数据向量后向化组件包括流式部署的多个数据向量化后向执行体,其中所述多个数据向量化前向执行体针对输入的连续批次的词表执行不同阶段的流式并行处理,并包括:通过第一去重前向执行体对所接收到的初始词表分片进行特征序号去重处理,获得为本地协处理器所使用的第一无重复数据词表分片以及预存第一用于复原的数据词表分片;通过词表梳理前向执行体按照数据的序号将本地第一无重复数据词表分片基于预定分割规则不属于本地协处理器的数据词表分割出来发送到其所属的协处理器,并接收从其他协处理器的词表梳理前向执行体发送过来的数据词表,从而形成本批次词表中的基于预定分割规则属于本地协处理器的第一待处理词表分片;通过第二去重前向执行体在接收到词表梳理前向执行体完成交换的消息时,对第一待处理词表进行去重处理,获得为本地协处理器所使用的第二无重复数据的待处理词表分片并预存第二用于复原的待处理词表分片;通过词表数据预取前向执行体从第二去重前向执行体获得其完成去重的消息时,按照预定的预取数量,根据本地协处理器所使用的第二无重复数据的待处理词表分片预取预定数量的词表数据;通过词表向量化查询前向执行体在从词表数据预取前向执行体获得其完成预取的消息以及前一批次词表的表征向量被所述数据向量化后向组件更新完成的消息时,基于预定的向量化规则对预定数量的词表数据执行向量化查询处理,从而获得所预取的预定数量的词表数据的所对应的预取数量的表征向量分片;通过第二复原前向执行体在从词表向量化查询前向执行体获得其完成向量化查询处理的消息后,基于所预存的第二用于复原的待处理词表分片以及预取数量的表征向量分片对所预存的第二用于复原的待处理词表分片中的对应的重复的词表执行对应的向量化复原,获得与所预存的第二用于复原的待处理词表分片对应的第二重复表征向量分片,由此第二重复表征向量分片与预取数量的表征向量分片形成第二复原表征向量分片;表征向量逆梳前向执行体,在从第二复原前向执行体获得其完成复原的消息时,将所述第二复原表征向量分片中的词表梳理前向执行体从其他协处理器所获得的数据词表所对应的表征向量返还发送到所述其他协处理器并进行本地删除,以及接收从其他协处理器的表征向量逆梳前向执行体所返还的与本地词表梳理前向执行体所发送出去的数据词表所对应的表征向量,形成与所述本地协处理器所使用的第一无重复数据词表分片对应的第一无重复表征向量分片;以及通过第一复原前向执行体在从表征向量逆梳前向执行体获得其完成表征向量交换的消息之后,基于所预存的第一用于复原的数据词表分片以及第一无重复表征向量分片,对所预存的第一用于复原的数据词表分片中的对应的重复的词表执行对应的向量化复原,获得与所预存的第一用于复原的数据词表分片对应的第一重复表征向量分片,由此第一重复表征向量分片与第一无重复表征向量分片形成第一复原表征向量分片。10.根据本公开的用于静态数据处理系统中对数据执行向量化的方法,其中所述数据向量化后向组件:通过向量差分执行体对经过损失函数执行体处理后的第一复原表征向量分片进行差分处理;通过第一归并后向执行体对向量差分执行体输出的表征向量差分结果基于预存第一用于复原的数据词表分片的序号执行去重处理,获得第一不重复的表征向量差分结果;通过表征向量差分梳理后向执行体基于预存第二用于复原的待处理词表分片的序号,从第一不重复的表征向量差分结果分割出不属于本地协处理器的表征向量差分结果并发送到对应的其他协处理器,以及接收从其他协处理器的表征向量差分梳理后向执行体发送来的属于本地协处理器的表征向量差分,从而形成属于本地协处理器的第二不重复的表征向量差分结果;通过表征向量值更新后向执行体基于词表向量化查询前向执行体获得的表征向量的值以及预定的学习频率,更新第二不重复的表征向量差分结果的值;以及通过表征向量更新后向执行体利用所更新的第二不重复的表征向量差分结果的值以及所预取的预定数量的词表数据的上下文对初始数据词表分片进行更新。11.根据本公开的用于静态数据处理系统中对数据执行向量化的方法,其中所述词表划分组件、第一去重前向执行体和词表梳理前向执行体、词表数据预取前向执行体和词表向量化查询前向执行体、以及数据向量化后向组件被部署在并行的四个任务流中。12.根据本公开的用于静态数据处理系统中对数据执行向量化的方法,其中所述词表梳理前向执行体、表征向量逆梳前向执行体、表征向量差分梳理后向执行体通过nccl通讯方式在不同协处理器之间进行数据交换。13.通过根据本公开的用于静态数据处理系统中对数据执行向量化的系统和方法,能够更好的解决大规模embedding的问题,实现灵活的分层存储,支持将表象向量词表(embeddingtable)放置gpu显存、hostmemory、或者ssd上面。目前显存价格(人民币)按照a100计算大概1750000/tb,hostmemory价格大概64000/tb,ssd价格大概1000/tb,使用高速设备作为低速设备的缓存,实现速度与容量的兼顾。通过在本公开系统中引入一系列定制化的执行体(例如op),在执行体内部实现灵活的数据去重交换等处理,因此,绕开静态并行策略sbp和静态的限制。而且,充分利用oneflow的任务流(stream)与执行体(actor)的消息机制,实现数据加载、数据交换、查表、计算多级流水线。并且在引入预取(prefetch)机制下,将高速缓存(cache)和底层存储之间的数据交换调度到和前后向计算重叠执行。此外,本公开还支持内置的编码,不要求用户输入的词表数据的id在一定的范围内连续编码,也就是提供了动态插入新特征id的功能。14.本发明的其它优点、目标和特征将部分通过下面的说明体现,部分还将通过对本发明的研究和实践而为本领域的技术人员所理解。附图说明15.图1所示的是根据本公开的用于静态数据处理系统中对数据执行向量化的系统一个实例的原理示意图。16.图2所示的是根据本公开的用于静态数据处理系统中对数据执行向量化的系统的词表梳理前向执行体和第二去重前向执行体进行数据交换和去重并形成第二无重复数据的待处理词表分片的过程示意图。17.图3所示的是根据本公开的用于静态数据处理系统中对数据执行向量化的系统的词表数据预取(prefetching)前向执行体124进行数据预取的过程示意图。18.图4所示的是根据本公开的用于静态数据处理系统中对数据执行向量化的系统的词表向量化查询前向执行体125进行数据预取的过程示意图。19.图5所示的是根据本公开的用于静态数据处理系统中对数据执行向量化的系统的第二复原前向执行体126进行复原以及表征向量逆梳前向执行体127进行表征向量逆梳过程的示意图。20.图6所示的是根据本公开的用于静态数据处理系统中对数据执行向量化的系统的第一归并后向执行体132和表征向量差分梳理后向执行体133的梳理过程的示意图。21.图7所示的是根据本公开的用于静态数据处理系统中对数据执行向量化的系统的并行任务流的时序示意图。具体实施方式22.下面结合实施例和附图对本发明做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。23.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。24.在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。25.应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,在下文中,两个可能的执行体之一可以被称为第一执行体也可以被称为第二执行体。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。26.为了使本领域技术人员更好地理解本公开,下面结合附图和具体实施方式对本公开作进一步详细说明。27.图1所示的是根据本公开的用于静态数据处理系统中对数据执行向量化的系统一个实例的原理示意图。如图1所示,一种用于静态数据处理系统中对数据执行向量化的系统100:词表划分组件110、数据向量化前向组件120以及数据向量化后向组件130。数据向量化前向组件120包括:第一去重前向执行体121、词表梳理前向执行体122、第二去重前向执行体123、词表数据预取前向执行体124、词表向量化查询前向执行体125、第二复原前向执行体126、表征向量逆梳前向执行体127、第一复原前向执行体向量差分执行体128。词表划分组件110将待输入的一个批次的词表的编号平均划分成与并行运行的多个协处理器数量相等的多个初始数据词表分片并分配输入给对应的协处理器。对应每个协处理器部署的数据向量化前向组件120-0、120-1…120-n等以及数据向量化后向组件130-0、130-1…、130-n。数据向量化前向组件120包括流式部署的多个数据向量化前向执行体,数据向量后向化组件130包括流式部署的多个数据向量化后向执行体。所述多个数据向量化前向执行体针对输入的连续批次的词表执行不同阶段的流式并行处理,28.对于parallel_num=n并行的embedding操作,巨大的词表按一定的划分(partition)规则放置在不同协处理器(rank或gpu)上,每个批次(batch)的输入词表数据的编号或序号(id)是s0排布(sbp并行决策方案中的第0维分割并行分布)。因此,不同的id按照预定的划分规则是属于不同的rank的。但是由于词表中的数据在划分之后被编码(encoding)后,处于一个rank中的特征会出现重复以及特征的id按照划分规则会不属于其当前所在的rank。在对词表进行表征向量化过程中,ids为输入的id,数据类型支持int32/int64/int128/uint32/uint64/uint128,ids可能是ordinal或者nominal的。ordinal代表是序数,如总词表是10w,id是0-10w范围内。nominal代表非序数,如有10w个id,但是不是0-10w编码,需要根据输入id先做encoding。对于ordinal可以像gather那样直接索引。选项(options)是embedding的配置,包括name、partitioning、初始化方法、更新策略等。partitioning是词表id到多卡划分的方法,通常是取模或hash,如有8张卡,id=0和id=8被分到0号卡,id=1和id=9被分到1号卡等等。29.在每一轮表征向量化训练过程中,第一去重前向执行体121(id去重),对所接收到的初始词表分片(例如图1中的词表分片0)进行特征序号去重处理,获得为本地协处理器所使用的第一无重复数据词表分片121-1(uniqueid子集)以及预存第一用于复原的数据词表分片121-2(用于复原去重的reverseid子集)。这里的id都是特征的id。第一无重复数据词表分片121-1就是去重后的batch的输入id。30.随后,词表梳理前向执行体122(idshuffle)按照数据的序号将本地第一无重复数据词表分片121中基于预定分割规则不属于本地协处理器的数据词表分割出来发送到其所属的协处理器,并接收从其他协处理器的词表梳理前向执行体发送过来的数据词表,从而形成本批次词表中的基于预定分割规则属于本地协处理器的第一待处理词表分片。通俗而言,对于去重后的batch的输入id,进行数据partition和分发,将属于不同rank的id分发到各个rank上,并收到各个rank发来的属于本rank的id,收集到的id的一个子集就是属于本地协处理器的第一待处理词表分片。但是从各个rank按照分割规则收集来的属于本地协处理器的第一待处理词表分片依然存在重复的id,因此为了降低计算量以及节省内存空间,依然需要进行去重处理。本公开所述的梳理(shuffle)过程就是将分散在各个rank中的id基于分割规则,通过nccl数据交换,梳理到其本应所属的rank。下面对表征向量的梳理也是同样的过程。31.为此,第二去重前向执行体123(idshuffle)在接收到词表梳理前向执行体122完成交换的消息时,对第一待处理词表分片进行去重处理,获得为本地协处理器所使用的第二无重复数据的待处理词表分片123-1(cur_rankuniqueid)并预存第二用于复原的待处理词表分片123-2(cur_rankreverseid),用于复原去重。此时,在每个rank中用于执行前向表征向量化(embedding)的数量比实际数量要减少很多,这对后续数据处理过程中的数据交换量以及存储空间而言都是巨大的节省。尽管这里将第二去重过程视为id梳理的一部分,但是其实际上也可以成为一个单独的操作执行体。32.图2所示的是根据本公开的用于静态数据处理系统中对数据执行向量化的系统的词表梳理前向执行体122和第二去重前向执行体123进行数据交换并形成第二无重复数据的待处理词表分片的过程示意图。如图2所示,对于输入的uniqueid,每个rank首先对uniqueid做partition操作,将对应的embedding属于不同rank的id分到不同的词表分片(partition)中,最终得到parallel_num份数的词表分片(partition),partiton0指id对应的embedding在rank0上的词表中。然后对每个partition的id数量(num)做一次allgather操作,得到num_unique_idmatrix。如图2所示,矩阵num_unique_idmatrix的行是每个rank得到的各个partition的num_unique_id,矩阵的列是每个partition在每个rank上的num_unique_id。num_unique_idmatrix可以用来获取数据分发时的数据大小,如每个rank需要将matrix[rank][0]个id发送给rank0,将matrix[rank][0]个id发送给rank1,同时从rank0接收matrix[0][rank]个id,从rank1接收matrix[1][rank]个id。接下来词表梳理前向执行体122进行数据分发,在经过nccl通信方式进行发送/接收(send/recv)后,每个rank上得到了所有属于本地rank的cur_rankid,即rank0上得到了所有的partition0的id,rank1上得到了所有的partition1的数据。接着第二去重前向执行体123最后做一次去重,得到cur_rankuniqueid及用于复原去重的cur_rankreverse_id。[0033]接着,词表数据预取(prefetching)前向执行体124从第二去重前向执行体123获得其完成去重的消息时,按照预定的预取数量,从本地协处理器所使用的第二无重复数据的待处理词表分片123-1中预取预定数量的词表数据。[0034]图3所示的是根据本公开的用于静态数据处理系统中对数据执行向量化的系统的词表数据预取(prefetching)前向执行体124进行数据预取的过程示意图。通俗而言,词表数据预取前向执行体124主要作用是在流式处理过程中,控制数据获取的成功率,也就是负责提前查询下一个预定数量的待处理批次数据,如果预取成功,则向查询执行体125发送成功消息,以便查询执行体125避免反复查询,提高缓高速缓存(cache)命中率,减少表征向量化查询(embeddinglookup)的时间以及等待时间,使得数据处理更为顺畅。如图3所示,首先,调用cache的test函数,检查关键词(keys)对应的embeddings是否在cache中,test函数返回缓存丢失关键词(cachemissingkeys)和缓存丢失索引(cachemissingindices)。接着,调用(关键词值存储库)kvstore的get函数,传入cachemissingkeys,返回kvstorevalues和kvstoremissingkeys和kvstoremissingindices,其中kvstoremissingkeys指kvstore中未查到的keys,kvstoremissingindices指未查到的部分在kvstorevalues中的indices。随后将kvstore中未查到的部分初始化值并填充。接着,将values推写(put)到cache中,返回被驱逐关键词(evictedkeys)和被驱逐值(evictedvalues)。最后,将evictedkeys和evictedvalues推写(put)到kvstore中。[0035]词表向量化查询前向执行体125在从词表数据预取前向执行体获得其完成预取的消息以及前一批次词表的表征向量被所述数据向量化后向组件更新完成的消息时,基于预定的向量化规则对预定数量的词表数据执行向量化查询处理,从而获得所预取的预定数量的词表数据的所对应的预取数量的表征向量分片125-1,即查询得到cur_rankuniqueid对应的cur_rankuniqueembeddings。由于词表向量化查询前向执行体125在从词表数据预取前向执行体获得其完成预取的消息之后才进行查询操作,因此不会出现查询失败的情况或者查询失败的概率比较低。图4所示的是根据本公开的用于静态数据处理系统中对数据执行向量化的系统的词表向量化查询前向执行体125进行数据预取的过程示意图。具体而言,词表向量化查询前向执行体125负责前向计算过程中根据关键词(keys)查到对应值(values)。如图4所示,首先词表向量化查询前向执行体125调用cache的get函数,查找keys对应的表征向量(embeddings),get函数返回values及cachemissingkeys和cachemissingindices,cachemissingkeys指在cache中未找到的keys,cachemissingindices指未找到的keys在values中的indices。随后,词表向量化查询前向执行体125调用kvstore的get函数,查找cachemissingkeys对应的embeddings,get函数返回kvstorevalues及kvstoremissingkeys和kvstoremissingindices。由于词表数据预取前向执行体124已经进行了预取,因此,表向量化查询前向执行体125查询时对应的keys一定能在kvstore中查到,所以kvstoremissingkeys应该是空。[0036]由于词表向量化查询前向执行体125执行的查询操作并不是针对本批次属于本地协处理器应该处理的全部id,因此需要针对预存的重复部分进行恢复。由于是重复的id,因此只需要在已有查询结果的基础上进行重复复原即可。因此,第二复原前向执行体126在从词表向量化查询前向执行体125获得其完成向量化查询处理的消息后,基于所预存的第二用于复原的待处理词表分片123-2以及预取数量的表征向量分片125-1对所预存的第二用于复原的待处理词表分片123-2中的对应的重复的词表执行对应的向量化复原,获得与所预存的第二用于复原的待处理词表分片123-2对应的第二重复表征向量分片,由此第二重复表征向量分片与预取数量的表征向量分片125-1形成第二复原表征向量分片,即第二复原前向执行体126的输出结果。[0037]此时,第二复原表征向量分片并不是针对初始词表分片的对应的表征向量,其中有些是从其他协处理器交换过来的数据的表征向量,因此,需要将这些不属于本地协处理器的数据的表征向量返还到其本所属的协处理器,即进行一次表征向量的逆向梳理。为此,表征向量逆梳前向执行体127在从第二复原前向执行体126获得其完成复原的消息时,将所述第二复原表征向量分片中的词表梳理前向执行体122从其他协处理器所获得的数据词表所对应的表征向量返还发送到所述其他协处理器并进行本地删除,以及接收从其他协处理器的表征向量逆梳前向执行体127所返还的与本地词表梳理前向执行体122所发送出去的数据词表所对应的表征向量,形成与所述本地协处理器所使用的第一无重复数据词表分片121-1(uniqueid)对应的第一无重复表征向量分片127-1(uniqueembeddings)。[0038]图5所示的是根据本公开的用于静态数据处理系统中对数据执行向量化的系统的diff,收集好后,对cur_rankembeddingdiff执行一次reduce操作,将重复id对应的embeddingdiff累加起来,得到cur_rankuniqueembeddingdiff。[0042]图6所示的是根据本公开的用于静态数据处理系统中对数据执行向量化的系统的第一归并后向执行体132和表征向量差分梳理后向执行体133的梳理过程的示意图。如图所示,表征向量差分梳理后向执行体133(embeddinggradientshuffle)将网络中得到的当前batch的embeddingdiff分发给id对应的embedding的词表所在rank,最终得到当前rank上词表对应的embedding_diff。表征向量差分梳理后向执行体133(embeddinggradientshuffle)的流程和词表梳理前向执行体122和第二去重前向执行体123(idshuffle)的流程很相似,词表梳理前向执行体122分发的是当前batch的id,而表征向量差分梳理后向执行体133分发的是当前batch的embeddingdiff。在此不进行赘述。[0043]返回参见图1,表征向量值更新后向执行体134基于词表向量化查询前向执行体125获得的表征向量的值125-2以及预定的学习频率(未示出,通常由用户根据需要确定),更新第二不重复的表征向量差分结果133-1(cur_rankuniqueembeddingdiff)的值。接着表征向量更新后向执行体135利用所更新的第二不重复的表征向量差分结果的值以及所预取的预定数量的词表数据的上下文对初始数据词表分片进行更新。[0044]进一步,为了实现静态流式数据处理,可以将所述词表划分组件110、第一去重前向执行体121和词表梳理前向执行体122、词表数据预取前向执行体124和词表向量化查询前向执行体125、以及数据向量化后向组件130被部署在并行的四个任务流中。图7所示的是根据本公开的用于静态数据处理系统中对数据执行向量化的系统的并行任务流的时序示意图。如图7所示,所述词表划分组件110对词表进行划分后迭代加载,每次迭代加载一部分数据,布置在任务流stream1中的拷贝执行体都将数据从主机host拷贝到协处理器设备中,随后第一去重前向执行体和词表梳理前向执行体122在任务流stream2中在各个rank之间进行梳理。而词表数据预取前向执行体124和词表向量化查询前向执行体125在部署在任务流stream3中先后执行预取和查询操作,最后后向处理组件130部署在任务流stream4中对所产生的向量进行后向处理各个任务流中的执行体之间通过消息控制时序,从而在同一任务流中进行流式处理。在每个batch执行过程中,词表向量化查询前向执行体125的查询操作非常耗时,若id不能被gpucache命中,需要从内存或磁盘中加载,这会导致很低的吞吐。而词表向量化查询前向执行体125的查询操作需要依赖上一个batch的embeddingupdate执行结束才能执行,不能提前执行,没有机会被前后向计算掩盖。因此,本技术在网络中设置词表数据预取前向执行体124,执行预取操作,对于输入的id,将对应的embedding尽量放进cache中,提高后续查询(lookup)操作的cache命中率,减少延迟(latency)。通过前后执行体之间的消息控制模式时序控制,将词表数据预取前向执行体124的表征向量化预取(embeddingprefetching)操作提前一个迭代次序(iter)执行,与前后向计算重叠,从而耗时的查询操作被前后向计算掩盖。[0045]此外,根据本公开的用于静态数据处理系统中对数据执行向量化的系统,其中所述词表梳理前向执行体122、表征向量逆梳前向执行体127、表征向量差分梳理后向执行体133通过nccl通讯方式在不同协处理器之间进行数据交换。[0046]可选择地,根据本公开的另一个方面,返回参见图1,为了减少上述进行并行方案进行遍历的数量以及进行并行决策时策略数以及减少数据传输,可以对初始逻辑节点拓扑图进行预处理,例如通过遍历,在一个具体初始逻辑节点具有两个或两个以上的下游初始逻辑节点时,在所述具体初始逻辑节点和其所有[0047]通过根据本公开的用于分布式数据处理的并行策略决策系统,能够从全局角度使得分布式数据处理的并行决策所面对的解空间尽可能缩小,提高了进行自动并行决策的可行性,降低了自动并行决策难度,并且能够使得并行决策所获得的并行结果具有较低的计算代价和传输代价,从而尽可能提高了固定计算资源面对相同计算任务的计算效率,从而加快了数据处理速度。更为重要地是实现了在尽可能接近最低传输代价的基础上,实现并行决策的自动化,极大地降低了人工调试的成本。[0048]以上结合具体实施例描述了本公开的基本原理,但是,需要指出的是,对本领域的普通技术人员而言,能够理解本公开的方法和装置的全部或者任何步骤或者部件,可以在任何计算装置(包括处理器、存储介质等)或者计算装置的网络中,以硬件、固件、软件或者它们的组合加以实现,这是本领域普通技术人员在阅读了本公开的说明的情况下运用他们的基本编程技能就能实现的。[0049]因此,本公开的目的还可以通过在任何计算装置上运行一个程序或者一组程序来实现。所述计算装置可以是公知的通用装置。因此,本公开的目的也可以仅仅通过提供包含实现所述方法或者装置的程序代码的程序产品来实现。也就是说,这样的程序产品也构成本公开,并且存储有这样的程序产品的存储介质也构成本公开。显然,所述存储介质可以是任何公知的存储介质或者将来所开发出来的任何存储介质。[0050]还需要指出的是,在本公开的装置和方法中,显然,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。并且,执行上述系列处理的步骤可以自然地按照说明的顺序按时间顺序执行,但是并不需要一定按照时间顺序执行。某些步骤可以并行或彼此独立地执行。[0051]上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献