{
  "source_file": "0930",
  "source_platform": "Dev.to",
  "author": "Vuk Rosić",
  "title_listed": "DeepSeek DeepGEMM 中文讲解",
  "keywords": "",
  "domain": "机器学习",
  "content_type": "深度技术解析",
  "is_paid_flag": "否",
  "url": "https://dev.to/vuk_rosic/deepseek-deepgemm-zhong-wen-jiang-jie-4b1e",
  "publish_date": "2025-07-07",
  "corpus_stage": "",
  "notes": "",
  "id": "dc65fec36bf7",
  "collected_at": "2026-10-02T14:06:35",
  "title": "DeepSeek DeepGEMM 中文讲解 - DEV Community",
  "body_markdown": "这个仓库是\nDeepGEMM\n，一个专注于高效 FP8（8位浮点数）通用矩阵乘法（GEMM）的库，由 DeepSeek 团队开发。它支持细粒度的缩放（fine-grained scaling）和混合专家（MoE）模型中的分组 GEMM 运算。\n主要特点\nFP8 GEMM 支持\n专为 NVIDIA Hopper 架构（如 H100 GPU）优化，利用 Tensor Core 进行高性能计算。\n由于 FP8 运算精度较低，采用 CUDA 核心进行两级累加（promotion）来保证计算精度。\n分组 GEMM（Grouped GEMM）\n支持\n连续布局（contiguous layout）\n和\n掩码布局（masked layout）\n，适用于 MoE 模型训练和推理。\n连续布局适用于训练或推理预填充阶段，而掩码布局适用于解码阶段（如 CUDA Graph 场景）。\n权重梯度计算（Weight Gradient Kernels）\n支持\n密集模型（Dense）\n和\nMoE 模型\n的反向传播计算。\n轻量级 JIT（Just-In-Time）编译\n无需安装时编译，所有 CUDA 核心在运行时动态编译，减少部署复杂度。\n支持 NVCC 和 NVRTC（NVIDIA Runtime Compiler），后者编译速度更快（最高 10 倍）。\n高性能优化\n采用\nHopper TMA（Tensor Memory Accelerator）\n进行异步数据加载和存储。\n持久化 Warp 专业化（Persistent Warp-Specialization）\n，优化数据移动和计算重叠。\nFFMA SASS 指令交错（Interleaving）\n，提升 FP8 运算效率。\n非对齐块大小（Unaligned Block Sizes）\n，提高 SM（流式多处理器）利用率。\n简洁的代码设计\n仅有一个核心 GEMM 核函数，便于理解和优化。\n应用场景\n大模型训练与推理\n（如 Transformer、MoE 架构）。\n高性能计算（HPC）\n，需要低精度（FP8）矩阵运算的场景。\n需要动态调整计算形状的任务\n（如变长序列处理）。\n快速开始\n环境要求\nGPU\n: NVIDIA Hopper 架构（如 H100，需\nsm_90a\n支持）。\nCUDA\n: 12.3+（推荐 12.8+ 以获得最佳性能）。\nPython\n: 3.8+。\nPyTorch\n: 2.1+。\nCUTLASS\n: 3.6+（通过 Git 子模块引入）。\n安装\ngit clone\n--recursive\ngit@github.com:deepseek-ai/DeepGEMM.git\npython setup.py develop\n# 开发模式\npython setup.py\ninstall\n# 安装\nEnter fullscreen mode\nExit fullscreen mode\n使用示例\nimport\ndeep_gemm\n# 普通 FP8 GEMM\nlhs\n=\n(\ntorch\n.\nrandn\n(\n4096\n,\n7168\n,\ndtype\n=\ntorch\n.\nfloat8_e4m3fn\n),\ntorch\n.\nrandn\n(\n4096\n,\n56\n,\ndtype\n=\ntorch\n.\nfloat32\n))\n# [M, K], [M, K//128]\nrhs\n=\n(\ntorch\n.\nrandn\n(\n2112\n,\n7168\n,\ndtype\n=\ntorch\n.\nfloat8_e4m3fn\n),\ntorch\n.\nrandn\n(\n17\n,\n56\n,\ndtype\n=\ntorch\n.\nfloat32\n))\n# [N, K], [N//128, K//128]\nout\n=\ntorch\n.\nempty\n(\n4096\n,\n2112\n,\ndtype\n=\ntorch\n.\nbfloat16\n,\ndevice\n=\n\"\ncuda\n\"\n)\ndeep_gemm\n.\ngemm_fp8_fp8_bf16_nt\n(\nlhs\n,\nrhs\n,\nout\n)\n# MoE 分组 GEMM（连续布局）\nm_indices\n=\ntorch\n.\nrandint\n(\n0\n,\n4\n,\n(\n8192\n,),\ndevice\n=\n\"\ncuda\n\"\n)\n# 分组索引\ndeep_gemm\n.\nm_grouped_gemm_fp8_fp8_bf16_nt_contiguous\n(\nlhs\n,\nrhs\n,\nout\n,\nm_indices\n)\nEnter fullscreen mode\nExit fullscreen mode\n性能表现\n在 H800 GPU 上达到\n1550 TFLOPS\n（FP8 算力）。\n性能优于或持平专家调优的库（如 CUTLASS）。\n未来计划\n支持 BF16 运算。\n更大的块大小（N 维度扩展至 256）。\n优化功耗效率。\n支持 CUDA PDL（Pattern Description Language）。\n总结\nDeepGEMM 是一个高效、易用的 FP8 GEMM 库，特别适合大模型和 MoE 架构的计算优化。它的 JIT 编译设计和细粒度优化使其在多种矩阵形状下都能保持高性能。\n论文引用\n如需引用，请参考仓库中的 BibTeX 格式。\n在\n大语言模型（LLMs）\n的训练和推理过程中，\nDeepGEMM\n可以替代以下关键矩阵乘法（GEMM）运算，显著提升计算效率，尤其是在\nFP8 低精度计算\n和\n混合专家（MoE）模型\n场景下：\n1. 全连接层（Feed-Forward Network, FFN）\n标准 FFN\n：\nLLM 中的全连接层（如\nW_in @ X\n和\nW_out @ (GELU(W_gate @ X))\n）通常占计算量的 30%~50%。\n替换方案\n：\n使用\ngemm_fp8_fp8_bf16_nt\n替代 FP16/BF16 的\ntorch.matmul\n，利用 FP8 计算加速，同时通过两级累加保持精度。\nMoE 模型的专家层\n：\nMoE 模型中，不同 token 被路由到不同专家（如\nExpert_i @ X\n），计算是稀疏的。\n替换方案\n：\n使用分组 GEMM（\nm_grouped_gemm_fp8_fp8_bf16_nt_contiguous\n或\nm_grouped_gemm_fp8_fp8_bf16_nt_masked\n），将多个专家的计算合并为一次批处理，减少启动开销。\n2. 注意力机制（Attention）\nQKV 投影（Q/K/V Matrices）\n：\n计算\nQ = X @ W_Q\n,\nK = X @ W_K\n,\nV = X @ W_V\n时，可用\ngemm_fp8_fp8_bf16_nt\n加速。\n注意\n：Softmax 仍需 FP16/BF16 计算（FP8 精度不足）。\n注意力得分（Attention Scores）\n：\nS = Q @ K^T\n理论上可用 FP8 GEMM，但需配合缩放因子（因 FP8 动态范围小）。DeepGEMM 的细粒度缩放支持可能适用。\n3. 反向传播中的梯度计算\n权重梯度（Weight Gradients）\n：\n在反向传播中，计算\ndW = X^T @ dY\n（如 FFN 层的\nW.grad\n）。\n替换方案\n：\n使用\nwgrad_gemm_fp8_fp8_fp32_nt\n，直接以 FP8 输入计算 FP32 梯度，避免显式类型转换。\nMoE 的专家梯度聚合\n：\n使用\nk_grouped_wgrad_gemm_fp8_fp8_fp32_nt\n处理不同专家的梯度，避免逐专家计算。\n4. 其他场景\n嵌入层（Embedding）的投影\n：\n如\nlogits = hidden_states @ embedding_matrix.T\n，可用 FP8 GEMM 加速（需对齐维度）。\nLoRA 适配器的低秩乘法\n：\nLoRA 的\nA @ B\n低秩矩阵乘法，适合 FP8 计算。\n适用条件\n硬件要求\n：需 NVIDIA Hopper GPU（如 H100），支持 FP8 Tensor Core。\n精度权衡\n：FP8 可能影响模型收敛性，建议在训练后期或推理阶段使用。\n形状对齐\n：输入矩阵的\nK\n维度需对齐 128（DeepGEMM 的\nBLOCK_K=128\n），否则需填充。\n性能收益\n速度\n：FP8 理论算力是 BF16 的 4 倍（实际加速 2~3 倍）。\n显存\n：FP8 数据占用显存仅为 BF16 的 1/4，可处理更大 batch size。\nMoE 优化\n：分组 GEMM 减少核函数启动次数，提升吞吐量。\n示例代码（替换 HuggingFace 模型中的线性层）\nfrom\ntransformers\nimport\nAutoModel\nimport\ndeep_gemm\nmodel\n=\nAutoModel\n.\nfrom_pretrained\n(\n\"\nmeta-llama/Llama-2-7b\n\"\n).\ncuda\n()\n# 替换 FFN 层的矩阵乘法\ndef\nfp8_linear\n(\nx\n,\nweight\n,\nscales_x\n,\nscales_w\n):\n# x: [seq_len, hidden_dim], weight: [hidden_dim, out_dim]\nx_fp8\n=\n(\nx\n.\nto\n(\ntorch\n.\nfloat8_e4m3fn\n),\nscales_x\n)\n# 伪代码，需实际量化\nw_fp8\n=\n(\nweight\n.\nto\n(\ntorch\n.\nfloat8_e4m3fn\n),\nscales_w\n)\nout\n=\ntorch\n.\nempty\n(\nx\n.\nshape\n[\n0\n],\nweight\n.\nshape\n[\n1\n],\ndtype\n=\ntorch\n.\nbfloat16\n,\ndevice\n=\n\"\ncuda\n\"\n)\ndeep_gemm\n.\ngemm_fp8_fp8_bf16_nt\n(\nx_fp8\n,\nw_fp8\n,\nout\n)\nreturn\nout\n# 替换原模型的 forward 计算\nmodel\n.\nlayers\n[\n0\n].\nmlp\n.\ndense_h_to_4h\n=\nfp8_linear\nEnter fullscreen mode\nExit fullscreen mode\n注意事项\n精度校准\n：FP8 需要动态缩放因子（DeepGEMM 已内置），建议在训练时统计\namax\n。\n核函数选择\n：小矩阵（如\nM < 128\n）可能无法充分利用 Tensor Core，需测试性能。\n通过合理替换，DeepGEMM 可显著加速 LLM 的\n训练迭代\n和\n推理延迟\n，尤其适合 MoE 或超大模型场景。",
  "metadata": {
    "title": "DeepSeek DeepGEMM 中文讲解 - DEV Community",
    "description": "这个仓库是 DeepGEMM，一个专注于高效 FP8（8位浮点数）通用矩阵乘法（GEMM）的库，由 DeepSeek 团队开发。它支持细粒度的缩放（fine-grained... Tagged with deepseek, deepgemm, matmul, fp8.",
    "keywords": "deepseek, deepgemm, matmul, fp8, software, coding, development, engineering, inclusive, community",
    "author": null,
    "og:type": "article",
    "og:url": "https://dev.to/vuk_rosic/deepseek-deepgemm-zhong-wen-jiang-jie-4b1e",
    "og:title": "DeepSeek DeepGEMM 中文讲解",
    "og:description": "这个仓库是 DeepGEMM，一个专注于高效 FP8（8位浮点数）通用矩阵乘法（GEMM）的库，由 DeepSeek 团队开发。它支持细粒度的缩放（fine-grained...",
    "og:site_name": "DEV Community",
    "og:image": "https://media2.dev.to/dynamic/image/width=1000,height=500,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F197i17nxxdb6gsn2w0eq.png",
    "twitter:site": "@thepracticaldev",
    "twitter:creator": "@VukRosic99",
    "twitter:title": "DeepSeek DeepGEMM 中文讲解",
    "twitter:description": "这个仓库是 DeepGEMM，一个专注于高效 FP8（8位浮点数）通用矩阵乘法（GEMM）的库，由 DeepSeek 团队开发。它支持细粒度的缩放（fine-grained...",
    "twitter:card": "summary_large_image",
    "twitter:widgets:new-embed-design": "on",
    "twitter:image:src": "https://media2.dev.to/dynamic/image/width=1000,height=500,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F197i17nxxdb6gsn2w0eq.png"
  },
  "paywall": {
    "listed_paid": false,
    "detected": false,
    "marker": "",
    "public_only": false,
    "policy": "付费/会员内容只保留页面公开可见部分，不绕过付费墙"
  },
  "crawl": {
    "success": true,
    "status_code": 200,
    "error": ""
  },
  "code_blocks": [
    {
      "file": "attachments/dc65fec36bf7/code/body-000.txt",
      "chars": 124,
      "language": "text"
    },
    {
      "file": "attachments/dc65fec36bf7/code/body-001.txt",
      "chars": 565,
      "language": "text"
    },
    {
      "file": "attachments/dc65fec36bf7/code/body-002.txt",
      "chars": 588,
      "language": "text"
    }
  ],
  "images": [],
  "audio": [],
  "videos": [],
  "links": [],
  "repair_version": 2,
  "repaired_at": "2026-10-14T10:50:23Z",
  "source_url": "https://dev.to/vuk_rosic/deepseek-deepgemm-zhong-wen-jiang-jie-4b1e",
  "papers": [],
  "actual_video_files": [],
  "body_chars": 4447,
  "expected_body_images": 0,
  "discovery_status": "ok",
  "delivery_status": "ok",
  "missing_reason": "",
  "raw_html": "attachments/dc65fec36bf7/pages/source.html",
  "local_html": "attachments/dc65fec36bf7/pages/article.html",
  "body_base_path": "attachments/dc65fec36bf7/pages/",
  "body_markdown_path": "attachments/dc65fec36bf7/pages/article.md"
}