gpu-V100显卡相关知识
一、定义
- RuntimeError: FlashAttention only supports Ampere GPUs or newer.
- torch attention注意力接口学习
- V100 架构是什么?
二、实现
-
RuntimeError: FlashAttention only supports Ampere GPUs or newer.
报错原因分析:
GPU机器配置低,不支持 特斯拉 V100;
flash attention是一个用于加速模型训练推理的可选项,且仅适用于Turing、Ampere、Ada、Hopper架构的Nvidia GPU显卡(如H100、A100、RTX 3090、T4、RTX 2080)解决: 方式一、原因是自动安装的transformers(4.40.0) 和 torch(2.2.2)版本太高,自动调用FlashAttention ,将版本分别降到4.30.0和2.1.0问题解决。
方式二、 不让其调用FlashAttention, 修改config.json 中的配置, 看配置中是否有该参数。
方式三: 禁用flashattention: torch.backends.cuda.enable_flash_sdp(False)
import torch
query = torch.rand(1, 32, 1, 128, dtype=torch.float16, device="cuda:3")
key = torch.rand(1, 32, 145, 128, dtype=torch.float16, device="cuda:3")
value = torch.rand(1, 32, 145, 128, dtype=torch.float16, device="cuda:3")
res = torch.nn.functional.scaled_dot_product_attention(query, key, value)
print(res.shape)
torch:2.2.1 : 自动加载 flashattention
Traceback (most recent call last):
File "test1.py", line 7, in <module>
res = torch.nn.functional.scaled_dot_product_attention(query,key,value)
RuntimeError: FlashAttention only supports Ampere GPUs or newer.
torch:2.1.0 : 未报错
-
torch attention注意力接口学习
torch 实现注意力方法: torch.nn.functional.scaled_dot_product_attention
点乘注意力机制支持三种模块,并根据最优原则自动选择哪种模式。
Flash Attention2内核(sdpa_flash,用于在Nvidia GPU上进行16位浮点训练和推理,适用于SM80+架构级别的GPU),
xFormers内存高效注意力内核(sdpa_mem_eff,用于在广泛范围的Nvidia GPU上进行16位和32位浮点训练和推理)。
当自定义内核不适用时,还提供了一个通用的内核sdpa_math的实现。
如果发生报错,可手动禁用。如 torch.backends.cuda.enable_flash_sdp(False) -
V100架构
https://www.nvidia.cn/data-center/v100/
NVIDIA V100 Tensor Core 第一代gpu。其采用 NVIDIA Volta 架构,并带有 16 GB 和 32GB 两种配置。
运行速度:
计算能力:
https://developer.nvidia.com/cuda-gpus