写点什么

GPU 在计算机架构的新黄金时代还会继续闪耀吗?

  • 2021-09-02
  • 本文字数:4024 字

    阅读完需:约 13 分钟

GPU在计算机架构的新黄金时代还会继续闪耀吗?

本文最初发布于 Medium 网站,经原作者授权由 InfoQ 中文站翻译并分享。


John Hennessy 和 David Patterson 在 2018 年 6 月 4 日以 2017 年图灵奖(相当于计算机科学诺贝尔奖)的获得者身份发表了他们的图灵讲座《计算机架构新黄金时代》。讲座的三个关键见解分别是:


  1. 软件进步可以激发架构创新。

  2. 硬件/软件接口的进化为架构创新创造了机会。

  3. 市场最终会解决架构争论。


我想再补充第四点,补全这个循环:


在竞争中胜出的架构促进了后续的软件进化。


自从 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 来说一般是不需要的。


于是,架构争论的主题应该集中在以下几个方面:


  1. GPU 能否保住人工智能世界“CPU”的宝座?

  2. GPU 是否会分成两种 DSA,一种用于 AI,另一种用于 3D?


我的预测如下:


  1. GPU 硬件/软件接口将维持 GPU 作为 AI 世界“CPU”的地位。

  2. 基于 AI 的渲染会让张量加速成为 GPU 的一大支柱。

  3. 虚拟世界和现实世界互相映射的数字孪生理念将主导市场,最终解决架构争论。

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 中,我们会计算如何点亮一个像素,然后是几个处理步骤,包括:


  1. 去除锯齿边缘(抗锯齿,AA)

  2. 将低分辨率图像放大到更高精度的图像(超分辨率,SR)

  3. 向整个帧添加一些特定视觉效果,例如环境光遮蔽、运动模糊、布隆过滤或景深。


我们称这种渲染方案为延迟着色,因为对像素的着色是“延迟”的,直到每个像素都获得所需的信息后才开始。我们将照明之后的处理步骤称为后处理。今天,后处理消耗了大约 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:


  1. 3D 渲染成为 AI 训练循环中必不可少的操作

  2. 训练,或“梯度下降”,过去只出现在云中的神经网络训练过程,现在则是推理的一部分。

  3. 照片级图像与保持真实世界和虚拟世界之间的对应关系是同样重要的。


数字孪生理念要求将庞大且不断变化的现实世界带到其尚未开发的孪生虚拟世界中,并不断维持两者之间的对应关系。通过神经渲染获得的虚拟对象需要与通过经典方法构建的虚拟对象共存。因此,我相信神经渲染和传统渲染将在 GPU 上融合,充分利用其成熟和高性能的 3D 流水线。数字孪生的需求将由未来的 GPU 负责实现。我们还需要在 GPU 端做很多工作来实现“可微”,以参与 AI 训练循环的梯度计算,。


假设 GPU 因响应 3D 世界中的 AI 进展而获得原生可微和张量加速能力,我预计 GPU 的双重人格将化为一体。


然后,GPU 会维持其首选架构的地位,继续促进 AI 软件的进一步发展,并最终在计算机架构新的黄金时代继续闪耀。


原文链接:


https://towardsdatascience.com/will-the-gpu-star-in-a-new-golden-age-of-computer-architecture-3fa3e044e313

2021-09-02 10:307095
用户头像
刘燕 InfoQ高级技术编辑

发布了 1123 篇内容, 共 609.6 次阅读, 收获喜欢 1982 次。

关注

评论

发布
暂无评论
发现更多内容

接口测试并不只是测试参数和返回值

测试人生路

接口测试

SQL数据库集合运算

正向成长

SQL表联结 SQL集合运算

2020年底备战—从技术到面试合集

iOSer

ios 编程 面试

为什么容器内存占用居高不下,频频 OOM

996小迁

Java 架构 容器 面试 k8s

程序员如何判断跳槽岗位是否有坑!

Java架构师迁哥

Vokenization:一种比GPT-3更有常识的视觉语言模型

脑极体

甲方日常 52

句子

工作 随笔杂谈 日常

这份算法攻略,我拿到了5个大厂的offer

yes

面试 算法 笔试

区块链数字货币商城系统开发模式

薇電13242772558

区块链 数字货币

支撑2715​亿元海量订单 揭秘京东大促背后的数据库基石

京东科技开发者

数据库 数据仓库 云服务 云数据库

容器和虚拟机到底有啥区别?

网管

容器 虚拟机

go-zero 如何扛住流量冲击(一)

万俊峰Kevin

microservice go-zero goctl Go 语言

2020双十一,阿里云GRTN拉开直播和RTC技术下半场的序幕

阿里云CloudImagine

架构 云直播 直播 流媒体 直播架构

SpringBoot-技术专题-Hystrix学习介绍

码界西柚

影视剪辑类自媒体运营心得:如何抓住观众的痛点

石头IT视角

解读登录双因子认证(MFA)特性背后的TOTP原理

华为云开发者联盟

算法 totp 密钥

.net core增强工作流组件,基于稳定平台,多项目整合开发

雯雯写代码

《程序员面试金典》.pdf

田维常

面试

微服务架构中的“参天大树”:SpringBoot+SpringCloud+Docker

小Q

Java 学习 容器 面试 微服务

【JVM】肝了一周,吐血整理出这份超硬核的JVM笔记(升级版)!!

冰河

性能优化 内存模型 JVM 堆栈 JVM笔记

什么是服务器租用?

德胜网络-阳

Java中NullPointerException的完美解决方案

Silently9527

java8 Optional

6个JDK自带JVM调优工具,一次性打包给你说清楚

田维常

jvm调优

有点意思的gif动图生成平台开发实战(二)

徐小夕

Java Vue 大前端 GIF React

读完某C++神作,我只记住了100句话

MySQL从删库到跑路

c++

厉害了!阿里内部都用的Spring+MyBatis源码手册,实战理论两不误

小Q

Java spring 学习 面试 mybatis

Java中的线程与C++中的区别

jiangling500

Java c++ 线程

响应式关系数据库处理R2DBC

程序那些事

MySQL R2DBC 程序那些事 响应式系统 响应式数据库

直播卖货已成趋势

anyRTC开发者

音视频 WebRTC RTC

基于Vue实现一个有点意思的拼拼乐小游戏

徐小夕

Java GitHub 开源 H5游戏 H5

这才是图文并茂:我写了1万多字,就是为了让你了解AQS是怎么运行的

鄙人薛某

Java 并发编程 AQS 并发 ReentrantLock

GPU在计算机架构的新黄金时代还会继续闪耀吗?_AI&大模型_CP Lu_InfoQ精选文章