CUDA 12.2.2 + cudnn8.x 镜像 Dockerfile
如果出现以下情况,我们推荐您自己构建镜像:
- 环境不匹配:平台提供的镜像不满足您特定的软件版本(如框架、库)组合。
- 访问受限:您访问外部 Docker Hub 等公共仓库不方便或受限。
支持系统级 CUDA,需安装 CUDA 和 cuDNN。安装完成后,可使用 nvcc。部分应用要求 cudnn 8.x 版本,可参考本文中的 Dockerfile。
说明
本文包含的 Dockerfile 可用于镜像中心基于 Dockerfile 构建镜像,或直接在开发机中构建镜像(使用 docker build/docker buildx build)。
- 基于 Ubuntu 22.04
- 安装 CUDA 12.2.2。如需安装其他 CUDA Toolkit 版本,参考下方替换方法:
- 根据 CUDA Toolkit Archive 地址,查找 runfile 名称,例如
cuda_12.2.2_535.104.05_linux.run,并替换 Dockerfile 中的 runfile 名称。请自行查找官方文档,确保 cudnn 8.x 与 CUDA Toolkit 版本兼容。 - 替换 wget 命令中的具体版本路径,如
12.2.2 - 替换其他特定版本路径,如
cuda-12.2
- 根据 CUDA Toolkit Archive 地址,查找 runfile 名称,例如
- 安装 cuDNN 8.x。
关于什么是系统级 CUDA 环境,可参考以下教程:
📖 手动安装特定版本的系统级 CUDA/cuDNN
📖 NVIDIA CUDA Toolkit 与 PyTorch 安装中的 CUDA 的区别
📖 获取系统级 CUDA/cuDNN 环境
Dockerfile
下面的 Dockerfile 示例,以 Ubuntu 22.04 为基础镜像,安装 CUDA 12.2.2 和 cuDNN 8.9.7.29。
dockerfile
FROM cr.infini-ai.com/infini-ai/ubuntu:22.04-20240429
# 设置环境变量
# DEBIAN_FRONTEND=noninteractive 防止安装过程中的交互式提示
# PATH 添加CUDA可执行文件路径
# LD_LIBRARY_PATH 添加CUDA库文件路径
# CUDA_HOME 设置CUDA根目录
ENV PATH=/usr/local/cuda/bin:/usr/local/cuda-12.2/bin${PATH:+:${PATH}} \
LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda-12.2/lib64:/usr/lib/x86_64-linux-gnu${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} \
CUDA_HOME=/usr/local/cuda \
CPATH=/usr/include${CPATH:+:${CPATH}} \
LIBRARY_PATH=/usr/lib/x86_64-linux-gnu${LIBRARY_PATH:+:${LIBRARY_PATH}}
# 安装CUDA并配置系统环境
# 1. 更新apt并安装必要工具
# 2. 清理apt缓存减小镜像体积
# 3. 下载CUDA安装包
# 4. 静默安装CUDA工具包(请勿安装 driver)
# 5. 配置动态链接库搜索路径
# 6. 更新动态链接库缓存
# 7. 清理安装包
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y wget build-essential \
&& rm -rf /var/lib/apt/lists/* \
&& wget https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run \
&& sh cuda_12.2.2_535.104.05_linux.run --toolkit --silent --override \
&& echo '/usr/local/cuda/lib64' >> /etc/ld.so.conf \
&& echo '/usr/local/cuda-12.2/lib64' >> /etc/ld.so.conf \
&& ldconfig \
&& rm cuda_12.2.2_535.104.05_linux.run
# 安装cuDNN并配置环境 (Tar File Installation) see https://docs.nvidia.com/deeplearning/cudnn/archives/cudnn-897/install-guide/index.html#installlinux
# 1. 下载 NVIDIA 官方的 Redistrib JSON 解析工具
# 2. 下载历史版本(8.9.7.29)版本的 cudnn
# 3. 安装cuDNN
# 4. 更新动态链接库缓存
# 5. 清理安装文件
RUN git clone https://ghfast.top/https://github.com/NVIDIA/build-system-archive-import-examples.git \
&& echo "Git clone completed successfully" \
&& cd build-system-archive-import-examples \
&& python3 -u ./parse_redist.py --product cudnn --label 8.9.7.29 --os linux --arch x86_64 \
&& ls -la flat/linux-x86_64/cuda12* \
&& test -d flat/linux-x86_64/cuda12/include && test -d flat/linux-x86_64/cuda12/lib \
&& cp flat/linux-x86_64/cuda12/include/cudnn*.h /usr/local/cuda/include \
&& echo "Copied header files" \
&& cp -P flat/linux-x86_64/cuda12/lib/libcudnn* /usr/local/cuda/lib64 \
&& echo "Copied library files" \
&& chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn* \
&& ldconfig \
&& cd / \
&& rm -rf build-system-archive-import-examples注意
由于从 cuDNN Archive 下载 cuDNN 1.x-8.x 历史版本需要 NVIDIA 开发者账号,且仅提供需要验证的下载链接,因此在 Dockerfile 中处理较为不便。如果需要 cuDNN 8.x 或更早版本,可以参考上面的 dockerfile,使用 Tar File Installation 方式安装 cudnn。其他版本参见 cuDNN redist JSON。