gpu-V100显卡相关知识-二、实现

  1. 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 : 未报错

  1. 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)

  2. V100架构
    https://www.nvidia.cn/data-center/v100/
    NVIDIA V100 Tensor Core 第一代gpu。其采用 NVIDIA Volta 架构,并带有 16 GB 和 32GB 两种配置。
    运行速度:
    在这里插入图片描述
    计算能力:
    https://developer.nvidia.com/cuda-gpus在这里插入图片描述

上一篇:vue2 - el-table表格设置动态修改表头