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、主要特征

  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(二)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

POETIZE个人博客系统源码 | 最美博客

简介: POETIZE个人博客系统源码 | 最美博客 这是一个 SpringBoot Vue2 Vue3 的产物,支持移动端自适应,配有完备的前台和后台管理功能。 网站分两个模块: 博客系统:具有文章,表白墙,图片墙&…

【UnityShader入门精要学习笔记】第十二章 屏幕后处理效果

本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更,有始无终 我的GitHub仓库 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 建立一个基…

元宇宙,可能是未来经济新趋势,但不是文明的跃升

为什么说元宇宙是未来的一个经济趋势,甚至是一个即将来临的风口,说到元宇宙,相信大家都听说过,但是真正了解的人还是占少部分的。其实概率很容易理解,我们可以把他看成是一个虚拟世界,一个平行空间&#xf…

菲律宾签证照片尺寸要求,用手机生成

菲律宾签证照片尺寸要求如下图所示,可以用手机在微信搜索随时照小程序,快速生成哦。

做私域,该如何从公域向私域引流?

说到私域运营,很多人首先就会想到:私域流量。企业做私域,流量从哪来?该怎样去引流?又该如何保障私域流量的质量等一系列问题,都需要企业一一解决。所以,今天,我们就来探讨一下&#…

产品经理资料包干货

1.《产品汪》免费电子书 2016年我面试了差不多有200多位产品求职者,其中不乏之前做厨师编剧这些岗位的人。在这个过程中我意识到大众或许对产品经理这个岗位存在一些认知和理解上的误差,于是我就想着写一本产品经理相关的书。 关于本书的更多信息可查看…

dvwa靶场 Content Security Policy (CSP) Bypass(CSP绕过)全难度教程(附代码分析)

前置知识 Content Security Policy(内容安全策略),用于定义脚本和其他资源从何处加载或者执行,总结的来说就时白名单。会一定程度的缓解xss脚本问题,也可以自己设定规则,管理网站允许加载的内容。 CSP 以…

简单记录下:Navicat 导出表结构至 Excel

首先我们需要通过sql语句查询出相关的表结构的结构 SELECT COLUMN_NAME AS 字段名称,COLUMN_TYPE AS 字段类型,IF(IS_NULLABLENO,否,是) AS 是否必填,COLUMN_COMMENT AS 注释FROM INFORMATION_SCHEMA.COLUMNSWHERE table_schema bs-gdsAND table_name sys_menu;查询的结构如下…

Linux下Code_Aster源码编译安装及使用

目录 软件介绍 基本依赖 其它依赖 一、源码下载 二、解压缩 三、编译安装 四、算例运行 软件介绍 Code_aster为法国电力集团(EDF)自1989年起开始研发的通用结构和热力耦合有限元仿真软件。Code_aster可用于力学、热学和声学等物理现象的仿真分析&…

LQ杯当时的WP

RC4 32位程序用IDA打开看看 进行反汇编 RC4提示,就是一个加密 在sub_401005函数中找到输出的变量,并且立下断点 动调 Packet 字符串搜索flag 看到是给192.168.11.128发送了cat flag的命令 看到它回传 Base64加密了 解一下密码就可以 CC 密码这…

Windows snmp++获取本地主机信息

编译snmp的包 调用snmp.lib实现信息获取_哔哩哔哩_bilibili 代码&#xff1a; #include <iostream> #include <libsnmp.h> #include <vector> #include <fstream> #include <string> #include "snmp_pp/snmp_pp.h" //#define _NO_L…

Go微服务: Gin框架搭建网关, 接入熔断器,链路追踪以及服务端接入限流和链路追踪

概述 本文使用最简单和快速的方式基于Gin框架搭建一个微服务的网关调用微服务的场景网关作为客户端基于RPC调用某一服务端的服务并接入熔断和限流以及链路追踪具体场景&#xff1a;通过网关API查询购物车里的数据在最后&#xff0c;会贴上网关和购物车服务的代码仓库 服务端搭…

端口号查询进程PID

情况1&#xff1a;由于 idea 突然闪退&#xff0c;导致正在 debug 的 Java 进程没结束掉&#xff0c;端口还在占用&#xff0c;重新 debug 不了&#xff0c;所以需要到任务管理器把进程结束掉 但问题是如果当任务管理器进程同时有多个 Java 进程在运行&#xff08;而且名字一样…

CSS表格特殊样式

列组样式 使用colgroup与col标签配合可以定义列祖样式&#xff1a;例 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>table,tr,th,td{border: 1px solid #000;}table{border-collapse: coll…

java导出excel动态加载多sheet多复杂表头

java导出excel动态加载多sheet多复杂表头 实体实现类sheet方法业务工具方法实现效果 实体 import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import lombok.ToString; import lombok.experimental.Accessors;import java.io.Serializable; import ja…

IPSSL证书:为特定IP地址通信数据保驾护航

IPSSL证书&#xff0c;顾名思义&#xff0c;是专为特定IP地址设计的SSL证书。它不仅继承了传统SSL证书验证网站身份、加密数据传输的基本功能&#xff0c;还特别针对通过固定IP地址进行通信的场景提供了强化的安全保障。在IP地址直接绑定SSL证书的模式下&#xff0c;它能够确保…

tomcat--目录结构和文件组成

目录结构 目录说明bin服务启动&#xff0c;停止等相关程序和文件conf配置文件lib库目录logs日志记录webapps应用程序&#xff0c;应用部署目录workjsp编译后的结果文件&#xff0c;建议提前预热访问 /usr/local/apache-tomcat-8.5.100/work/Catalina/localhost/ROOT/org/apac…

MyBatis-Plus核心功能详解:条件构造器、自定义SQL与Service接口

在Java的Web开发中&#xff0c;MyBatis-Plus作为MyBatis的增强工具&#xff0c;提供了许多实用的功能&#xff0c;极大地简化了数据库操作的开发过程。下面&#xff0c;我们将详细探讨MyBatis-Plus的三大核心功能&#xff1a;条件构造器、自定义SQL以及Service接口。 一、条件…

【Vue】更换vue-element-admin左侧 logo

准备&#xff1a;目标svg格式的 logo&#xff0c;并将目标logo命名为 vuejs-fill.svg替换路径&#xff1a;/icons 文件夹下&#xff0c;覆盖掉原本的 vuejs-fill.svg 原因&#xff1a;配置项的logo设置的是 vuejs-fill