xFormers

news2024/11/17 13:36:37

在这里插入图片描述


文章目录

    • 一、关于 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、主要特征

  1. 许多注意力机制,可互换
  2. 优化的构建块,超越 PyTorch 原语
    1. 内存高效的精确注意力 - 速度提高 10 倍
    2. 注意力稀疏
    3. 块稀疏注意力
    4. 融合softmax
    5. 融合线性层
    6. 融合层范数
    7. 融合丢失(激活(x+偏差))
    8. 融合SwiGLU
  3. 基准测试和测试工具
    1. 微观基准
    2. 变压器块基准
    3. LRA,具有 SLURM 支持
  4. 程序化和扫描友好的层和模型构建
    1. 与分层 Transformer 兼容,例如 Swin 或 Metaformer
  5. 可破解
    1. 不使用整体 CUDA 内核、可组合构建块
    2. 使用Triton进行一些优化的部分,显式的、Pythonic 的和用户可访问的
    3. 对 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(二)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1676264.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小红书自动私信获客,打造个人品牌

在当今这个内容为王、社交至上的时代,小红书作为新兴的社交电商平台,凭借其独特的社区氛围和强大的种草能力,成为了众多KOL、商家以及个人品牌打造的首选平台。想要在小红书上脱颖而出,精准引流获客,利用自动私信功能不…

Ajax额

原生Ajax xml 已被json取代 http 请求方法urlhttp版本号 network 谷歌浏览器查看请求报文和响应报文 F12 network header里面有 请求头 响应头 点击view source 可以查看请求响应行 请求体在请求行头下面 get请求有url参数,请求体变为query String…

汇昌联信科技:拼多多电商的运营流程有哪些?

在当今互联网高速发展的时代,电商平台层出不穷,其中拼多多以其独特的团购模式和低价策略迅速崛起,成为众多消费者和商家的新宠。那么,拼多多电商的运营流程究竟包含哪些环节呢?接下来,我们将从商品上架、营销推广、订…

基于PySpark进行去哪儿网数据分析

基于PySpark进行去哪儿网数据分析 本文介绍了如何使用PySpark对去哪儿网的数据进行分析,从而洞察用户偏好、热门目的地以及销售趋势。 1.数据加载 我们需要确保已经准备好了PySpark的开发环境,并且准备好了去哪儿网的数据集。可以通过创建SparkSessio…

vue cmd执行报错 ‘vue‘ 不是内部或外部命令

使用vue脚手架快速搭建项目,在cmd中执行:vue init webpack vue-demo,报错: vue 不是内部或外部命令,也不是可运行的程序 或批处理文件。 解决方法,执行如下的命令 npm config list 注意:找到prefix等号后…

在Ubuntu命令行中一行代码配置C++的OpenCV库

本文介绍在Linux操作系统的Ubuntu版本中,配置C 语言环境下的计算机视觉库OpenCV的方法。 首先,为了保证我们可以在Ubuntu中正确配置OpenCV库,需要使得计算机内具有C 开发环境。其中,在Ubuntu中,我们可以基于命令行方便…

第16节 实战:文件转shellcode

我最近做了一个关于shellcode入门和开发的专题课👩🏻‍💻,主要面向对网络安全技术感兴趣的小伙伴。这是视频版内容对应的文字版材料,内容里面的每一个环境我都亲自测试实操过的记录,有需要的小伙伴可以参考…

在微信小程序项目中安装和使用 Vant 组件库

vant Wwapp 小程序开发组件库官网 Vant Weapp - 轻量、可靠的小程序 UI 组件库 安装 Vant 组件库 1.在微信小程序项目文件目录的空白位置右键,选择在外部终端窗口中打开 2在命令行输入如下命令(在项目中创建包管理配置文件 package.json) …

PHP 自提时间

前端: 后台设置: 代码: public function getBusinessHour(){// 需求单门店$data (new StoreModel())->limit(1)->select()->toArray();$days explode(,, $data[0][shop_hours]);$businessHours $days[1];// 使用 explode 分割字符串,获取开始和结束时…

局域网监控软件有哪些:好用的局域网桌面监控软件神器分享

如何有效地监控和管理内部员工的计算机使用行为,防范潜在的安全风险,提高工作效率,是众多企业管理者关注的焦点。 而一款优秀的局域网桌面监控软件无疑能为企业的IT治理提供有力支撑。 小编在此给大家推荐一款好用的局域网桌面监控软件——域…

地平线X3开发板配置wifi调试

1. 系统镜像制作 系统镜像的制作依赖bsp与补丁包,bsp在天工开物全量包中:https://developer.horizon.ai/resource 补丁下载链接:链接:https://pan.baidu.com/s/1YKcOWL0EpboGq-SnqwIGeQ 提取码:b6lf 补丁包中有详细…

TSINGSEE青犀智慧校园视频综合管理系统建设方案及平台功能

一、方案背景 智慧校园视频综合管理系统以物联网、云计算、大数据分析等新技术为核心,将基于计算机网络的信息服务融入学校的各个应用与服务领域,实现互联和协作。通过“云边缘计算”构架,在各应用子系统的基础数据层面上,打通上…

高级查询(一)

解决需求&#xff1a;Excel都可以轻松搞定 分组查询原理&#xff1a; 语法&#xff1a; SELECT …<列名> FROM <表名> [WHERE<条件表达式> ] GROUP BY 参与分组的列 可以与 聚合函数作用的列 一块显示 注意 SELECT列表中只能包含&#xff1a; 1、被分…

i春秋-Test

题目 解题 参考WP https://blog.csdn.net/qq_40654505/article/details/107142533/目录扫描 复现wp payload为&#xff1a; search.php?searchtype5&tid&areaeval($_POST[cmd])使用蚁剑连接 http://eci-2ze4iyhwj7xvb68bsb2t.cloudeci1.ichunqiu.com:80/search.ph…

Springboot整合 Spring Cloud OpenFeign

1.OpenFeign简介 1.相比于Netflix Feign&#xff0c;OpenFeign支持Spring MVC注解&#xff0c;整合了Ribbon(springcloud在Hoxton.M2 RELEASED版本之后舍弃Ribbon。需手动引入spring-cloud-loadbalancer)和Nacos。 2.使得开发人员调用远程接口或者服务之间相互调用就像调用本地…

【智能优化算法】蛛蜂优化算法(Spider Wasp Optimizer,SWO)

蛛蜂优化算法(Spider Wasp Optimizer,SWO)是期刊“ARTIFICIAL INTELLIGENCE REVIEW”&#xff08;中科院二区 IF11.6&#xff09;的2023年智能优化算法 01.引言 蛛蜂优化算法(Spider Wasp Optimizer,SWO)基于对自然界中雌性黄蜂的狩猎、筑巢和交配行为的复制。该算法具有多种…

JavaFX布局-VBox

JavaFX布局-VBox 常用属性alignmentspacingchildrenmarginpaddingvgrow 实现方式Java实现Xml实现 综合案例 VBox按照垂直顺序从上到下排列其子节点改变窗口大小,不会该部整体布局窗口太小会遮住内部元素&#xff0c;不会产生滚动条 常用属性 alignment 对齐方式 参考枚举值&…

C++ 多态性

一 多态性的分类 编译时的多态 函数重载 运算符重载 运行时的多态 虚函数 1 运算符重载的引入 使用C编写程序时&#xff0c;我们不仅要使用基本数据类型&#xff0c;还要设计新的数据类型-------类类型。 一般情况下&#xff0c;基本数据类型的运算都是运算符来表达&#x…

识别公式的网站都有哪些?分享3个专业的工具!

在数字化时代&#xff0c;公式识别已成为一项重要技能。无论是学生、教师还是科研人员&#xff0c;都可能需要借助公式识别网站来快速准确地获取公式信息。那么&#xff0c;市面上到底有哪些值得一试的识别公式网站呢&#xff1f;本文将为您一一揭晓。 FUNAI FUNAI的公式识别功…

2024洗地机爆款榜单,哪个牌子洗地机值得买?助你轻松选对洗地机

随着现代生活节奏的加快&#xff0c;人们对于家庭清洁的需求也越来越高。家用洗地机作为一种高效清洁工具&#xff0c;能够帮助您轻松应对家庭地板的清洁问题&#xff0c;节省时间和精力。然而&#xff0c;在选择洗地机时&#xff0c;究竟哪个牌子的洗地机值得买呢&#xff1f;…