当我们在云上部署 DeepSeek 系列大模型的时候,可以选择多机或者单机 8 卡的 GPU 裸金属实例运行满血版,或者选择单卡和双卡 GPU 虚拟机运行蒸馏版。
这些 GPU 云服务器实例能否发挥多机、多卡、单卡的性能,将直接影响部署的 DeepSeek 服务的吞吐能力。除此之外,在训练场景中这些实例的相关能力能将直接影响训练时长。
本文将针对 GPU 云服务器的软件系统设计和实现进行概述,并分享百度智能云的最新实践成果。
1.GPU 处理数据流程
在具体讨论 GPU 云服务器的软件设计工作之前,我们首先来看下 GPU 在服务器中是如何工作的。
下图是一个简化的 GPU 处理数据的流程图,以便梳理一下影响 GPU 云服务器性能的关键因素。从图中我们可以看到,数据处理分为以下几个步骤:
图片
第 1 步,所有数据都需要从网络或者存储中读取到内存。这里就涉及到网络或者存储的传输性能。
第 2 步,当读取到内存之后,CPU 需要从内存中读取相关数据进行预处理,然后将预处理后的数据再写回到内存中。这个过程就涉及到内存自身的带宽性能和 CPU 的处理性能。
第 3 步 ,数据需要从内存拷贝到 GPU 的显存中。这就涉及到 GPU 和系统内存之间的数据传输性能,一般称之为 H2D(Host To Device)。
第 4 步,GPU 从 GPU 显存中读取相关的数据进行运算。此时主要涉及 GPU 的显存带宽和 GPU 的计算性能。如果数据比较庞大,单个GPU无法处理,就涉及到多个 GPU 的处理,那么这里就涉及到多 GPU 之间的集合通信。
第 5 步,如果是单机多卡的情况,就涉及到 GPU 在机内之间数据传输的性能;如果是多机多卡的场景,那么就涉及到多节点之间的网络传输性能。
第 6 步,当 GPU 运算完成后,数据需要从 GPU 的显存再拷贝到内存中。这里也涉及到 GPU 和系统内存之间的数据传输性能。一般称之为 D2H(Device To Host)。
我们在设计 GPU 云服务器时,需要综合考虑上面 GPU 数据处理链路的每一个环节,然后结合业务特点和使用成本,进行 GPU 云服务器的设计。
2.GPU 云服务器设计的层次划分
谈到 GPU 云服务器的设计,我们一般分为了 4 个层次。下图展现了这个层次结构,涉及到硬件和软件的多个层面。
图片
首先从最下面来看,主要是 GPU 云服务器底层基础技术组件,包括如硬件选型、拓扑结构、GPU 互联和虚拟化技术。这些技术不仅决定了单卡运行的效率,也会影响上层多卡通信的效率。
向上一层是多卡通信方式。此时我们需要考虑硬件和软件的支持程度,比如是采用共享内存、P2P 、NVLink 还是 GDR 结构,每一种结构都需要考虑到对应的硬件和软件实现。比如有的软件不支持 P2P,此时我们可能就需要退回到共享内存的方式。如果涉及到大模型就需要采用多机多卡,此时还涉及到 RDMA 网络的通讯。