Skip to content

包含 CUDA 13.0 与 cuDNN 9 的 Dockerfile (Ubuntu 24.04)

提示

本文中的平台预置镜像地址是示例。使用前,请在镜像中心或当前实例的预置镜像列表中确认当前可用区提供了对应仓库及 tag;如果列表中不存在,请改用页面显示的可用镜像地址。替换 Registry 域名并不能保证相同仓库或 tag 在其他环境或可用区中存在。

下面是一个平台推荐的 Dockerfile 示例,用于构建包含系统级 CUDA 13.0 和 cuDNN 9.x 的 Docker 镜像。该镜像适用于宿主机 NVIDIA 驱动已满足 CUDA 13.0 GA 原生运行要求的环境。使用前请同时确认以下两点:

  1. nvidia-smi 显示的 Linux x86_64 NVIDIA 驱动版本为 580.65.06 或更高。
  2. 在目标容器进程中运行 cuDriverGetVersion 检查时,返回值对应 CUDA Driver API 13.0 或更高。

如果任一条件不满足,请不要使用本文 Dockerfile 作为 CUDA 13 生产基础镜像;请更换到驱动版本合格的可用区,或改用 CUDA 13 兼容包实验镜像做短期验证。

本文 Dockerfile 不安装 cuda-compat-13-0,也不会把 /usr/local/cuda-13.0/compat 放入 LD_LIBRARY_PATH。如果需要在旧版受支持驱动分支上短期验证 CUDA 13 应用栈,请改用CUDA 13.0 + cuDNN 9 + 兼容包实验 Dockerfile

language-dockerfile
FROM cr.infini-ai.com/infini-ai/ubuntu:24.04

ENV PATH=/usr/local/cuda/bin:/usr/local/cuda-13.0/bin${PATH:+:${PATH}} \
    LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda-13.0/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}}

RUN apt-get update && \
    DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
        ca-certificates \
        wget \
        build-essential \
    && rm -rf /var/lib/apt/lists/* \
    && wget https://developer.download.nvidia.com/compute/cuda/13.0.0/local_installers/cuda_13.0.0_580.65.06_linux.run \
    && sh cuda_13.0.0_580.65.06_linux.run --toolkit --silent --override \
    && echo '/usr/local/cuda/lib64' >> /etc/ld.so.conf \
    && echo '/usr/local/cuda-13.0/lib64' >> /etc/ld.so.conf \
    && ldconfig \
    && rm cuda_13.0.0_580.65.06_linux.run

RUN wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb \
    && dpkg -i cuda-keyring_1.1-1_all.deb \
    && apt-get update \
    && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
        cudnn9-cuda-13 \
    && echo '/usr/lib/x86_64-linux-gnu' >> /etc/ld.so.conf \
    && ldconfig \
    && rm cuda-keyring_1.1-1_all.deb \
    && rm -rf /var/lib/apt/lists/*

本文包含的 Dockerfile 可用于在镜像中心基于 Dockerfile 构建镜像,或直接在开发机中构建镜像(使用 docker build / docker buildx build 命令)。

与兼容包实验镜像的区别

本文 Dockerfile 面向原生支持 CUDA 13 的宿主机驱动。对于 CUDA 13.0 GA,Linux x86_64 驱动版本需要为 580.65.06 或更高。它只安装 CUDA Toolkit 和 cuDNN,不安装 CUDA forward compatibility 兼容包。这样应用进程会使用容器运行时注入的宿主机 libcuda.so.1,避免兼容包覆盖新驱动上的用户态 CUDA 驱动库。

如果您正在 R570 等旧版受支持驱动分支上验证 CUDA 13 应用栈,请使用兼容包实验 Dockerfile。两类镜像建议使用不同镜像标签,例如:

language-text
cuda-13.0-cudnn9:stable
cuda-13.0-cudnn9-compat:r570-experiment

Dockerfile 说明

从宏观上看,我们在为构建包含系统级 CUDA 的 Docker 镜像时,主要进行了以下设计:

  • 分离库与驱动:使用 --toolkit 参数跳过显卡驱动器(Driver)的安装,仅安装 CUDA 开发库。容器内部必须依赖并继承物理宿主机的底层 GPU 驱动程序。
  • 不启用兼容包:不安装 cuda-compat-13-0,不设置 /usr/local/cuda-13.0/compat,避免在新驱动环境中加载不必要的兼容库。
  • 配置系统联动链:设置 PATHLD_LIBRARY_PATHCPATHLIBRARY_PATH 等环境路径,并执行 ldconfig,确保安装应用能够找到 CUDA 编译器和运行库。
  • 清除多余残留:安装后清理下载包和 apt 缓存,减小镜像体积。

关键环境变量

language-dockerfile
ENV PATH=/usr/local/cuda/bin:/usr/local/cuda-13.0/bin${PATH:+:${PATH}} \
    LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda-13.0/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}}

本文 Dockerfile 不把 /usr/local/cuda-13.0/compat 放入 LD_LIBRARY_PATH。在原生 CUDA 13 驱动环境中,应用应直接使用宿主机注入的 libcuda.so.1

安装 CUDA 13.0 Toolkit

language-dockerfile
RUN apt-get update && \
    DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
        ca-certificates \
        wget \
        build-essential \
    && rm -rf /var/lib/apt/lists/* \
    && wget https://developer.download.nvidia.com/compute/cuda/13.0.0/local_installers/cuda_13.0.0_580.65.06_linux.run \
    && sh cuda_13.0.0_580.65.06_linux.run --toolkit --silent --override \
    && echo '/usr/local/cuda/lib64' >> /etc/ld.so.conf \
    && echo '/usr/local/cuda-13.0/lib64' >> /etc/ld.so.conf \
    && ldconfig \
    && rm cuda_13.0.0_580.65.06_linux.run

该步骤使用 CUDA 13.0.0 的 runfile (local) 安装包,只安装 Toolkit,不在容器内安装 NVIDIA Driver。

安装 cuDNN

language-dockerfile
RUN wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb \
    && dpkg -i cuda-keyring_1.1-1_all.deb \
    && apt-get update \
    && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
        cudnn9-cuda-13 \
    && echo '/usr/lib/x86_64-linux-gnu' >> /etc/ld.so.conf \
    && ldconfig \
    && rm cuda-keyring_1.1-1_all.deb \
    && rm -rf /var/lib/apt/lists/*

cudnn9-cuda-13 提供面向 CUDA 13 的 cuDNN 9.x 运行库和开发文件。

验证宿主机驱动能力

镜像构建完成并用于带 GPU 的开发机、任务或推理服务后,可用以下命令确认应用进程看到的 CUDA Driver API:

language-bash
python - <<'PY'
import ctypes
v = ctypes.c_int()
cuda = ctypes.CDLL("libcuda.so.1")
cuda.cuInit(0)
cuda.cuDriverGetVersion(ctypes.byref(v))
print(v.value)
print(f"{v.value // 1000}.{(v.value % 1000) // 10}")
PY

如果输出小于 13.0,或 nvidia-smi 显示的 Linux 驱动版本低于 580.65.06,说明当前宿主机驱动不足以原生运行 CUDA 13.0 应用栈。此时请更换可用区、联系售后升级宿主机驱动,或改用兼容包实验镜像做短期验证。