torch.cuda.is_available()返回False,但nvidia-smi可以正常运行。

问题描述

在pytorch用GPU来加速计算时发现。torch.cuda.is_available()返回False,但nvidia-smi可以正常运行。

1
2
3
>>> import torch
>>> torch.cuda.is_available()
False

此时,nvidia-smi可以正常运行。

可能原因

nvidia-smi的运行结果中可以看到,driver version是390.xx。可能是driver version版本太低,造成了这个问题,实际上也是如此。
driver version的常见版本是384.xx,390.xx,396.xx。接下来,把driver version升级到396.xx看能不能解决问题。

升级nvidia driver version

  1. 卸载旧版本的NVIDIA driver

    1
    sudo apt-get remove --purge nvidia-\*
  2. 添加NVIDIA的ppa源.

    1
    sudo add-apt-repository ppa:graphics-drivers/ppa
  3. 安装新版本的NVIDIA driver

    1
    sudo apt-get update && sudo apt-get install nvidia-driver-396

此时,运行nvidia-smi,会报以下错误。

1
Failed to initialize NVML: Driver/library version mismatch

这是更新NVIDIA driver版本后的常见问题。这个问题出现的原因是kernel mod的NVIDIA driver版本没有更新。
执行以下命令可以查看nvidia kernel mod的version。

1
cat /proc/driver/nvidia/version

可以看到已经加载的nvidia kernel mod的版本是还是旧版本390.xx。一般情况下,重启服务器就能解决问题。
如果由于某些原因不能重启,可以重新加载kernel mod。思路是先unload kernel mod,再reload kernel mod. 详见解决Driver/library version mismatch
nvidia-smi可以正常运行后,问题就解决了。

1
2
3
>>> import torch
>>> torch.cuda.is_available()
True

参考链接