本文最初发布于 Medium 网站,经原作者授权由 InfoQ 中文站翻译并分享。
John Hennessy 和 David Patterson 在 2018 年 6 月 4 日以 2017 年图灵奖(相当于计算机科学诺贝尔奖)的获得者身份发表了他们的图灵讲座《计算机架构新的黄金时代》。讲座的三个关键见解分别是:
软件进步可以激发架构创新。
硬件/软件接口的进化为架构创新创造了机会。
市场最终会解决架构争论。
我想再补充第四点,补全这个循环:
在竞争中胜出的架构促进了后续的软件进化。
自从 Hennessy/Patterson 的演讲以来,市场可以说已经在 AI 领域中实现了见解 #3,将图形处理单元(GPU)推举为推动 AI 革命的架构胜出者。在本文中,我将探讨 AI 革命是如何激发架构创新和重新发明 GPU 的。我希望本文能回答我自己的一个重要问题:
GPU 能否在计算机架构新的黄金时代继续闪耀?
领域特定架构
Henessy 和 Patterson 提出了领域特定架构(DSA)的概念,旨在为计算机架构带来创新,努力迈向新的黄金时代。顾名思义,GPU 是 3D 图形领域的 DSA。它的目标在 3D 虚拟世界中渲染照片般逼真的图像;然而,几乎所有人工智能研究人员都在使用 GPU 来探索超越 3D 图形领域的想法,并在人工智能的“软件”,也就是神经网络架构方面取得了一系列突破。
GPU 在 3D 世界仍然是不可或缺的,同时它已成为人工智能世界的“CPU”,因为它促进了 AI 的软件创新。除了 3D 用途之外,GPU 架构师一直在努力将 GPU 的计算资源用于非 3D 用例。我们将这种设计理念称为通用 GPU(GPGPU)。
如今,我们看到行业中涌现了大批 AI DSA 而非 GPGPU,前者试图凭借更好的性能来取代 GPU。甚至 GPU 本身也挣扎在它的双重属性,AI DSA 和 3D DSA 之间。原因是 AI DSA 需要加速张量运算,这在 AI 中是很常见的运算,但在 3D 世界中是没有的。同时,为 3D 用途准备的固定功能硬件对 AI 来说一般是不需要的。
于是,架构争论的主题应该集中在以下几个方面:
GPU 能否保住人工智能世界“CPU”的宝座?
GPU 是否会分成两种 DSA,一种用于 AI,另一种用于 3D?
我的预测如下:
GPU 硬件/软件接口将维持 GPU 作为 AI 世界“CPU”的地位。
基于 AI 的渲染会让张量加速成为 GPU 的一大支柱。
虚拟世界和现实世界互相映射的数字孪生理念将主导市场,最终解决架构争论。
GPU 硬件/软件接口
我们可以将 GPU 在 3D 领域中的主导地位和在 AI 世界中取得的巨大成功归功于它的硬件/软件接口,这种接口是 GPU 和 3D 图形软件架构师努力推行的。这种接口是解决以下悖论的关键。虽然 GPU 社区在继续提升 GPU 的通用性,但业界的其他人已转向更专业的硬件,以应对摩尔定律终结的困境。
GPU 流水线
双层可编程性
从概念上讲,GPU 是一个处理很多阶段的较长线性流水线。不同类型的工作项目在流经这个流水线时被一一处理。在早期,每个处理阶段都是一个功能固定的块。程序员对 GPU 能做的唯一控制就是调整每个块的参数。如今,GPU 硬件/软件接口让程序员可以自由地处理每个工作项目,无论它们是顶点还是像素。开发者无需在每个顶点或像素循环中处理循环头,因为 GPU 架构师在一个固定函数中实现了它。这种架构选择让程序员负责关注循环体,或称“着色器”,它通常以工作项目的类型命名,例如用于处理顶点的“顶点着色器”和用于处理像素的“像素着色器”。
现代游戏是如何通过这种线性流水线生成令人惊叹的画面的呢?除了通过流水线在一个 pass 中控制不同类型的着色器之外,程序员还可以通过流水线的多个 pass 逐步生成多张中间图像,最终生成屏幕上看到的图像。程序员快速创建了一个计算图,描述了中间图像之间的关系。图中的每个节点代表通过 GPU 流水线的一个 pass。
通用计算资源的集中池
一个中心化的通用计算资源池被不同的处理阶段之间共享,用来完成繁重的工作。这种方案的最初动机是为了负载平衡。在不同的使用场景中,各个处理阶段可能具有截然不同的负载。被称为着色器核心的计算资源逐渐变得更具通用性,以实现灵活性和产品差异化。
某一天,GPU 架构师尝试将中心化着色器池作为 GPGPU 提供给了非 3D 应用程序。这种设计方案让 GPU 在 AI 任务方面取得了突破,甚至将 AI 任务作为了自己的兼职工作。
均衡的专业能力
GPU 架构师时不时会在不改变硬件/软件接口的情况下,通过添加协处理单元来“加速”或“对领域定制”着色器池。纹理单元就是这样一个协处理单元,纹理贴图中的纹素通过它在到达着色器池的途中被提取和过滤。特殊函数单元(SFU)是负责执行超越数学函数的另一种协处理单元,处理对数、平方根倒数等函数。
虽然这听起来很像 CPU 中的超标量设计,但它们有一个显著区别:GPU 架构师根据着色器程序使用协处理单元的“平均”频率来分配协处理单元的吞吐量。例如,我们可以为纹理单元提供着色器池吞吐量的八分之一,因为我们假设纹理操作出现在基准测试或游戏中的时间平均为八分之一。当协处理单元处于繁忙状态时,GPU 会切换任务以让自己的资源被充分利用。
用于 3D 用途的张量加速
在前文中,我指出了 GPU 在 3D 用途中难以利用张量加速。我们看看如果我们改变 GPU 渲染典型游戏帧的方式,这种状况能否改变。GPU 首先为每个像素生成为像素着色所需的所有信息,并存储在 G-buffer 中。从 G-buffer 中,我们会计算如何点亮一个像素,然后是几个处理步骤,包括:
去除锯齿边缘(抗锯齿,AA)
将低分辨率图像放大到更高精度的图像(超分辨率,SR)
向整个帧添加一些特定视觉效果,例如环境光遮蔽、运动模糊、布隆过滤或景深。
我们称这种渲染方案为延迟着色,因为对像素的着色是“延迟”的,直到每个像素都获得所需的信息后才开始。我们将照明之后的处理步骤称为后处理。今天,后处理消耗了大约 90%的渲染时间,这意味着 GPU 的屏幕时间主要用在 2D 而非 3D 上!
NVIDIA 已经展示了用来做 AA 和 SR,基于 AI 的 DLSS 2.0,这项技术声称可以生成比没有 DLSS 2.0 的原生渲染图像更好看的画面。此外,NVIDIA 还为光线追踪提供了基于 AI 的蒙特卡罗去噪算法,这样我们就可以使用很少的光线来实现原本需要更多光线才能做到的画面质量。另外,人工智能技术为其他许多后处理类型提供了一类新的解决方案,例如用于环境遮蔽的 NNAO 和用于景深的 DeepLens。
如果基于 AI 的后处理成为主流,张量加速将成为 GPU 在 3D 用途上的支柱。GPU 分化为 3D DSA 和 AI DSA 的可能性也会下降。
3D/AI 融合
为了解决架构争论,我们要解决最后一个难题:我们最后是否应该移除 3D 渲染中的固定功能硬件,尤其是在用于 AI 用途时这样做?请注意,通过 GPGPU,GPU 可以将 3D 渲染作为纯“软件”来实现,而无需使用任何固定功能的硬件。
严格意义上讲,给定场景参数,3D 渲染模拟的是光子如何从光源穿过空间,与 3D 虚拟世界中的对象交互。GPU 的传统 3D 渲染过程是这个过程的一个非常粗略的近似。因此,微软将光线追踪宣传为“未来的完整 3D 效果”时表示,“[基于传统光栅化的]3D 图形是一个谎言”。然而,一位 3D 渲染纯粹主义者可能仍然不会理会光线追踪技术,因为在光线追踪过程中,我们是将光线从像素向后追踪到 3D 虚拟世界来实现 3D 渲染的,这也是不真实的。
这两种方法都是基于模拟的 3D 渲染的近似方案。在两种方案下,我们都会将 3D 虚拟世界的建模,或者说内容创建与渲染分离开来。在第一种方案下,对 3D 虚拟世界建模需要工程师和艺术家进行大量艰苦而富有创造性的工作,来描述每个对象及其与灯光交互方式的物理属性。在第二种方案下,通过渲染做到完全真实是不可能的,因为我们需要大幅简化 3D 渲染以在资源预算内达成多个性能目标。
相比使用最著名的科学知识和数学理论为给定问题寻找解决方案,人工智能方法是从数据中“学习”计算模型,或者说神经网络。我们通过反复试验迭代地调整网络参数。我们通过先前的参数估计向前运行网络并测量失配或称“损失”。然后我们根据梯度调整参数以减少损失,有效地向梯度的相反方向引导损失图景。这种机制称为反向传播,要求沿前向路径的所有计算都是可微的,以参与梯度计算。
神经渲染是一个新兴的人工智能研究领域,它使用上述方法来研究 3D 渲染。下面是我用来跟踪神经渲染进展的思维导图:
这个 3D 虚拟世界模型隐式表示为神经网络参数(参见 NeRF、GRAF、GIRAFFE),我们将真实世界图像与我们从虚拟世界渲染的图像对比来推断出这些参数。然后我们反向传播对比的梯度来调整神经网络参数。或者,我们可以从数据中学习显式 3D 网格(参见 DeepMarching Cube,GAN2Shape)。
实际上,对 3D 虚拟世界建模与学习神经网络参数是一回事。这个过程要求我们在前向路径中包含一个 3D 渲染流水线,并在多个紧密循环中集成 3D 虚拟世界的建模和渲染。通过对真实世界图像迭代多个渲染和测试,我们获得了可用于渲染虚拟世界新视图的所需模型和场景参数。
在这个框架内,我们可以选择不调整每个参数的整体,例如,保持物体的形状完整但估计其位置(参见 iNeRF)。这样,我们可以高效地尝试识别和定位有问题的对象,而不是对其建模。建模和识别任务之间不再存在区别。相反,问题在于我们想要“学习”或“估计”哪些场景参数。
结论
因此,在人工智能解决问题的范式下,3D 渲染的目标不仅是生成 3D 虚拟世界的逼真图像,而且还是根据现实世界来构建虚拟世界。此外,新的框架通过以下方式重新定义了 3D 和 AI:
3D 渲染成为 AI 训练循环中必不可少的操作
训练,或“梯度下降”,过去只出现在云中的神经网络训练过程,现在则是推理的一部分。
照片级图像与保持真实世界和虚拟世界之间的对应关系是同样重要的。
数字孪生理念要求将庞大且不断变化的现实世界带到其尚未开发的孪生虚拟世界中,并不断维持两者之间的对应关系。通过神经渲染获得的虚拟对象需要与通过经典方法构建的虚拟对象共存。因此,我相信神经渲染和传统渲染将在 GPU 上融合,充分利用其成熟和高性能的 3D 流水线。数字孪生的需求将由未来的 GPU 负责实现。我们还需要在 GPU 端做很多工作来实现“可微”,以参与 AI 训练循环的梯度计算,。
假设 GPU 因响应 3D 世界中的 AI 进展而获得原生可微和张量加速能力,我预计 GPU 的双重人格将化为一体。
然后,GPU 会维持其首选架构的地位,继续促进 AI 软件的进一步发展,并最终在计算机架构新的黄金时代继续闪耀。
原文链接:
评论