解决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 ,覆盖指定这几个参数

  - python=3.9.7
  - pytorch=1.12.1
  - torchaudio=0.12.1
  - cudatoolkit=10.2
  - torchvision=0.13.1

完整文件如下:

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文件创建了环境,需先把原来的环境删掉。修改完成后,执行以下命令

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

实验是否成功

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,使用

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

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

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,发现

- python>=3.7,<3.10
- pytorch>=1.8.1
- torchaudio>=0.8
- cudatoolkit>=10

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

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

python -m pip install --upgrade pip
python -m pip install --upgrade setuptools

3.2 `ModuleNotFoundError: No module named ‘_ctypes’`

执行

yum install -y libffi-devel
或
sudo apt-get install libffi-dev

3.3 ‘soundfile’ backend is not available.

报错如下:

/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.")

执行

yum -y install libsndfile

你可能感兴趣的:(小技巧,pytorch,python,深度学习)