为什么我无法在 docker-CUDA 容器中运行命令“nvcc --version”?

为什么我无法在 docker-CUDA 容器中运行命令“nvcc --version”?

我的操作系统是Ubuntu 18.04,我已经安装了nvidia驱动程序nvidia-docker,但无法检测到CUDA。

$ docker run -it --gpus all nvidia/cuda:10.0-cudnn7-runtime-ubuntu18.04 /bin/bash
root@7c0be9bfaeec:/# nvcc --version
bash: nvcc: command not found

另外我无法在 Docker 容器中检测到 CUDNN:

root@694cefcad33a:/# cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
cat: /usr/local/cuda/include/cudnn.h: No such file or directory

然而,当我运行的时候nvidia-smi,它成功了!

root@7c0be9bfaeec:/# nvidia-smi
Thu Dec 19 04:51:23 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.44 Driver Version: 440.44 CUDA Version: 10.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |

答案1

似乎您正在运行Docker 映像runtime的标签nvidia/cuda,其中不包含nvcc您尝试访问的开发工具和 CUDA 标头。该映像仅包含执行 CUDA 应用程序所需的运行时库。我猜您可以从标签访问开发工具latest

尝试这个命令:

$ docker run -it --gpus all nvidia/cuda:latest bash

ETA:头文件可能安装在不同的位置。我建议您不必担心该CUDNN_MAJOR值。如果您确实需要它,请尝试:

sudo apt update
sudo apt install mlocate
sudo updatedb
sudo locate cudnn.h

如果你找到了结果(例如/a/b/cudnn.h),那么用该位置替换cat你注释的命令。像这样:

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2 #This is the old command
cat /a/b/cudnn.h | grep CUDNN_MAJOR -A 2 #This is the new command, with the file you found

另外,你还展示了一个无用使用的例子cat联合大学)。您可以改为执行以下操作:

grep -A 2 CUDNN_MAJOR /a/b/cudnn.h # Avoid UUOC

PS:@optimus 从您尝试安装的 Docker 映像中,nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04您可以看到 CUDNN 的主版本号是 7。只是认为它可能对您有用。

PPS:如果你找不到 CUDNN 头文件,那么你可能没有安装它。请尝试按照以下步骤进行安装本指南

相关内容