xFormers - Transformers 加速研究的工具箱

在这里插入图片描述

文章目录

    • 一、关于 xFormers
      • 特点
    • 二、安装xFormers
    • 三、Benchmarks
      • (可选)测试安装
    • 四、使用xFormers
      • 1、Transformers 关键概念
      • 2、Repo map
      • 3、主要特点
      • 4、安装故障排除


一、关于 xFormers

xFormers是一个基于PyTorch的库,其中包含灵活的Transformers 组件。

它们是可互操作和优化的构建块,可以选择组合以创建一些最先进的模型。

  • github : https://github.com/facebookresearch/xformers
  • 官方文档: https://facebookresearch.github.io/xformers/

特点

  • 可定制的构建块:无需样板代码即可使用的独立/可定制构建块。组件与领域无关,xFormers被视觉、NLP等领域的研究人员使用。
  • 首先研究:xFormers包含前沿组件,这些组件在PyTorch等主流库中尚不可用。
  • 考虑效率:因为迭代速度很重要,所以组件尽可能快速和内存高效。xFormers包含自己的CUDA内核,但在相关时会分派到其他库。

二、安装xFormers

  • (推荐,linux)使用conda安装最新的稳定版:需要使用conda安装PyTorch2.3.1
conda install xformers -c xformers

  • (推荐,linux&win)使用pip安装最新的稳定版:需要PyTorch2.3.1
# 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)

三、Benchmarks

Memory-efficient MHA

Benchmarks for ViTS

设置:f16上的A100,测量前进+后退传球的总时间

请注意,这是精确的关注,而不是近似值,只需调用xformers.ops.memory_efficient_attention


更多 benchmarks

xFormers提供了许多组件,BENCHMARKS.md中提供了更多基准测试。


(可选)测试安装

此命令将提供有关xFormers安装的信息,以及构建/可用的内核:

python -m xformers.info

四、使用xFormers


1、Transformers 关键概念

让我们从变形金刚架构的经典概述开始(插图来自Lin et al,“A Survey of Transformers”)

img

在这个例子中,你会发现关键的存储库边界:转换器通常由注意力机制、编码一些位置信息的嵌入、前馈块和残差路径(通常称为前层或后层范数)的集合组成。这些边界并不适用于所有模型,但我们在实践中发现,如果有一些调整,它可以捕捉到大部分最先进的技术。

因此,模型不是在单体文件中实现的,这些文件通常很难处理和修改。上图中出现的大多数概念对应于抽象级别,当给定子块存在变体时,应该始终可以选择其中任何一个。您可以专注于给定的封装级别并根据需要进行修改。


2、Repo map

├── 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

3、主要特点

  1. 许多注意力机制,可互换性
    1. 记忆效率高的精确注意力-快10倍
    2. 注意力稀疏
    3. 块稀疏注意
    4. 融合softmax
    5. 熔融线性层
    6. 熔合层范数
    7. 融合辍学(激活(x+偏差))
    8. 熔融旋转
    1. 微观基准
    2. Transformers 组基准
    3. 上帝抵抗军,在SLURM的支持下
    1. 与分层变形金刚兼容,如Swin或元变形金刚
    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功能匹配
  • TORCH_CUDA_ARCH_LISTenv变量设置为您想要支持的体系结构。建议的设置(构建缓慢但全面)是export TORCH_CUDA_ARCH_LIST="6.0;6.1;6.2;7.0;7.2;7.5;8.0;8.6"
  • 如果从源OOMs构建,则可以减少忍者与MAX_JOBS的并行性(例如MAX_JOBS=2
  • 如果您在使用conda安装时遇到UnsatisfiableError,请确保您在conda环境中安装了PyTorch,并且您的设置(PyTorch版本、cuda版本、python版本、操作系统)匹配xFormers的现有二进制文件

2024-07-17(三)

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

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

相关文章

Java_MyBatisPlus

MyBatisPlus属于是MyBatis的拓展,不影响原MyBatis框架下的代码运行,并对MyBatis框架进行拓展及优化。 使用步骤: 注意:继承BaseMapper时要填写泛型为要操作的实体类。 基本原理: MyBatisPlus通过扫描实体类&#xff…

adb查看网卡信息,并修改网卡mac地址

这种方法修改mac后,关机后会失效! 文章结尾有永久修改mac地址的方法! 1. 查看网卡的信息,以及mac地址,ip地址,子网掩码等 //查看所有网卡信息adb shell ifconfig//MAC地址: HWaddr 5e:2c:e9:58:3e:4f //IP地址&a…

安全防御拓扑2

实验拓扑:​​​​​​​ 要求: 1、办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP不能用来转换) 2、分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器 3、多出口环境基于带宽比例进行…

Django定时任务框架django-apscheduler的使用

1.安装库 pip install django-apscheduler 2.添加 install_app django_apscheduler 3.在app下添加一个task.py文件,用来实现具体的定时任务 task.pydef my_scheduled_job():print("这个任务每3秒执行一次", time.time()) 4.在app下创建一个manag…

studio编译报错java.lang.NullPointerException

安卓studio编译报错,这个是一个新建的项目就报错,原因是 implementation androidx.appcompat:appcompat:1.7.0版本太高,修改后版本 implementation androidx.appcompat:appcompat:1.4.0, 编译又报错 18 issues were found wh…

【Node.js】初识 Node.js

Node.js 概念 Node.js 是一个开源与跨平台的 JavaScript运行时环境 ,在浏览器外运行 V8 JavaScript 引擎(Google Chrome的内核),利用事件驱动、非阻塞和异步输入输出 等技术提高性能。 可以理解为 Node.js就是一个服务器端的、非阻塞式 l/O 的、事件驱…

npm install时卡在sill idealTree buildDeps卡着不动

场景:做导出功能的时候要用上xlsx,正常npm install xlsx --save 问题描述:npm install时卡在sill idealTree buildDeps,,卡着不动 过程:在网上一顿百度试过好多种方法 1、切换taobao的镜像地址 npm conf…

Android 使用FFmpeg解析RTSP流,ANativeWindow渲染 使用SurfaceView播放流程详解

文章目录 ANativeWindow 介绍ANativeWindow 的主要功能和特点ANativeWindow 的常用函数工作流程原理图通过ANativeWindow渲染RGB纯色示例 播放RTSP流工作流程图关键步骤解析自定义SurfaceView组件native 层解码渲染 效果展示注意事项 这篇文章涉及到jni层,以及Ffmpe…

设计分享—国外网站设计赏析

今天还是给大家分享一些国外的网站设计案例~ 蓝蓝设计是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的大数据可视化界面设计、B端界面设计、桌面端界面设计、APP界面设计、图标定制、用户体验设计、交互设计、UI咨询、高端网站设计、平…

来参与“向日葵杯”全国教育仿真技术大赛~

可点击进行了解:“向日葵杯”全国教育仿真技术大赛 (sunmooc.cn) 本次大赛共分为四个赛道:自主命题赛道、教育知识图谱设计赛道、FPGA硬件扑克牌对抗赛道、EasyAR元宇宙空间设计赛道。 参赛对象 : 具有正式学籍的在校研究生,本科…

Memcached介绍与使用

引言 本文是笔者对Memcached这个高性能分布式缓存组件的实践案例,Memcached是一种高性能的分布式内存对象缓存系统,用于减轻数据库负载,加速动态Web应用,提高网站访问速度。它通过在内存中缓存数据和对象来减少读取数据库的次数&…

Postman导出excel文件

0 写在前面 在我们后端写接口的时候,前端页面还没有出来,我们就得先接口测试,在此记录下如何使用postman测试导出excel接口。 如果不会使用接口传参可以看我这篇博客如何使用Postman 1 方法一 2 方法二 3 写在末尾 虽然在代码中写入文件名…

NVIDIA Container Toolkit 安装与配置帮助文档(Ubuntu,Docker)

NVIDIA Container Toolkit 安装与配置帮助文档(Ubuntu,Docker) 本文档详细介绍了在 Ubuntu Server 22.04 上使用 Docker 安装和配置 NVIDIA Container Toolkit 的过程。 概述 NVIDIA 容器工具包使用户能够构建和运行 GPU 加速容器。即可以在容器中使用NVIDIA显卡。 架构图如…

uniapp H5 如何根据接口返回form表单,跳转银联支付界面?

uniapp如何根据form表单,唤醒第三方支付? 文章目录 uniapp如何根据form表单,唤醒第三方支付?效果图实现 效果图 接口返回 form 表单数据 实现 // 例请求成功,返回数据 rechargePay({}).then(res > {// 接收接口返回数据let { result …

= null 和 is null;SQL中关于NULL处理的4个陷阱;三值逻辑

一、概述 1、NULL参与的所有的比较和算术运算符(>,,<,<>,<,>,,-,*,/) 结果为unknown&#xff1b; 2、unknown的逻辑运算(AND、OR、NOT&#xff09;遵循三值运算的真值表&#xff1b; 3、如果运算结果直接返回用户&#xff0c;使用NULL来标识unknown 4、如…

JRT实体视图查询

JRT的设计目标就是多数据库支持&#xff0c;对于爬行周边数据提供DolerGet解决爬取多维数据问题。但是对于通过父表字段筛选子表数据就不能通过DolerGet取数据了&#xff0c;因为查询到的父表数据没有子表数据的ID。 比如下面表&#xff1a; 我需要按登记号查询这个登记号的报…

【linux】服务器安装NVIDIA驱动

【linux】服务器安装NVIDIA驱动 【创作不易&#xff0c;求点赞关注收藏】&#x1f600; 文章目录 【linux】服务器安装NVIDIA驱动一、关闭系统自带驱动nouveau二、下载英伟达驱动三、安装英伟达驱动1、禁用X服务器和相关进程2、在TTY终端安装驱动3、验证是否安装成功4、重新启…

接口开发:Orcal数据库的批量修改sql

场景&#xff1a;在日常的CURD中一定会用到批量修改。在我们的项目中&#xff0c;使用的数据库是Orcal&#xff0c;由于之前基本都是使用Mysql的&#xff0c;使用的sql语句也基本都是用mysql的。但是在这次的接口编写时用mysql的批量修改出了问题&#xff0c;刚开始我还以为是写…

源码分析SpringCloud Gateway如何加载断言(predicates)与过滤器(filters)

我们今天的主角是Gateway网关&#xff0c;一听名字就知道它基本的任务就是去分发路由。根据不同的指定名称去请求各个服务&#xff0c;下面是Gateway官方的解释&#xff1a; Spring Cloud Gateway&#xff0c;其他的博主就不多说了&#xff0c;大家多去官网看看&#xff0c;只…

WDL(Wide Deep Learning for Recommender Systems)——Google经典CTR预估模型

一、文章简介 Wide & Deep Learning for Recommender Systems这篇文章介绍了一种结合宽线性模型和深度神经网络的方法&#xff0c;以实现推荐系统中的记忆和泛化。这种方法在Google Play商店的应用推荐系统中进行了评估&#xff0c;展示了其显著的性能提升。 推荐系统中的…