问题描述
  • 之前基于11.1.1-cudnn8-runtime-ubuntu18.04的基础镜像制作新镜像,新建容器后查看cuda版本 nvcc --version,报错如下

    bash nvcc: command not found
    
  • 11.1.1-cudnn8-runtime-ubuntu18.04是包含cuda11.1.1和cudnn8.0.5的runtime版本基础镜像

问题分析
  • 网上查了nvcc --version报错的原因看到两类

    • 一类是默认已经安装了cuda(包含nvcc)只是没有添加环境变量导致找不到命令,这种情况在~/.bashrc中添加

      export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.1/lib64
      export PATH=$PATH:/usr/local/cuda-11.1/bin
      export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-11.1
      

      然后source ~/.bashrc生效后重新执行nvcc --version解决

    • 另一类是认为没有安装cuda,需要重新安装cuda再添加环境变量。这种情况需要注意不要通过命令直接安装cuda:sudo apt-get install nvidia-cuda-toolkit,这样安装的cuda版本是9.1,很有可能和驱动版本不匹配,报错如下

      在这里插入图片描述

  • 而基础镜像是自带cuda的,但是查看容器内cuda文件夹下并不包含bin文件,可以确认并没有安装nvcc = nvidia cuda compiler

    在这里插入图片描述

  • 原因在于cuda-runtime的镜像版本没有cuda的编译工具nvcc

问题解决
  • 使用cuda-devel基础镜像来制作镜像,如 11.1.1-cudnn8-devel-ubuntu18.04
  • 测试发现devel和runtime版本大小相差0.15G左右
  • 下载地址:docker hub: cuda镜像搜索结果
补充:不同tag的cuda镜像区别
  • base:基于cuda,包含最精简的依赖,用于部署预编译的cuda应用,需要手动安装所需的其他依赖
  • runtime:基于base,添加了cuda toolkit共享的库,涵盖了运行环境的最小集合如动态库等,但没有cuda的编译工具nvcc
  • devel:基于runtime,添加了编译工具链、调试工具、头文件、静态库,用于从源码编译cuda应用,是有nvcc的

参考文章:
docker hub cuda镜像搜索结果
nvcc command not found解决方法
cuda-base/runtime/devel的区别

created by shuaixio, 2022.06.19

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐