英伟达张玮东:NVIDIA 核心 GPU 技术与软件生态助力大模型开发和部署
作为全球领先的 GPU 技术提供商,NVIDIA 的核心 GPU 技术和软件生态为大模型的开发和部署提供了强大助力。在 2023 外滩大会「云端 AI」分论坛上,来自 NVIDIA 英伟达资深解决方案架构师 张玮东 聚焦《NVIDIA 核心 GPU 技术与软件生态助力大模型开发和部署》主题,为我们重点介绍如何利用 NVIDIA 的软件生态来提高大模型的性能和效率。
以下是演讲全文。
大家好,我是来自 NVIDIA 英伟达的资深解决方案架构师,接下来我给大家介绍一下英伟达 GPU 核心技术与软件生态助力大模型的开发和部署。
对于大模型的开发会涉及到很多技术层面。比如说,从最基础的硬件基础设施,然后到软件层面的基础加速库,再到训练推理和部署的框架,再到最终应用的时候可能还会涉及到一些跟向量数据库机密计算相关的一些内容。
我今天的内容就从这四个方面开始展开。首先,会介绍 NVIDIA 加速基础设施,包括 GPU 服务器;第二,介绍一下在大语言模型 GPU 加速的解决方案;第三,介绍一下在推理和部署方面的解决方案;最后会介绍一些跟大语言模型相关的比如说向量数据库或者是数据监控的工具。
01:NVIDIA 加速基础设施
首先看一下 NVIDIA 加速基础设施。这是一张 NVIDIA 数据中心平台解决方案的全栈概览图。包括最底层的硬件,到中间的软件层面,以及最上层的应用。最底层的硬件,我们最核心的其实就是各种型号的 GPU 产品以及用于 GPU 与 GPU 之间高速连接的 nvLink、nvSwitch 以及节点与节点之间高速连接的各种高速网卡、交换机等。
之上就是由 GPU 所构建的各种服务器,包括了 DGX、HGX 和各种云实例,再之上就是我们软件层面的一些建设。首先最核心的就是我们的加速库。比如说大家可能比较熟悉的计算相关的 CUDA-X 系列的加速库,比如网络存储安全相关的 DOCA 和 MAGNUM IO。
再之上就是开发者的工具包和基于各种行业,我们所开发出来的框架。比如说我们接下来要介绍的大语言模型方向的框架 NeMo Framework 就位于这一层面,最上层实际上就是开发者基于我们所提供的硬件和软件的能力,所构建的行业应用。
这张图简单的列举了一些 NVIDIA 数据中心的 GPU。
大家可以看到这里面有 H100、A100,那 H 和 A 代表的就是 GPU 的架构。我们的 GPU 架构都是以科学家的名字来进行命名的。比如说 H 就是 Hopper,A 就是 Ampere,比如 L,就是 Ada Lovelace 等等。
比如说第一行我们看到的这些 GPU,H100,这些 GPU 它的算力非常强,所以我们经常会用这些 GPU 来做训练,推理当然也可以去用;第二行这些 GPU,比如说 L40、A40 这些 GPU 它其实是兼具了计算和图形的能力,但是它的计算能力可能没那么强,这类 GPU 我们一般就把它用在推理的场景,或者是一些图形相关的场景。比如说工作站、虚拟桌面等等;最后这一行 GPU,比如说 L4、A2、T4 这些 GPU 它的计算和图形能力,相对来说它功率比较小。一般来说,我们也是把它用在推理和一些简单图形场景。
对于大模型的训练来说,单块 GPU 是很难支撑整个任务的。所以我们需要 GPU 所构建的服务器,比如说 DGX、HGX。我们以 DGX 服务器为例,它一般是一机八卡的 A100 或者是 H100。多台的 DGX,我们可以扩展成集群,形成这种 DGX 的 POD 或者 DGX 的 SuperPOD。DGX 的 SuperPOD,它不仅仅是一个硬件的集合,它是全栈的数据中心平台,包括了从计算、存储、网络软件以及基础设施管理。这些平台经过优化可以进行大规模的扩展,提供最大化的性能。
这张图展示了我们最新的一个产品,就是 DGX GH200 的一个集群。
GH200,它其实是 Grace Hopper 的超级芯片。Grace 是一款以 ARM 架构为核心的 CPU,它有 480G 的内存,Hopper 就是 Hooper 架构的 GPU,它有 80G 的显存,可以使用。整个 Grace Hooper 的芯片,它是统一内存架构的,也就是这单块芯片 560G 的内存都可以当成本地的内存来进行使用,那 256 个这样的芯片就会构成一个 Grace Hopper 的超级集群。它的可用内存能达到 144TB,并且任何的 Grace Hooper 节点之间访问至少都可以达到 900GB/s 的通信带宽,非常适合大语言模型训练这样的任务。
聊完了基础的硬件设施之外,对于 NVIDIA 来说,最重要的软件层面就是我们加速的一个生态,针对于不同的任务,我们有很多的加速库,这里面简单列举了几种,比如说 cuBLAS、nvJPEG 等。
02:大语言模型 GPU 加速解决方案
架构在我们的基础硬件设施和扩大的加速库生态之上,这里面针对于大语言模型,我们就提供了一个 GPU 加速的解决方案 NeMo Framework。这张图就展示了 NeMo Framework 全栈的一个架构图。
最底层展示的就是我们刚才所提到的硬件基础设施,比如说 GPU 构建的服务器以及服务器进行高速互联之后,组成的服务器集群。
在这个集群之上,我们可以通过各种的方式去进行任务的调度。比如说,通过 BCM、 SLAM 或者是 K8s,在之上就是 NeMo Framework,它是一个端到端云原生的,可以帮助用户去定制和部署大模型的框架。
在这个框架里面简单地列举几项能力,包括数据整理工具,用于分布式训练的各种加速算法,包括模型去做用户定制所涉及到的各种方法。模型训练好了之后,包括模型去做推理部署优化,以及部署的各种框架流程。最后,在模型的使用中,我们要去保证模型输入输出的安全会提供一个护栏的保护。
具体来看,大语言模型训练需要特别大的数据量技术支持,一般来说达到几百个 billion 的 token 甚至是几 T 的 token 去进行模型的训练。在这个过程中,NeMo Framework 里面就提供了一个工具,就是 Data Curation 的工具去做数据的分布式的下载,去做数据的过滤,以及去重,包括在做模型训练的时候,去做数据的混合。
第二个 NeMo Framework 里面提供的工具就是 Auto-Configurator 。我们知道对于大模型训练来说,用户所采用的硬件基础设施不同,训练的具体的模型不同。针对最优的一个参数配置就会不同,这里就提供了这样的一个工具,可以帮助用户快速地去找到最适合硬件场景以及模型规模的参数。它可以帮助用户很快的找到最优的 learning rate,或者是 优化器参数,以及做分布式训练时所涉及到的 tp 或 pp 算法所对应的参数。
这里是模型去做分布式训练时会涉及到的一些 3D 并行的技术,包括了数据并行,也就是大家可能比较熟悉的 ZeRO,包括了模型并行、tensor 并行、pipeline 并行以及 sequence 并行,还会包括 Selective Activation Recomputation 的技术,也就是可选择的激活值重计算。
这个技术是指我们在去做模型前向操作的时候,可能会产生一些占用大量显存,但是计算起来特别快的这种激活值,我们可以有选择的去丢弃这种激活值。在反向操作的时候再重新计算,这样可以大大减少显存空间的占用,使得在有限的显存空间内训练出更大的模型。
模型训练好之后,一般来说我们会叫做基础模型,在真正用户的特定领域场景要去使用的时候,我们要去做模型的定制化。这个过程中可能会涉及到要保证模型能去回答一些专业的问题,保证将最新的信息更新到模型的知识库当中,并且我们要保证模型回答的一个真实性、有效性,还要保证模型不能去输出一些毒性或者是幻觉的回答。
在这里,NeMo framework 会提供一系列的方法。比如说,第一个我们可以去做 P-Tuned Response。这里举一个简单的例子,我问鸡蛋的黄色部分是什么,它可以给出一个很好的答案。但是我们又希望针对不同的领域,比如说聊天机器人这个领域,它可能是营养学的机器人,可能是产前的机器人,或者是说烹饪的机器人。
我们期望针对不同的机器人应该给出不同的回答。所以这个时候我们最简单的可以去训练一个模板的 Prompts。在使用的时候,我们可以把模板的 Prompt 结合问题的 Prompt 一起给它大语言模型,这样就可以给出针对性的回答。
第 2 种模型定制化的方法,就是 PEFT,也就是参数有效的 Fine-Tuning ,我们可以给模型一些标注数据,然后进行模型的微调。在这个过程中,我们可以去冻结大模型机构模型的参数,只去微调增量部分。比如说我们可以去做 prompt learning,我们可以加入各种 adapter,最常见的比如 lora,也可以加入 infused adapter 等。
第 3 种去做模型定制化的方法,就是有一些领域我们可以通过向量数据库对领域知识进行向量编码。把它存到向量数据库当中。在使用的时候,我们可以结合问题以及从向量数据库中检索出来的向量,再结合大语言模型的能力去给出用户响应。
第 4 种模型定制化的方法就是 RLHF,就相当于是强化学习和人类反馈技术相结合的一种技术,可以非常好的去做大语言模型和人类喜好对齐。比如说在最新的 ChatGPT LLAMA 2 里面都包含了 RLHF 的方法。
第 5 种模型是要将大语言模型在实际中应用的时候,我们要去保证大语言模型输入、输出以及调用的可靠性,要给模型添加护栏。这个护栏会包括 3 种:
topical 护栏。我们要保证模型去回答专业领域之内的知识,不能去回答业务之外的知识。
safety 护栏。我们要去保证模型不能回答有毒性的、幻觉的,或者说误导性的信息。
security 护栏。这个护栏是指比如大模型结合 LangChain 去做应用的时候,有的时候会去涉及到第三方 App 或者是程序的调用。在这个过程中,我们要保证不能去调用对整个系统的产生产生危害的这样的 App,这就是第三种护栏。
03:大语言模型推理和部署解决方案
刚刚我们已经介绍了跟大模型训练相关的框架,在模型训练完之后,我们就要进行模型的推理优化部署。在推理的时候会涉及到很多方面。比如说,模型的训练框架可能不一样,可能采用 Python 或者 TensorFlow;模型部署的位置可能不一样,我要部署到云端边缘侧或者说嵌入式设备上;模型部署的服务器可能不一样,可能是 CPU,GPU 可能是不同的型号;我部署的平台可能不一样,可能是云上的系统或者是虚拟机,并且在应用的时候,可能大部分对于模型的需求也不一样。有的时候可能需要模型做实时响应,有的时候可能期望模型做批处理,所以在推理的时候我们要面临很多的挑战。
在模型推理侧,我这里介绍一下 NVIDIA 的几个解决方案的框架。
Triton Inference Server 是一个 NVIDIA 平台的一部分,是一个开源的推理服务软件,可以帮助做标准模型的部署和运行,并且可以在生产环境中保证模型的大规模扩展,推动 Inference Server 可以让团队在任何基于 GPU 或 CPU 的硬件基础设施上部署运行、大规模扩展在任何框架下训练得到的 AI 模型,并且可以简化整个 AI 推理的流程。开发人员,还有这种数据科学家可以在不影响部署和运行的前提下,根据他们的项目去选择最合适他们的一个框架,并且可以做跨云本地和边缘侧的部署。
它其实本身不会做模型推理优化的加速。如果我们要去对模型进行推理优化的加速,我们可以选用英伟达的 TensorRT,它是高性能的深度学习的 SDK,它包括了高性能深度学习的优化器,以及运行环境,可以保证深度学习 AI 模型的低延迟和高吞吐。
那怎么去做模型的推理加速呢?可以采用下面的这些手段:
1. 我们可以把训练好的模型去降低它的精度,从 32 位精度降到 16 位,降到 8 位,甚至是 4 位,3 位、2 位;
2. 我们可以去做这种 layer 和 tensor 的融合;
3. 可以根据我们要去部署的 GPU,选择最合适的数据层和算法;
4. 我们可以去做这种 dynamic tensor memory;
5. 我们可以去做多流的执行。
TensorRT LLM, 它实际上是基于 TensorRT 专门针对于大语言模型推理优化这个领域的一个框架。它里面包含了一些常见的大语言模型,比如说 GPT、OPT、LLaMA、BERT 等的默认实现。对于一些用户自定义的大语言模型,也可以非常方便的通过 TensorRT LLM 所提供的类的 API 去进行模型的构建,进行模型的推理优化,并且它可以支持多机多卡的推理。
04:其他
刚刚就介绍完了模型推理测的解决方案。在模型实际应用的过程中,可能还会涉及到一些其他的。我们简单罗列几种。
第一种就是向量数据库,刚才我们也讲到了一种在模型定制的过程中,我们可能会把一些领域的知识编码,然后存储到向量数据库当中。针对于向量数据库,英伟达也提供了一个算法叫 RAFT 。RAFT 里面会有 GPU 加速的 ANN,也就是说能快速查找的方法,可以帮助快速做向量的查找。在现在一些向量数据库中,比如说 milvus 里面已经集成了 GPU 加速的快速查找方法。
第二种可能应用到的技术是加密计算。在 GPU 提供了 GPU 的加密计算,因为我们知道一些行业还涉及到多方合作,在这个过程中要确保多方数据源的机密性和完整性,GPU 的加密计算技术可以保证多方数据以及 AI 模型的机密性。
在做大模型的研发部署当中,用户希望能够对整个生产开发过程进行全面的管理和监控。在这里会提供一个工具 DCGM,它是一套在集群环境下进行 GPU 管理的工具。它可以由系统管理员担任,也可以非常轻松集成到合作伙伴的集成中,会包含健康监控、全民检测、系统警报、电源管理等。它可以帮助用户快速搭建 GPU 管理任务,可以保证整个 GPU 监管管理任务自动化,提高整个集群的整体利用率。
当我们要去保证这种系统和资源的高度的可用性和利用率的时候,我们可以通过 DCGM 去监控很多信息。比如 GPU 利用率、Tensor core 利用率、GPU 的显存、NVLink/PCle 的带宽使用、GPU 功耗、温度以及健康监测等。
对于 AI 模型的开发人员来说,我们也可以采用相关的监控工具。比如说 Nsight 系列等,我们可以去做系统级别的性能分析以及 Debug ,像 Nsight Compute,我们可以做到分析以及 debug 等等。我们可以结合刚才提到这些工具,帮助大家快速的去构建 AI 模型、大语言模型。
刚才我们就介绍了从硬件基础设施到软件加速库,再到模型训练,推理优化并部署以及监控的这些工具的链条。对于大语言模型来说,会涉及到层层方面,它已经不仅仅是一个技术,我觉得它更多的是一个艺术。我们希望跟大家在完善完美这项艺术的道路上,一起携手并肩,共创未来。
好,我的介绍就到这里,谢谢大家!
评论