Ubuntu18.04+CUDA11安装bitsandbytes出现的问题
背景
模型训练使用use_8bit_adam参数时,发现需要安装bitsandbytes库,于是直接pip install bitsandbytes
安装了,运行发现使用这个库还需要与cuda版本匹配, 于是根据报错内容逐步进行解决。
主要的报错和解决思路以下逐渐列出。
1. 确认系统查找动态库libcudart.so的路径
一开始报的错误是:
CUDA Setup failed despite GPU being available. (省略一些无关紧要的warning)
You might need to add them to your LD_LIBRARY_PATH...
关键词是LD_LIBRARY_PATH这个变量。于是首先用sudo find / -name "libcudart.so*"
查找了一下需要的动态库是否存在于系统中,发现在系统中能够查找到之后,echo $LD_LIBRARY_PATH
查看了一下当前系统查找动态库的路径,发现的确不存在,将查找到的路径添加进去便解决这个问题了。
2. 确认系统CUDA版本和bitsandbytes是否匹配
解决问题1之后,又运行python -m bitsandbytes
进行确认,依然发生了问题:
/opt/conda/lib/python3.9/site-packages/bitsandbytes/cuda_setup/main.py:167:
UserWarning:
Found duplicate ['libcudart.so', 'libcudart.so.11.0', 'libcudart.so.12.0']
files: {PosixPath('/usr/local/cuda-11.6/targets/x86_64-linux/lib/libcudart.so'), PosixPath('/usr/local/cuda-11.6/targets/x86_64-linux/lib/libcudart.so.11.0')}..
We select the PyTorch default libcudart.so, which is {torch.version.cuda},but this might missmatch with the CUDA version that is needed for bitsandbytes.
To override this behavior set the BNB_CUDA_VERSION=<version string,
e.g. 122> environmental variableFor example,
if you want to use the CUDA version 122BNB_CUDA_VERSION=122 python ...OR set the environmental variable in your .bashrc: export BNB_CUDA_VERSION=122
In the case of a manual override, make sure you set the LD_LIBRARY_PATH, e.g.export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.2
大意是bitsandbytes库在环境中找到了libcudart.so, 但是这与bitsandbytes需要使用的不一致。
于是,按照报错中的提示,首先nvcc -V
找到系统使用的CUDA版本, 然后配置BNB_CUDA_VERSION变量,例如cuda 是11.6的话:
export BNB_CUDA_VERSION=116
最后重新安装bitsandbytes,运行python -m bitsandbytes
再次确认即可。
3. 成功的标识
成功后会输出在系统中找到的多个动态库路径等信息,输出的结尾中会显示SUCCESS,如下图所示: