重塑和广播优化以避免不必要的数据移动

文档序号:367143 发布日期:2021-12-07 浏览:21次 >En<

阅读说明:本技术 重塑和广播优化以避免不必要的数据移动 (Reshaping and broadcast optimization to avoid unnecessary data movement ) 是由 B.A.赫克特曼 于 2020-04-30 设计创作,主要内容包括:方法、系统和装置,包括编码在计算机存储介质上的计算机程序,用于变换计算图中张量上的操作的模式,以在执行重塑操作时,特别是在向具有要求对齐操作符的向量指令或向量存储的硬件平台进行部署时,减少所引起的存储负担。(Methods, systems, and apparatus, including computer programs encoded on a computer storage medium, for transforming patterns of operations on tensors in a computational graph to reduce storage burden incurred when performing reshaping operations, particularly when deployed to a hardware platform having vector instructions or vector storage requiring alignment operators.)

重塑和广播优化以避免不必要的数据移动

背景技术

TensorFlow库可以用于创建机器学习模型,例如,递归神经网络(“RNN”)模型、卷积神经网络(“CNN”)模型、前馈神经网络模型和随机森林模型。(TensorFlow在Abadi等人的如下文献中进行了描述:《TensorFlow:用于大规模设计和实现的系统》(OSDI’16),第265-283页,2016年11月2-4日。该软件可从https://tensorflow.org获得)

TensorFlow库可以用于将机器学习模型表示为TensorFlow图。TensorFlow图中的每个节点表示一操作。TensorFlow图中的每条边是有向的,并且表示流入或流出该边所连接的节点的数据流。数据采用零维或多维张量的形式,其中每个元素具有相同的数据类型,例如,32位整数、双长度浮点数或字符串。张量由在外部有成对括号“[]”的向量表示。例如,3个元素的一维(1D)张量(又称为向量)会被表示为[1,2,3]。零维张量是标量。二维(2D)张量会被表示为[[1,2,3],[4,5,6]]。该张量的阶,即唯一地选择张量的每个元素所需的维数或索引数,为2。该张量的形状是[2,3]。第零维度中的元素数为2,即两个向量(1D张量)[1,2,3]和[4,5,6];而第一维度中的元素数为3;也就是说,向量[1,2,3]和[4,5,6]中的每个具有三个元素。张量的形状本身是1D张量。正如在许多编程环境中惯常的,维度的编号从零开始。

在本说明书中,将使用用于构建和执行TensorFlow图的Python API来表达示例。TensorFlow模块可以这样加载:

import tensorflow as tf

TensorFlow操作包括形状(shape)、重塑(reshape)、广播(broadcast)和归约(reduce)操作。这些将在下面描述,从描述中省略对本说明书不重要的参数和方面。

当执行时,形状操作将输入张量的形状(即维度)返回为1D张量。在以下示例中:

X=tf.constant([[[1,1,1],[2,2,2]],[[3,3,3],[4,4,4]]])

tf.shape(X)

形状操作返回张量[2,2,3],其表示张量X的维度。

当执行时,重塑操作返回的张量具有与输入张量顺序相同的相同元素值但是具有由形状张量输入定义的形状。在以下示例中,

X=tf.constant([[[1,1],[2,2]],[[3,3],[4,4]]])

tf.reshape(X,[2,4])

重塑操作接收张量X和表示期望形状的一维张量[2,4]作为输入参数。重塑操作返回张量[[1,1,2,2],[3,3,4,4]],其具有与输入张量X相同的元素并且具有期望形状,即[2,4]。输入到重塑操作的期望形状可以比输入张量所具有的更多或更少的维度。

广播操作包括broadcast_to。广播是制作具有用于算术运算的兼容形状的数组的过程。如果对于两个形状各自的对应维度对,维度相等或其中之一为一,则这两个形状是兼容的。当张量被广播到一形状时,操作从后缘维度(trailing dimension)开始并向前进行。

因此,当执行时,broadcast_to操作返回的张量为根据需要而复制许多次直到达到所请求的指定形状的输入张量。在以下示例中:

V=tf.constant([7,8])

tf.broadcast_to(V,[2,3])

broadcast_to操作接收张量V和指定期望形状的张量[2,3]作为输入。它返回具有期望形状的张量[[7,7,7],[8,8,8]]。

归约操作包括reduce_all、reduce_any、reduce_sum和reduce_mean。归约操作返回的输出张量通常具有比输入张量更小的阶和更少数量的元素。

归约操作接收输入张量和轴张量。轴张量的元素标识输入张量的形状的维度。归约操作沿着由轴张量指定的维度归约输入张量。例如,

X=tf.constant([[1,1,1],[1,1,1]])

在上式中,X的形状是[2,3],即X是具有两行和三列的张量:

1 1 1

1 1 1

以具体的归约操作reduce_sum为例,用轴张量[0]标识行,即X的第零维度,

tf.reduce_sum(x,[0])

当该操作被执行时,沿着第零维度(行)归约张量并对行[1,1,1]+[1,1,1]求和,以返回[2,2,2]。当操作

tf.reduce_sum(x,[1])

被执行时,沿着第一维度(列)归约并对列[1,1]+[1,,1]+[1,1]求和,以返回[3,3]。当操作

tf.reduce_sum(x,[0,1])

被执行时,沿着两个维度都归约并求和,以返回标量(0D张量)6。

由归约操作返回的张量的形状具有输入张量的维度,而没有由轴张量指定的索引。

其他归约操作所返回的张量的元素值由其他操作进行计算。例如,reduce_all操作计算逻辑AND,reduce_any操作计算逻辑OR,reduce_mean操作计算均值,等等。

在一些场景中,用户使用编译器,例如,即时(JIT)编译器,将TensorFlow图编译成图形以输入到XLA编译器中。(JIT编译器在中进行了描述)。XLA的输入语言称为“HLO IR””,或仅HLO(高级优化器)。XLA编译器采用在HLO中定义的图形(即计算),并且将它们编译成各种架构的机器指令,执行与目标相关的优化并生成与目标相关的代码。

HLO图中的节点表示操作。图中的每条边是有向的,并且表示流入或流出该边所连接的节点的数据流。这些数据是以张量的形式。HLO图中表示的操作对应于生成HLO图的TensorFlow流程中的操作。具体地,HLO图可以包括重塑、归约和广播操作。

由XLA编译器生成的二进制文件被部署到硬件上,并且由硬件的特定处理器来执行。一些处理器实现对向量进行操作的指令。为了让处理器执行对张量数据进行操作的向量指令,张量必须被存储,以使得将由向量指令操作的张量向量中的每个在向量边界上对齐,如为处理器所指定的。

例如,如果重塑操作接收张量[1,2,3,4,5,6,7,8,9]和指定形状的张量[3,3]作为输入参数,那么如果向量没有恰好按照由硬件的特定处理器所要求的在向量边界上对齐,则产生的张量[[1,2,3],[4,5,6],[7,8,9]]具有的三个向量[1,2,3]、[4,5,6]和[7,8,9]必须被移动以使得它们在向量边界上对齐。这种向量边界对齐操作在计算上可能很昂贵。

发明内容

本说明书描述了可以在XLA编译器中实现的优化技术,用于减少包括重塑操作的操作的特定序列的存储负担。

这些优化在实现机器学习技术的操作序列中特别有帮助,如组规范化(groupnormalization)(https://arxiv.org/pdf/1803.08494.pdf)和重影批处理规范化(ghostbatch normalization)(https://arxiv.org/pdf/1705.08741.pdf)。在这样的机器学习技术的直接实现方式中,输入张量被重塑为更高的维数。然后,在由重塑改变的一些维度和其他未由重塑改变的维度之间执行归约。归约和重塑的衍生是广播,并且其被重塑回原始形状。广播还被制作成由重塑而改变的一些维度和未由重塑改变的一些维度。重塑操作对具有线性地址空间的平台上的数据不起任何作用。然而,在具有向量存储的平台上,重塑通常将改变相对于向量存储的形状对齐,需要移动数据。本说明书描述了减少需要移动的张量的尺寸的优化,以实现相对于向量存储的对齐。优化可以用来减少重塑操作的数量和/或用于表示操作序列中的中间张量的向量的数量,从而减少需要由处理器执行的向量边界对齐操作的数量。

附图说明

图1是示出实现检测包括重塑操作的操作模式的编译器变换的示例过程的流程图,该重塑操作可以被变换以最小化重塑操作的尺寸。

图2是示出变换的示例过程的流程图。

不同附图中的相同的附图标记和名称指示相同的元素。

具体实施方式

图1是示出实现检测包括重塑操作的操作模式的编译器变换的示例过程100的流程图,该重塑操作可以被变换以最小化重塑操作的尺寸。将参照XLA编译器以及计算图中的重塑、归约和广播操作的模式来描述编译器变换。编译器和过程可以在一个或多个位置的一个或多个计算机的系统上实现并由其执行。

该过程检测包括可以被变换的重塑操作的操作模式(102)。该模式可以是XLA图形中的操作模式。一个这样的模式是reduce(reshape(X)),当一个或多个维度被归约而在重塑中没有被改变。在该模式中,对输入张量X执行重塑操作,并且返回一张量作为归约操作的输入。

该过程将操作变换成具有较小重塑尺寸的操作模式(104)。例如,符合上述reduce(reshape(X))模式的操作被变换成reduce(reshape(reduce(X)))模式的操作。该变换通过添加额外的归约来增加计算量;但是它具有减小重塑的总尺寸的重要优点,因为两个计算都具有一个重塑,而后一个重塑具有已经归约的维度,并且作为结果,在元素数上严格来说比原始的要少。该过程继续检测和变换,直到没有检测到另外的模式,此时编译器生成特定于目标硬件并实现包括变换后的模式的计算的代码(106)。然后,编译器或TensorFlow基础设施的其他元素,向目标硬件部署所生成的代码用于执行(108)。

可以优化的另一模式的示例广播版本是reshape(add(reshape(X),broadcast(Y)),其中张量X的输入形状与由最外层重塑返回的张量的输出形状相同。该操作模式被变换成add(X,broadcast(reshape(broadcast(Y)))),其具有总体上更少的重塑,并且具有更小尺寸的重塑,因为重塑的输出由于具有额外的维度而被广播成更大的形状,。以这种方式,实现整体操作所需的向量边界对齐操作的数量被减少。

该变换可以应用于匹配以下模式的任意子计算:

其通过优化被变换成

小写字母f、g、h、a和b表示图形中的数学运算。可以使用深度优先的搜索图形的方法找到该变换的模式。在一些实现方式中,为简单起见,搜索是按后序(post order),即生产者先于消费者的拓扑排序,并在适当的位置变换图形。当搜索找到匹配的子树时,其复制子树并用新的子树根来替换原始子树根的用户。其他编译器通过修复复制和无效代码。还可以使用在计算图中搜索模式图形的其他搜索方法。

利用这两种模式变换——来自形式reduce(reshape(X))和reshape(f(reshape(X),broadcast(Y))——组规范化和虚拟批处理规范化及其衍生可以用更小的重塑以及所产生的更小的存储需求来完成。

例如,组规范的实现方式自然表达为

reduce(reshape(image,[B,H,W,C/G,G]),[1,2,3])。

上面的图像输入的形状为[B,H,W,C],其具有针对输入中的一批图像的批量尺寸以及图像的高度、宽度和通道的维度。组数为G组。如果该表达式以这种形式执行,则它会在某些硬件平台上创建大的中间张量和缓慢的重塑。上面的变换通过将其变换成以下形式来改进计算:

reduce(reshape(reduce(image,[1,2]),[B,C/G,G]),[1])

为了描述变换过程的目的,将其表示为:

Y=reshape(X,[B,H,W,C/G,G])

Z=reduce(Y,[1,2,3])

归约操作在由轴张量[1,2,3]指定的维度上归约形状为[B,H,W,C/G,G]张量Y,并且返回张量Z。轴张量[1,2,3]表示张量Y的维度[H,W,C/G],归约操作沿着该维度进行归约。归约操作返回形状为[B,G]的张量Z。

下面描述了原始模式的参数是如何映射到变换模式的适当输入。

为了讨论的目的,reduce(reshape(reduce(X,[1,2]),[B,C/G,G]),[1])变换将表示为:

W=reduce(X,[1,2])

Y2=reshape(W,[B,C/G,G])

Z2=reduce(Y2,[1])

图2是示出变换的示例过程200的流程图。这将参照刚刚描述的示例模式进行描述。过程200是上面参照图1描述的变换(104)的示例实现方式。

该过程确定由操作的原始模式返回的张量的最终输出维度(202)。通过将X的形状与最终输出形状进行比较来确定最终输出维度。在示例中,原始模式示例接收形状为[B,H,W,C]的张量X,并且返回形状为[B,G]张量。

该过程沿着既不在最终输出中也不影响原始模式的重塑操作的重塑的输入张量的维度进行归约(204)。在示例中,根据原始模式

Y=reshape(X,[B,H,W,C/G,G])

Z=reduce(Y,[1,2,3])

编译器从输入到重塑操作的轴张量中确定:张量X的第零个和第三个索引(即B和C)分别在最终输出中并且影响最终输出。因此,沿着X的第一维度和第二维度(即H和W维度)归约X:

W=reduce(X,[1,2])

该过程重塑了归约操作的输出张量(206)。归约操作的输出张量(在示例中为W)被重塑成原始模式的形状,但是没有不在最终输出中或被变换的维度。在原始模式中,第三维度(即C)除以G,并且添加了第四维(即G)。第零维度(即B)在最终输出中。因此,变换中的重塑操作将归约后的张量重塑成[B,C/G,G]:

Y2=reshape(W,[B,C/G,G])

该过程沿着不在原始模式的输出张量中的任何维度归约重塑操作的输出张量(208)。在示例中,原始模式输出形状为[B,G]的张量。因此,变换中的重塑操作的输出的第一索引被归约,并且归约操作返回形状为[B,G]的张量:

Z2=reduce(Y2,[1])

相同的规则适用于将形式为reshape(operator(reshape(X),broadcast(Y))的原始模式变换成operator(X,broadcast(reshape(broadcast(Y))))的形式。

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

术语“数据处理装置”包括用于处理数据的各种装置、设备和机器,包括,举例来说,可编程处理器、计算机、或者多个处理器或计算机。数据处理装置可以包括专用逻辑电路,例如,FPGA(现场可编程门阵列)、ASIC(专用集成电路)或GPU(图形处理单元)。除了硬件之外,装置还可以包括为计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统或它们中的一个或多个的组合的代码。

计算机程序(也可以被称为或被描述为程序、软件、软件应用、小应用、模块、软件模块、引擎、脚本或代码)可以用任何形式的编程语言编写,包括编译或解释语言或者声明性或过程性语言;并且它可以以任何形式部署,包括作为独立程序或作为模块、组件、引擎、子例程或适合于在计算环境中执行的其他单元,该环境可以包括在一个或多个位置经由数据通信网络互连的一个或多个计算机。

计算机程序可以但不是必须对应于文件系统中的文件。计算机程序可以被存储在保存其他程序或数据的文件的一部分(例如,存储在标记语言文档中的一个或多个脚本)中、存储在专用于所讨论的程序的单个文件中,或者存储在多个协同文件(例如,存储一个或多个模块、子程序或部分代码的文件中)中。

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

适合于执行计算机程序的计算机可以基于通用或专用微处理器或两者,或者任何其他类型的中央处理单元。通常,中央处理单元将从只读存储器或随机存取存储器或两者接收指令和数据。计算机的基本元件是用于执行指令的中央处理单元以及用于存储指令和数据的一个或多个存储器设备。中央处理单元和存储器可以由专用逻辑电路来补充,或者包含在专用逻辑电路中。

通常,计算机还将包括一个或多个大容量存储设备,或者可操作地耦合到其上,以从其接收数据或向其发送数据。大容量存储设备可以是,例如,磁盘、磁光盘或光盘、或者固态驱动器。然而,计算机不需要具有这样的设备。此外,计算机可以嵌入在另一设备中,例如,移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏机、全球定位系统(GPS)接收器或便携式存储设备(例如通用串行总线(USB)闪存驱动器),仅举几例。

为了提供与用户的交互,本说明书中描述的主题的实施例可以在计算机上实现,或者被配置为与计算机通信,该计算机具有用于向用户显示信息的显示设备(例如,LCD(液晶显示)监控器)以及用户可以通过其向计算机提供输入的输入设备,例如,键盘和点击设备(例如鼠标、轨迹球或触摸板)。也可以使用其他类型的设备来提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感官反馈,例如,视觉反馈、听觉反馈或触觉反馈;并且来自用户的输入可以以任何形式接收,包括声音、语音或触觉输入。此外,计算机可以通过向用户使用的设备发送文档和从用户使用的设备接收文档来与用户进行交互;例如,通过响应于从网络浏览器接收的请求而将网页发送到用户设备上的网络浏览器,或者通过与在用户设备(例如,智能手机或电子平板电脑)上运行的应用进行交互。此外,计算机可以通过向个人设备(例如,运行消息应用的智能手机)发送文本消息或其他形式的消息并从用户接收响应消息作为回应来与用户进行交互。

本说明书将术语“被配置为”与系统、装置和计算机程序组件连同使用。一个或多个计算机的系统被配置为执行特定的操作或动作意味着该系统已经在其上安装了软件、固件、硬件或它们的组合,在操作中使该系统执行操作或动作。一个或多个计算机程序被配置为执行特定的操作或动作意味着一个或多个程序包括指令,当该指令由数据处理装置执行时,使装置执行操作或动作。专用逻辑电路被配置为执行特定的操作或动作意味着该电路具有执行操作或动作的电子逻辑。

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

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

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

12页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:通信模块软件升级方法、系统及通信模块

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!