解决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 | - python=3.9.7 |
完整文件如下:
1 | name: demucs-new |
如果之前已经用默认的yml文件创建了环境,需先把原来的环境删掉。修改完成后,执行以下命令
1 | . /root/miniconda/etc/profile.d/conda.sh |
实验是否成功
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 | nvidia-smi |
可以正常显示驱动版本,如下:
1 | CUDA 版本 10.2.89 / Driver 版本 460.91.03 / CUDNN 版本 7.6.5 |
但Demucs所依赖的Pytorch始终无法调用。查看了environment-cuda.yml
,发现
1 | - python>=3.7,<3.10 |
yml文件并没有指定固定版本,而只是 >=。使用默认的yml文件初始化环境,得到的版本是
1 | Python 3.9.16 |
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 | python -m pip install --upgrade pip |
3.2 `ModuleNotFoundError: No module named ‘_ctypes’`
执行
1 | yum install -y libffi-devel |
3.3 ‘soundfile’ backend is not available.
报错如下:
1 | /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. |
执行
1 | yum -y install libsndfile |