前面写过一片Fairseq Wav2ec的踩坑记录,但是没有踩完,没办法3个月之后继续踩,这次总算跑起来了。
#Note# 本文撰写之时PyTorch的1.8版本尚未发布,1.8版之后兼容性和编译问题减少不少,愿对诸君有用
1.基础环境
Intel® Xeon® Platinum 8163 CPU @ 2.50GHz × 96
GeForce RTX 3090 x 2 (这里必须说明以下:3090是导致编译和执行问题的主要背锅的)
Ubuntu 20.04
Ananconda3
Python3.9
PyTorch1.8.1 -Nightly版本 (据说只有这个版本可以适用3090)
Apex (编译通过但是没有安装)
Fairseq (本地编译安装)
CUDA cuda_11.1.0_455.23.05_linux.run (本地安装,没有使用Conda自带的,反正也没有nvcc,无法编译)
显卡驱动 460.39
2. 主要安装过程
跑Wav2ec的例子,大体需要注意以下步骤:
- 1.更新显卡驱动到最新,(注意最新驱动和最新内核一起会导致 usbnet内核模组莫名奇妙的没了,所以只安装显卡驱动,不要更新内核)
- 2.本地安装CUDA,conda的cuda_tooltiks不带nvcc ,20210303最新的是:cuda_11.1.0_455.23.05_linux.run
- 3.创建Conda环境 ,python3.9 (其他版本估计也没问题)
- 4.安装PyTorch-Nightly版本,见官网,不要同时安装TorchVision和TorchAudio等,这样会导致安装PyTorch的1.7.1版本(Release版)
- 5.安装Apex
- 6.安装Fairseq
git clone https://github.com/pytorch/fairseq
cd fairseq
export TORCH_CUDA_ARCH_LIST="8.6"
pip install --editable ./
强制指定3090的算力8.6,2080Ti是7.5
- 验证安装,参考
python -c "import torch;print(torch.__version__, torch.version.cuda)"
会显示pytorch版本(1.6.0)和对应cuda版本(10.1);
python -c "import fairseq;print(fairseq.__version__)"
会显示fairseq版本(0.9.0);
python -c "import fairseq;print(fairseq.utils.multi_tensor_l2norm_available)"
会显示apex是否成功安装(True)。
3. 主要的坑
3.1 GeForce RTX 3090 带来的问题
因为3090是新卡,PyTorch对其支持不好,实验了好多次最后才怀疑此问题。
三件套: 驱动最新 CUDA11.1 PyTorch-Nightly
不用按照官网命令加TorchVision和TorchAudio,你可以从官网上手动下载安装
算力查询NVIDIA
3.2 Apex 的编译天坑
Apex编译起来问题太多
首先需要修改setup.py 取消PyTorch和nvcc之间的版本校验,感谢其他人提供的思路
可以在103行的地方 if False and 直接跳过这个检查,反正你也没办法(PyTorch/CUDA/3090就是配不起来)
def check_cuda_torch_binary_vs_bare_metal(cuda_dir):
raw_output, bare_metal_major, bare_metal_minor = get_cuda_bare_metal_version(cuda_dir)
torch_binary_major = torch