xFormers 是:
conda install xformers -c xformers/label/dev
# (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 中提供了更多基准测试。
此命令将提供有关 xForers 安装的信息,以及构建/可用的内核:
python -m xformers.info
让我们从变压器架构的经典概述开始(插图来自Lin等人,“变压器调查”)
你将在此图中找到关键存储库边界:转换器通常由一组注意力机制、用于编码某些位置信息的嵌入、前馈块和残差路径(通常称为层前或后层范数)组成。这些边界并不适用于所有模型,但我们在实践中发现,给定一些住宿,它可以捕获大部分最先进的技术。
因此,模型不会在整体式文件中实现,这些文件通常处理和修改起来很复杂。上图中存在的大多数概念都对应于抽象级别,当给定子块存在变体时,应该始终可以选择其中任何一个。你可以专注于给定的封装级别,并根据需要对其进行修改。
├── 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
这是完全可选的,并且仅在通过 xFormers 生成完整模型时发生,而不是在单独拾取零件时发生。
基本上有两种初始化机制公开,但用户可以在事后自由初始化权重,因为他/她认为合适。
init_weights()
如果使用第二个代码路径(通过模型工厂构造模型),我们会检查所有权重是否已初始化,如果不是这种情况,则可能会出错(如果你设置
xformers.factory.weight_init.__assert_if_not_initialized = True)
支持的初始化方案包括:
指定 init 方案的一种方法是将字段设置为匹配的枚举值。这可以很容易地扩展,请随时提交 PR !
config.weight_init
module unload cuda; module load cuda/xx.x
nvcc
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"
MAX_JOBS
MAX_JOBS=2)
UnsatfiableError
,请确保你在 conda 环境中安装了 pytorch,并且你的设置(pytorch 版本、cuda 版本、python 版本、OS )与 xForers 的现有二进制文件匹配
xFormers 有一个 BSD 风格的许可证,如 LICENSE 文件所示。
如果你在出版物中使用 xFormers,请使用以下 BibTeX 条目引用它。
@Misc{xFormers2022,
author = {Benjamin Lefaudeux and Francisco Massa and Diana Liskovich and Wenhan Xiong and Vittorio Caggiano and Sean Naren and Min Xu and Jieru Hu and Marta Tintore and Susan Zhang and Patrick Labatut and Daniel Haziza},
title = {xFormers: A modular and hackable Transformer modelling library},
howpublished = {\url{https://github.com/facebookresearch/xformers}},
year = {2022}
}
以下存储库在 xFormers 中使用,要么接近原始形式,要么作为灵感来源: