掌桥专利:专业的专利平台
掌桥专利
首页

用于机器学习工作负荷的异步分布式数据流

文献发布时间:2024-04-18 19:58:21


用于机器学习工作负荷的异步分布式数据流

相关申请的交叉引用

本申请要求于2021年5月7日提交的美国临时申请No.63/186,031的优先权。先前申请的公开内容被认为是本申请的公开内容的一部分并且通过引用并入本申请的公开内容中。

背景技术

本说明书涉及一种跨多个硬件加速器分布机器学习工作负荷(例如,用于训练神经网络或使用神经网络计算推断的计算)的技术。

神经网络是采用一层或多层非线性单元来预测接收到的输入的输出的机器学习模型。一些神经网络除了输出层之外还包括一个或多个隐藏层。每个隐藏层的输出被用作网络中的下一层(即,下一隐藏层或输出层)的输入。网络的每个层根据相应权重集的当前值从接收到的输入生成输出。在本说明书中,给定神经网络层的输入被称为用于该层的“输入激活”,并且在本说明书中,给定神经网络层的输出被称为用于该层的输出激活。

发明内容

本说明书描述了一种在一个或多个位置中的一个或多个计算机上实现为计算机程序的系统,该计算机程序跨多个硬件加速器及其对应主机分布机器学习工作负荷。

硬件加速器(或简称为“加速器”)是具有被配置为执行专用计算(包括(例如)机器学习计算)的专用硬件的计算设备。加速器的示例包括图形处理单元(“GPU”)、现场可编程门阵列(“FPGA”)和专用集成电路(“ASIC”),包括张量处理单元(“TPU”)。在一些实现方式中,每个加速器具有不同主机,而在其它实现方式中,两个或更多个加速器可以共享主机。

特别地,该系统维持将硬件加速器及其对应主机分割为多个加速器岛的数据。每个加速器岛包括多个加速器及其对应主机。在一些实现方式中,所有加速器是相同类型的加速器,而在其它情况下,不同的岛可以包括不同类型的加速器,或者单个岛可以包括多种不同类型的加速器。在一些实现方式中,分割是静态的,而在其它实现方式中,系统基于当前系统工作负荷动态地调整分割。

每个加速器岛运行相应调度器,该调度器调度跨该岛中的加速器和主机指派给该岛的计算。当指派给给定岛的计算是规则的时,用于岛的调度器可以使用并行异步派遣来调度计算。

在一些实现方式中,用于每个岛的相应调度器是直接调度给定设备上的每个操作的单个调度器。在其它实现方式中,相应调度器是实现分层调度方案的调度器的集合。

通常,本说明书中描述的主题的一个创新方面可以体现在一种系统中,该系统包括:多个加速器岛,每个加速器岛包括相应多个硬件设备,多个硬件设备包括多个硬件加速器和用于多个硬件加速器中的每一个的对应主机;以及用于加速器岛中的每一个的相应调度器,其被配置为跨加速器岛中的多个加速器和对应主机调度工作负荷,其中,该系统被配置为:接收表示机器学习工作负荷的数据;以及将机器学习工作负荷的相应部分指派给多个加速器岛中的每一个以用于由用于该加速器岛的相应调度器调度。

该方面的其它实施例包括包括由系统执行的操作的相应方法和记录在一个或多个计算机存储设备上的计算机程序,每个计算机存储设备被配置为执行该方法的动作。一个或多个计算机的系统可以被配置为借助于安装在系统上的软件、固件、硬件或其任意组合来执行特定操作或动作,所述软件,固件,硬件或其任意组合在操作中可以使系统执行动作。一个或多个计算机程序可以被配置为通过包括指令来执行特定操作或动作,所述指令在由数据处理装置执行时使得该装置执行动作。

实现方式可以单独或组合地包括以下可选特征中的一个或多个。

表示机器学习工作负荷的数据可以是表示包括多个碎片的分片数据流程序的数据。

将机器学习工作负荷的相应部分指派给多个加速器岛中的每一个可以包括将分片数据流程序的一个或多个碎片指派给多个加速器岛中的每一个。

每个调度器可以被配置为,当指派给所述加速器岛的机器学习工作负荷的相应部分是规则的计算时,使用并行异步派遣来调度所述计算的部分。

使用并行异步派遣来调度计算的部分可以包括:生成向加速器岛中的硬件加速器集合中的每一个硬件加速器指派一个或多个操作的相应集合的调度,该调一个或多个操作的相应集合作为由加速器岛中的硬件加速器中的另一个硬件加速器所执行的一个或多个相应其它操作的输入和输出;针对所述硬件加速器集合中的每一个硬件加速器确定所述一个或多个相应其它操作的输出的相应大小;以及并行地向用于所述硬件加速器集合中的每一个硬件加速器的对应主机传输指定所述一个或多个相应其它操作的输出的相应大小的相应未来数据。

所述相应未来数据可以使得所述对应主机(i)在所述硬件加速器上分配用于存储所述一个或多个相应其它操作的输出的存储器,以及(ii)将数据传输到指派给识别所分配的存储器的一个或多个相应其它操作的加速器的对应主机。

指派给一个或多个相应其它操作的加速器的对应主机可以被配置为使得指派给所述一个或多个相应其它操作的加速器将所述相应其它操作的输出传输到所分配的存储器。

输出可以通过加速器互连网络传输。

当指派给所述加速器岛的机器学习工作负荷的相应部分是规则的计算时,指派所述机器学习工作负荷的相应部分可以包括通过向用于所述加速器岛的相应调度器发送单个消息来指派所述相应部分。

可以实现本说明书中描述的主题的特定实施例,以便实现以下优点中的一个或多个。

使用本说明书中所描述的技术来协调跨用于支持机器学习工作负荷(例如训练或执行机器学习模型)的多个硬件加速器的分布式计算可以提高硬件利用率、模型吞吐量或两者。在一些示例中,与用于跨多个阶段流水线或者跨通过数据中心网络连接的两个或更多个加速器岛分片的机器学习模型的SPMD情况相比,当在大量(可能几千个)硬件加速器上运行“单程序多数据”(SPMD)计算时使用所描述的技术可以实现与现有技术的系统相当的性能(即,接近100%的硬件利用率),同时还递送模型吞吐量,例如,在给定时间段上可以由模型生成的输出的总数(或大小)方面。这使得能够高效地利用更多种架构来训练、执行或者训练且执行不同的机器学习模型(包括已经使用数据并行性、流水线或异构计算来放大并且当前硬件系统不很好地支持的大规模模型)。

用于协调跨多个硬件加速器的分布式计算的所描述的技术实现了先前不可能的各种技术使用情况。例如,代替从头开始为每个单个新机器学习任务训练一个机器学习模型,所描述的技术使得能够在成千或上百万的任务上训练单个大规模的模型,允许模型汲取并且组合其现有能力以更快和更有效地学习新任务。

作为另一个示例,通过将总体计算的子部分动态地映射到更容易获得的更小加速器岛的集合,所描述的技术具有支持多模态机器学习模型的执行的灵活性,该多模态机器学习模型可以一次处理多于一种模态的信息,例如被配置为接收视觉、听觉、语言数据以及可能更抽象形式的其他数据的模型,以通过利用接收到的数据的固有的共同特性以较少偏见和较少错误倾向的方式同时计算推断。

作为又一个示例,通过使用稀疏交叉主机通信来促进加速器上的有效的数据相关控制流,所描述的技术可以以能量有效的方式促进稀疏机器学习模型的执行。例如,稀疏模型可以是“稀疏”激活的神经网络,其中当执行不同任务时,仅通过网络的相关部分的小路由按需要被调用起作用。与类似大小的密集模型相比,稀疏模型的执行可以允许低得多的能量消耗,有时小于能量的1/10,同时在机器学习任务的范围上实现或甚至超过现有技术的性能。

在附图和以下描述中阐述了本说明书中描述的主题的一个或多个实施例的细节。根据说明书、附图和权利要求书,主题的其他特征、方面和优点将变得显而易见。

附图说明

图1示出了用于执行机器学习工作负荷的示例系统。

图2示出了多控制器系统和单控制器系统之间的派遣开销和通信模式的比较。

图3是用于执行机器学习工作负荷的示例过程的流程图。

图4A是分片数据流程序的示例说明。

图4B是将机器学习工作负荷指派给多个加速器岛的示例说明。

图4C是通过调度器对所指派的计算进行调度的示例说明。

图5是用于使用并行异步派遣来调度计算的一部分的示例过程的流程图。

图6示出了用于示例分片数据流程序的顺序和并行派遣之间的比较。

各个附图中相同的附图标记和名称指示相同的元件。

具体实施方式

本说明书描述了一种在一个或多个位置中的一个或多个计算机上实现为计算机程序的系统,该计算机程序跨多个硬件加速器及其对应主机分布机器学习工作负荷。

图1示出了用于执行机器学习工作负荷104的示例系统100。机器学习工作负荷104可以由客户端102指定。系统100可以从客户端102接收指定机器学习工作负荷104的数据,并且作为机器学习工作负荷104的执行的结果生成输出数据154。在一些实现方式中,指定机器学习工作负荷104的数据可以包括通过使用适当的Python编程框架(例如TensorFlow和JAX)以Python编程语言编写的源程序,而在其它实现方式中,数据可以可替换地包括以另一种高级编程语言(例如C++语言)编写的源程序。在一些实现方式中,机器学习工作负荷可以包括用于训练神经网络或使用神经网络来计算推断的计算。在这些实现方式中的一些中,神经网络可以是大规模神经网络。大规模神经网络是具有许多网络参数(例如,10亿个参数、100亿个参数、1000亿个参数或5000亿个或更多个参数)的神经网络。

神经网络通常可以即通过训练被配置为在网络输入上执行机器学习任务,以生成用于机器学习任务的网络输出。

神经网络可以被配置为执行以下的机器学习任务的一些示例。

作为一个示例,任务可以是神经机器翻译任务。例如,如果神经网络的输入是一种语言的文本序列,例如,单词、短语、字符或字段的序列,则由神经网络生成的输出可以是文本序列到另一种语言的翻译,即,作为文本输入序列的翻译的另一种语言的文本序列。作为特定示例,任务可以是多语言机器翻译任务,其中单个神经网络被配置为在多个不同的源语言-目标语言对之间进行翻译。在这个示例中,源语言文本可以被增加有指示神经网络应该将源语言文本翻译成的目标语言的标识符。

作为另一个示例,任务可以是音频处理任务。例如,如果神经网络的输入是表示口头话语的序列,则由神经网络生成的输出可以是用于一组文本段中的每一个的分值,该分值表示该文本段是用于话语的正确转录的估计可能性。作为另一个示例,如果神经网络的输入是表示口头话语的序列,则由神经网络生成的输出可以指示特定单词或短语(“热词”)是否在话语中说出。作为另一个示例,如果神经网络的输入是表示口头话语的序列,则由神经网络生成的输出可以识别话语被说出的自然语言。

作为另一个示例,任务可以是自然语言处理或理解任务,例如,对某种自然语言的文本序列进行操作的修饰任务、释义任务、文本相似性任务、观点任务、句子完成任务、语法性任务等。

作为另一个示例,任务可以是文本到语音任务,其中输入是自然语言的文本或自然语言的文本的特征,并且网络输出是频谱图、波形或定义用自然语言说出的文本的音频的其它数据。

作为另一个示例,任务可以是健康预测任务,其中输入是从用于患者的电子健康记录数据推导的序列,并且输出是与患者的未来健康相关的预测,例如,应该向患者开处方的预测治疗,患者将发生不良健康事件的可能性,或患者的预测诊断。

作为另一个示例,任务可以是文本生成任务,其中输入是文本序列,并且输出是另一个文本序列,例如文本输入序列的完成,对输入序列中提出的问题的响应,或者关于由第一文本序列指定的主题的文本序列。作为另一个示例,文本生成任务的输入可以是除文本之外的输入,例如图像,并且输出序列可以是描述该输入的文本。

作为另一个示例,任务可以是图像生成任务,其中输入是调节输入,而输出是图像像素的强度值输入序列。

作为另一个示例,任务可以是代理控制任务,其中输入是表征环境状态的观察序列或其它数据,并且输出定义了由代理响应序列中最近数据而执行的动作。代理可以是,例如,真实的或模拟的机器人、用于工业设施的控制系统或控制不同类型的代理的控制系统。

作为另一个示例,任务可以是基因组任务,其中输入是标识DNA序列或其它分子序列的片段的序列,并且输出是用于下游任务的片段的嵌入,例如,通过对DNA序列片段的数据集使用无监督学习技术,或下游任务的输出。下游任务的示例包括启动子位点预测、甲基化分析、预测非编码变体的功能效应等。

在一些情况下,机器学习任务是多个单独的机器学习任务的组合,即,系统被配置为执行多个不同的单独机器学习任务,例如,上面提到的两个或更多个机器学习任务。例如,系统可以被配置为执行多个单独自然语言理解任务,其中网络输入包括要在网络输入上执行的单独自然语言理解任务的标识符。

在系统100执行用于训练神经网络的机器学习工作负荷104的实现方式中,系统100可以接收定义神经网络的架构的架构数据。该架构定义了神经网络中的层的数量、由每个层执行的操作以及神经网络中的各层之间的连通性,即哪些层从神经网络中的哪些其它层接收输入。

系统100还可以接收用于训练神经网络执行上述机器学习任务中的一个或多个的训练数据。通常,训练数据包括一组神经网络输入,以及针对每个网络输入,应该由神经网络执行特定任务所生成的相应目标输出。在一些实现方式中,可以由系统随机地分割较大的训练数据集以生成训练数据和用于评估神经网络在任务上的性能的验证集。

系统100可以以多种方式中的任一种接收架构数据和训练数据。例如,系统100可以通过数据通信网络从客户端102接收架构数据作为上载,例如,使用系统100可用的应用编程接口(API)。作为另一个示例,系统100可以接收来自客户端102的输入,该输入指定已经由系统100或者由系统可访问的另一个云存储系统维护的哪些数据应该用于训练神经网络。

一旦系统100通过机器学习工作负荷104的执行而训练神经网络,系统就可以提供指定经训练的神经网络的数据,以用于处理新网络输入。也就是说,系统可以将网络参数的训练值输出到客户端102,以便稍后在使用经训练的神经网络处理输入时使用,例如,通过输出到用户设备或者通过存储在系统可访问的存储器中。

替代地或除了输出经训练的神经网络数据之外,系统100可以实例化具有网络参数的训练值的神经网络的实例,并且接收要处理的输入,并且使用经训练的神经网络来处理接收到的输入以生成输出,然后提供关于接收到的输入的所生成的输出。系统可以通过由系统提供的应用编程接口(“API”)接收网络输入。经训练的神经网络可以用于处理上述各种机器学习任务中的任一个。

系统100通常托管在数据中心内,该数据中心可以是在一个或多个位置具有数百或数千个硬件加速器(例如,硬件加速器A 110A-硬件加速器M 110M)的分布式的基于云的计算系统。硬件加速器(或简称为“加速器”)是具有被配置为执行专用计算(包括(例如)机器学习计算)的专用硬件的计算设备。加速器的示例包括图形处理单元(“GPU”)、现场可编程门阵列(“FPGA”)和专用集成电路(“ASIC”),包括张量处理单元(“TPU”)。

因为硬件加速器只能有效地执行其硬件被优化的操作的子集,例如矩阵乘法,所以硬件加速器被连接到主机机器,例如主机A 120A和主机B120B,它们可以是基于CPU的主机机器,以执行不能在硬件加速器上有效地执行的操作。主机机器(或简称为“主机”)负责包括从云存储加载数据,预处理数据,向硬件加速器发送数据等的操作。在一些实现方式中,每个加速器具有不同主机,而在其它实现方式中,两个或更多个加速器可以共享主机。

每个主机管理对象储存器,该对象储存器可以存储在(多个)相应硬件加速器上执行的计算的输入和输出。对象储存器还可以跟踪硬件加速器的存储器中保存的缓冲器。例如,客户端可以使用不透明句柄来引用远程主机或加速器存储器中的对象,如果需要的话,其允许系统迁移对象。对象储存器还可以存储中间程序值,例如,当系统等待在加速器之间传输中间程序值或者将中间程序值传递到后续计算时。

每个主机实例化执行器,该执行器可以跨硬件加速器派遣即调度机器学习工作负荷104的相应部分的执行。在可能时,例如通过使用多个CPU核心或GPU流来并行地调度执行。例如,执行器可以是基于CPU的TensorFlow执行器,其促进将输入处理序列化为表示机器学习工作负荷的数据流图形。

虽然图1图示了一个客户端102,但是系统100可以代表多个客户端执行计算。换句话说,系统100可以从两个或更多个客户端接收指定不同机器学习工作负荷的相应数据,以至少某种程度的并发执行不同的工作负荷,并且作为执行不同的机器学习工作负荷的结果生成相应输出数据。每个客户端可以在物理上与系统100相邻,例如位于与系统100(的一些部分)相同的数据中心内,或者可以可替换地是远离系统100的云客户端。在后一种情况中,系统100可以至少部分地由云客户端控制。每个客户端例如可以在台式计算机、膝上型计算机、平板计算机、可佩戴计算机、蜂窝电话、智能电话、音乐播放器、电子书阅读器、导航系统或任何其它适当的计算设备上运行。每个客户端可以通过数据通信网络与系统100通信。

为了提交要由系统100执行的机器学习工作负荷104,客户端102可以首先调用系统的客户端库,该客户端库首先将虚拟资源指派给工作负荷104中定义的先前未执行的任何计算,并且向系统的资源管理器142注册计算,从而触发系统在后台编译计算。然后,客户端102可以为工作负荷构造中间表示(IR),该中间表示可以是表示为定制多级中间表示(MLIR)方言的硬件加速器位置无关IR。IR经由一系列标准编译器通过逐渐“降低”,其最终输出包括物理硬件加速器位置的低级表示。这种低级表示考虑了物理硬件加速器之间的网络连通性,并且包括将输出从源计算碎片(shard)传输到(多个)其目的地计算碎片的位置的操作,包括当需要数据交换时的分散和聚集操作。然后,该低级表示被转换成分片数据流程序,其可以被表示为数据流图形。

下面的表1是Python代码的示例,该代码可以由客户端102提交给系统100,以跨硬件加速器的多个岛运行用于机器学习工作负荷的组成计算碎片。

表1

在该示例Python代码中,客户端请求虚拟资源,即一组或多组“虚拟TPU设备”,并且然后在那些资源上放置特定编译功能。当请求虚拟资源时,客户端可以可选地指定对资源类型、位置或互连拓扑的约束。系统将自动处理所有数据移动和相关计算之间的重新分片。

通过使用JAX库,客户端可以利用装饰符显式地包装标准Python代码,以指示应该被编译成可能遵循SPMD模型的加速线性代数(XLA)计算的片段。这些XLA计算通常由已知的输入和输出类型和形状、有界循环以及条件(如果有的话)来表征,使得预先估计计算的资源需求是可行的。这些具有已知资源要求的计算在这里被称为“编译函数”。

例如,编译函数可以包括加法或乘法计算、由某些类型的神经网络层执行的操作等。作为另一个示例,在机器学习训练工作负荷内可能每一个都是单个编译函数的常见类型的计算可以包括,例如,计算梯度的训练步骤的前向和/或后向通过,累积跨多个分布式训练步骤计算的梯度的函数等。

在默认情况下,系统100将每个编译函数转换为仅包括一个计算碎片的独立程序,这意味着如果客户端想要背靠背地运行多个函数,则每个函数需要从客户端到协调器的单独的Python调用和远程过程调用。因此,系统还实现程序跟踪器,客户端可以环绕调用多个编译函数的Python代码块。程序跟踪器可以生成单个程序,其中每个编译函数由表示分片数据流程序的数据流图形中的计算节点表示。

与由于它们协调成千上万个单独计算和与跨大量硬件加速器分布的计算的每个碎片相对应的数据缓冲器而可能迅速成为性能瓶颈的现有客户端不同,系统100的客户端102使用分片缓冲器抽象来表示可以分布在多个硬件加速器上的逻辑缓冲器。这种抽象通过在逻辑缓冲器的粒度上而不是单独计算碎片上摊销簿记任务(包括引用计数)的成本来帮助客户规模。

通常,用于执行机器学习工作负荷的现有分布式计算系统采用单控制器架构(例如,TensorFlow v1系统,其在Abadi,M.等人的TensorFlow:Asystem for large-scalemachine learning(TensorFlow:用于大规模机器学习的系统)(在USENIX协会的2016年11月乔治亚州萨凡纳的第12届USENIX操作系统设计和实现研讨会(OSDI)中)中更详细地描述)或多控制器架构(例如,PyTorch系统,其在Paszke,A.等人的PyTorch:An imperativestyle,high-performance deep learning library(PyTorch:命令式风格,高性能深度学习库)(在科尔兰联合公司的2019年的神经信息处理系统的进展的第32卷中)中更详细地描述),或者JAX系统,其在Bradbury,J.等人的JAX:Composable transformations of Python+NumPy programs(JAX:Python+NumPy程序的可合成转换)(http://github.com/google/jax,2018)中更详细描述。

图2图示了多控制器系统和单控制器系统之间的派遣开销和通信模式的比较。具体地,图2包括示出可以由主机(“Host”)、控制器(“Ctrlr”)或硬件加速器(“Dev”)采取的动作的泳动图。如图2(a)所示,JAX或PyTorch SPMD通过快速外围部件互连快速(PCIe)网络异步地入队加速器计算;如图2(b)所示,TensorFlow v1 SPMD通过较慢数据中心网络(DCN)要求控制消息;如图2(c)所示,TensorFlow v1非SPMD程序通过显式发送(S)和接收(R)操作(op)要求交叉主机协调或数据传输。

如本文所用,术语“SPMD”是指“单程序多数据”(SPMD)模型,其在Clarke,L.等人的The MPI message passing interface standard(MPI消息传递接口标准)(在1994年的用于大规模并行分布式系统的编程环境)中更详细地描述,其中所有加速器步调一致地执行相同程序(例如,相同计算)。另一方面,“MPMD”是指“多程序多数据”(MPMD)模型,其中多个加速器同时执行至少两个独立程序(例如,两个不同计算)。

一些单控制器系统提供了非常通用的分布式数据流模型,包括优化的图形内控制流。在单控制器系统中,客户端例如TensorFlow(TF)Python客户端可以构建计算图形并且将其切换到协调器运行时,协调器运行时将该图形划分成用于每个工作者的一个相应子图形,并且将子图形的执行委托给工作者上的本地运行时。使用在数据中心网络(DCN)上传递消息的数据边缘和控制边缘来执行工作者之间的协调。虽然单控制器框架提供了灵活编程模型和资源的虚拟化,但是它提出了实现方式挑战,如下所述。首先,单控制器系统中的客户端“远离”,并且派遣等待时间涉及DCN上的通信,通常比PCIe慢一个数量级(参见,例如,图2b)。其次,为了支持具有SPMD子计算的多个程序多数据(MPMD)程序的并发执行,其每一个跨越从共享集群中选择的加速器子集,运行时必须具有支持加速器计算的成组调度(gang-scheduling)的一些机制。成组调度是必要的,因为一些硬件加速器(例如,TPU)是单线程的并且仅运行不可抢占内核,所以如果通信计算没有以一致的顺序入队,则系统将死锁。因此,用于执行机器学习工作负荷的单控制器系统需要分布式调度机制来对代表不同程序入队的计算进行排序。最后,必须设计一种用于现代机器学习工作负荷的系统,以运行分布在数千个加速器上的计算,其中第一类支持分片的表示和数据结构。例如,表示M路分片计算和N路分片计算之间的边缘的原始数据流图将需要M+N个节点和M×N个边缘,迅速变得不灵便的。

相反,在多控制器系统中,相同的客户端可执行程序直接在系统中的所有主机上运行,在程序执行的持续时间内对那些主机上的资源进行独占所有权。多控制器架构的一个优点是用于派遣加速器计算的低等待时间(参见,例如,图2a),因为客户端代码的相同副本运行在每个加速器主机上,并且派遣只涉及在相对较快的PCIe网络上的通信。跨主机的所有其它通信只通过使用专用互连网络(如NVLink和核心间互连(ICI))的集合发生,而不通过主机存储器。然而,多控制器架构对于使用流水线或计算稀疏性或两者的现代机器学习工作负荷来说是差匹配。在多控制器系统中超出标准集合的任何通信要求用户实现他们自己的协调原语。多控制器方法通常也假定硬件资源的独占所有权。这不仅移位确保对昂贵的加速器的高利用率的责任到用户,而且使构建有效的宽集群的机器学习架构所需的如资源虚拟化和多路复用之类的特征的设计复杂化。

在高级别,如本说明书中所描述的系统100采用单控制器框架,该单控制器框架将单控制器系统的灵活性与多控制器系统的性能相结合。系统100的架构与现有单控制器系统的不同之处在于,系统100使用异步派遣来匹配多控制器系统的性能,利用对成群的SPMD加速器计算的第一类支持来支持集中式资源管理和调度,并且使用分片数据流系统来进行有效协调。除了匹配现有技术系统的功能和性能之外,系统100的架构还提供支持更广泛的机器学习工作负荷所需的能力,包括支持训练或执行大型的稀疏和/或不规则的机器学习模型的能力。

特别地,系统100使用资源管理器142来维护(即,生成或更新)指定硬件加速器及其对应主机划分成多个加速器岛的数据。资源管理器142负责跨所有岛的设备(包括硬件加速器、主机和调度器)的集中式管理。资源管理器142可以跟踪系统100的所有可用设备,从而允许向系统动态地添加和移除底层计算资源。资源管理器142还可以维护映射数据库,该映射数据库定义客户端102可以请求的虚拟资源到系统100的实际物理设备的一对一映射。例如,客户端102可以请求具有特定2D或3D网格形状的虚拟硬件加速器集,其适合其对机器学习工作负荷104的特定通信和/或计算需要,并且作为响应,资源管理器142可以为满足特定互连拓扑和/或存储器容量的所请求的虚拟资源动态地分配物理硬件加速器。

在一些实现方式中,资源管理器142可以采用简单试探算法,其试图通过跨所有可用设备扩展计算来静态地平衡负荷。在其它实现方式中,资源管理器142可以采用更复杂的分配算法,例如考虑所有客户端计算的资源要求和系统的当前状态,以近似物理设备到计算的最佳分配。

在一些实现方式中,系统100中的所有加速器都是相同类型的加速器,而在其它实现方式中,不同岛可以包括不同类型的加速器或者单个岛可以包括多个不同类型的加速器。在一些实现方式中,分割是静态的,而在其它实现方式中,资源管理器142基于当前系统工作负荷动态地调整分割。

每个加速器岛包括多个加速器及其对应主机。例如,如图1所示,系统100维持将硬件加速器及其对应主机分割成两个加速器岛140A-B的数据,其中加速器岛140A包括硬件加速器A 110A-硬件加速器H 110H和主机A 120A,而加速器岛140B包括硬件加速器J 110J-硬件加速器M 110M和主机B 120B。

每个岛内的硬件加速器通过互连网络彼此互连并且通过数据中心网络通过它们对应主机连接到另一个岛内的硬件加速器。例如,互连网络可以是核心间互连(ICI)网络,而数据中心网络(DCN)可以是以太网。系统100可以使用可扩展的通用数据流引擎来管理加速器岛之间的DCN通信。数据流引擎还可以用于后台内务处理任务,其包括配置信息分发、程序监视、错误传递等。

每个加速器岛运行相应调度器(例如,用于岛140A的调度器A 130A和用于岛B140B的调度器B 130B),其跨岛中的加速器和主机调度指派给岛的计算。每个调度器可以被配置为接收机器学习工作负荷的部分并且将操作指派给包括在与调度器相同的加速器岛中的硬件加速器。当指派给给定岛的计算是规则的时,用于岛的调度器使用并行异步派遣来调度计算。

在一些实现方式中,用于每个岛的相应调度器是在给定设备上直接调度每个操作的单个调度器。在其它实现方式中,相应调度器是实现分层调度方案的调度器的集合。

调度被配置为在严格定时要求内(例如以毫秒的时间标度)跨岛中的加速器和主机调度指派给岛的计算,以便实现系统的正常操作。在一些实现方式中,调度器可以简单地以先进先出(FIFO)顺序来入队机器学习工作负荷104的各部分的执行,而在一些其它实现方式中,调度器可以采用更复杂的调度算法,例如基于估计的执行时间来重新排序计算。

图3是用于执行机器学习工作负荷的示例过程300的流程图。为方便起见,过程300将被描述为由位于一个或多个位置的一个或多个计算机的系统执行。例如,根据本说明书适当编程的分布式计算系统(例如图1的系统100)可以执行过程300。

该系统维持将硬件加速器及其对应主机的数据分割为多个加速器岛的数据。每个加速器岛包括多个加速器及其对应主机。在一些实现方式中,所有的加速器都是相同类型的加速器,而在其它实现方式中,不同的岛可以包括不同类型的加速器,或者单个岛可以包括多个不同类型的加速器。在一些实现方式中,分割是静态的,而在其它实现方式中,系统基于当前系统工作负荷来动态调整分割。

系统接收表示机器学习工作负荷的数据(步骤302)。在一些情况下,系统可以通过数据通信网络从客户端接收数据。在一些情况下,机器学习工作负荷包括用于训练神经网络的计算,并且表示机器学习工作负荷的数据包括表示包括多个计算碎片的分片数据流程序的数据。机器学习工作负荷可以包括多个部分,每个部分对应于相应编译函数。

图4A是分片数据流程序的示例说明。如图所示,分片数据流程序可以被表示为数据流图形,其例如可以是有向无环图形,其中每个节点表示计算碎片,例如,单独编译函数,并且节点之间的边缘表示计算碎片之间例如编译函数之间的数据流。每个计算碎片可以由数据流图形中的单个节点来表示。例如,由图4A所示的分片数据流程序表示的机器学习工作负荷包括三个计算碎片A、B和C,每个碎片可以是相应编译函数。

响应于接收到表示机器学习工作负荷的数据,系统将机器学习工作负荷的相应部分指派给多个加速器岛中的每一个,以便由用于加速器岛的相应调度器调度(步骤304)。具体地,可以将表示机器学习工作负荷的分片数据流程序的一个或多个计算碎片指派给多个加速器岛中的每一个。

图4B是将机器学习工作负荷指派给多个加速器岛的示例说明。如图所示,系统使用资源管理器为用于机器学习工作负荷的每个组成计算碎片分配可用计算资源的一部分,即系统的硬件加速器的子集。资源管理器可以通过使用任何适当的负荷平衡算法或技术来确定分配以使系统的硬件加速器负荷平衡。

在图4B的示例中,系统将计算碎片A指派给第一加速器岛410,将计算碎片B指派给第二加速器岛412,并且将计算碎片C指派给第三加速器岛414。在模型并行性用于执行机器学习工作负荷的情况下,每个硬件加速器可以存储定义神经网络的相应部分的架构的数据的架构的相应部分(“模型组件”)。

图4C是由调度器对所指派的计算进行调度的示例说明。每个加速器岛运行相应调度器,该调度器跨岛中的加速器和主机调度指派给岛的计算。这种配置可以支持加速器计算的成组调度以用于机器学习工作负荷的并发执行同时避免死锁。如图所示,用于每个岛的调度器成组调度所指派的计算给岛内的主机,该计算随后由主机派遣(在其上实例化)到岛内的硬件加速器以供执行。在图4C中,箭头420和422指示控制消息,并且箭头424、426和428示出数据路径传输。成组调度是其中存在一组计算的一种协同调度,使得包括异构计算在内的组中的所有计算在不同的硬件加速器上同时被调度,允许它们作为组并行地进行。

在指派给加速器岛的机器学习工作负荷的相应部分是规则的计算例如其资源要求已知的规则编译函数的情况下,用于加速器岛的调度器可以使用并行异步派遣来调度计算的部分。在这些情况下,系统可以通过向用于加速器岛的相应调度器发送单个消息来指派机器学习工作负荷的相应部分,其中该单个消息描述与机器学习工作负荷的相应部分相对应的计算图形的子图形。调度器被配置为将子图形中的所有活动计算碎片的执行背到背地排序。单个消息的使用使网络流量最小化,但不要求调度器实际将子图形中的所有计算碎片作为批量入队,因为计算仍可以与由其它并发执行的程序所提交的计算交织。

图5是用于使用并行异步派遣来调度计算的一部分的示例过程500的流程图。为方便起见,过程500将被描述为由位于一个或多个位置的一个或多个计算机的系统执行。例如,根据本说明书适当编程的分布式计算系统(例如图1的系统100)可以执行过程500。

该系统生成向加速器岛中的硬件加速器集合中的每一个硬件加速器指派一个或多个操作的相应集合的调度,该一个或多个操作的相应集合作为由加速器岛中的硬件加速器中的另一个硬件加速器所执行的一个或多个相应其它操作的输入和输出(步骤502)。一个或多个操作可以是用于执行指派给每个加速器岛的机器学习工作负荷的相应部分的计算。例如,一个或多个操作可以是编译函数的组成操作。

系统针对该硬件加速器集合中的每一个硬件加速器确定一个或多个相应其它操作的输出的相应大小(步骤504)。

系统并行地向用于硬件加速器集合中的每一个硬件加速器的对应主机传输指定一个或多个相应其它操作的输出的相应大小的相应未来数据(步骤506)。

相应未来数据使得用于该硬件加速器集合中的每一个硬件加速器的对应主机(i)在硬件加速器上分配用于存储一个或多个相应其它操作的输出的存储器,以及(ii)将数据传输到指派给识别所分配的存储器的一个或多个相应其它操作的加速器的对应主机。

指派给一个或多个相应其它操作的加速器的对应主机被配置为使得指派给一个或多个相应其它操作的加速器将相应其它操作的输出通过互连网络传输到所分配的存储器。

图6图示了用于示例分片数据流程序的顺序和并行派遣之间的比较。在图6中,示例分片数据流程序由数据流图形表示,该数据流图形包括三个节点A、B和C(以圆圈示出),每个节点对应于相应计算碎片。每个计算碎片都是规则编译函数。对应于三个节点A、B和C的计算碎片被调度用于在连接到主机(“Host”)A、B和C的加速器(“Dev”)上执行(图示为正方形)。

如图6的左手侧所示,在顺序派遣的情况下,主机A入队计算碎片A,接收指定用于计算碎片A的输出的大小的未来数据,并且将该未来数据传输到主机B。主机B分配硬件加速器上的用于存储计算碎片B的输入的存储器,将输入缓冲器地址传输到主机A,并且执行一些准备工作以启动计算碎片B的功能。当计算碎片A完成时,它的输出通过互连网络直接被发送到计算碎片B的输入缓冲器,然后主机B开始计算碎片B。可以使一个计算碎片完成和下一个计算碎片开始之间的等待时间比数据传输时间稍长。

尽管在图6所示的其中计算时间短于在调度、资源分配和主机之间的协调时所花费的时间的情况下当前任节点的计算花费相当多的时间量时,这通常工作良好,但是异步流水线停滞(stall)(因为主机侧工作在顺序派遣中)并且主机侧工作成为用于执行整个计算序列的关键瓶颈。

因此,如图6的右侧所示,系统使用并行异步派遣,以通过并行运行主机侧工作来克服传统顺序派遣中的这种瓶颈。

特别地,假定编译函数都是规则的,实际上可以预先计算(即在前任计算甚至入队之前计算)后继节点的输入数据的大小。并行异步派遣机制利用规则编译函数的静态已知资源使用来并行运行用于计算的节点的大部分主机侧工作,而不是在节点的前任已经入队之后对该节点的工作进行序列化。

本说明书结合系统和计算机程序组件使用术语“被配置”。对于要被配置为执行特定操作或动作的一个或多个计算机的系统,是指系统已经在其上安装了软件、固件、硬件或它们的组合,这些软件、固件、硬件或它们的组合在操作中使系统执行操作或动作。对于要被配置为执行特定操作或动作的一个或多个计算机程序,是指包括指令的一个或多个程序,所述指令在由数据处理装置执行时使装置执行操作或动作。

本说明书中描述的主题和功能操作的实施例可以在数字电子电路系统中、在有形体现的计算机软件或固件中、在计算机硬件,包括本说明书中公开的结构及其结构等价物,或者它们中的一个或多个的组合中实现。本说明书中描述的主题的实施例可以被实现为一个或多个计算机程序,即,在有形非暂时性存储介质上编码的计算机程序指令的一个或多个模块,以用于由数据处理装置执行或控制数据处理装置的操作。计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或串行存取存储器设备或它们中的一个或多个的组合。可替代地或附加地,程序指令可以被编码在人工生成的传播信号上,例如,机器生成的电、光或电磁信号,其被生成以对信息进行编码以传输到合适的接收器装置以供数据处理装置执行。

术语“数据处理装置”是指数据处理硬件,并且涵盖用于处理数据的所有种类的装置、设备和机器,包括例如可编程处理器、计算机或多个处理器或计算机。该装置还可以是或进一步包括专用逻辑电路系统,例如,FPGA(现场可编程门阵列)或ASIC(专用集成电路)。除了硬件之外,该装置还可以可选地包括为计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统或它们中的一个或多个的组合的代码。

计算机程序,其也可以被称为或描述为程序、软件、软件应用、应用、模块、软件模块、脚本或代码,可以以任何形式的编程语言编写,包括编译或解释语言,或者声明或过程语言;并且它可以以任何形式部署,包括作为独立程序或作为模块、组件、子例程或适合在计算环境中使用的其他单元。程序可以但不必与文件系统中的文件相对应。程序可以被存储在保存其他程序或数据的文件的一部分,例如在标记语言文档中存储的一个或多个脚本中、存储在专用于所讨论的程序的单个文件中,或者存储在多个协调文件,例如存储一个或多个模块、子程序或代码部分的文件中。计算机程序可以被部署为在一个计算机上或在位于一个站点处或跨多个站点分布并通过数据通信网络互连的多个计算机上执行。

在本说明书中,术语“数据库”广泛地用于指代任何数据集合:数据不需要以任何特定方式被结构化,或者根本不需要被结构化,并且它可以被存储在一个或多个位置中的存储设备上。因此,例如,索引数据库可以包括多个数据集合,每个数据集合可以被不同地组织和访问。

类似地,在本说明书中,术语“引擎”被广泛地用于指代被编程为执行一个或多个特定功能的基于软件的系统、子系统或过程。通常,引擎将被实现为在一个或多个位置中的一个或多个计算机上安装的一个或多个软件模块或组件。在一些情况下,一个或多个计算机将专用于特定引擎;在其他情况下,多个引擎可以在相同的一个或多个计算机上被安装和运行。

本说明书中描述的过程和逻辑流程可以由执行一个或多个计算机程序的一个或多个可编程计算机执行,以通过对输入数据进行操作并生成输出来执行功能。过程和逻辑流程也可以由专用逻辑电路系统执行,例如FPGA或ASIC,或由专用逻辑电路系统和一个或多个编程的计算机的组合执行。

适合于执行计算机程序的计算机可以基于通用或专用微处理器或两者,或者任何其他种类的中央处理单元。通常,中央处理单元将从只读存储器或随机存取存储器或两者接收指令和数据。计算机的基本元件是用于执行或实施指令的中央处理单元和用于存储指令和数据的一个或多个存储器设备。中央处理单元和存储器可以由专用逻辑电路系统补充或并入专用逻辑电路系统中。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备,例如,磁盘、磁光盘或光盘,或者可操作地被耦合以从一个或多个大容量设备接收数据或将数据传输到一个或多个大容量设备或两者兼有。然而,计算机不需要具有这样的设备。此外,计算机可以被嵌入在另一个设备中,例如,移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏控制台、全球定位系统(GPS)接收器或便携式存储设备,例如,通用串行总线(USB)闪存驱动器,仅举几例。

适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器设备,包括例如半导体存储器设备,例如,EPROM、EEPROM和闪存设备;磁盘,例如,内部硬盘或可移动盘;磁光盘;以及CD ROM和DVD-ROM盘。

为了提供与用户的交互,可以在计算机上实现本说明书中描述的主题的实施例,该计算机具有用于向用户显示信息的显示设备,例如CRT(阴极射线管)或LCD(液晶显示器)监视器,以及用户可以用来向该计算机提供输入的键盘和定点设备,例如鼠标或轨迹球。其他种类的设备也可以被用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如,视觉反馈、听觉反馈或触觉反馈;并且可以以任何形式接收来自用户的输入,包括声、语音或触觉输入。另外,计算机可以通过以下来与用户交互:向由用户使用的设备发送文档并从由用户使用的设备接收文档;例如,通过响应于从web浏览器接收到请求而向用户的设备上的web浏览器发送网页。此外,计算机可以通过向个人设备,例如,正在运行消息传送应用的智能电话发送文本消息或其他形式的消息并且继而从用户接收响应消息来与用户交互。

用于实现机器学习模型的数据处理装置还可以包括例如,专用硬件加速器单元,其用于处理机器学习训练或生产的公用和计算密集型部分,即推断、工作负荷。

可以使用机器学习框架,例如,TensorFlow框架、Microsoft Cognitive Toolkit框架、Apache Singa框架或Apache MXNet框架,来实现和部署机器学习模型。

本说明书中描述的主题的实施例可以在计算系统中实现,该计算系统包括后端组件,例如,作为数据服务器;或者包括中间件组件,例如,应用服务器;或者包括前端组件,例如,具有用户可以通过其与本说明书中描述的主题的实现方式交互的图形用户界面、web浏览器或应用的客户端计算机;或者包括一个或多个这样的后端、中间件或前端组件的任何组合。系统的组件可以通过任何形式或介质的数字数据通信,例如通信网络互连。通信网络的示例包括局域网(“LAN”)和广域网(“WAN”),例如,互联网。

计算系统可以包括客户端和服务器。客户端和服务器通常彼此远离并通常通过通信网络交互。客户端和服务器的关系借助于在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序而产生。在一些实施例中,服务器将例如HTML页面的数据传输到用户设备,例如,用于向与充当客户端的设备交互的用户显示数据和从其接收用户输入的目的。可以在服务器处从设备接收在用户设备处生成的数据,例如,用户交互的结果。

虽然本说明书包含许多具体实现方式细节,但是这些不应当被解释为对任何发明的范围或可以要求保护的范围的限制,而是应当解释为可以特定于特定发明的具体实施例的特征的描述。在本说明书中在分开实施例的上下文中描述的某些特征也可以在单个实施例中组合实现。相反,在单个实施例的上下文中描述的各种特征也可以分开地或以任何合适的子组合在多个实施例中实现。此外,尽管特征在上文可以被描述为以某些组合起作用并且甚至最初如此要求保护,但是来自所要求保护的组合的一个或多个特征在一些情况下可以从组合中被删除,并且所要求保护的组合可以涉及子组合或子组合的变形。

类似地,虽然在附图中以特定次序描绘了并且在权利要求中记载了操作,但是这不应当被理解为要求以所示的特定次序或依次次序执行这些操作或者执行所有示出的操作,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的分开不应当被理解为在所有实施例中都需要这种分开,并且应当理解,所描述的程序组件和系统通常可以被一起集成在单个软件产品中或封装到多个软件产品中。

已经描述了主题的特定实施例。其他实施例在以下权利要求的范围内。例如,权利要求中记载的动作可以以不同的次序执行,并且仍然实现期望的结果。作为一个示例,附图中描绘的过程不必然需要所示的特定次序或依次次序来实现期望的结果。在一些情况下,多任务和并行处理可能是有利的。

权利要求书:

相关技术
  • 用于执行机器学习的分布式系统及其方法
  • 适用于断路器负荷开关混合配电网的分布式自愈控制方法
  • 利用分布式异步更新在线机器学习的物联网数据分析方法
  • 针对重复工作负荷的结果数据流编码
技术分类

06120116479961