解决PyTorch无法调用GPU,torch.cuda.is_available()显示False的问题

解决PyTorch无法调用GPU,torch.cuda.is_available()显示False的问题

在Aliyun ECS上部署Demucs项目时,发现torch始终无法调用GPU。python -c "import torch;print(torch.cuda.is_available())"一直显示是False。

一、先说答案

需要修改Demucs项目默认的 environment-cuda.yml ,覆盖指定这几个参数

1
2
3
4
5
- python=3.9.7
- pytorch=1.12.1
- torchaudio=0.12.1
- cudatoolkit=10.2
- torchvision=0.13.1

完整文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
name: demucs-new

channels:
- pytorch
- conda-forge

dependencies:
- python=3.9.7
- ffmpeg>=4.2
- pytorch=1.12.1
- torchaudio=0.12.1
- cudatoolkit=10.2
- torchvision=0.13.1
- tqdm>=4.36
- pip
- pip:
- diffq>=0.2
- dora-search
- einops
- hydra-colorlog>=1.1
- hydra-core>=1.1
- julius>=0.2.3
- lameenc>=1.2
- openunmix
- musdb>=0.4.0
- museval>=0.4.0
- soundfile
- submitit
- treetable>=0.2.3

如果之前已经用默认的yml文件创建了环境,需先把原来的环境删掉。修改完成后,执行以下命令

1
2
3
4
5
. /root/miniconda/etc/profile.d/conda.sh
conda env update -f environment-cuda.yml
conda activate demucs-new
conda deactivate
pip install -e .

实验是否成功

1
python -c "import torch;print('torch cpu version: ' + str(torch.__version__));print('torch cuda version: ' + str(torch.version.cuda));print('cuda is_available: ' + str(torch.cuda.is_available()));torch.zeros(1).cuda();"

二、解决过程

ECS创建时有设置安装了nvidia驱动和CUDA,使用

1
2
3
nvidia-smi
nvcc -V
cat /usr/local/cuda/version.txt

可以正常显示驱动版本,如下:

1
2
3
4
5
6
7
8
CUDA 版本 10.2.89 / Driver 版本 460.91.03 / CUDNN 版本 7.6.5

NVIDIA-SMI 460.91.03 Driver Version: 460.91.03 CUDA Version: 11.2

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Oct_23_19:24:38_PDT_2019
Cuda compilation tools, release 10.2, V10.2.89

但Demucs所依赖的Pytorch始终无法调用。查看了environment-cuda.yml,发现

1
2
3
4
- python>=3.7,<3.10
- pytorch>=1.8.1
- torchaudio>=0.8
- cudatoolkit>=10

yml文件并没有指定固定版本,而只是 >=。使用默认的yml文件初始化环境,得到的版本是

1
2
3
Python 3.9.16
torch 1.13.1
torchaudio 0.13.1

PyTorch使用GPU需要版本能匹配。可在 PyTorch版本匹配参考 查看到 CUDA,Python,Torch 兼容的版本号。默认yml获取的版本存在兼容性问题,需要在yml中指定可兼容的版本号,即可解决问题。

三、解决部署Demucs容易遇到的的三个小问题

3.1 `Can not execute `setup.py` since setuptools is not available in the build environment`

尝试 更新 pip setuptools

1
2
python -m pip install --upgrade pip
python -m pip install --upgrade setuptools

3.2 `ModuleNotFoundError: No module named ‘_ctypes’`

执行

1
2
3
yum install -y libffi-devel

sudo apt-get install libffi-dev

3.3 ‘soundfile’ backend is not available.

报错如下:

1
2
/root/projects/voice_factory/venv/lib/python3.9/site-packages/torchaudio/_internal/module_utils.py:99: UserWarning: Failed to import soundfile. 'soundfile' backend is not available.
warnings.warn("Failed to import soundfile. 'soundfile' backend is not available.")

执行

1
yum -y install libsndfile