在本地构建CUDA 10.x的Docker镜像

首先

通过查看https://hub.docker.com/r/nvidia/cuda,可以看到已删除了已过期的CUDA版本的Docker镜像。然而,在网络上的公开实现中,可能会使用CUDA 10.x系列的Docker镜像,这给进行这些操作时带来了困扰。

由于幸运的是,Docker镜像创建环境已经在https://gitlab.com/nvidia/container-images/cuda上公开,因此在这里我们尝试在本地构建以下的Docker镜像。

    • nvidia/cuda:10.2-base-ubuntu18.04

 

    • nvidia/cuda:10.2-runtime-ubuntu18.04

 

    • nvidia/cuda:10.2-devel-ubuntu18.04

 

    nvidia/cuda:10.2-cudnn8-devel-ubuntu18.04

同时,这次尝试的Docker镜像的目标CPU架构将设定为x86_64(aarch64尚未验证)。

【2023/10/14追記】在https://qiita.com/dandelion1124/items/31a3452b05510097daa0#comment-d91729d962b247d4378e的评论中,我收到消息说NGC的目录 (https://catalog.ngc.nvidia.com/orgs/nvidia/containers/cuda)里有旧版的CUDA图像。

2. 確認操作所需的環境

我已经在以下环境中进行了操作确认。

    • OS: Ubuntu 22.04

 

    • Docker Engine: 23.0.4

 

    • nvidia-container-toolkit: 1.13.2

 

    NVIDIA driver: 530.30.02

创建支持CUDA的Docker镜像。

首先,我们要构建一个带有CUDA的Docker镜像。首先,我们要克隆Git仓库。

git clone https://gitlab.com/nvidia/container-images/cuda.git

由于出现了https://gitlab.com/nvidia/container-images/cuda/-/issues/213上的问题,因此我将在构建脚本(build.sh)中进行以下更改,以避免出现这个问题。

-        run_cmd docker buildx build --pull ${LOAD_ARG} ${PUSH_ARG} ${PLATFORM_ARG} \
+        run_cmd docker build ${LOAD_ARG} ${PUSH_ARG} ${PLATFORM_ARG} \
             -t "${IMAGE_NAME}:${CUDA_VERSION}-base-${OS}${OS_VERSION}${IMAGE_SUFFIX:+-${IMAGE_SUFFIX}}" \
             "${BASE_PATH}/${OS_PATH_NAME}/base"
 
-        run_cmd docker buildx build --pull ${LOAD_ARG} ${PUSH_ARG} ${PLATFORM_ARG} \
+        run_cmd docker build ${LOAD_ARG} ${PUSH_ARG} ${PLATFORM_ARG} \
             -t "${IMAGE_NAME}:${CUDA_VERSION}-runtime-${OS}${OS_VERSION}${IMAGE_SUFFIX:+-${IMAGE_SUFFIX}}" \
             --build-arg "IMAGE_NAME=${IMAGE_NAME}" \
             "${BASE_PATH}/${OS_PATH_NAME}/runtime"
 
-        run_cmd docker buildx build --pull ${LOAD_ARG} ${PUSH_ARG} ${PLATFORM_ARG} \
+        run_cmd docker build ${LOAD_ARG} ${PUSH_ARG} ${PLATFORM_ARG} \
             -t "${IMAGE_NAME}:${CUDA_VERSION}-devel-${OS}${OS_VERSION}${IMAGE_SUFFIX:+-${IMAGE_SUFFIX}}" \
             --build-arg "IMAGE_NAME=${IMAGE_NAME}" \

另外,由于在https://gitlab.com/nvidia/container-images/cuda/-/commit/5d080f35a0e9324007c3b007539afe47f2da5c84提交中,已将过时的CUDA版本文件移动到dist/end-of-life目录中,所以需要将其复制到dist目录中。

cp -r dist/end-of-life/10.2 dist/

因为我们已经准备好了,所以使用构建脚本(build.sh)来构建Docker镜像。

./build.sh -d --image-name nvidia/cuda --cuda-version 10.2 --os ubuntu --os-version 18.04 --arch x86_64 --load

如果正常运行,将生成以下的Docker镜像。

    • nvidia/cuda:10.2-base-ubuntu18.04

 

    • nvidia/cuda:10.2-runtime-ubuntu18.04

 

    nvidia/cuda:10.2-devel-ubuntu18.04

使用CUDA和cuDNN创建Docker镜像。

以下是用CUDA和cuDNN创建Docker镜像的前提下的指导。请访问https://gitlab.com/nvidia/container-images/cuda/-/issues/210#note_1469139165。

我们的构建脚本目前不支持cudnn。

据说,当前的构建脚本(build.sh)似乎没有处理cuDNN。因此,我们将使用存储库中的Dockerfile来进行处理。

cd dist/10.2/ubuntu1804/devel/cudnn8
docker build -t nvidia/cuda:10.2-cudnn8-devel-ubuntu18.04 --build-arg IMAGE_NAME=nvidia/cuda --build-arg TARGETARCH=amd64 .

当程序正常执行,将生成以下的Docker镜像。

    nvidia/cuda:10.2-cudnn8-devel-ubuntu18.04
bannerAds