恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
DeepSpeed DS4Sci_EvoformerAttention 内核实战指南:为 Evoformer 类结构生物学模型消除注意力内存爆炸
首页
资讯中心
/
DeepSpeed DS4Sci_EvoformerAttention 内核实战指南:为 Evoformer 类结构生物学模型消除注意力内存爆炸
DeepSpeed DS4Sci_EvoformerAttention 内核实战指南:为 Evoformer 类结构生物学模型消除注意力内存爆炸
发布时间:2026/9/10 13:55:56
DeepSpeed DS4Sci_EvoformerAttention 内核实战指南为 Evoformer 类结构生物学模型消除注意力内存爆炸【免费下载链接】DeepSpeedDeepSpeed is a deep learning optimization library that makes distributed training and inference easy, efficient, and effective.项目地址: https://gitcode.com/GitHub_Trending/de/DeepSpeedDS4Sci_EvoformerAttention是 DeepSpeed4Science 为 Evoformer 系列注意力机制定制的一组融合内核它在保持数值精度fp16/bf16的同时显著压缩激活内存占用并提升前向计算速度。本文基于 DeepSpeed 仓库中的官方教程docs/_tutorials/ds4sci_evoformerattention.md及其对应源码、单元测试与基准脚本完整讲解它的适用场景、环境与 CUTLASS 安装、多架构编译、四种注意力的调用约定以及如何在 OpenFold 等 Evoformer 类模型中落地。读完本文你将掌握在自有结构生物学模型中以约十行代码替换 MSA/三角注意力实现并安全验证结果的能力。1. 什么是 DS4Sci_EvoformerAttentionDS4Sci_EvoformerAttention是一组用于将 Evoformer 计算扩展到更大序列数sequences与更大残基数residuals的 kernel 集合其核心手段是降低内存足迹并提升训练速度。Evoformer 是 AlphaFold2 中负责在 MSA多序列比对表征与残基对pair表征之间反复交换信息的关键模块其前向通道内含有多种自定义注意力变体——当训练/推理规模变大时这些注意力层的激活值异常庞大成为典型的内存瓶颈。在 DeepSpeed 仓库中这一内核集合包含以下部分Python 前端封装deepspeed/ops/deepspeed4science/evoformer_attn.py对外暴露DS4Sci_EvoformerAttention(Q, K, V, biases)函数包导出入口deepspeed/ops/deepspeed4science/init.py基于 CUTLASS 的 CUDA/C 底层实现目录csrc/deepspeed4science/evoformer_attn/其中包括前向 kernel 头文件 kernel_forward.h、反向 kernel 头文件kernel_backward.h以及 pybind 绑定源文件 attention.cppOp Builder负责 CUTLASS 探测、编译目标过滤与兼容性检查op_builder/evoformer_attn.py。从实现上看该内核并非一套新的注意力变体而是一组针对四种现有 Evoformer 注意力变体MSA 行注意力、MSA 列注意力、两种三角自注意力的融合算子前向采用融合 GEMM Softmax 减少中间张量落地反向则不保存完整注意力矩阵仅保存 FlashAttention 风格的 log-sum-explse与delta中间量用于重计算梯度。2. 何时应该使用 DS4Sci_EvoformerAttention官方教程给出了非常明确的适用性判断可按两个维度决策规模维度序列数与残基数越大收益越明显。前向 kernel 面向计算加速而优化因此适合在推理阶段加速各类注意力机制。训练/推理取舍维度前向 kernel对应attention在训练与推理中均可使用主要收益是速度反向 kernel对应attention_bwd在训练阶段以少量额外计算为代价换取显著的激活内存下降——因为它不再保存[N_res, N_res]或相应大小的注意力分数矩阵用于反向传播。因此官方明确建议在内存受限的训练场景中优先使用DS4Sci_EvoformerAttention典型目标就是 MSA row-wise attention 与 MSA column-wise attention——这两类注意力的激活张量随序列数/残基数二次增长是 Evoformer 类结构生物学模型训练时内存爆炸的主要来源。而三角注意力对 pair 表征更新同样受益于该内核的融合优化。3. 环境前提与安装3.1 版本与硬件/软件要求DS4Sci_EvoformerAttention作为 DeepSpeed 0.10.3的一部分发布安装 DeepSpeed 时默认包含该功能模块。GPU要求计算能力compute capability7.0 及以上即 NVIDIA V100 或更新型号CUDA最低 CUDA 11.3推荐使用 CUDA 11.7 或更高版本以获得更好的性能架构差异反向 kernel 目前在 V100Volta上的性能不如 A100Ampere对性能敏感的训练任务建议优先使用 Ampere 及以上架构。扩展在编译/加载时会主动检查上述两项要求不满足即失败。若需要在无 GPU 的环境下交叉编译可通过环境变量跳过检查DS_IGNORE_CUDA_DETECTIONTRUE上述硬件/软件门槛并非教程的孤证可在 Op Builder 源码 op_builder/evoformer_attn.py 的is_compatible()方法中看到对应逻辑它会校验 GPU compute capability 7.0以及系统 CUDA / PyTorch CUDA 主版本 11不满足时打印告警并判定不兼容。此外若 CUTLASS 以 checkout 方式提供is_compatible()还会检查其CHANGELOG.md中是否包含版本号3.1.0据此强制要求CUTLASS 3.1.0。3.2 CUTLASS 依赖与探测机制DS4Sci_EvoformerAttention基于 NVIDIA CUTLASS 实现编译时需要拿到 CUTLASS 头文件。DeepSpeed 会按以下顺序自动探测CUTLASS 位置nvidia-cutlassPython 包PyPI 发行版Python 环境与 CMake 前缀如sys.prefix、CONDA_PREFIX、VIRTUAL_ENV、CMAKE_PREFIX_PATH等编译器 include 路径环境变量CPATH、CPLUS_INCLUDE_PATH、C_INCLUDE_PATH位于 DeepSpeed 源码旁边、或当前工作目录下的cutlasscheckout常见系统安装前缀例如/usr/local、/usr、/usr/local/cutlass、/opt/cutlass等。探测逻辑的具体候选路径列表可在 op_builder/evoformer_attn.py 的_candidate_cutlass_paths()与include_paths()中查看。最省事的安装方式是在 DeepSpeed 旁边直接克隆 CUTLASSgit clone https://github.com/NVIDIA/cutlass以上所有探测手段均不可用时可以显式指定路径export CUTLASS_PATH/path/to/cutlass # 指向 checkout 根目录或其 include 目录如果你已经具备完备的编译环境例如在已内置 cutlass 与 CUDA 编译器、使用 conda 打包的场景可以完全跳过 CUTLASS 探测export CUTLASS_PATHDS_IGNORE_CUTLASS_DETECTION内核的编译时机这些 kernel 并不是在pip install阶段强制构建的而是在DS4Sci_EvoformerAttention第一次被调用时由 JIT 机制按需编译Python 前端中通过EvoformerAttnBuilder().load()触发见 evoformer_attn.py。这意味着首次调用会有一段编译等待时间属正常现象。3.3 多架构Multi-Arch构建行为较新版本的 Evoformer 已支持直接通过TORCH_CUDA_ARCH_LIST进行混合架构打包TORCH_CUDA_ARCH_LIST7.0;8.0 \ DS_BUILD_OPS0 DS_BUILD_EVOFORMER_ATTN1 \ pip install -e .要点如下TORCH_CUDA_ARCH_LIST控制生成的 CUDA 编译切片列表内顺序无关紧要由于 Evoformer 内核必须使用Tensor Core低于sm_70的目标会被自动剪除。对应逻辑见 op_builder/evoformer_attn.py 的filter_ccs()它只保留 compute capability 主版本 7 的目标并对被剔除的低版本目标打印告警 Tensor Core requiredDS_EVOFORMER_GPU_ARCH环境变量已废弃对 Evoformer 构建将不再生效请改用TORCH_CUDA_ARCH_LIST废弃提示同样由nvcc_args()在检测到该变量时给出。按架构家族支持的数据类型矩阵如下架构家族fp16bf16Sm70VoltaV100支持不支持Sm75TuringT4/RTX 20 系列支持不支持Sm80Ampere / Ada / HopperA100/A30/H100 等支持支持这一矩阵同样与单元测试逻辑一致在 test_DS4Sci_EvoformerAttention.py 中bf16 用例通过skip_on_arch(8)在低于 Ampere 的架构上被跳过而 fp16 用例仅要求skip_on_arch(7)。4. 运行单元测试与基准DeepSpeed 仓库中提供了针对该内核的单元测试与基准脚本可用于安装后验证正确性与性能。单元测试验证前向输出以及 Q/K/V/bias 的反向梯度与参考实现一致pytest -s tests/unit/ops/deepspeed4science/test_DS4Sci_EvoformerAttention.py测试用例 test_DS4Sci_EvoformerAttention.py 通过pytest.mark.parametrize覆盖torch.float16与torch.bfloat16两种数据类型、两种张量形状(1, 256, 256, 4, 32)与(1, 512, 256, 8, 8)对应 Batch/N_seq/seq_len/Head/Dim。它实现了一个参考版注意力attention_referencesoftmax(Q·Kᵀ·scale Σbias)·V随后比较融合内核前向结果与所有反向梯度相对参考实现的误差是否在容差范围内fp16 容差 1e-2bf16 容差 5e-2。注意该测试同时传入两个 bias一个 mask bias、一个随机 pair/edge bias因此同时覆盖了带 bias1 与 bias2 的完整路径。性能基准对比融合内核与参考实现的前向/反向耗时python tests/benchmarks/DS4Sci_EvoformerAttention_bench.py基准脚本 DS4Sci_EvoformerAttention_bench.py 默认使用N256、seq_len256、heads4、dim32、fp16对 batch 1~16 逐一测量融合内核与基线实现的 forward/backward CUDA 时间使用 CUDA Event 计时含预热最终打印 batch size / ours (FW) / baseline (FW) / ours (BW) / baseline (BW) 对照表。运行前同样需按第 3.2 节准备好 CUTLASS。5. 将 DS4Sci_EvoformerAttention 接入自有模型5.1 导入与数据类型前提在自有模型中使用该内核只需一行导入from deepspeed.ops.deepspeed4science import DS4Sci_EvoformerAttention在使用前必须确认两个前提输入张量数据类型必须为torch.float16或torch.bfloat16张量必须位于 CUDA 加速器上Python 前端中通过get_accelerator().on_accelerator(...)断言见 evoformer_attn.py。5.2 统一的张量布局约定Q、K、V 的统一布局为[*, L, Head, Dim]其中最后两维分别是注意力头数Head与每头隐状态维度Dim倒数第三维L是被注意力作用的主要长度维度对于四种注意力各有不同含义前面的星号维为任意 batch/批量前缀。教程中以N_seq表示 MSA 序列数、N_res表示残基数且不同注意力中Dim与Head取值不同。两个可选 bias作为第二个参数biases列表传入的语义为bias1 / res_mask残基掩码偏置广播到残基维度形状[Batch, N_seq, 1, 1, N_res]bias2残基对pair偏置或边信息形状[Batch, 1, Head, N_res, N_res]。注意在 evoformer_attn.py 的DS4Sci_EvoformerAttention中biases列表长度上限为 2且长度不足时会自动用None补齐传入的 bias 若不为None其形状会被严格校验bias_1_shape/bias_2_shape两个 lambda 分别计算期望形状并与 Q 的维度推导比对不匹配将直接断言失败。掩码在测试中通常以1e9 * (mask - 1)的加性 mask 形式传入即用极大负值屏蔽被 mask 的位置。5.3 四种注意力的调用示例(a) MSA row-wise attentionMSA 行注意力为残基对构建注意力权重并把来自 pair 表征的信息作为额外 bias 项融合进来# Q, K, V: [Batch, N_seq, N_res, Head, Dim] # res_mask: [Batch, N_seq, 1, 1, N_res] # pair_bias: [Batch, 1, Head, N_res, N_res] out DS4Sci_EvoformerAttention(Q, K, V, [res_mask, pair_bias])(b) MSA column-wise attentionMSA 列注意力让属于同一目标残基的元素之间交换信息# Q, K, V: [Batch, N_res, N_seq, Head, Dim] # res_mask: [Batch, N_seq, 1, 1, N_res] out DS4Sci_EvoformerAttention(Q, K, V, [res_mask])(c) Triangular self-attention around starting node围绕起始节点的三角自注意力用于更新 pair 表征。以下为围绕起始节点的示例围绕结束节点的三角自注意力与此类似区别在于 bias 来自哪一侧的边# Q, K, V: [Batch, N_res, N_res, Head, Dim] # res_mask: [Batch, N_res, 1, 1, N_res] # right_edges: [Batch, 1, Head, N_res, N_res] out DS4Sci_EvoformerAttention(Q, K, V, [res_mask, right_edges])可以看出四种机制的区别仅在于Q/K/V 中L维度对应N_seq还是N_res以及第二个 bias 是否传入列注意力不涉及 pair bias因此只传一个res_mask。调用接口本身完全统一。5.4 内部实现细节与尺寸约束源码级从 evoformer_attn.py 的实现可以进一步确认若干运行时约束写模型时需要留意长度约束前向入口_attention断言Q.shape[-3] 16即L维必须大于 16反向入口attention_bwd断言max(Q.shape[-1], V.shape[-1]) 64即Dim维不得超过 64源码注释说明若需更大Dim需修改kMax上限重新编译。这解释了为何该类注意力头维度通常取 8~32 之间。FlashAttention 式反向设计前向除了输出O还会计算形状为[batch*batch_dim, Head, ceil(L/32)*32]的 fp32lselog-sum-exp张量——L会被向上对齐到 32 的倍数(L 31) // 32 * 32。反向通过自定义的torch.autograd.FunctionEvoformerFusedAttention重新读取q/k/v/o/lse计算梯度这正是其以少量重算换激活内存下降的机制所在。梯度开关bias1/bias2 的反向梯度只在调用方确实需要且输入要求梯度时ctx.needs_input_grad才分配与计算未激活的 bias 梯度返回None因此只在需要时传 bias 可以省下额外开销。空 bias 处理未传的 bias 会被替换为空 tensor仍走统一的 kernel 调用路径接口层面无需分支。6. 科学应用案例OpenFold 中消除 Evoformer 训练内存爆炸DS4Sci_EvoformerAttention的真实落地场景是OpenFold——AlphaFold2 的社区复现项目它使研究者能够在全新数据集上训练或微调 AlphaFold2。AlphaFold2 训练存在显著的内存爆炸问题根源正是它包含的多种自定义 Evoformer 注意力变体产生了异常庞大的激活值。通过引入 DeepSpeed4Science 的DS4Sci_EvoformerAttention内核OpenFold 团队在不损失精度的情况下将训练峰值内存需求降低了13 倍从而得以把 Evoformer 类结构生物学模型扩展到更大的序列数与残基数。OpenFold 仓库中同样保留了如何在 OpenFold 模型内部接线使用该内核的示例tests/test_deepspeed_evo_attention.py可以作为把该内核嵌入完整 Evoformer/AlphaFold2 训练管线时的参考实现。对于 Evoformer 类模型的其他训练者推荐的接入路径是确认满足第 3 节的硬件与 CUTLASS 前提跑通第 4 节的单元测试在模型中以DS4Sci_EvoformerAttention替换四种注意力变体MSA 行/列、两种三角注意力注意统一输入布局与 fp16/bf16 前提用精度对照例如仓库测试中的attention_reference参考实现校验前向与反向输出观察峰值内存与吞吐变化验证融合内核的实际收益。7. 相关资源索引本教程官方页面docs/_pages/deepspeed4science.mdDeepSpeed4Science 功能总览Python 前端实现deepspeed/ops/deepspeed4science/evoformer_attn.pyCUDA/C 底层实现与 pybindcsrc/deepspeed4science/evoformer_attn/、csrc/deepspeed4science/evoformer_attn/attention.cppOp Builder 与 CUTLASS 探测/架构过滤op_builder/evoformer_attn.py、deepspeed/ops/op_builder/evoformer_attn.py单元测试tests/unit/ops/deepspeed4science/test_DS4Sci_EvoformerAttention.py性能基准tests/benchmarks/DS4Sci_EvoformerAttention_bench.py【免费下载链接】DeepSpeedDeepSpeed is a deep learning optimization library that makes distributed training and inference easy, efficient, and effective.项目地址: https://gitcode.com/GitHub_Trending/de/DeepSpeed创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考