我可以访问 Debian 11 服务器,其中安装了一些任意 NVIDIA 驱动程序和 CUDA 版本。然而,由于许多人使用服务器,因此许多人需要不同版本的 CUDA 和 cuDNN。所以我决定在docker中隔离我的环境,从图像创建一个容器这里。
根据网上的指南,主机必须安装(fulfilled)NVIDIA驱动并nvidia-container-toolkit
安装(fulfilled)。然后,我通过执行以下命令从图像创建了一个容器:
docker run -it --rm --gpus all nvidia/cuda:11.2.0-cudnn8-runtime-ubuntu20.04
当我连接到图像时,我可以成功运行nvidia-smi
,但是CUDA的版本与主机系统上的相同,并且cuDNN似乎根本不存在(主机目前也没有cuDNN),但是如果我理解正确的话,该映像应该包含预安装的两者。
知道我做错了什么或者如何实现具有特定 CUDA/cuDNN 以及驱动程序版本(如有必要)的隔离容器?
答案1
我不知道为什么nvidia-smi
从容器内部调用显示的 CUDA 版本显示主机的 CUDA 版本,但我发现我在错误的位置寻找 cuDNN:
https://github.com/NVIDIA/nvidia-docker/issues/53
看起来图像的效果应该是这样的。 (我还安装了nvidia-docker2)
由于某种原因,我得到的训练时间非常慢,但我需要对此进行更多研究,它似乎与图像的配置没有任何关系(至少 GPU 可以被 Tensorflow 正确地看到)。