【原创】paddle报错“CUDA driver version is insufficient for CUDA runtime version”

cudaGetDeviceCount failed in paddle::platform::GetCUDADeviceCount: CUDA driver version is insufficient for CUDA runtime version at [/paddle/paddle/fluid/platform/gpu_info.cc:33]

 

我们可以在paddle的GitHub上寻找问题的相关解决方法https://github.com/PaddlePaddle/Paddle/issues/8700

  1. 单机是否可以运行(自己使用的只是单机GPU,那么忽视)
  2. 编译用的CUDA版本和runtime的CUDA版本是否一致(查看CUDA版本,GPU驱动版本,看CUDA是否支持GPU驱动版本;另外需要看paddle版本)
  3. 如果是在Docker中运行,是否正确设置了docker run --privileged 以及在Container内GPU设备是否可以找到?

 

 

【很可能不重要的过程】

https://github.com/PaddlePaddle/Paddle/issues/14434

看了这个issue能想到是否CUDA环境没配好:

(除了查CUDA版本,GPU驱动版本,可以通过代码看看CUDA环境是否正常)

官方CUDA与驱动版本对应关系

https://docs.nvidia.com/deploy/cuda-compatibility/index.html#binary-compatibility__table-toolkit-driver

那么可以先试一下如果不用Paddle是否可以获取GPU信息:

# test_cuda.cu

#include 
#include 
int main(int argc, char* argv[]) {
  int dev_cnt = -1;
  cudaGetDeviceCount(&dev_cnt);
  auto err = cudaGetLastError();
  if(err != cudaSuccess) {
    printf("cudaGetDeviceCount Error: %s\n",  cudaGetErrorString(err));
    exit(-1);
  }
  printf("device count: %d", dev_cnt);
  return 0;
}

编译命令:nvcc -arch sm_30 test_cuda.cu -std=c++11

运行命令:./a.out (不了解是否固定是a.out)

 

可能是更好的获取GPU信息代码(来自https://www.cnblogs.com/devilmaycry812839668/p/8367294.html):

# test_cuda.cu

#include 
#include 
#include 

//初始化CUDA
int count=0;

bool InitCUDA()
{
    printf("Start to detecte devices.........\n");//显示检测到的设备数

    cudaGetDeviceCount(&count);//检测计算能力大于等于1.0 的设备数

    if(count == 0)
    {
        fprintf(stderr, "There is no device.\n");
        return false;
    }

    printf("%d device/s detected.\n",count);//显示检测到的设备数

    int i;
    for(i = 0; i < count; i++)
    {//依次验证检测到的设备是否支持CUDA
        cudaDeviceProp prop;
        if(cudaGetDeviceProperties(&prop, i) == cudaSuccess) 
        {//获得设备属性并验证是否正确
            if(prop.major >= 1)//验证主计算能力,即计算能力的第一位数是否大于1
            {
                printf("Device %d: %s supportsCUDA %d.%d.\n",i+1,prop.name,prop.major,prop.minor);//显示检测到的设备支持的CUDA 版本
                break;
            }
        }
    }

    if(i == count) 
    {//没有支持CUDA1.x 的设备
        fprintf(stderr, "There is no device supporting CUDA 1.x.\n");
        return false;
    }

    cudaSetDevice(i);//设置设备为主叫线程的当前设备
    return true;
}

int main()
{
    if(!InitCUDA()) 
    {//初始化失败返回系统int argc, char** argv
        return 0;
    }

    printf("Hello GPU! CUDA has been initialized.\n");

    //exit(argc ? EXIT_SUCCESS : EXIT_FAILURE);
    return 0;//返回系统
}

编译命令:nvcc test_cuda.cu

运行命令:./a.out (不了解是否固定是a.out)

 

【很可能是重点的解决方法】

确认CUDA环境正常,device能被获取后,把眼光放回paddle的版本,最终发现这个问题主要是paddle版本问题:

安装paddlepaddle-gpu时应当认真选择:

版本号对应关系:

paddlepaddle-gpu==X.X.X.postXX                其中post后的两个XX分别代表CUDA版本,CUDNN版本。

如:

paddlepaddle-gpu==1.5.1.post87 代表CUDA版本8,CUDNN版本7.X

paddlepaddle-gpu==1.5.1.post97 代表CUDA版本9,CUDNN版本7.X

paddlepaddle-gpu==1.5.1.post107 代表CUDA版本10,CUDNN版本7.X

其中,

paddlepaddle-gpu==1.2.1.post97 代表CUDA版本9,CUDNN版本7.0

paddlepaddle-gpu==1.3.1.post97 代表CUDA版本9,CUDNN版本7.3

paddlepaddle-gpu==1.4.1.post97 代表CUDA版本9,CUDNN版本7.3

paddlepaddle-gpu==1.5.1.post97 代表CUDA版本9,CUDNN版本7.3

 

你可能感兴趣的:(Python,paddle,paddlepaddle)