No CUDA runtime is found, using CUDA_HOME='/usr/local/cuda/问题解决

384 阅读3分钟

引言

  • 本文记录使用自建dockers测试InternGPT项目遇到的一个问题(大致意思就是找不到CUDA):
    • No CUDA runtime is found, using CUDA_HOME='/usr/local/cuda/'
    • 如遇到相同问题可以比照下面我解决问题的思路一个一个验证尝试解决问题,方法仅供参考

解决历程

解决子问题1:关于torch版本与CUDA版本不匹配的问题

  • 这个没什么好说的,就检查dockers容器中torch匹配的cuda版本与torchaudio匹配的cuda版本是否是一致的,不一致会报另一个错误显示版本冲突,这个自行上pytorch官网下载即可
    • 注:使用nvidia-smi查看显卡版本后再下载,而且注意torchaudio没有注明CUDA版本可能依然会不适配,cu116表示CUDA:11.6

解决子问题2:GPU版本的torch没有生效

  • 首先验证下下载的torch是不是GPU版本,比如我看到有的博客写的是因为用的是国内镜像源但是里面没有GPU版本的torch,所以下载的是CPU版本的(使用下列方法验证下)
    • import torch
    • torch.__version__
  • 然后是验证torch是否能检测到GPU
    • import torch
    • torch.cuda.is_available()
    • 果然,我的检测不到,返回的是False

解决子问题3:nvidia-smi在容器中无法使用

  • 经过检测torch无法调用GPU,我测试发现容器里无法使用nvidia-smi命令,而容器外服务器是可以使用的,搜集一圈的结果就是容器内没有映射服务器的GPU计算单元(待考证),总之就是GPU在容器里的配置有问题

  • 然后就是漫长的配置CUDA之旅(根据chatGPT的提示,果然,回答的挺顺溜,问题依然没解决,大概以下就是如何在容器里可以使用指令nvidia-smi)

    • 首先我搜寻结果是创建容器的时候要加入参数 --gpus all才可以,但是我已经创建好容器了,我不想再创建一遍

    • 首先是关闭容器,然后更新一下配置,再重启(无效,检查了docker版本大于19.03) docker update --gpus all <container-id>

    • 然后是检查toolkit和守护(无效)

docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi

cat /etc/docker/daemon.json

  • 接着是检查安装CUDA的路径,使用方法是which nvcc,而我的返回结果不是cuda,而是conda,直接替换后依然无效

  • 上图中的文件我也没找到,所以使用另一个方法(失效) sudo find / -name "cuda*" -type d 2>/dev/null
  • 然后是配置环境变量(失效)

终极武器:重装容器

  • 显然chatgpt说了一堆,尝试后都无用,所以不如简单粗暴一些,直接将容器stop后,使用commit将容器压缩成镜像,再重启一下(commit使用后原容器还在哈,只是生成了一个镜像)
    • docker commit 容器名 镜像名
  • 然后重启的时候加上参数--gpus all
    • docker run -it --name 新容器名 -p 5702:5702 --shm-size=32G --gpus all -v /data/donews/maosiyu:/iGPT 容器使用的镜像名 /bin/bash
  • 终究还是这个方法有效,nvidia-smi指令生效了,且文章开头的报错信息也没有,然后出现了新的问题,唉,心累,不过InternGPT给出了docker版本,待我测试后补充....