xformers-0.0.11版本在mac下的编译

发布时间 2023-03-27 10:18:09作者: 阿布-boo

xFormers是一个模块化和可编程的Transformer建模库;相关介绍可以查看官方文档: https://facebookresearch.github.io/xformers/;

由于电脑硬件过于古老,需要使用到xformers的更老的版本,这里是0.0.11版本,这是使用torch==1.8.1的一个版本;

下载代码

git clone -b v0.0.11 https://github.com/facebookresearch/xformers.git  
# -b 指定下载 v0.0.11 tag的代码

首先正常安装(默认安装)

不修改 torch的版本,默认xformers-0.0.11版本依赖是 torch >= 1.8.1,安装时会安装最新的torch版本:2.0.0

python 3.9环境下安装(因为 torch==1.8.1时最高版本只有cp39的安装包,感兴趣的可以参考: https://download.pytorch.org/whl/torch_stable.html );

创建python虚拟环境

python -m venv venv
# 第一个venv模块,第二个venv是创建了一个名叫`venv`的虚拟环境在当前目录下

安装依赖

venv/bin/pip install -r requirements.txt 

编译

# 
MACOSX_DEPLOYMENT_TARGET=10.9 CC=clang CXX=clang++ venv/bin/pip install -e .

该编译方式为官方文档的编译方式,这个参数因为pytorch要求的,具体可以参考 pytorch-v1.8.1版本的CONTRIBUTING

编译不了,提示

应该是c语言的版本问题,重新安装gcc版本;

# 这个安装比较用时,需要安装的依赖比较多
brew install gcc@9

#指定GCC的版本,新的编译命令为
MACOSX_DEPLOYMENT_TARGET=10.9 CC=gcc-9 CXX=g++-9 venv/bin/pip install -e .
# 等待20分钟左右,完成编译

编译成功

Installing collected packages: xformers
  Running setup.py develop for xformers
Successfully installed xformers-0.0.11.dev0

在torch==1.8.1版本下安装

但是这里我们的电脑硬件太老,需要torch==1.8.1,现在安装的是torch==2.0.0; 这时就需要指定torch版本。

清理编译结果

# 清理掉原来的编译结果
venv/bin/python setup.py clean

#再创建一下虚拟环境
python -m venv venv 

torch的安装

在官方文档中有说明 torch 1.12 以及的版本,还需要手动安装相关的依赖,打开文档安装以前版本的torch说明
找到相关的命令

# 安装指定版本的 torch
venv/bin/pip install torch==1.8.1 torchvision==0.9.1 torchaudio==0.8.1

# 再安装依赖
venv/bin/pip install -r requirements.txt 

# 再编译
MACOSX_DEPLOYMENT_TARGET=10.9 CC=gcc-9 CXX=g++-9 venv/bin/pip install -e .

解决编译问题

这时提示 error: $MACOSX_DEPLOYMENT_TARGET mismatch: now "10.9" but "11.6" during configure;

# 去掉 MACOSX_DEPLOYMENT_TARGET 参数,再编译
CC=gcc-9 CXX=g++-9 venv/bin/pip install -e .

又提示 xformers/xformers/components/attention/csrc/cpu/attention.cpp:7:10: fatal error: 'ATen/cpu/vec/functional.h' file not found
上pytorch的github代码库,切到 v1.8.1分支找了一下,

xformers-pytorch-functional.jpg

修改源代码

确实没有这个文件,但是有 ATen/cpu/vec256/functional.h 这个文件,于是修改xformers/xformers/components/attention/csrc/cpu/attention.cpp

...
#include <ATen/cpu/vec256/functional.h>
#include <ATen/cpu/vec256/vec256.h>
...

xformers-attention.jpg

再次编译,最于成功

# 修改完成后,再编译,成功!
CC=gcc-9 CXX=g++-9 venv/bin/pip install -e .