当前位置: 首页 > news >正文

flash-attention保姆级安装教程

FlashAttention安装教程

FlashAttention 是一种高效且内存优化的注意力机制实现,旨在提升大规模深度学习模型的训练和推理效率。

  • 高效计算:通过优化 IO 操作,减少内存访问开销,提升计算效率。

  • 内存优化:降低内存占用,使得在大规模模型上运行更加可行。

  • 精确注意力:保持注意力机制的精确性,不引入近似误差。

  • FlashAttention-2 是 FlashAttention 的升级版本,优化了并行计算策略,充分利用硬件资源。改进了工作负载分配,进一步提升计算效率。

  • FlashAttention-3:FlashAttention-3 是专为 Hopper GPU(如 H100)优化的版本,目前处于 Beta 测试阶段。


常见问题:
安装成功后,实际模型代码运行时报错未安装,核心原因就是cxx11abiFALSE这个参数,表示该包在构建时不启用 C++11 ABI。
必须开启不使用才行。否则报错如下:
ImportError: This modeling file requires the following packages that were not found in your environment: flash_attn.


最佳安装步骤(方法1)

  1. 安装依赖
    • 基础环境:cuda12.1、nvcc.
    • 安装python,示例3.10。
    • 安装PyTorch,示例orchtorch2.3.0; torchvision0.18.0
    • ninja Python 包
  2. 获取releases对应的whl包
    - 地址:https://github.com/Dao-AILab/flash-attention/releases
    - 按照系统环境选whl
    在这里插入图片描述
    3. 我的环境对应的包是:flash_attn-2.7.2.post1+cu12torch2.3cxx11abiTRUE-cp310-cp310-linux_x86_64.whl,解释如下:
    • flash_attn: 包的名称,表示这个 Wheel 文件是 flash_attn 包的安装文件。
    • 2.7.2.post1: 包的版本号,遵循 PEP 440 版本规范。
      • 2.7.2: 主版本号,表示这是 flash_attn 的第 2.7.2 版本。
      • post1: 表示这是一个“后发布版本”(post-release),通常用于修复发布后的某些问题。
    • +cu12torch2.3cxx11abiFALSE: 构建标签,表示该 Wheel 文件是在特定环境下构建的。
      • cu12: 表示该包是针对 CUDA 12 构建的。
      • torch2.3: 表示该包是针对 PyTorch 2.3 构建的。
      • cxx11abiFALSE: 表示该包在构建时不启用 C++11 ABI(Application Binary Interface)。如果安装包后不识别,就要选为False的版本。
    • cp310: Python 版本的标签,表示该包是为 Python 3.10 构建的。
      • cp310: 是 cpython 3.10 的缩写,表示该包适用于 CPython 解释器的 3.10 版本。
    • linux_x86_64: 平台标签,表示该包是为 Linux 操作系统和 x86_64 架构(即 64 位 Intel/AMD 处理器)构建的。
    • .whl: 文件扩展名,表示这是一个 Python Wheel 文件。Wheel 是 Python 的一种二进制分发格式,用于快速安装包。

如何安装

可以使用 pip 安装这个 Wheel 文件:

pip install flash_attn-2.7.2.post1+cu12torch2.3cxx11abiTRUE-cp310-cp310-linux_x86_64.whl --no-build-isolation

常规安装步骤(方法二)

  1. 安装依赖

    • CUDA 工具包或 ROCm 工具包
    • PyTorch 1.12 及以上版本
    • packagingninja Python 包
    pip install packaging ninja
    
  2. 安装 FlashAttention

    # 后面--no-build-isolation参数是为了pip 会直接在当前环境中构建包,使用当前环境中已安装的依赖项。
    # 如果当前环境缺少构建所需的依赖项,构建过程可能会失败。
    pip install flash-attn --no-build-isolation
    

    或从源码编译:

    # 下载源码后,进行编译
    cd flash-attention
    python setup.py install
    
  3. 运行测试

    export PYTHONPATH=$PWD
    pytest -q -s test_flash_attn.py
    
  4. 补充说明

    4.1 上面运行时,建议设置参数MAX_JOBS,限制最大进程数,不然系统容易崩。本人在docker下安装,直接干重启了,所以建议如下方式运行:

    MAX_JOBS=4 pip install flash-attn --no-build-isolation
    

    4.2 如果运行时会出现警告且推理速度依旧很慢,需要继续从源码安装rotary和layer_norm,cd到源码的那两个文件夹,执行 python setup.py install进行安装,如果命令报错弃用,可能要用easy_install命令。
    在这里插入图片描述

接口使用

import flash_attn_interface
flash_attn_interface.flash_attn_func()

硬件支持

NVIDIA CUDA 支持

  • 支持 GPU:Ampere、Ada 或 Hopper 架构 GPU(如 A100、RTX 3090、RTX 4090、H100)。
  • 数据类型:FP16 和 BF16。
  • 头维度:支持所有头维度,最大至 256。

AMD ROCm 支持

  • 支持 GPU:MI200 或 MI300 系列 GPU。
  • 数据类型:FP16 和 BF16。
  • 后端:支持 Composable Kernel (CK) 和 Triton 后端。

性能优化

Triton 后端

Triton 后端的 FlashAttention-2 实现仍在开发中,目前支持以下特性:

  • 前向和反向传播:支持因果掩码、变长序列、任意 Q 和 KV 序列长度、任意头大小。
  • 多查询和分组查询注意力:目前仅支持前向传播,反向传播支持正在开发中。

性能改进

  • 并行编译:使用 ninja 工具进行并行编译,显著减少编译时间。
  • 内存管理:通过设置 MAX_JOBS 环境变量,限制并行编译任务数量,避免内存耗尽。

结论

FlashAttention 系列通过优化计算和内存使用,显著提升了注意力机制的效率。无论是研究人员还是工程师,都可以通过本文提供的安装和使用指南,快速上手并应用于实际项目中。随着 FlashAttention-3 的推出,针对 Hopper GPU 的优化将进一步推动大规模深度学习模型的发展。

参考链接

  • FlashAttention 源码

相关文章:

flash-attention保姆级安装教程

FlashAttention安装教程 FlashAttention 是一种高效且内存优化的注意力机制实现,旨在提升大规模深度学习模型的训练和推理效率。 高效计算:通过优化 IO 操作,减少内存访问开销,提升计算效率。 内存优化:降低内存占用…...

送给一年编程道路的自己

回望过去一年在编程道路上的成长与收获,是一个很有意义的过程。总结自己这一年的编程经历,不仅可以帮助你更清晰地了解自己的进步和不足,还能为未来的发展指引方向。以下是一些可能的收获,供你参考: 1. 技能提升 语言…...

LeRobot(1)

Train python lerobot/scripts/train.py \ policyact \ envaloha \ env.taskAlohaInsertion-v0 \ dataset_repo_idlerobot/aloha_sim_insertion_human \ load_data一直报错,忘记截图了,反正是ssh报错,下不下来,网…...

C++ 设计模式:组合模式(Composite Pattern)

链接:C 设计模式 链接:C 设计模式 - 迭代器模式 链接:C 设计模式 - 职责链模式 组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式…...

OpenHarmony源码编译后烧录镜像教程,RK3566鸿蒙开发板演示

本文介绍瑞芯微主板/开发板编译OpenHarmony源码后烧录镜像的教程,触觉智能Purple Pi OH鸿蒙开发板演示。搭载了瑞芯微RK3566四核处理器,树莓派卡片电脑设计,支持开源鸿蒙OpenHarmony3.2-5.0系统,适合鸿蒙开发入门学习。 编译源码…...

强化学习(1)

Reinforcement Learning Goal-directed learing from ineraction with the environment. 1. Basic Element 基本元素 1.1 Agent 玩家 1.2 Environment 1.3 Goal 2. Main Element 主要元素 2.1 State 2.2 Action 状态与行为往复 2.3 Reward 目标:最大化总…...

【漏洞复现】金和OA C6 FileDownLoad.aspx 任意文件读取漏洞复现

免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。本次测试仅供学习使用,如若非法他用,与平台和本文作…...

开源模型应用落地-qwen2-7b-instruct-LoRA微调-Axolotl-单机多卡-RTX 4090双卡(七)

一、前言 本篇文章将使用Axolotl去高效微调QWen2系列模型,通过阅读本文,您将能够更好地掌握这些关键技术,理解其中的关键技术要点,并应用于自己的项目中。 二、术语介绍 2.1. LoRA微调 LoRA (Low-Rank Adaptation) 用于微调大型语言模型 (LLM)。 是一种有效的自适应策略,…...

Dockerfile 构建继承父镜像的 ENTRYPOINT 和 CMD

在 Docker 中,Dockerfile 是否继承其父映像的 ENTRYPOINT 和 CMD,取决于 Dockerfile 的编写方式。以下是规则: 1. CMD 的继承 子镜像会继承父映像的 CMD,但如果在子镜像的 Dockerfile 中显式定义了新的 CMD,就会覆盖…...

46. Three.js案例-创建颜色不断变化的立方体模型

46. Three.js案例-创建颜色不断变化的立方体模型 实现效果 知识点 Three.js基础组件 WebGLRenderer THREE.WebGLRenderer是Three.js提供的用于渲染场景的WebGL渲染器。它支持抗锯齿处理,可以设置渲染器的大小和背景颜色。 构造器 antialias: 是否开启抗锯齿&am…...

Linux系统离线部署MySQL详细教程(带每步骤图文教程)

1、登录官网下载对应的安装包 MySQL :: Developer Zone 2、将压缩包上传到服务器上,这里直接上传到/usr/local路径上 使用sftp工具上传到/usr/local目录上 3、解压压缩包 tar -xf mysql-8.0.39-linux-glibc2.17-x86_64.tar.xz 4、将mysql-8.0.39-linux-glibc2.17…...

【数据仓库】hive on Tez配置

hive on Tez 搭建 前提是hive4.0hadoop3.2.2数仓已搭建完成,现在只是更换其执行引擎 为Tez。搭建可参考【数据仓库】hive hadoop数仓搭建实践文章。 Tez 下载 下载地址 https://archive.apache.org/dist/tez/ 官网地址 https://tez.apache.org/releases/apac…...

Kubernetes Gateway API-3-TLS配置

1 简介 Gateway API 允许使用多种方式配置 TLS。本文档列出了各种TLS设置,并给出了如何有效使用它们的一般指南。 尽管本文档涵盖了 Gateway API 最常见的TLS配置形式,但某些实现也可能提供特定于实现的扩展,允许不同或更高级形式的TLS配置。除此文档外,值得阅读你所使用…...

C++ 设计模式:原型模式(Prototype Pattern)

链接:C 设计模式 链接:C 设计模式 - 工厂方法 链接:C 设计模式 - 抽象工厂 链接:C 设计模式 - 建造者模式 原型模式(Prototype Pattern)是一种创建型设计模式,它允许一个对象通过复制现有对象来…...

计算机网络 (12)物理层下面的传输媒体

前言 计算机网络物理层下面的传输媒体是计算机网络设备之间的物理通路,也称为传输介质或传输媒介,并不包含在计算机网络体系结构中,而是处于物理层之下。 一、传输媒体的分类 导向型媒体:电磁波被导引沿着固体媒体传播。常见的导向…...

SpringCloud 系列教程:微服务的未来(三)IService接口的业务实现

本文将介绍 IService 接口的基本业务操作、复杂业务操作、Lambda 方法的使用以及批量增加操作,帮助开发者深入了解如何高效地利用 MyBatis-Plus 提供的功能进行数据库操作。无论是简单的单表查询,还是复杂的多表联动,甚至是大数据量的批量操作…...

测试带宽上行方法

测试宽带上行速度的软件有多种,以下是一些常见的选择: Speedtest 平台支持:iOS、Android、Windows、MacOS等 特点:全球知名的网络测速软件,测试结果准确,支持多平台。用户可以选择最近的服务器进行测试&am…...

天天跳绳(???)

广东省人民政府门户网站 https://www.gd.gov.cn/zwgk/zdlyxxgkzl/whjg/content/post... 二沙岛变身智能“运动岛” - 广东省人民政府门户网站 2020年10月20日  广州二沙岛,犹如一颗璀璨明珠点缀在珠江之心,自然风光旖旎,功能分区清 … 公共…...

module ‘django.db.models‘ has no attribute ‘FieldDoesNotExist‘

module ‘django.db.models’ has no attribute ‘FieldDoesNotExist’ xadmin报错 原因 django与xadmin版本不匹配。 django==3.2.7 xadmin-django==3.0.2解决方案 在xadmin/view/edit.py的388行改为 from django.core import exceptions if self.request_method ==...

智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之10 方案再探之1:特定于领域的模板 之1 随想交流

前面的项目再次不能继续。不得已再一次重新建了这个项目,并以当前修改版本的项目文件为附件开始了今天的沟通。所以 标明是“方案再探” 在新建这个项目的同时,就将项目文件作为附件添加进去,然后开始。 文件链接:智能工厂的设计…...

高性能自动化网页信息提取工具实战指南:大规模目标扫描与安全检测技术方案

高性能自动化网页信息提取工具实战指南:大规模目标扫描与安全检测技术方案 【免费下载链接】URLFinder 一款快速、全面、易用的页面信息提取工具,可快速发现和提取页面中的JS、URL和敏感信息。 项目地址: https://gitcode.com/gh_mirrors/ur/URLFinder…...

从莱顿瓶到手机:一个300年前的“水罐”如何塑造了今天的电子世界?

从莱顿瓶到手机:一个300年前的“水罐”如何塑造了今天的电子世界? 1746年,法国物理学家诺莱特在巴黎科学院进行了一场令人瞠目的公开实验:700名僧侣手拉手排成1.5公里长的人链,当首尾两端连接莱顿瓶时,所有…...

【SRC漏洞挖掘系列】第04期:文件上传与解析——把图片变成“特洛伊木马”

上期回顾:我们刚用 SQL 注入把数据库翻了个底朝天。本期我们来聊聊更暴力的漏洞——文件上传。如果说 SQL 注入是“偷”,那文件上传就是直接往人家服务器里安炸弹。💣一、为什么文件上传是“高危”?在 SRC 评级里,GetS…...

手把手教你用Simulink搭建带Resolver的永磁同步电机FOC仿真模型(从电机库到代码生成)

从零构建永磁同步电机FOC仿真:集成旋变解码与代码生成的完整实践指南 在电机控制领域,快速验证算法并实现从仿真到硬件的无缝过渡是工程师面临的核心挑战。本文将带您完成一个包含旋转变压器(Resolver)信号处理的完整永磁同步电机…...

别再死记硬背了!用这5个真实案例,彻底搞懂NumPy的einsum函数

别再死记硬背了!用这5个真实案例,彻底搞懂NumPy的einsum函数 当你第一次看到np.einsum(ij,jk->ik, A, B)这样的表达式时,是不是感觉像在破译外星密码?作为NumPy中最强大却也最令人困惑的函数之一,einsum&#xff08…...

AutoMdxBuilder终极指南:3分钟零代码制作专业MDX词典的完整教程

AutoMdxBuilder终极指南:3分钟零代码制作专业MDX词典的完整教程 【免费下载链接】AutoMdxBuilder Automatically make mdx dictionaries 项目地址: https://gitcode.com/gh_mirrors/au/AutoMdxBuilder 还在为制作电子词典而烦恼吗?传统MDX词典制作…...

打通飞书与GitLab:基于Webhook的事件通知与精准@实践指南

1. 为什么需要打通飞书与GitLab的通知系统 在软件开发团队中,代码仓库的每一次变更都可能影响整个项目进度。传统的做法是开发人员手动在群里相关同事,或者依赖邮件通知,这种方式效率低下且容易遗漏重要信息。我曾经参与过一个跨时区协作项目…...

CARLA与Autoware融合实践:从自定义地图构建到闭环仿真测试

1. 自定义高精地图的构建与格式转换 在自动驾驶仿真开发中,高精地图是车辆感知和决策的基础。CARLA仿真环境提供了灵活的地图编辑工具,但要将自建地图与Autoware无缝对接,需要特别注意数据格式的兼容性。我曾在实际项目中遇到过多次地图导入…...

Java 23新特性深度解析:向量API、FFM与开发体验优化

1. 项目概述:为什么我们需要关注Java 23?作为一名和Java打了十几年交道的开发者,每次看到新版本发布,我的第一反应不是兴奋,而是警惕。新特性意味着新的学习成本,也意味着潜在的兼容性风险。但这次&#xf…...

华测RTK静态数据解算保姆级教程:从CHC Geomatics Office 2安装到平差报告导出

华测RTK静态数据解算全流程实战指南:从软件配置到精度优化 第一次接触华测RTK静态解算时,面对满屏的专业术语和复杂参数,不少同行都有过这样的困惑:为什么同样的数据,别人处理出来的结果总能一次性通过验收&#xff0…...