目前IT行业的首要热点,也就是所谓的“大模型”和“机器学习”等AI技术,背后的算法,本质上是列出一个参数方程,并根据现有样本(参数方程的输入和输出),来迭代计算参数方程的参数,也就是所谓的调参。
最简单的机器学习算法是一元线性回归,也就是通过平面上若干个点的坐标(也称为观测值)来计算出与这些点距离总和最小的一元一次方程。具备数学知识的读者很容易就可以得出结论,每次一元线性回归需要计算6次向量卷积运算。这种简单重复的计算使用CPU是一种浪费,因此,工程师们使用GPU来执行这一计算任务。
在GPU中,具备大量的计算单元,如Nvidia的CUDA Core。在Nvidia的GPU中,CUDA Core是按照SM(Streaming processor)组织起来的。在每个SM中包含了若干CUDA Core和Tensor Core。CUDA Core可以执行加减乘除等运算,而Tensor Core可以一次性执行矩阵乘加运算。
为了帮助开发者们快速开发使用GPU进行并行运算的程序,NVidia在2008年提出了CUDA框架,并提供了相关的调用库。开发者可以很容易地使用C语言或其他高级语言,通过调用CUDA框架中的函数(写所谓的核函数),把并行化的计算任务交给GPU执行。在几年以后,Google又开发了Tensorflow机器学习框架,可以调用CUDA执行内置的常见机器学习算法。
Tensorflow还实现了多块GPU的协作运算,如把一个数万行列的矩阵拆开给多个GPU进行分布式计算。这就涉及到GPU之间的数据搬运,以及GPU从内存、硬盘搬运数据。为解决这一问题,NVidia推出了MagnumIO框架,使得GPU能够在CPU不感知的情况下,从内存、SSD盘、其他GPU,甚至远端服务器的GPU搬运数据。
GPU从远端GPU搬运数据的核心技术叫做GPU Direct Over RDMA。RDMA技术可以直接访问远端服务器的内存地址,从而实现GPU互相搬运数据。RDMA对网络的特殊需求是对丢包零容忍,因此需要以太网实现流控机制,在出现incast现象时,让发送方降低发送速度,避免拥塞丢包。
NVidia为了让业界更好地设计生产GPU服务器,率先垂范推出了DGX系列GPU服务器,如DGX A100,DGX H100等。DGX A100是一个划时代的产品,使用AMD处理器提供整机128个物理核,将GPU扣卡与主板分离设计,并引入了PCI-E Switch,扩展了CPU的IO能力,使得8块A100 GPU能够连接到主板。
在DGX A100的GPU扣卡上,还有6个NVLink Switch,提供了GPU之间的高速通信通道,GPU可以通过NVLink Switch交换数据,而不需要经过PCI-E。同时,NVidia还为每块GPU 配置了一块Mellanox CX6网卡,用于与远端服务器的GPU交换数据,这块网卡和GPU通过PCI-E Switch互联,避免CPU的PCI-E总线成为瓶颈。目前,主流的训练型GPU服务器均参照NVidia DGX系列设计。
为了实现多台DGX等GPU服务器的互联,我们还需要为其设计业务网络、存储网络和RDMA网络。其中,RDMA网络需要实现所谓的无阻塞交换,并通过以星脉高性能计算网络为代表的新一代SDN控制器进行全网的路径统筹,避免拥塞丢包。而另外两类网络可以参照云数据中心网络进设计。