关键要点

  • 研究表明,Deepseek 的 DeepGEMM 技术原理是使用 8 位浮点精度 (FP8) 执行通用矩阵乘法 (GEMM),结合细粒度缩放和两级累积。
  • 细粒度缩放意味着为矩阵的小块分别设置缩放因子,以保持精度。
  • 两级累积通过 CUDA 核心增强 FP8 计算的累积步骤精度。
  • 这一方法优化了大型语言模型训练的性能和准确性。

技术原理概述

Deepseek 的 DeepGEMM 技术旨在通过 FP8 精度执行矩阵乘法,以减少内存使用并提高计算速度。细粒度缩放确保每个小矩阵块有自己的缩放因子,适应不同数值范围,防止精度损失。两级累积则通过 CUDA 核心改进累积过程的精度,使其特别适合训练如 DeepSeek-V3 这样的大型语言模型。

应用与优势

这种技术在 DeepSeek-V3 的训练中被使用,显著降低了训练成本,例如全训练仅需 278.8 万 H800 GPU 小时,成本约为 557.6 万美元。这种方法在保持高性能的同时,特别是在数学和编码任务上,表现出色。

一个意想不到的细节

DeepGEMM 的实现非常简洁,其核心内核代码仅约 300 行,这使其成为学习 Hopper FP8 矩阵乘法优化的理想资源。


详细报告:Deepseek DeepGEMM 技术原理的深入分析

Deepseek 的 DeepGEMM 技术是其人工智能模型开发中的关键组成部分,特别是在训练大型语言模型如 DeepSeek-V3 时。以下是关于其技术原理的详细分析,涵盖了其核心概念、实现细节以及在实际应用中的表现。

技术背景与核心原理

DeepGEMM 是一种专为高效 FP8 通用矩阵乘法 (GEMM) 设计的库,旨在优化计算性能和内存使用。其核心原理包括以下几个方面:

  • FP8 精度的使用:FP8,即 8 位浮点精度,相比传统的 16 位或 32 位浮点数,显著减少了内存占用和计算资源需求。这在训练大型语言模型时尤为重要,因为矩阵乘法是这些模型中最耗费资源的操作之一。
  • 细粒度缩放:细粒度缩放是指为矩阵的小块(例如 1x128 瓦片用于激活,128x128 块用于权重)分别设置缩放因子。这种方法允许根据不同部分的数据范围进行个性化缩放,防止因全局缩放因子导致的精度损失。例如,在 DeepSeek-V3 的训练中,激活和权重的量化是细粒度进行的,确保了数值范围的适配性。
  • 两级累积:由于 FP8 在 tensor core 上的累积精度可能不足,DeepGEMM 采用了两级累积策略,通过 CUDA 核心进行额外的精度提升。具体来说,在 N_C=128 的间隔下,将累积结果提升到 CUDA 核心处理,以提高计算的数值稳定性。这在处理大规模矩阵乘法时尤为关键。
实现细节与优化

DeepGEMM 的实现基于 CUDA,专为 NVIDIA Hopper tensor cores 设计(支持 sm_90a),无需安装时的编译,通过轻量级即时编译 (JIT) 模块在运行时编译所有内核。其优化策略包括:

  • 持久化 warp 专业化:通过重叠数据移动、tensor core MMA 和 CUDA 核心提升,优化计算流水线。
  • Hopper TMA 特性:利用 TMA 加载 LHS、缩放因子、RHS,以及 TMA 存储输出和多播,进一步提高效率。
  • FFMA SASS 交错:通过修改 FFMA 指令的 yield 和 reuse 位,细粒度缩放的性能提升超过 10%,具体实现见 GitHub 脚本
  • 完全 JIT 设计:运行时编译,形状、块大小和流水线阶段作为编译时常量,自动选择无需调优,小形状完全展开。
  • 非对齐块大小支持:支持非 2 的幂大小的块,例如 M=256, N=7168, BLOCK_M=128, BLOCK_N=112,用于 128 SMs vs. 112。

这些优化使得 DeepGEMM 在性能上匹配或超过专家调优的库,例如在 H800 上与 CUTLASS 3.6 相比,表现出 2.7 倍的加速(普通 GEMM 示例:M=64, N=2112, K=7168,206 TFLOPS,1688 GB/s)。

在 DeepSeek-V3 中的应用

DeepGEMM 是 DeepSeek-V3 训练框架的重要组成部分,DeepSeek-V3 是一款 671B 参数的 Mixture-of-Experts (MoE) 语言模型,其中每个 token 激活 37B 参数。其训练过程包括:

  • FP8 混合精度框架:GEMM 操作(前向传播、梯度下降、权重梯度)使用 FP8,相比 BF16 速度翻倍,而嵌入层、输出头、MoE 门控、归一化和注意力层使用更高精度(BF16/FP32)。
  • 训练数据与成本:在 14.8 万亿高质多样化 token 上预训练,随后进行监督微调 (SFT) 和强化学习 (RL)。全训练耗时 278.8 万 H800 GPU 小时,成本约为 557.6 万美元(按每 GPU 小时 2 美元计算)。

细粒度量化策略在 DeepSeek-V3 中得到了验证,例如激活使用 1x128 瓦片量化,权重使用 128x128 块量化,累积精度通过 CUDA 核心提升,确保训练过程中的数值稳定性。

性能与评估

DeepGEMM 的性能在多种场景下得到验证,包括普通 GEMM 和分组 GEMM(支持 MoE 架构)。以下是部分性能数据:

类型

示例参数

TFLOPS

GB/s

加速比

普通 GEMM

M=64, N=2112, K=7168

206

1688

2.7x

分组 GEMM (连续)

#Groups=4, M per group=8192, N=4096, K=7168

1297

418

1.2x

分组 GEMM (掩码)

#Groups=1, M per group=1024, N=4096, K=7168

1233

924

1.2x

这些结果表明,DeepGEMM 在普通和分组矩阵乘法中均表现出色,尤其是在支持 MoE 架构的分组 GEMM 中。

一个意想不到的细节

DeepGEMM 的核心内核代码仅约 300 行,这使其成为学习 Hopper FP8 矩阵乘法优化的理想资源。相比其他复杂的库如 CUTLASS 和 CuTe,DeepGEMM 避免了过度依赖模板和代数,设计上更简洁,易于理解和修改。

争议与未来展望

目前,DeepGEMM 的讨论主要集中在其在开源模型中的应用及其对训练成本的降低。然而,关于 FP8 精度的长期影响和在不同硬件上的兼容性仍存在争议。例如,DeepGEMM 目前仅支持 NVIDIA Hopper tensor cores,未来是否能扩展到其他架构(如 AMD 或 Intel 的 GPU)仍是未知数。