UltraFastBERT
论文"指数级加速语言建模"的代码仓库
https://arxiv.org/abs/2311.10770
组织结构
-
training
文件夹包含2023年10月初克隆的crammedBERT仓库。进行了一些新的配置和小修改,以启用FFF的使用。提供了一个掩码实现(即一个FFF实现,它不提供速度优势,但通过掩码模拟选择性激活神经元),用于训练和下游微调。 -
benchmark_cpu
文件夹包含使用Intel MKL 2023.2.0实现的FFF推理加速CPU版本,以及传统FF层的基准DMM实现的C++代码。 -
benchmark_pytorch
文件夹包含FF和FFF推理的"原生融合"和"PyTorch BMM"实现的C++代码。 -
benchmark_cuda
文件夹包含FF和FFF的"朴素CUDA"实现的C++/CUDA内核代码。
从权重复现结果
UltraFastBERT-1x11-long的配置和权重可在HuggingFace上找到:
https://huggingface.co/pbelcak/UltraFastBERT-1x11-long
这些文件是使用training/load_local_model.py
并设置impl.push_to_huggingface_hub=True
生成并上传的。
UltraFastBERT-1x11-long作为一个模型,是我们对crammedBERT设置的小扩展的实例。
你可以直接进入training
目录,按照crammedBERT README中给出的步骤使用HuggingFace的AutoTokenizer
和AutoModelForMaskedLM
,不同之处在于你要使用UltraFastBERT-1x11-long,而不是crammedBERT。
快速入门
-
创建一个新的Python/conda环境,或者使用一个没有安装原始
cramming
项目任何版本的环境。如果你不小心使用了原始cramming仓库代码,而不是本项目/training
文件夹中提供的代码,transformers
会警告你有一些额外的权重(FFF权重)和一些缺失的权重(原始crammedBERT
期望的FF权重)。 -
cd ./training
-
pip install .
-
创建
minimal_example.py
-
粘贴以下代码
import cramming
from transformers import AutoModelForMaskedLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("pbelcak/UltraFastBERT-1x11-long")
model = AutoModelForMaskedLM.from_pretrained("pbelcak/UltraFastBERT-1x11-long")
text = "用你想要的任何文本替换我。"
encoded_input = tokenizer(text, return_tensors='pt')
output = model(**encoded_input)
- 运行
python minimal_example.py
。
从头复现结果
-
要复现我们的训练和微调结果,直接进入
training
文件夹,按照那里的README指示操作。 -
要复现我们的CPU速度基准测试结果,进入
benchmark_cpu
。如果你使用Windows,编译和运行代码最简单的方法可能是使用带有Intel oneAPI扩展的Visual Studio 2022 Community。另一种选择是直接使用Intel编译器(更多信息请参考Intel oneAPI"入门"网站)。 -
benchmark_pytorch
的结果可以通过在该文件夹中运行python main.py
来复现。这些运行的结果会自动保存到SQLiteresults.db
文件中,便于查看。 -
benchmark_cuda
需要CUDA工具包。安装后,在扩展文件夹中使用python setup.py install
将完成CUDA代码编译,并准备一个可导入的模块。