专利名称:使用图形处理单元加速并优化机器学习技术的处理的制作方法
技术领域:
本发明一般涉及计算机处理技术,尤其涉及使用图形处理单元(GPU)来加速并优化处理的用于处理机器学习技术(如神经网络)和其它非图形应用的系统和方法。
背景技术:
图形处理单元(GPU)是现代个人计算机(PC)的主要组成部分。GPU是一种单芯片处理器,它被设计成加速向用户显示的实时三维(3D)图形。最初作为高端图形工作站的一个特征,GPU接在个人计算机总线上,作为常规中央处理单元(CPU)对其并不适合或仅仅太慢的图形功能的加速器。
计算机图形从线条式图像显示上的线条绘画开始,它一般是经修改的示波器。这些显示的计算需要矢量操作,包括一般的几何变换、剪切显示设备的边界、以及3D显示的透视变换。廉价的商用半导体存储器的出现促使用光栅图形处理器来代替线条绘画系统,该处理器通过一帧缓冲存储器刷新类似电视机的显示屏。由于用户对大多数应用程序一般优选看见有阴影的固体表面而非线条绘画,因此光栅图形迅速替代了线条绘画。作为线条绘画中使用的直线段的替代,光栅图形系统的几何构成块(或基元)是从三角形阵列中构造的多面体表面。显示基元是储存在帧缓冲存储器中的像素的矩形阵列。阵列的行对应于光栅扫描阴极射线管显示器上的离散扫描线。
由于图形从线条绘画前进到光栅图形,对更大处理能力的需求导致在PC上包括数学协处理器。数学协处理器是共享主CPU的指令流并能够访问CPU存储器的集成浮点协处理器。其它类型的集成协处理器是诸如多媒体扩展(MMX)或流SIMD扩展(SSE)等CPU扩展,它们具有并行的数据通路、异步执行,并也能够访问CPU存储器。
对3D图形中日益增长的更高质量和更好真实感的需求导致了对更强的图形处理能力的需求。为满足此需求,引入了GPU来执行计算密集型图形任务。这解除了CPU的负担,并释放CPU以执行其它处理任务。在其现有的具体化形式中,GPU是PC的一个重要组件,它具有其专用的到主CPU存储器的通路,以及其专用的图形存储器。与数学协处理器相反,GPU是具有其自己的指令流、数据通路和专用存储器的自治专用处理器。
当前,GPU设计和配置的趋势给予它们更大的专用存储器、到图形存储器的更高的带宽、以及增加的内部并行度。另外,当前的GPU用日益增长的可编程程度来设计。引入了可编程度,GPU获得了足够多的灵活性以找出非图形应用中的使用。此外,GPU的数据平行体系结构与CPU相比,对计算密集型应用给予更惊人的性能增益。对可替换的图形算法和科学计算问题的扩展已在各种实例中探究。
然而,针对交互式使用(如,语音识别和手写识别)的应用程序却吸引了相对较少的兴趣。其一个原因是实现这些算法对于由GPU处理是困难的,且具有若干限制。对于通用计算,GPU本质上是有限制的流处理器。处理或避开这些限制需要一种既不明显又不直观的编程和处理风格。
这些交互式使用应用程序通常具有非无效解,并处理大量的数据。在这些情况下,机器学习技术是较佳的解决技术。机器学习技术通过自动调节算法的参数,使得在训练之后,可对输入进行正确分类来操作。例如,假定任务是向“A”的像素图像分配正确的ASCII标签。不幸的是,训练通常涉及向算法给予成千上万的对(输入,目标),而算法本身也具有成千上万的操作。其结果是,训练可耗费大量的时间,即使是在最快的可用的机器上。在真实世界的条件下测试或使用该算法也会是惊人的昂贵的。
因此,所需要的是一种使用GPU来处理机器学习技术的系统和方法。还需要一种通过避开GPU的限制来加速并优化机器学习技术的处理的系统和方法。这可确保GPU的完整处理能力能够在解决使用机器学习技术的交互式使用应用程序(如语音和手写识别)中得到充分利用。
发明内容
此处所揭示的本发明涉及一种使用图形处理单元(GPU)来处理机器学习技术的系统和方法。本发明通过将中央处理单元(CPU)处理的一部分移植到GPU,减轻了CPU的计算限制。更具体地,本发明将通常由CPU处理的机器学习结构移植到GPU。机器学习技术尤其适合被移植到GPU,因为GPU通常比CPU更强大,并且因为机器学习技术涉及解决具有非无效解并比数据访问需要更大量的计算的问题,如语音和手写识别。这与基于存储器的分类或搜索相反,它与计算相比具有较高的数据访问。如果向GPU的数据传输耗费了太多时间,则减少了在GPU上进行计算的益处。换言之,如果向GPU传输计算所需的那么多数据,则瓶颈变成数据传输,并且任何净得的改进都被抵消掉。
本发明的方法包括使用GPU训练机器学习技术而不在GPU上进行随后的测试、使用GPU测试机器学习技术而不在GPU上进行先前的训练、以及在GPU上进行训练和测试。具体地,此处所揭示的本发明包括处理交互式使用计算机应用程序的计算机实现的方法。该方法包括使用图形处理单元处理机器学习技术来获取对函数的解、并输出由交互式使用计算机应用程序所使用的解。该方法还包括令训练机器学习技术的可学习参数使用图形处理单元来获取已训练的可学习参数,并使用已训练的可学习参数来获取解。交互式使用计算机应用程序可以是语音识别应用程序、手写识别应用程序之一。此外,机器学习技术可以是神经网络。
该方法还可包括在中央处理单元上储存可学习参数,并在图形处理单元上储存可学习参数的至少某些。获取函数的解可通过使用像素着色引擎(shader)来计算内积,它是矢量内积和矩阵内积的至少其中之一。该方法还可包括将内积分解成子问题,并使用像素着色引擎在子问题上执行多遍。获取函数的解可通过使用像素着色引擎计算外积来完成。该方法还可包括使用纹理映射来计算外积。获取函数解可通过使用像素着色引擎执行矩阵转置来完成。该方法还可包括使用纹理映射来执行矩阵转置。
此处所揭示的本发明也包括使用图形处理单元加速并优化机器学习技术的过程。该方法包括使用图形处理单元上的像素着色引擎来训练机器学习技术的可学习参数、使用图形处理单元上的像素着色引擎以及已训练的可学习参数从机器学习技术获取结果、并输出由应用程序使用的结果。
该过程也包括在图形处理单元上查找可学习参数的至少某些,并使用像素着色引擎来计算以下的至少其中之一(a)矢量内积;(b)矩阵内积;(c)外积;(d)矩阵转置。机器学习技术可以是神经网络,神经网络可以是以下的至少其中之一(a)多层、全连接的神经网络;(b)常规神经网络。机器学习技术也可使用期望值最大化(EM)算法和K均值技术以及学习矢量量化(LVQ)技术。该过程也包括使用图形处理单元处理数据。
此处所揭示的本发明还包括一种具有用于使用图形处理单元处理机器学习技术的计算机可执行指令的计算机可读媒质。该媒质包括将着色引擎加载到图形处理单元、将查询数据加载到中央处理单元、调用着色引擎以在图形处理单元上使用机器学习技术处理已训练的函数、以及获取由交互式使用应用程序所使用的结果。
该计算机可读媒质还包括令至少某些可学习参数驻留在图形处理单元上,并处理查询数据以获取输入数据并将输入数据加载到图形处理单元上。此外,该媒质包括使用着色引擎在图形处理单元上计算基元操作。基元操作包括以下的至少其中之一 a)矢量内积;(b)矩阵内积;(c)外积;(d)矩阵转置。
机器学习技术可以是神经网络和梯度下降技术。该计算机可读媒质还包括令梯度下降技术的至少某些可调节参数驻留在图形处理单元上。交互式使用应用程序可以是手写识别应用程序。此外,机器学习技术可以是神经网络,并还包括使用神经网络执行分类。交互式使用应用程序也可以是光学字符识别应用程序,机器学习技术是神经网络,并还包括使用神经网络执行分类。机器学习技术可以是梯度下降技术,并包括在图形处理单元上储存梯度下降参数,并通过加倍梯度下降参数来扩展梯度下降参数的尾数。
参考以下描述以及示出本发明的各方面的附图,可以进一步理解本发明。当结合附图阅读以下本发明的详细描述时,可以清楚其它特征和优点,附图作为示例示出了本发明的原理。
现在参考附图,贯穿附图,相同的标号表示对应的部件图1示出了可在其中实现机器学习GPU执行引擎和方法的合适的计算系统的一个示例。
图2所示是本发明所揭示的机器学习GPU执行引擎和方法的一个示例性实现的框图。
图3所示是作为示例,使用例如梯度下降算法的3层学习机器的训练模块的框图/流程图。
图4所示是图3所示的3层学习机器的测试模块的框图/流程图。
图5所示是机器学习GPU执行方法的训练阶段的操作的概况的流程图。
图6所示是机器学习GPU执行方法的测试阶段的操作的概况的流程图。
图7是神经网络中一对层的详细说明。
图8示出了由机器学习GPU执行方法使用的矩形存储技术。
图9示出了机器学习GPU执行方法的GPU存储器组织。
图10示出了使用纹理三角形的纹理映射的使用。
图11所示是内积的框图。
具体实施例方式
在以下本发明的描述中参考附图,附图形成了本发明的一部分,并在其中作为说明示出了可实践本发明的具体示例。可以理解,可以在不脱离本发明的范围的情况下使用其它实施例并作出结构上的变化。
I.介绍图形处理单元(GPU)传统上被用于加速实时3D图形显示。然而,作为提高的处理能力和可编程性的结果,GPU也能够有效地处理其它非图形相关过程。这些过程通常被限于替换图形算法和涉及大量数据和处理的科学计算问题(如,计算流体动力学)。然而,交互式使用应用,如语音和手写识别却吸引了相对较少的兴趣,这是由于GPU体系结构的限制和特性。
本发明所描述的机器学习GPU执行系统和方法通过将某些或所有CPU处理移植到GPU,减轻了CPU的计算限制。更具体地,本系统和方法将可用于各种各样的机器学习技术的体系结构从CPU转移到GPU。将处理转移到GPU通过使用克服GPU体系结构的限制,并在GPU体系结构的框架内能较好工作的若干新技术来实现。在克服了这些实现之后,机器学习技术尤其适合在GPU上处理,因为GPU通常比典型的CPU更强大。此外,类似于图形处理,机器学习技术的处理的问题涉及解非无效解以及大量的数据。
II.示例性操作环境本发明所揭示的机器学习GPU执行引擎和方法被设计成在计算环境中执行。以下讨论旨在提供可在其中实现机器学习GPU执行引擎和方法的合适的计算环境的简要、一般描述。
图1示出了可在其中实现机器学习GPU执行引擎和方法的合适的计算系统环境的一个示例。计算系统环境100仅为合适的计算环境的一个示例,并非暗示对本发明的使用范围或功能的局限。也不应将计算环境100解释为对示例性操作环境100中示出的任一组件或其组合具有依赖或需求。
机器学习GPU执行引擎和方法可以使用众多其它通用或专用计算系统环境或配置来操作。适合使用机器学习GPU执行引擎和方法的众所周知的计算系统、环境和/或配置包括但不限于个人计算机、服务器计算机、手持式计算机、诸如蜂窝电话和PDA等的膝上或移动计算机或通信设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费者电子设备、网络PC、小型机、大型机、包括任一上述系统或设备的分布式计算环境等等。
机器学习GPU执行引擎和方法可在诸如由网络环境中的计算机执行的程序模块等计算机可执行指令的一般上下文环境中描述。一般而言,程序模块包括例程、程序、对象、组件、数据结构等等,执行特定的任务或实现特定的抽象数据类型。机器学习GPU执行引擎和方法也可以在分布式计算环境中实践,其中,任务由通过通信网络连接的远程处理设备来执行。在分布式计算环境中,程序模块可以位于本地和远程计算机存储媒质中,包括存储器存储设备。参考图1,用于实现机器学习GPU执行引擎和技术的示例性系统包括计算机110形式的通用计算装置。
计算机110的组件可包括但不限于,处理单元120(如中央处理单元CPU)、系统存储器130以及将包括系统存储器的各类系统组件耦合至处理单元120的系统总线121。系统总线121可以是若干种总线结构类型的任一种,包括存储器总线或存储器控制器、外围总线以及使用各类总线体系结构的局部总线。作为示例而非局限,这类体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强ISA(EISA)总线、视频电子技术标准协会(VESA)局部总线以及外围部件互连(PCI)总线,也称为Mezzanine总线。
计算机110通常包括各种计算机可读媒质。计算机可读媒质可以是可由计算机110访问的任一可用媒质,包括易失和非易失媒质、可移动和不可移动媒质。作为示例而非局限,计算机可读媒质包括计算机存储媒质和通信媒质。计算机存储媒质包括以用于储存诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任一方法或技术实现的易失和非易失,可移动和不可移动媒质。
计算机存储媒质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由计算机110访问的任一其它媒质。通信媒质通常在诸如载波或其它传输机制的已调制数据信号中包含计算机可读指令、数据结构、程序模块或其它数据,并包括任一信息传送媒质。
注意,术语“已调制数据信号”指以对信号中的信息进行编码的方式设置或改变其一个或多个特征的信号。作为示例而非局限,通信媒质包括有线媒质,如有线网络或直接连线连接,以及无线媒质,如声学、RF、红外和其它无线媒质。上述任一的组合也应当包括在计算机可读媒质的范围之内。
系统存储器130包括以易失和/或非易失存储器形式的计算机存储媒质,如只读存储器(ROM)131和随机存取存储器(RAM)132。基本输入/输出系统133(BIOS)包括如在启动时帮助在计算机110内的元件之间传输信息的基本例程,通常储存在ROM131中。RAM132通常包含处理单元120立即可访问或者当前正在操作的数据和/或程序模块。作为示例而非局限,图1示出了操作系统134、应用程序135、其它程序模块136和程序数据137。
计算机110也可包括其它可移动/不可移动、易失/非易失计算机存储媒质。仅作示例,图1示出了对不可移动、非易失磁媒质进行读写的硬盘驱动器141、对可移动、非易失磁盘152进行读写的磁盘驱动器151以及对可移动、非易失光盘156,如CD ROM或其它光媒质进行读写的光盘驱动器155。
可以在示例性操作环境中使用的其它可移动/不可移动、易失/非易失计算机存储媒质包括但不限于,磁带盒、闪存卡、数字视频盘、数字视频带、固态RAM、固态ROM等等。硬盘驱动器141通常通过不可移动存储器接口,如接口140连接到系统总线121,磁盘驱动器151和光盘驱动器155通常通过可移动存储器接口,如接口150连接到系统总线121。
图1讨论并示出的驱动器及其关联的计算机存储媒质为计算机110提供了计算机可读指令、数据结构、程序模块和其它数据的存储。例如,在图1中,示出硬盘驱动器141储存操作系统144、应用程序145、其它程序模块146和程序数据147。注意,这些组件可以与操作系统134、应用程序135、其它程序模块136和程序数据137相同,也可以与它们不同。这里对操作系统144、应用程序145、其它程序模块146和程序数据147给予不同的标号来说明至少它们是不同的副本。用户可以通过输入设备,如键盘162和定位设备161(通常指鼠标、跟踪球或触摸板)向计算机110输入命令和信息。
其它输入设备(未示出)可包括麦克风、操纵杆、游戏垫、圆盘式卫星天线、扫描仪、无线电接收器、电视或广播视频接收器等等。这些和其它输入设备通常通过耦合至系统总线的用户输入接口160连接至处理单元120,但是也可以通过其它接口和总线结构连接,如并行端口、游戏端口或通用串行总线(USB)。监视器191或其它类型的显示设备也通过接口,如视频接口190连接至系统总线121。除监视器之外,计算机也可包括其它外围输出设备,如扬声器197和打印机196,通过输出外围接口195连接。
计算机110可以在使用到一个或多个远程计算机,如远程计算机180的逻辑连接的网络化环境中操作。远程计算机180可以是个人计算机、服务器、路由器、网络PC、对等设备或其它公用网络节点,并通常包括许多或所有上述与计算机110相关的元件,尽管在图1中仅示出了存储器存储设备181。图1描述的逻辑连接包括局域网(LAN)171和广域网(WAN)173,这里示出作为示例而非局限,但也可包括其它网络。这类网络环境常见于办公室、企业范围计算机网络、内联网以及因特网。
当在LAN网络环境中使用时,计算机110通过网络接口或适配器170连接至LAN171。当在WAN网络环境中使用时,计算机110通常包括调制解调器172或其它装置,用于通过WAN173,如因特网建立通信。调制解调器172可以是内置或外置的,通过用户输入接口160或其它适当的机制连接至系统总线121。在网络化环境中,描述的与计算机110相关的程序模块或其部分可储存在远程存储器存储设备中。作为示例而非局限,图1示出了远程应用程序185驻留在存储器设备181中。可以理解,示出的网络连接是示例性的,也可以使用在计算机之间建立通信链路的其它装置。
III.一般综述GPU被设计成加速实时3D图形显示。由于对更好图形的需求的增加,GPU迅速地变得更强大且可编程。作为其增加的可编程度的结果,GPU也能够有效地处理许多其它类型的非图形相关的过程。本发明所揭示的机器学习GPU执行引擎和方法通过将某些CPU处理移植到GPU上,减轻了CPU的计算限制。更具体地,本发明将通常由CPU处理的机器学习体系结构移植到GPU上。如后文所详细描述的,这需要使用若干实现技术来克服GPU的若干限制,并加速和优化机器学习技术的GPU处理。对于通用计算,机器学习尤其适合被移植到GPU上,因为GPU比典型的CPU更强大。
图2所示是本发明所揭示的机器学习GPU执行引擎和方法的示例性实现的框图。应当注意,图2仅是可实现并使用机器学习GPU执行引擎和方法的若干方法之一。机器学习技术可由GPU在训练和测试(或使用)阶段处理。训练阶段指的是在其中使用训练数据调整算法的参数的计算。测试阶段指的是在其中系统作为输入数据和训练参数的函数用于计算有用信息的计算。训练通常耗费较长的时间,但它可一劳永逸地完成。测试指的是例如在字符或语音识别中使用所展开的系统,有时候需要非常快的响应时间。在训练耗费扩展的时间段,但期望最大硬件独立性的应用中,训练在GPU上完成,而测试在CPU上完成。训练算法也可能过于复杂,以至于无法在GPU上运行,而测试算法较简单(如神经网络中的可训练卷积层(convolution layer))。在这一情况下,可能在CPU上训练学习算法,而在测试阶段使用GPU。当然,在某些情况下,可期望在GPU上运行训练和测试。GPU实现对训练和测试将机器学习处理速度提高到优于仅CPU实现的量级。由于GPU技术较新,且比较旧的CPU技术更快地进展,因此这一比值得到了提高。
更具体地,如图2所示,计算装置110包含机器学习GPU执行引擎200。计算装置还包含CPU120和CPU存储器130。CPU通过加速总线210与视频接口190进行通信。较佳地,该总线210是加速图形端口(AGP)或较新的PCI快速总线,它们被设计成特别地用于3D图形的吞吐量需求。
视频接口190包括GPU220和GPU存储器230。GPU220能够通过总线210向CPU120传输数据。机器学习GPU执行引擎220也与GPU220和GPU存储器230进行通信。机器学习GPU执行引擎200包括训练模块240和测试模块250。训练模块240在机器学习技术的训练阶段中使用,并用于使用GPU训练该技术的参数。测试(或使用)模块250用于计算已训练参数和输入的给定的函数。计算的结果从机器学习GPU执行引擎220传输到CPU120,以在诸如语音识别等交互式使用应用程序中使用。
IV.系统组件图3所示是作为示例使用梯度下降算法的3层学习机器的训练模块的框图/流程图。图3仅作为示例给出,并不意味着将本发明限于梯度下降算法。在本示例中,学习机器优化通过使用梯度下降来执行。在其它机器学习技术中,可传播概率来替代梯度,如在贝叶斯网络和图形模型中。层的排列的数量也是不受限制的,并且本发明可具有更多的层、更少的层或不同的层的排列(非串行)。参数被表示为W=(W1,W2,W3)。整个模块的输入是X,输出是Y=Y3。
每一层计算其输入Y、X或W的函数G。注意,从层函数的观点来看,W和Y是对称且不可区分的。这意味着W1、W2和W3本身可由其它层计算。G也可具有比Y和W更多的输入。每一层通过计算其输入的函数(前向传递),并通过传播其输出的导数与相邻层进行通信,输出的导数通过将输出梯度相乘获得,由其雅可比(Jacobian)转置表示为dE/dY。这是反向传递。作为定义,G的雅可比J是矩阵Jki=dYk/dXi,其中,k索引函数G的第k个输出,i索引第i个输入。误差函数E使用代价函数将最后一层的输出与目标T进行比较。不同的代价函数的示例可以是最小均方误差(MSE)、交叉熵(CE)或其它。代价函数为每一变量提供梯度,即每一变量如何影响价值以及在哪一方向上影响代价。该梯度对系统中每一变量和参数计算。更新参数W以降低代价函数。图4所示是图3所示的3层学习机器的测试模块的框图/流程图。
V.操作概述本发明所揭示的机器学习GPU执行引擎200使用机器学习GPU执行方法,以启用GPU对机器学习技术的处理。一般而言,该方法可被划分成使用GPU来训练机器学习技术的训练阶段,以及使用已训练的函数来解应用的问题的测试阶段。现在将讨论这些阶段的每一个。
训练阶段在训练阶段,机器学习GPU执行方法用于训练机器学习技术的可学习参数。图5所示是机器学习GPU执行方法的训练阶段的操作的概况。图5表示在GPU上执行的训练绘画的数据流程和控制结构。注意,该图并非对任一类型的机器学习技术专用。许多类型的机器学习技术(如,SVM、K均值、学习矢量量化(LVQ)、期望值最大化(EM)等)可使用该体系结构。上述机器学习技术在本领域中是众所周知的,因此不需要在此详细讨论。如图5所示,CPU向GPU给出指令,并阻塞直到GPU完成这些指令。可选地,也可令CPU和GPU同时计算。
参考图5,机器学习GPU执行方法的训练阶段通过加载着色引擎程序(P)、诸如权值等初始可训练参数(W)以及其它学习参数(L)开始(框500)。这一数据然后从CPU传输到GPU(箭头505)。从CPU到GPU的数据传输相对较昂贵,因此CPU在进入训练循环之前尽可能多地预加载数据。可训练参数(W)储存在GPU存储器230中(框510)。在一个较佳的实现中,学习参数(L)是每一神经网络层的权值以及每一单元的阈值。学习参数(L)是单个标量,称为学习速率。着色引擎程序(P)是用于前向和后向传播并用于权值更新的不同类型的着色引擎。
CPU然后开始在训练数据上循环,并通过加载批量训练数据(X,T)累加训练数据组(框515)。(X)表示像素图像,(T)表示其目标标签。使用组(或批量)的原因是存在启动CPU和GPU之间的数据传输的成本。每次按照若干模式的组传输数据更有效。
像素图像(X)然后被预处理,使得(X)被变换成(X′)(框520)。下一步,将(X′)和(T)发送到GPU(箭头525)。训练数据(X′)然后连同训练目标数据(T)(框535)一起储存在GPU存储器230中(框530)。预处理可具有许多不同的功能,仅举几个例子,如规范化数据使其处于较佳的格式、提取智能或复杂的特征以及生成失真以使数据组更丰富。理论上,预处理可在GPU或CPU上完成。然而,实际上,在CPU上编程比GPU更简单。这意味着如果预处理不需要大量的计算,则在CPU上运行预处理更简单。在某些情况下,某些操作可能无法在GPU上简单、有效地实现,或根本无法实现,并且因此必须在CPU上运行。在某些情况下,预处理在训练和测试阶段中可以不同。例如,在训练中,可从原始数据生成人工数据(平移、旋转等)-。已知这一过程能够在测试时刻改进生成。
应当注意,可在预处理中包括可训练参数。即使可训练参数是全局优化的一部分,并且结合驻留在GPU上的学习参数一起训练,这一情况也是真实的。然而,会产生困难,因为可能在每一模式之后,信息(如,误差梯度、负反馈等)必须从GPU传递回CPU,以更新驻留在CPU上的那些参数,使得下一模式可得益于所更新的预处理。当前,从GPU到CPU的数据流程尚未得到优化,因为图形卡通常被设计成向屏幕发送数据,而非向CPU发送回数据。其结果是,采用现有的体系结构,较佳的是将所有可训练参数保存在GPU上。较佳地,所有其它数据被保存在CPU上,并且处理在GPU上执行。可选地,可训练参数可同时驻留在CPU和GPU上。
一旦训练数据(X′)被加载到GPU上,CPU指令GPU运行处理机器学习技术所需的各种着色引擎(框540)。一种典型的机器学习技术由位于GPU220上的学习模块545表示。学习模块545包括计算函数G(X′,W)作为预处理的输入(X′)和可训练参数(W)的函数的学习机器550。其目标是使其输出尽可能地接近目标值(T)。计算G(X′,W)和(T)之间的误差555,并将误差信号(如,关于W的梯度)发送回学习机器550。然后更新权值(W)以减少G(X′,W)和(T)之间的误差。
作为示例,当训练两层神经网络时,前向和后向传播对应于约20个不同的着色引擎(其某些被多次调用)。当然,着色引擎的数量和复杂度可根据所使用的算法而不同。对组中的每一模式调用着色引擎(如,在某些情况下为500次)。对于随机梯度下降,在处理组中的每一模式之后更新学习参数。对于批量梯度下降,在更新学习参数之前在若干模式上累加学习参数梯度。是使用随机梯度下降还是批量梯度下降很大程度上取决于应用程序和学习算法。对于某些学习算法,如SVM,不产生这一问题。对于手写识别和神经网络,随机梯度下降机器学习技术是一种较佳的机器学习技术。
为一般性目的,可添加下面两个过程,使得CPU可在训练循环内从GPU获取反馈。例如,如图5所示,CPU可收集训练统计并获取训练进展数据(框560)。这可通过令GPU向CPU发送更新的可训练参数(W)和误差来实现(箭头565)。该过程是可任选的,如图5中由虚线框所示的。训练进展数据可用于调整学习参数,或甚至调整某种模式的呈现频率(框570)。例如,采用神经网络,有时候期望在学习进展时降低学习速率。在被称为“自举”的另一类算法中,某些模式的频率或其学习影响可以随由系统作出的误差的函数而改变。
预处理中的可训练参数也可按来自GPU的误差信号的函数来修改。这通过允许误差信号流回CPU,并在CPU上更新学习参数来实现。可相应地修改组大小。极端地,组大小为1,这意味着一旦误差信号如上文在预处理部分所提及的从GPU返回,则在每一次向GPU呈现之后在CPU上更新训练参数。
然后确定训练是否已完成(框575)。这可当所有的批量训练数据在固定数量的迭代之后被处理时确定,或者当达到了期望误差阈值时确定。如果训练未完成,则训练循环再次以数据的加载开始(框515)。否则,获取最终的已训练参数(W)(框580)。这可通过由GPU向CPU传输参数(W)来实现(箭头585)。然后,训练完成(框590)。
测试阶段在测试阶段,机器学习GPU执行方法用于计算输入和可训练参数的函数。图6所示是机器学习GPU执行方法的测试阶段的操作的概况的流程图。如图6所示,机器学习GPU执行方法计算某些可训练参数W和输入X的给定函数G。应当注意,可训练参数可使用GPU、CPU或通过任一其它装置来计算。此外,可训练参数可以是或不是训练的结果。在这一方面,图6独立于图5所示的可训练参数的训练。
在图6中,使用了类似于图5的体系结构。具体地,图5和6中的体系结构共享数据结构和着色引擎程序P。然而,一个重要的差异是不再需要后向传播着色引擎,因为训练已完成。机器学习GPU执行方法的测试阶段通过将着色引擎程序P和可训练参数W加载到GPU上开始(框600)。如在训练阶段一样,测试阶段试图在识别/使用循环之外尽可能多地进行下载并预计算。着色引擎程序P和可训练数据W然后被发送到GPU(箭头605)。具体地,着色引擎程序P被发送到GPU220以执行处理,而可训练参数W610被储存在GPU存储器230中。
接下来,收集并加载在其上计算函数G的一组模式X(框615)。存在初始化CPU和GPU之间的通信的成本,因此通过执行分组,可在若干模式上摊销这一成本。模式X然后在被从CPU发送到GPU之前被预处理成X′(框620)。X′然后被发送到GPU(箭头625)。输入数据X′630储存在GPU存储器230中。
预处理可在CPU或GPU上执行。然而,较佳地,只要预处理不是计算上太昂贵的,它就在CPU上执行。预处理对诸如从数据规范化和提取重要信息和特征等特征是有用的。在预处理之后,模式X′作为一组被发送到GPU(箭头625)。
接下来,CPU指令GPU使用着色引擎程序P(框635)。驻留在GPU上的函数模块包括已训练函数645。已训练函数645连同着色引擎程序一起用于计算函数Y=G(X′,W)。可使用GPU存储器230中的临时计算空间650来协助这一计算。从这一计算中,在GPU存储器230中累加对该组的每一模式的结果Y655,并将其作为函数模块的输出发送(框660)。结果Y然后被传输回CPU(箭头665),并且在CPU上获取结果Y(框670)。再次,从GPU到CPU的传输是相当昂贵的,因此分组且将Y的大小保持到最小是一种优点。在手写分类示例中,Y仅是图像X的类别,并因此相当小。确定是否有额外的批量查询数据X(框675)。如果有,则再次重新开始识别/使用循环。否则,将结果Y作为输出发送(框680)。
VI.操作细节机器学习问题描述若干机器学习技术包含可被强制转换为非常大量矩阵操作的计算作为内核。尤其感兴趣的是大的矩阵/矢量乘法。作为示例,用于手写识别的神经网络通常包含一对层。图7是神经网络中一对层的详细说明。
参考图7,隐藏变量的计算被强制转换为如下给出的矩阵乘法及其后跟随的映射步骤(对1层的计算)[w][i]=[o′][o]=f([o′])其中,f是S形函数f(x)=1e-x+1]]>或双曲正切函数f(x)=ex-e-xex+e-x]]>两个这样的层被串接,以产生结果。输入、隐藏和输出矢量的大小范围可上千。尽管图7和上文是基于神经网络的,然而应当理解,许多其它的机器学习问题也适合在上文给出的大浮点矢量上的相应操作的一般模型。
GPU上的基元操作不幸的是,许多机器学习技术,如神经网络、期望值最小化、和许多其它基于梯度下降的算法由简单的基元(或构成块)组成。这些基元包括·内积(矢量之间或矩阵与矢量之间)·外积(矢量之间)·线性代数(如,标量在矢量或矩阵上的加、减、乘)·应用到矢量或矩阵的非线性(如双曲正切、S形、阈值)
·矩阵转置机器学习GPU执行方法使用像素着色引擎实现这些操作的每一个。另外,该方法允许这些操作的每一个一起用于训练并在实时设置中使用。应当注意,该方法可用于神经网络或由与下文描述的相同的基元组成的任何其它的学习算法,或其简单的扩展。
使用像素着色引擎用于GPU计算机器学习GPU执行方法使用一个或多个像素着色引擎实现上述所有的操作。像素着色引擎在图形处理流水线中使用。像素着色引擎是在像素呈现硬件上执行的个别的程序。具体地,将三角形转换成像素的过程被称为“光栅化”。硬件采用三角形作为输入,并允许指令呈现由程序指定的每一像素,它可在呈现三角形之前加载。这些可编程三角形呈现器被称为“像素着色引擎”。着色引擎中的程序的指令近似汇编语言,因为它们的每一个都具有直接硬件实现。存在对着色引擎竞争的语言(和硬件),如高级着色引擎语言、Nvidia的C图形(Cg)以及DirectX。像素着色引擎引入的新灵活性不仅允许表面的自然呈现,也允许令GPU更接近通用并行处理器。
机器学习GPU执行方法使用GPU作为通用并行处理器。另外,该方法使用像素着色引擎以实现机器学习技术中使用的各种基元操作。作为并行专用GPU硬件的结果,这些算法的训练和使用在GPU上运行要比在CPU上运行快一个数量级。
在DirectX的Deirect3D组件中,有两种元素,被称为顶点着色引擎和像素着色引擎。DirectX是由Microsoft公司开发的一组应用程序接口(API),它使应用程序能够利用GPU的硬件加速特征。当前一代像素着色引擎是高度可编程的。两种类型的着色引擎都关注向输出设备呈现三角形(图形对象的构成块)。顶点着色引擎可用于诸如空间变换和三角形的顶点(并因此是名字)的动画等任务。像素着色引擎用于当单个三角形被光栅化时着色个别像素(或计算其色彩值)。
像素着色引擎被表达为DirectX着色引擎汇编语言中的一系列指令,它是由DirectX所定义的有限的、硬件独立语言。着色引擎中的代码对要呈现的三角形中的每一像素执行一次,并且其唯一的效果是对该像素设置四个矢量的值。着色引擎语言的限制以及边缘效果的缺乏意味着GPU能够自由地以任一顺序,并使用与其硬件可支持的同样多的并行性来呈现像素,从而获得非常高的性能。像素是4个矢量的事实提供了另一种并行性像素着色引擎的每一执行可同时计算四个元素(如,一个矢量的四个相邻元素)。
汇编语言编程中使用的许多工具可用于像素着色引擎。这些包括常量、寄存器、加法、减法、乘法、互逆、一小组超越函数等等。然而,诸如循环和分支等其它类似的构造一般是不可用的。这是因为每一着色引擎的指令数量被限制(在一种流行的GPU中为96个指令),并且因为着色引擎无法修改不同于所呈现的像素的存储器。这些限制意味着某些算法不适合由GPU处理,并且如果它们可完全实现,则它们在GPU上运行比在CPU上运行慢。为评估特定的机器学习算法是否能够在GPU上执行,需要检查组成该算法的每一个别操作。
实现单元操作机器学习GPU执行方法使用一个或多个像素着色引擎实现选中的每一基元操作。第一个挑战是令着色引擎计算在GPU存储器中为矩形的结果。换言之,该结果必须是浮点值的二维矩阵(4矢量)。然而,像素着色引擎在给定的三角形中呈现所有的像素。为克服这一问题,机器学习GPU执行方法指定三角形的矩形视口。图8示出了由机器学习GPU执行方法使用的矩形存储技术。具体地,图8示出了包含要呈现的像素的三角形800。依照机器学习GPU执行方法,GPU将仅在视口810和三角形800的交叉部分内计算像素。由此,为计算期望的矩形区域,将该区域指定为视口810,并将其包含在三角形800内,从而变为呈现目标。
在需要呈现矢量而非矩阵的情况下,可应用相同的技术。唯一的区别是指定仅为一像素高的视口矩形。类似地,为呈现标量值,可使用1×1的像素视口。
采用该技术以及像素着色引擎内可用的通用编程工具,可实现诸如x=F(x)等对矢量和数组的一元操作。对于需要从其它操作数中读取的操作,必须检查GPU存储器组织。具体地,DirectX允许存储器的矩阵区域被分配作为工作空间。图9示出了机器学习GPU执行方法的GPU存储器组织。如图9所示,工作空间900在GPU存储器内生成。在现有的硬件上,工作空间可从2048×2048像素的正方形区域(每一个都具有4个值)的最小分配生成。从这一子矩形910,着色引擎操作可从其它子矩形,如t1920、t2930和t3940中呈现并取出操作数。这一取操作数可通过操作数读950来实现。
DirectX中方便这一存储器组织的机制是纹理映射。纹理映射从将图像放入呈现的表面中的需求产生。例如,当呈现木星的表面、斑马或诸如砖墙等纹理时,必须考虑绘画到表面的模式以及光照、角度、反射等等。对于此操作,跨光栅化三角形的目标区域以双线性内插对矩形查找表的索引。通过将工作空间的矩形区域(不同于要呈现的区域)作为纹理来处理,它们可被映射到目的地矩形。由此,当计算目的地矩形中的x,y位置上的像素时,可访问纹理矩形的几何上对应的像素中的值。例如,如果要呈现a×b像素大小的目的地矩形,则可纹理映射同样为a×b像素的另一区域。这将产生着色引擎代码中对于对应于目的地中第i个像素的ai和bi处的源矩形值的直接访问。这一技术的一个简单应用允许任何矩阵、矢量或标量值被复制到工作空间中别处的同样大小的矩阵、矢量或标量中。可选地,x像素×1像素的纹理区域可被映射到目的地矩形。这提供了对其值依赖于要呈现的目的地像素的x坐标,但不依赖于y坐标的查找表的访问。
纹理的有用性可通过在着色引擎内的寄存器上使用算术来扩展。寄存器是着色引擎可用于呈现给定像素的本地变量。其值无法在像素之间共享(这将破坏并行性假定),但可(本地)用于中间结果。例如,当将其值复制到新位置时,任何数组或矢量可被转置。假定其左、右、上和下坐标为l、r、t和b的源矩形。然后指定其坐标为t、b、l和r的纹理矩形。在像素着色引擎内,在使用x和y纹理坐标从源取出值并将其复制到目的地之前,交换这两个纹理坐标。在呈现结束时,目的地将包含该源的转置。
图10示出了使用纹理三角形的纹理映射的使用。如图10所示,目的地1000的当前像素的呈现将从指定的源矢量1020中的纹理矩形1010检索纹理坐标(15,7)。在取出纹理值之前,反转行和列坐标,使得来自纹理矩形1030,具有位置(7,15)的值被实际读出,它位于要转置的实际真正的源矢量1040内。
DirectX允许纹理映射用于将一个以上源矩形映射到当前目的地。在现有的硬件中,在每一遍中至少可使用8个这样的映射。采用多源,可实现诸如(矢量A-矢量B->矢量C)等操作。在C中的每一像素上,取出从A到B的纹理映射值、对寄存器值执行初等数学、并储存结果。
从两个矢量到一个矩阵的纹理映射也提供了一种实现外积(矢量A*矢量B->矩阵C)的方式。设矢量A为行矢量,一个像素宽,矢量B为列矢量,一行高。将这些退化矩形纹理映射到矩阵C的矩形。然后,当呈现C的像素x、y时,纹理采样将产生A的第y个元素以及B的第x个元素,它们正是相乘和储存所需的值。
使用四个分量在讨论内积的实现之前,鉴于GPU工作空间具有四个分量这一事实,将讨论每一单元操作。这些分量由于每一像素由x、y、z和w值构成而产生。此处,标签x和y不应当与关于上文讨论的对像素坐标引用中的x和y相混淆。这四个分量常规地用于在四维对象空间中储存坐标。机器学习GPU执行方法充分利用了GPU编程模型和硬件的这一特征来更快地执行计算。可忽略这些分量中的三个,并且在如x平面上完成所有的计算,但是所得的编程简化将以高执行成本出现。
为利用这些分量,定义像素平面到数学数组或矢量中的位置的映射。对于矢量,最简单的映射如下像素0x->元素0像素0y->元素1像素0z->元素2像素0w->元素3像素1x->元素4依此类推。
为将其扩展到矩阵,观察到矩阵的每一行(或列)是一个矢量。上述映射被应用到每一行(或列)。是将四个分量折叠成行维度还是列维度是可以简化编程的方式对每一矩阵个别的作出的选择。
给定从矩阵或矢量元素到像素和分量的映射,可以清楚,复制操作完全不受影响。着色引擎texld和mov以及许多其它指令每次在一个像素上操作,因此它们分别将四个值从纹理像素移动到寄存器,并从寄存器移动到目的地像素。
矢量上的转置操作也不改变。分量总是被折叠成矢量的维度。在矩阵的情况下,代码不改变,但是必须注意,折叠的方向连同数据一起转置。
也可适应数学操作。采用适当的句法,许多着色引擎指令可在4矢量值或单个矢量上使用。例如,exp r1.x,r0.x取出寄存器0的x平面、对其取幂、并将结果储存在r1的x平面中。
外积两个矢量的外积可使用所有四个分量来实现,但是必须引入另一新技术。由机器学习GPU执行方法适用的该技术被称为索引器纹理技术。一般而言,这是仅在四个矢量分量之一中选择值的方法,它被映射到上文所描述的元素。
作为示例,考虑矢量A是大小为a的列矢量。矢量B是大小为b的行矢量。期望计算外积C-a行高且b列宽的矩阵。C将其四个分量折叠成列,或y维度。换言之,按照像素,C的存储矩形为b列宽,但仅为a/4行高(因为每一像素行储存4个矩阵行)。需要a为4的倍数。
需要计算C的每一像素的着色引擎例程。纹理映射对A是直接的,但对B不是。当计算C的第i个像素时,需要访问B的第i个值(非像素)。例如,在C的像素0,0的四个分量中,需要计算下列值C0,0=A0*B0C1,0=A1*B0C2,0=A2*B0C3,0=A3*B0这一计算可以在一个GPU mul(乘)指令中完成。这需要以某种方式将值B0放入寄存器的w平面中(如将A0-A3储存在r2中,将B0储存在r3的w分量中)。然后mul r1,r2,r3.wwww返回到另一步骤工作,如果存在可将B0从其像素内邻域B1-B3中挑选出的“位掩码”,则可使用dp4(点积)指令将该值提取到r3的w分量中。假定r5包含(1,0,0,0),且r4包含B0-B3(由B的纹理映射加载)。该指令将计算(r4.x*1+r4.y*0+r4.z*0+r4.w*0),它等于r4.x,或B0dp4 r3.w,r4,r5可计算内积,如果当为矩阵C的列0时值(1,0,0,0)可用,则当呈现列1时为(0,1,0,0);当呈现列2时为(0,0,1,0)等等。这是索引器纹理技术的目的。索引器纹理技术使用非常小的纹理-4像素宽且1像素高,并被初始化成下列值
这四个像素值包括了使用所描述的技术从矢量B提取个别值所需的所有“位掩码”。所剩下的是找出一种令正确的索引器纹理技术像素在着色引擎的每一调用中可用的方法。为完成这一任务,机器学习GPU执行方法使用纹理技术的又一应用。
在这一点上,纹理映射以保存纹理像素和目的地像素之间的一对一映射的方式被使用。这通过定义包含相同数量的像素的纹理坐标矩形和目的地矩形来完成。对于索引器纹理技术,定义大小为索引器纹理本身(按定义,为1.0×1.0纹理坐标单元)的倍数纹理坐标矩形如下。如果矩阵C的宽度为w像素,则对索引器纹理指定其宽度为w/4(必须是整数)的纹理坐标矩形。当跨C的宽度在每一像素上调用着色引擎时,索引器纹理坐标范围从0到w/4。换言之,当遍历C的每四个像素时,索引器坐标将从一个整数值改变到下一个。如果考虑纹理坐标的分数部分,则对C的每4个像素,其范围从0到1。这些正是采样索引器纹理以获取C的每一像素上的正确“位掩码”所需的值frc r3,t3 //将索引器纹理坐标的分数部分加载到寄存器3texld r4,r3,s1//使用寄存器3中的纹理坐标来采样索引器纹理使用上述技术,创建了计算两个矢量的外积的像素着色引擎。
内积内积是可被表示为(矩阵A*矢量B->矢量C)的操作。内积会产生问题,因为它需要在若干值上循环时累加和。这违反了着色引擎体系结构,后者假定在相邻像素之间没有通信。为此,内积无法被实现为单个像素着色程序。然而,如下文所示,内积可通过使用一系列着色引擎和某些额外的存储器来实现。
大小为a行×b列的矩阵A与大小为a的行矢量B相乘。注意,B通常被表示为列矢量,但使用行矢量可简化GPU计算。可回忆,作出矢量的转置副本可使用机器学习GPU执行方法来实现,因此这不是障碍。其结果C是高度为b的列矢量。假定矩阵A以其每像素的4个分量被如上所述地折叠成y(行)维度来组织。
图11所示是内积的框图。图11的对应公式如下C0=A0,0*B0+A0,1*B1+A0,2*B2+A0,3*B3C1=A1,0*B0+A1,1*B1+A1,2*B2+A1,3*B3依此类推。
注意,呈现目标C是一维的。这优于前面的方法,因为所定义的任何纹理映射可在C中的任一给定像素上对每一个仅具有一个值。然而,C中的每一值取决于B中的所有值和A的一行中的所有值。由此,必须使用另一方法以在着色引擎中从A和B访问多个值。这一方法首先使用多个纹理映射(采用当前硬件,8是合理的数字)来有效地读取多个操作数。其次,在着色引擎中使用地址算术来读取额外的操作数。
即使采用这些技术,也无法在单次呈现中计算大内积。这是因为像素着色程序无法使用分支或循环,并仅可包含有限数量的汇编指令(如在一个当前的实现中为96)。由此,每一着色引擎仅可在达到指令限制之前完成某些计算量。幸运的是,内积可通过限制一次所考虑的A的列数被分解成一组子问题。这将产生一组列矢量部分乘积。该部分乘积然后可被迭代地缩减,直到获取包含内积结果的单个列矢量。
分解技术如下。首先,创建将A的12列子矩阵与B的12列子矢量相乘的着色引擎。有8个纹理映射可用,并且6个被分配给A,2个被分配给B。对A的6个映射具有相同大小的源矩形,但是在6个不同的水平偏移上,从0到5像素。这产生对矩阵的前6列的直接访问(可以回忆,1像素等于水平方向上的1列)。B的两个映射也可按1个像素偏移,给予对B的前8列的直接访问(其中,1像素等于4列)。
着色引擎过程对与使用GPU中的临时(草稿)存储器的目的地矩形的12列部分乘积运行。一次计算C的四行(一个像素)着色引擎过程如下a)使用texld(纹理加载)指令4次,用彼此水平地偏移一个像素的4个纹理映射将A的前4个像素加载到寄存器中。每一像素包含四个行值。使用另一texld加载B的一个像素(4列)。
b)使用mul将前4个乘积储存到寄存器0中。这对所呈现的第一个像素计算A0,0*B0、-A1,0*B0、A2,0*B0和A3,0*B0。记号xxxx指对所有四个乘积使用寄存器1(即B0)的x分量mul r0,r1.xxxx,r2c)使用mad(乘/加)将下一4个乘积累加到寄存器0中。这访问A的第二列(通过r3),并加到先前的结果-乘积A0,1*B1、A1,1*B1、A2,1*B1和A3,1*B1上。使用yyyy来访问B1
mad r0,r1.yyyy,r3,r0d)以同一方式再使用mad两次,累加后面8个乘积mad r0,r1.zzzz,r4,r0mad r0,r1.wwww,r5,r0e)现在,准备第五到八个列(列号4-7)。列4和5已可由分配给A的6个纹理映射中的剩余两个访问。对于列6和7,采用列6的坐标,并加上常量c0两次,c0被设为等于一个像素(或工作空间宽度的1/2048)。这些坐标对于列6和7被储存在额外的寄存器中。然后,使用四个texld指令将这些值,即A0,4到A3,7储存在寄存器中。
f)使用分配给B的被偏移一个像素的第二个纹理映射,加载B4到B7的值(一个像素的值)。
g)使用四个mad指令将另外16个乘积累加到储存在r0中的四个累计中,如步骤(b)到步骤(d)所完成的。
h)现在,对部分乘积的最后四个列作准备。在这一点上,已使用了所有的纹理映射。由此,获取列7的地址,它仍在寄存器中,并连续四次将c0加到该值上。结果储存在寄存器中。执行同一过程将C0加到包含B的第二个像素的地址的寄存器中。这包括将其前进一个像素以访问B8到B11。一旦正确的坐标在寄存器中,再次使用texld将A0,8到A3,11和B8到B11的值加载到其它寄存器中。
i)再使用四个mad指令将最后16个乘积累加到r0中。现在,r0包含12列部分内积的元素C0到C3的值。然后,着色引擎例程完成。不在该着色引擎中处理更多的列的原因是将达到每一着色引擎的指令限制。
上文是将12列部分内积计算到临时存储器中的列矢量的方法。该方法可以如下扩展到宽于12列的矩阵。首先,只要剩余的宽度是12或更多,就处理12列部分乘积。下一步,与第一部分结果直接相邻的这些遍数的结果位于临时存储器的连续块中。最后,如果剩余8或4列(可以回忆,矩阵的宽度必须是4的倍数),则使用被书写成适合8或4列的经修改的着色引擎。用于这些着色引擎的技术是12列着色引擎的简化。
这可获得表示部分结果的一个或多个相邻列矢量的块。这些块需要被“缩减”,即,将其相加成包含最终内积的单个列矢量(并位于可由其它例程访问的明确位置,而非“草稿”存储器)。为效率目的,使用纹理映射(与寄存器中的地址计算相反)来访问需要被缩减的部分结果。使用8个纹理映射作为源,可在一次缩减多达8个部分结果。用于此目的的着色引擎代码是非常直截了当的,它由texld和add指令构成。简化该过程的一个方法是通过要缩减的位置的选择,而非最终结果。即,缩减的结果可被放入现有部分结果的右侧的下一列中。以这一方式,直到最后一个缩减步骤,要被缩减的部分结果的组总是相邻的矩形。采用这些技术以及足够的临时存储器,可计算任意大小的内积。
上文示出了机器学习GPU执行方法包含训练神经网络(以及由相同的操作组成的其它任何机器学习算法)所需的所有操作。此外,这些操作可在GPU上被实现为像素着色引擎,并且在所有的情况下,这些算法有较高程度的并行性。
VII.工作示例为更完整地理解本发明所揭示的机器学习GPU执行系统和方法,介绍一个示例性工作示例的操作细节。应当注意,该工作示例仅是可实现机器学习GPU执行系统和方法的一个示例。
在本工作示例中,机器学习GPU执行系统和方法在具有ATIRadeon 9800图形卡的单处理器2.8GHz Pentium 4上运行。9800图形卡具有94个位置的指令存储器和256MB的工作空间,其中16MB用于读/写工作空间,剩余的用于只读数据。仅涉及CPU的实现已被优化,以利用Pentium 4的SSE SIMD扩展,因此比较在SIMD和SIMD之间作出。GPU加速对所测试的示例仍然为一个数量级。
该工作示例示出了用于执行手写识别的机器学习GPU执行系统和方法。其任务是找出手写数字的像素图像的分类(′0′到′9′)。训练数据库由60,000个训练图像及其正确的标签组成。该训练组有时候被称为MNIST,并在web上可用,它在机器学习算法文献中是众所周知的。为完成该任务,使用神经网络方法。具体地,该神经网络是2层全连接神经网络。
通过后向传播对2层全连接神经网络的训练被分解成以下遍数
这里,前向传播是矩阵W1乘以矢量I,其后跟随函数映射F1(x)(在这一情况下,F1(x)=双曲正切)以计算矢量H。由于在这一神经网络中有2层,因此对W2、H和F2(x)(在这一情况下,F2(x)=S形)重复相同的操作,以产生O。可以同一方式实现更多的层。W1、W2是神经网络的每一层的权值的矩阵,I是输入矢量,H是隐含层矢量,O是输出矢量。通常也向每一隐含单元和输出单元添加阈值。该阈值可通过向输入和隐含层添加其值总是为1的单元来估算。将常量单元连接到其它单元的权值有效地为这些单元的阈值。如果层I和H按照常量单元来增加,则上述公式对每一隐含和输出层正确地实现了阈值。该阈值参数可嵌入在W1和W2内。误差计算是神经网络的目标矢量和输出矢量之差乘以F(x)函数的导数D(x)。F(x)和对应的D(x)的公式如下
注意,着色引擎语言具有指数函数,它可按分量逐个应用到矢量,或从着色引擎观点来看,按像素逐个应用。
权值更新通过执行该层的误差矢量和输入矢量的外积来执行。所得的矩阵按照学习系数á缩放,并添加到现有的权值矩阵中。为对网络向上传播误差,计算另一矩阵矢量乘法。即,计算权值矩阵的转置与误差矢量的乘法,并再次按D(x)函数缩放。
作为概括,使用机器学习GPU执行方法在GPU上实现以下操作1.矩阵*矢量->矢量(内积)2.对矢量的每一元素计算x=f(x)(其中,f是双曲正切或对数函数,或其导数)3.矢量A-矢量B->矢量C4.矢量*矢量->矩阵(外积)5.矩阵A+常量*矩阵B->矩阵A6.矩阵转置7.复制(矩阵或矢量)到GPU存储器内的新位置
8.从CPU存储器复制(矩阵或矢量)到GPU存储器,或反之亦然(这直接由DirectX支持,并仅为完整性而提及)这些操作的每一个在一遍中完成,有时候当上述限制阻碍了在单遍中计算操作时,可在多遍中完成。GPU中的实际执行需要在预处理中创建遍数的列表。该列表可手动或自动创建。此外,个别函数必须被编译并下载到GPU(同样在预处理中),输入和训练值必须被下载到图形存储器的工作空间中,然后三角形和视口必须被下载并且对每一遍指定函数。这些步骤的每一个通过对Direct 3D(D3D)图形API的调用来实现。注意,下载三角形和视口启动一遍的执行。如上所述,呈现GPU中被剪切的三角形组成了隐含的每像素的DO循环。对每一遍的特定片段着色过程被编码为每一多边形的属性。对于迭代训练,该序列对每一迭代重复。贯穿所有的迭代,不需要将数据从图形存储器读回CPU中,除非程序员希望监控过程。图形存储器到主存储器的传输在当前的硬件中较慢,因此程序员通常避免这样的操作。
本发明的以上描述为说明和描述目的而提出。它并不意味着穷尽本发明或将其限于所揭示的精确形式。鉴于上述教导,可作出许多修改和变化。本发明的范围并不意味着由本发明的详细描述限制,而是由所附权利要求书来限制。
权利要求
1.一种用于处理计算机应用程序的计算机实现的方法,其特征在于,它包括使用一图形处理单元处理一机器学习技术以获取结果;以及使用所述结果以提供由所述计算机应用程序使用的解决方案。
2.如权利要求1所述的计算机实现的方法,其特征在于,使用图形处理单元处理机器学习技术还包括以下的至少其中之一(a)使用所述图形处理单元训练所述机器学习技术的可学习参数;(b)使用所述图形处理单元测试和计算输入与所述已训练的可学习参数的函数;(c)使用所述图形处理单元训练可学习参数,并测试和计算输入与所述已训练的可学习参数的函数。
3.如权利要求1所述的计算机实现的方法,其特征在于,所述结果是已训练的可学习参数,所述方法还包括使用所述图形处理单元训练所述机器学习技术的可学习参数,以获取所述已训练的可学习参数;以及使用所述已训练的可学习参数来获取所述解决方案。
4.如权利要求1所述的计算机实现的方法,其特征在于,它还包括使用一中央处理单元获取已训练的可学习参数;以及使用所述图形处理单元从测试和计算输入与所述已训练的可学习参数的函数中获取结果。
5.如权利要求1所述的计算机实现的方法,其特征在于,它还包括使用所述图形处理单元获取所述机器学习技术的所述已训练的可学习参数;以及使用所述图形处理单元测试和计算输入与所述已训练的可学习参数的函数。
6.如权利要求1所述的计算机实现的方法,其特征在于,所述交互式使用计算机应用程序是以下之一(a)语音识别应用程序;(b)手写识别应用程序。
7.如权利要求1所述的计算机实现的方法,其特征在于,所述机器学习技术是神经网络。
8.如权利要求3所述的计算机实现的方法,其特征在于,它还包括在所述图形处理单元上储存所述已训练的可学习参数的至少某些。
9.如权利要求1所述的计算机实现的方法,其特征在于,处理机器学习技术还包括使用一像素着色引擎计算一内积,所述内积是以下的至少其中之一(a)矢量内积;(b)矩阵内积。
10.如权利要求9所述的计算机实现的方法,其特征在于,它还包括将所述内积分解成子问题,并使用像素着色程序在所述子问题上执行多遍。
11.如权利要求1所述的计算机实现的方法,其特征在于,处理机器学习技术还包括使用一像素着色引擎计算一外积。
12.如权利要求11所述的计算机实现的方法,其特征在于,它还包括使用纹理映射计算所述外积。
13.如权利要求1所述的计算机实现的方法,其特征在于,处理机器学习技术还包括使用一像素着色引擎执行矩阵转置。
14.如权利要求13所述的计算机实现的方法,其特征在于,它还包括使用纹理映射执行所述矩阵转置。
15.一种具有用于执行权利要求1所述的计算机实现的方法的计算机可执行指令的计算机可读媒质。
16.一种用于使用图形处理单元加速并优化机器学习技术的过程,其特征在于,它包括训练所述机器学习技术的可学习参数以获取已训练的可学习参数;使用所述已训练的可学习参数,以从所述机器学习技术中获取结果;使用像素着色引擎执行以下的至少其中之一(a)训练可学习参数;(b)使用所述已训练的可学习参数;以及输出所述结果由应用程序使用。
17.如权利要求16所述的过程,其特征在于,所述像素着色引擎驻留在一图形卡上。
18.如权利要求16所述的过程,其特征在于,它还包括在所述图形处理单元上查找所述可学习参数的至少某些。
19.如权利要求16所述的过程,其特征在于,它还包括使用像素着色引擎计算以下的至少其中之一(a)矢量内积;(b)矩阵内积;(c)外积;(d)矩阵转置。
20.如权利要求16所述的过程,其特征在于,所述机器学习技术是神经网络。
21.如权利要求20所述的过程,其特征在于,所述神经网络是以下至少其中之一(a)多层、全连接的神经网络;(b)卷积神经网络。
22.如权利要求16所述的过程,其特征在于,所述机器学习技术使用期望值最大化(EM)技术。
23.如权利要求16所述的过程,其特征在于,所述机器学习技术是以下的至少其中之一(a)K均值技术;(b)学习矢量量化(LVQ)技术。
24.如权利要求16所述的过程,其特征在于,它还包括使用所述图形处理单元预处理数据。
25.如权利要求24所述的过程,其特征在于,预处理包括以下的至少其中之一(a)规范化数据以将其置于较佳的形式用于输入;(b)从所述数据中提取信息和特征;(c)获取输入数据并将所述输入数据加载到所述图形处理单元上。
26.一个或多个在其上具有计算机可读指令的计算机可读媒质,当由一个或多个处理器执行所述指令时,促使所述一个或多个处理器执行权利要求16所述的过程。
27.一种具有用于使用图形处理单元处理机器学习技术的计算机可执行指令的计算机可读媒质,其特征在于,所述指令包括将着色引擎加载到所述图形处理单元上;将数据加载到所述图形处理单元上;调用所述着色引擎以使用所述机器学习技术在所述图形处理单元上处理一已训练函数;以及获取由交互式使用应用程序使用的结果。
28.如权利要求27所述的计算机可读媒质,其特征在于,它还包括令至少某些可学习参数驻留在所述图形处理单元上。
29.如权利要求27所述的计算机可读媒质,其特征在于,它还包括预处理所述查询数据以获取输入数据;以及将所述输入数据加载到所述图形处理单元上。
30.如权利要求27所述的计算机可读媒质,其特征在于,它还包括使用所述着色引擎在所述图形处理单元上计算基元操作。
31.如权利要求30所述的计算机可读媒质,其特征在于,所述基元操作包括以下的至少其中之一(a)矢量内积;(b)矩阵内积;(c)外积;(d)矩阵转置。
32.如权利要求27所述的计算机可读媒质,其特征在于,所述机器学习技术是神经网络。
33.如权利要求27所述的计算机可读媒质,其特征在于,所述机器学习技术是梯度下降技术。
34.如权利要求33所述的计算机可读媒质,其特征在于,它还包括令所述梯度下降技术的可调节参数的至少某些驻留在所述图形处理单元上。
35.如权利要求27所述的计算机可读媒质,其特征在于,所述交互式使用应用程序是手写识别应用程序。
36.如权利要求35所述的计算机可读媒质,其特征在于,所述机器学习技术是神经网络,它还包括使用所述神经网络执行分类。
37.如权利要求27所述的计算机可读媒质,其特征在于,所述交互式使用应用程序是光学符号识别应用程序。
38.如权利要求37所述的计算机可读媒质,其特征在于,所述机器学习技术是神经网络,它还包括使用所述神经网络执行分类。
39.如权利要求27所述的计算机可读媒质,其特征在于,所述机器学习技术是梯度下降技术,它还包括在所述图形处理单元上储存梯度下降参数;以及通过在两个存储位置上储存每一参数扩展所述梯度下降参数的精度,一个存储位置包含所述参数值的较高位数字,另一存储位置包含较低位数字。
全文摘要
一种使用图形处理单元(GPU)处理机器学习技术(如神经网络)和其它非图形应用来加速并优化处理的系统和方法。该系统和方法将可用于各种各样的机器学习技术的体系结构从CPU转移到GPU。到GPU的处理转移使用克服限制并在GPU体系结构的框架内工作良好的若干新技术来实现。当克服了这些限制之后,机器学习技术尤其适合在GPU上处理,因为GPU通常比典型的CPU更强大。此外,类似于图形处理,机器学习技术的处理涉及具有解非无效解和大量数据的问题。
文档编号G06F3/14GK1627251SQ20041010197
公开日2005年6月15日 申请日期2004年12月8日 优先权日2003年12月9日
发明者D·W·斯坦克劳斯, I·A·布克, P·Y·西马德 申请人:微软公司