xFormers

文章目录
- 一、关于 xFormers
- 二、安装 xFormers
- 三、基准测试
- (可选)测试安装
- 四、使用 xFormers
- 1、Transformers 关键概念
- 2、Repo 地图
- 注意力机制
- Feed forward mechanisms
- Positional embedding
- Residual paths
- Initializations
- 3、主要特征
- 4、安装故障排除
一、关于 xFormers
xFormers是一个基于PyTorch的库,托管灵活的 Transformers 部件。
它们是可互操作和优化的构建块,可以选择性地组合以创建一些最先进的模型。
- github : https://github.com/facebookresearch/xformers
- 官网:https://facebookresearch.github.io/xformers/
xFormers 是:
- Customizable building blocks:独立/可定制的构建块,无需样板代码即可使用。这些组件与领域无关,xFormers 被视觉、NLP 等领域的研究人员使用。
- 研究第一:xFormers 包含前沿组件,这些组件在 PyTorch 等主流库中尚不可用。
- 构建时考虑到效率:由于迭代速度很重要,因此组件尽可能快且内存高效。 xFormers 包含自己的 CUDA 内核,但会在相关时分派到其他库。
二、安装 xFormers
(推荐,linux)使用 conda 安装最新的稳定版:需要使用conda 安装 PyTorch 2.3.0
conda install xformers -c xformers
(推荐,linux 和 win)使用 pip 安装最新稳定版本:需要PyTorch 2.3.0
# cuda 11.8 version
pip3 install -U xformers --index-url https://download.pytorch.org/whl/cu118
# cuda 12.1 version
pip3 install -U xformers --index-url https://download.pytorch.org/whl/cu121
开发二进制文件:
# Use either conda or pip, same requirements as for the stable version above
conda install xformers -c xformers/label/dev
pip install --pre -U xformers
从源安装:例如,如果您想与 PyTorch 的其他版本一起使用(包括夜间版本)
# (Optional) Makes the build much faster
pip install ninja
# Set TORCH_CUDA_ARCH_LIST if running and building on different GPU types
pip install -v -U git+https://github.com/facebookresearch/xformers.git@main#egg=xformers
# (this can take dozens of minutes)
三、基准测试
内存高效的 MHA 设置:F16 上的 A100,测量前向+后向传递的总时间
请注意,这是精确的注意力,而不是近似值,只需调用xformers.ops.memory_efficient_attention
更多基准测试
xFormers 提供了许多组件,并且BENCHMARKS.md中提供了更多基准测试。
(可选)测试安装
此命令将提供有关 xFormers 安装的信息,以及构建/可用的内核:
python -m xformers.info
四、使用 xFormers
1、Transformers 关键概念
让我们从 Transformer 架构的经典概述开始(来自 Lin 等人的“A Survey of Transformers”的插图)

您将在此图中找到关键的 repository 边界:Transformer 通常由注意力机制、用于编码某些位置信息的嵌入、前馈块和残差路径(通常称为前层或后层)的集合组成。规范)。这些边界并不适用于所有模型,但我们在实践中发现,如果进行一些调整,它可以捕获大部分最先进的技术。
因此,模型不是在整体文件中实现的,而整体文件的处理和修改通常很复杂。上图中出现的大多数概念都对应于抽象级别,并且当给定子块存在变体时,应该始终可以选择其中的任何一个。您可以关注给定的封装级别并根据需要对其进行修改。
2、Repo 地图
├── ops # Functional operators└ ...
├── components # Parts zoo, any of which can be used directly
│ ├── attention
│ │ └ ... # all the supported attentions
│ ├── feedforward #
│ │ └ ... # all the supported feedforwards
│ ├── positional_embedding #
│ │ └ ... # all the supported positional embeddings
│ ├── activations.py #
│ └── multi_head_dispatch.py # (optional) multihead wrap
|
├── benchmarks
│ └ ... # A lot of benchmarks that you can use to test some parts
└── triton└ ... # (optional) all the triton parts, requires triton + CUDA gpu
注意力机制
- Scaled dot product
- Attention is all you need, Vaswani et al., 2017
- Sparse
- whenever a sparse enough mask is passed
- BlockSparse
- courtesy of Triton
- Linformer
- Linformer, self-attention with linear complexity, Wang et al., 2020
- Nystrom
- Nyströmformer: A Nyström-Based Algorithm for Approximating Self-Attention, Xiong et al., 2021
- Local. Notably used in (and many others)
- Longformer: The Long-Document Transformer, Beltagy et al., 2020
- BigBird, Transformer for longer sequences, Zaheer et al., 2020
- Favor/Performer
- Rethinking Attention with Performers, Choromanski et al., 2020
- Orthoformer
- Keeping Your Eye on the Ball: Trajectory Attention in Video Transformers, Patrick et al., 2021
- Random
- See BigBird, Longformers,…
- Global
- See BigBird, Longformers,…
- FourierMix
- FNet: Mixing Tokens with Fourier Transforms, Lee-Thorp et al.
- CompositionalAttention
- Compositional Attention: Disentangling search and retrieval, S. Mittal et al.
- 2D Pooling
- Metaformer is actually what you need for vision, Yu et al.
- Visual Attention
Visual Attention Network_, Guo et al
- … add a new one see Contribution.md
Feed forward mechanisms
- MLP
- Fused
- Mixture of Experts
- Conv2DFeedforward
Positional embedding
- Sine
- Vocabulary
- Rotary
- Simplicial
Residual paths
- Pre
- Post
- DeepNorm
Initializations
这是完全可选的,并且仅在通过 xFormers 生成完整模型时才会发生,而不是在单独挑选零件时发生。
基本上公开了两种初始化机制,但用户可以在事后根据他/她认为合适的情况自由初始化权重。
- 部件可以公开一个
init_weights()方法,该方法定义合理的默认值 - xFormers 支持特定的 init 方案,该方案可以优先于 init_weights()
如果使用第二个代码路径(通过模型工厂构造模型),我们会检查所有权重是否已初始化,如果不是这种情况,则可能会出错(如果您设置了xformers.factory.weight_init.__assert_if_not_initialized = True)
支持的初始化方案有:
- Small init
- Timm defaults
- ViT defaults
- Moco v3 defaults
指定 init 方案的一种方法是将字段 config.weight_init 设置为匹配的枚举值。这可以很容易地扩展,请随时提交 PR!
3、主要特征
- 许多注意力机制,可互换
- 优化的构建块,超越 PyTorch 原语
- 内存高效的精确注意力 - 速度提高 10 倍
- 注意力稀疏
- 块稀疏注意力
- 融合softmax
- 融合线性层
- 融合层范数
- 融合丢失(激活(x+偏差))
- 融合SwiGLU
- 基准测试和测试工具
- 微观基准
- 变压器块基准
- LRA,具有 SLURM 支持
- 程序化和扫描友好的层和模型构建
- 与分层 Transformer 兼容,例如 Swin 或 Metaformer
- 可破解
- 不使用整体 CUDA 内核、可组合构建块
- 使用Triton进行一些优化的部分,显式的、Pythonic 的和用户可访问的
- 对 SquaredReLU 的本机支持(在 ReLU、LeakyReLU、GeLU 之上)、可扩展激活
4、安装故障排除
- NVCC 和当前 CUDA 运行时匹配。根据您的设置,您也许可以使用 来更改 CUDA 运行时
module unload cuda; module load cuda/xx.x,也可能nvcc - 您使用的 GCC 版本与当前 NVCC 功能匹配
- env变量
TORCH_CUDA_ARCH_LIST设置为您想要支持的体系结构。建议的设置(构建缓慢但全面)是export TORCH_CUDA_ARCH_LIST="6.0;6.1;6.2;7.0;7.2;7.5;8.0;8.6" - 如果从源 OOM 构建,则可以减少 ninja 的并行性
MAX_JOBS(例如MAX_JOBS=2) - 如果您
UnsatisfiableError在使用 conda 安装时遇到问题,请确保您的 conda 环境中安装了 PyTorch,并且您的设置(PyTorch 版本、cuda 版本、python 版本、操作系统)与xFormers 的现有二进制文件匹配
2024-05-14(二)
相关文章:
xFormers
文章目录 一、关于 xFormers二、安装 xFormers三、基准测试(可选)测试安装 四、使用 xFormers1、Transformers 关键概念2、Repo 地图注意力机制Feed forward mechanismsPositional embeddingResidual pathsInitializations 3、主要特征4、安装故障排除 一…...
LQ杯当时的WP
RC4 32位程序用IDA打开看看 进行反汇编 RC4提示,就是一个加密 在sub_401005函数中找到输出的变量,并且立下断点 动调 Packet 字符串搜索flag 看到是给192.168.11.128发送了cat flag的命令 看到它回传 Base64加密了 解一下密码就可以 CC 密码这…...
数据结构与算法学习笔记三---栈和队列
目录 前言 一、栈 1.栈的表示和实现 1.栈的顺序存储表示和实现 1.C语言实现 2.C实现 2.栈的链式存储表示和实现 1.C语言实现 2.C实现 2.栈的应用 1.数制转换 二、队列 1.栈队列的表示和实现 1.顺序队列的表示和实现 2.链队列的表示和实现 2.循环队列 前言 这篇文…...
web入门——导航栏
本专栏内容代码来自《响应式web(HTML5CSS3Bootstrap)》教材。 导航栏 实现代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content&…...
基于梯度流的扩散映射卡尔曼滤波算法的信号预处理matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 扩散映射(Diffusion Maps) 4.2 卡尔曼滤波 4.3 基于梯度流的扩散映射卡尔曼滤波(GFDMKF) 5.完整程序 1.程序功能描述 基于梯度流的扩散…...
Flutter 中的 ListTile 小部件:全面指南
Flutter 中的 ListTile 小部件:全面指南 在Flutter中,ListTile是一个用于快速创建列表项的组件,它通常用于ListView中,以展示包含文本、图标、开关、滑块等元素的行。ListTile不仅使得界面看起来美观,而且提供了一种简…...
Kubernetes——CNI网络组件
目录 一、Kubernetes三种接口 二、Kubernetes三种网络 三、VLAN与VXLAN 1.VLAN 2.VXLAN 3.区别 3.1作用不同 3.2vxlan支持更多的二层网络 3.3已有的网络路径利用效率更高 3.4防止物理交换机Mac表耗尽 3.5相对VLAN技术,VXLAN技术具有以下优势 四、CNI网…...
对关系型数据库管理系统的介绍
1.数据库的相关介绍 关系型数据库管理系统:(英文简称:RDBMS) 为我们提供了一种存储数据的特定格式,所谓的数据格式就是表, 在数据库中一张表就称为是一种关系. 在关系型数据库中表由两部分组成…...
Nodejs 第七十一章(libuv)
libuv 在Node.js中,libuv是作为其事件循环和异步I/O的核心组件而存在的。Node.js是构建在libuv之上的,它利用libuv来处理底层的异步操作,如文件I/O、网络通信和定时器等。 libuv在Node.js中扮演了以下几个重要角色: 事件循环&a…...
mysql实战题目练习
1、创建和管理数据库 创建一个名为school的数据库。 列出所有的数据库,并确认school数据库已经创建。 如果school数据库已经存在,删除它并重新创建。 mysql> create database school; Query OK, 1 row affected (0.01 sec)mysql> mysql> sh…...
Linux 案例命令使用操作总结
在信息技术日新月异的今天,Linux以其开源、稳定、高效的特性,逐渐成为了众多专业人士的首选操作系统。然而,关于Linux知识的学习,却常常陷入一个误区——许多人认为,掌握Linux就是死记硬背各种命令和参数。这种观念&am…...
图的拓扑序列(DFS2)
reference way:在图里面能延伸的越远,deep越大,说明它能从自己延伸很长到别的节点(别的节点一定有入度),它越可能没有入度。 way:感觉和DFS1差不多,只是从远变成了多。 #include&l…...
2024年小学生古诗文大会备考:吃透历年真题和知识点(持续)
根据往年的安排,2024年小学生古诗文大会预计这个月就将启动。该如何备考2024年小学生古诗文大会呢?根据往期的经验,只要吃透这些真题和背后的知识点,通过上海小学生古诗文大会的初选(初赛)一点问题都没有。…...
SystemC学习使用记录
一、概述 对于复杂的片上系统,在进行RTL编码前,需进行深入的系统级仿真,以确认设计的体系结构是否恰当、总线是否能满足吞吐量和实现性要求以及存储器是否浪费,所进行的这些仿真要求在芯片的仿真模型上运行大量的软件,…...
Github20K星开源团队协作工具:Zulip
Zulip:让团队协作的每一次交流,都精准高效。- 精选真开源,释放新价值。 概览 随着远程工作的兴起和团队协作的需求不断增加,群组聊天软件成为了日常工作中不可或缺的一部分。Zulip 是github上一个开源的团队协作工具,…...
C语言基础-标准库函数
C语言的标准库函数是由C语言标准库(如C99、C11等)提供的一系列预定义函数,这些函数通常用于执行常见的编程任务,如字符串操作、内存管理、数学计算、文件操作等。通过使用标准库函数,程序员可以更加高效地编写C语言程序…...
「51媒体」家居生活发布会,展览展会有哪些媒体邀约资源
传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 家居生活类媒体包括多种类型,包括门户网站家居生活消费频道,专业的家居消费生活门户,以及行业媒体,平面媒体,KOL和意见领袖。下…...
力扣刷题--数组--第五天
昨天做了几道关于双指针求解的算法题,今天继续看相关的题目。 844. 比较含退格的字符串 给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。 注意:如果对空…...
kafka学习笔记04(小滴课堂)
Kafka的producer生产者发送到Broker分区策略讲解 Kafka核心API模块-producer API讲解实战 代码: ProducerRecord介绍和key的作用 Kafka核心API模块-producerAPI回调函数实战 producer生产者发送指定分区实战 我们设置5个分区。 我们指定分区。 重新指定一个分区&am…...
三菱FX3U-4AD模拟量电压输入采集实例
硬件:PLC模块 FX3GA-24MT ;A/D模块FX3…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
sshd代码修改banner
sshd服务连接之后会收到字符串: SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢? 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头,…...
快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...
工厂方法模式和抽象工厂方法模式的battle
1.案例直接上手 在这个案例里面,我们会实现这个普通的工厂方法,并且对比这个普通工厂方法和我们直接创建对象的差别在哪里,为什么需要一个工厂: 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类: 两个发…...
EEG-fNIRS联合成像在跨频率耦合研究中的创新应用
摘要 神经影像技术对医学科学产生了深远的影响,推动了许多神经系统疾病研究的进展并改善了其诊断方法。在此背景下,基于神经血管耦合现象的多模态神经影像方法,通过融合各自优势来提供有关大脑皮层神经活动的互补信息。在这里,本研…...
VSCode 没有添加Windows右键菜单
关键字:VSCode;Windows右键菜单;注册表。 文章目录 前言一、工程环境二、配置流程1.右键文件打开2.右键文件夹打开3.右键空白处打开文件夹 三、测试总结 前言 安装 VSCode 时没有注意,实际使用的时候发现 VSCode 在 Windows 菜单栏…...
