今天DeepSeek开源周第二天,开放了DeepEP仓库,属实看了下源码,和昨天FlashMLA一样,C++权重(包括CUDA)还是占据了绝对部分,作为调包侠的我,看到之后望而却步,想看原理或者实现也是完全看不懂了!
DeepEP 是一个为混合专家 (MoE) 和专家并行 (EP) 量身定制的通信库。它提供高吞吐量和低延迟的全到全 GPU 内核,也称为 MoE 调度和组合。该库还支持低精度操作,包括 FP8。
Github地址:https://github.com/deepseek-ai/DeepEP
为了与DeepSeek-V3论文中提出的组限制门控算法保持一致,DeepEP 提供了一组针对非对称域带宽转发(例如将数据从 NVLink 域转发到 RDMA 域)进行优化的内核。这些内核提供高吞吐量,使其适合训练和推理预填充任务。此外,它们还支持 SM(流式多处理器)数量控制。
对于延迟敏感的推理解码,DeepEP 包含一组具有纯 RDMA 的低延迟内核,以最大限度地减少延迟。该库还引入了一种基于钩子的通信计算重叠方法,该方法不占用任何 SM 资源。
陌生词汇很多,感觉很陌生,下面咱们借英伟达博客稍微复习下FP8吧!
如下图为 NVIDIA GPU 常见的浮点数表示方式,其中 sign 表示符号位,exponent 表示指数位(决定了动态范围),mantissa 表示尾数位(决定了表示精度)。
相比 FP32:
相比 FP16:
需要说明的是,虽然都是 E5M2 或者 E4M3,不同公司的硬件可能采用不同的格式。比如 NVIDIA GPU 上的 E5M2 符合 IEEE 754 Style,而 E4M3 却不符合 IEEE 754 Style,本文中没有特殊说明都以 ARM-Intel-Nvidia Style 为例。如下图所示,IEEE 754 Style 的 E4M3 的范围为 [-240, 240],而 ARM-Intel-Nvidia Style 的 E4M3 的范围是 [-448, 448]:
来源:https://developer.nvidia.com/zh-cn/blog/fp8-challenges-best-practices/
在介绍 FP8 格式之前,我们需要回答一个问题:**为什么需要讨论 FP8?**从图中可以看出,近年来大模型所需的算力急剧增长,从 GPT-1 到 GPT-3,再到类似 GPT-4 的 GPT MOE 1.8T,算力需求增长了数万倍。这种增长速度的背后是硬件算力的提升。训练过程中的一个重要指标是训练时间。如果训练一个模型需要半年甚至一年,这在实际操作中是不可行的,因为实际训练时间可能是理论值的两到三倍。因此,算力基础设施的提升是大模型迅速发展的基础。
从算力角度来看,近年来 GPU 的单卡算力提升了大约一千倍,这包括工艺制程的改进、硬件结构的优化以及更低的训练精度。随着 FP8 的引入,其 Tensor Core 算力是 FP16 的两倍,为探索更大规模的模型提供了算力支持。
具体来说,FP8 的优势包括:
FP8 数据格式包含两种:E5M2 和 E4M3。E 代表指数位,M 代表尾数位。E5M2 包含五个指数位和两个尾数位,而 E4M3 包含四个指数位和三个尾数位。E5M2 由于有更多的指数位,动态范围更大;E4M3 有更多的尾数位,数值精度更好。这两种数据格式在训练时都有各自的应用场景。
FP8 带来了更快的训练速度,但也对训练精度提出了挑战。接下来将介绍在大模型训练中如何兼顾模型精度和训练速度。
在介绍 FP8 之前,我们先回顾一下 16 位精度训练中如何通过混合精度训练来维持精度。这里列出了四种混合精度训练的方法。
为了兼顾速度和精度,我们列出了额外的两种模式:AMP-O1 和 AMP-O2。
此外,还会保留一份 FP32 类型的 Master Weight,因为在模型训练后期,参数更新通常较慢,梯度值较小,容易出现大数加小数的问题,小数被吃掉,所以需要保留一份 FP32 的 Master Weight。目前 16 位精度训练基本上都是采用 AMP-O2 的混合精度方法来训练的。
FP8 训练可以认为是一种 O1+O2 的混合模式。上边这幅图包含了前向和反向计算过程中的一些算子。**红色连接线表示高精度数据,绿色连接线表示低精度数据。无论是前向还是反向,整体训练流程的精度仍然是 BF16 的,但会维护一份白名单,白名单中的 OP 以 FP8 精度计算,如 Linear Layer 中的矩阵乘法和 GELU。FP8 的 FMHA 目前在功能上是支持的,但在实际训练过程中通常还是用高精度的 FMHA,以保证更好的收敛性。**对于 FP8,我们看到它是以 O1 的模式嵌入 BF16 训练的,BF16 训练本身又是一个 O2 的混合精度方法,所以我们称它为一种 O1+O2 的混合精度模式。
在训练过程中,前向和反向采用了不同的数据精度。前向用 E4M3,因为前向时数值的动态范围变化不大,用 E4M3 提供更好的精度;反向的梯度需要更大的动态范围,所以反向用 E5M2 数据格式。这个流程图中,蓝色框表示从 BF16 到 FP8 的 Cast 过程。这个过程不像 FP32 到 BF16 那样简单直接。
要将 FP8 应用于 LLM 的训练和推理,其中的一个关键问题是如何克服表示范围和精度下降相关的挑战。其中的一个关键技术就是张量缩放(Tensor Scaling),如下图 Figure 9 所示(图片来自 [2310.18313] FP8-LM: Training FP8 Large Language Models),其核心是将不在 FP8 表示范围内的数据缩放到 FP8 的表示范围内。
早期在 V100 和 A100 GPU 上的 FP16 混合精度训练会广泛采用全局损失缩放技术(Global Loss Scaling),很适合一些中小模型的训练。然而,在处理一些超大模型或复杂任务时(例如 DALL-E 等模型),Global Loss Scaling 仍然会遇到严重的下溢问题(Underflow)。因此,越来越多采用 Block-wise 和 Layer-wise 的 Gradient 缩放。在 FP8 的 Per Tensor Scaling 技术中,有两种常见方案:Just-in-time Scaling 和 Delayed Scaling(NVIDIA 在 Transformer Engine 中也有实现 Using FP8 with Transformer Engine)。
如下图为 NVIDIA Transformer Engine 中的 Delayed Scaling 实现方案,其 amax history 最多可以存储 1024 个 history。在进行当前 Tensor 的 Scaling 操作时,会使用当前 Tensor 之前的 amax history 来预测当前的 amax(比如之前 history 的最大值),然后进行 Scaling 操作;Scaling 操作的同时会计算当前的 amax,并更新 amax history(PS:不确定这里是分成了两个 Kernel 同时 Scaling 和计算 amax,还是融合为一个 Kernel)。
到这里已经看不懂了,更多想了解以及接触Infra的同学可以看看这篇文章:
FP8 训练的挑战及最佳实践,https://developer.nvidia.com/zh-cn/blog/fp8-challenges-best-practices/
LLM Infra(大语言模型基础设施,LLM Infrastructure)是 LLM 实践和应用的底座。通过优化硬件、软件和网络架构,它能够提高大语言模型的训练和推理效率,推动自然语言处理技术的创新,并在搜索引擎、智能助手和自动化客户服务等领域广泛应用,为 AI 发展提供了强大的支持。
LLM AI Infra广义上包含了基础模型和基础软件栈两层,本篇报告核心关注其中和工作流相关的基础软件工具栈。工作流的视角下,LLM的开发应用主要涉及数据准备、模型训练、模型部署、产品整合四个主要环节,每个环节都有对应的点工具,亦有集大成的LLMOps平台型产品。
行业的 AI 工作流在传统 ML 模型阶段就已逐渐成型,这一领域由于整体的非标属性,很难出现统一的 MLOps 平台。而是主要分为从 0 到 1(离线数据准备+模型搭建)和从 1 到 100(模型上线和部署)两部分。随着 LLM 趋势的确定,从 1 到 100 的部分将成为之后重头的发展模块。LLMOps 的发展将为未来大模型的部署和推理提供重大的助推作用。
在知乎看到一篇非常有意思的文章,分享给大家:
大模型Infra这些年,从黑铁时代到黄金时代再到白银时代
https://zhuanlan.zhihu.com/p/708594043
我们直接看建议,下面画了一些重点:
大家常说七年一个周期,2016年Alpha-Go用深度学习开启了一个周期,到2022年ChatGPT用大模型开启了一个新周期。
很多人现在抱着有超额回报期望来入行大模型Infra,在白银时代这个预期需要降低。能过踩中周期的注定是少数人,因为有分歧才有风险,有风险才有超额收益。 现在大模型的共识早就凝聚了,这个领域也注定会供需平衡,变成用市场规律说话。就好比你看买菜大妈就开始买某股票时候,这支股票已经挣不到钱了。
大模型注定会深刻改变我们的世界,但资源和信息向头部集中的趋势非常可怕。一方面,大模型核心技术被一小撮人掌握,比如OpenAI。另一方面,面对巨大信息差和算力差,普通人无法参与到大模型的开发体系中。就像萝卜快跑正在代替网约车司机,AI总有一天会也代替程序员。如何在生产力进步后的世界里找到自己的位置,不要沦为AGI世界的二等公民,是我们每个人焦虑的根源。
让社会不恐惧AI,让社会理性规划和AI融洽相处的未来,一方面要有对巨头有监管,另一方面,让更多人有平等了解大模型技术的机会。这个世界还是很有人在为后者努力,通过代码开源和公开论文,扩散大模型的技术。作为想入行的同学,可以借助开源力量,来让自己和也业界保持同步。这里也有大量还没有解决的技术挑战等待你来解决。另外,像Agent等,多模态,具身智能等技术方向方兴未艾,也可以提前布局下一个时代潮流。
作为大模型Infra从业者,白银时代需要的是苦练基本功。 在2023年,有很多人是在用信息差体现自己价值,某件事我知你不知,你试还得花时间,很多人在极度激烈竞争中也原意为信息差知识付费。今年这种机会会大幅减少,大家比拼的就是真本领了,是否能快速follow新技术,是否能独立搞定一个复杂大系统,是否有更大的技术视野和其他合作方对话的能力,这要求不仅了解Infra还解一些算法、云计算的知识,总体来说传统工程师素养变得尤为重要。
从业相关人员来回答感觉这些领域还是比较有机会的,比如下面的技术栈:
以上是工程化的能切入的点。其实本身如果在做算法,也有门槛低一点的切入点:
下面是LLMs推理技术栈
图片来自:https://zhuanlan.zhihu.com/p/14062776627
影响LLM推理性能的因素有很多,包括但是不限于:模型配置、硬件类型、数据分布、优化算法、推理策略等。
算法
LLMs 位置编码
Transformer
MoEs 算法 & 部署概述
量化
框架 开源的 LLM 推理框架有 TensorRT-LLM、FasterTransformer、TGI、vLLM、NanoFlow、SGLANG 等,以 vLLM 为例简单介绍下推理框架:
vLLM 框架
RLHF 算法以及部署概述
Engine 部署
高性能算子
中间件 (TODO)
硬件系统
场景优化