获取系统级 CUDA/cuDNN 环境
在使用 AIStudio 开发机、推理服务、训练服务时,很多用户会遇到系统级 CUDA 和 cuDNN 相关的安装问题。
本文汇总了在 AIStudio 平台获取系统级 CUDA 和 cuDNN 环境的几种方式,这些方式已经过验证,可帮助您顺利完成环境配置。
NOTE
如果您尚不清楚什么是系统级 CUDA,建议提前阅读教程 NVIDIA CUDA Toolkit 与 PyTorch 安装中的 CUDA 的区别。
为什么需要系统级 CUDA/cuDNN
在进行深度学习开发时,很多用户会遇到缺失系统级 CUDA 和 cuDNN 的问题,特别是 PyTorch 已经提供了带有 CUDA 和 cuDNN 支持的预编译版本,经常让人困惑。
Huggingface Transformers 文档中有如下描述:
PyTorch’s pip and conda builds come prebuilt with the cuda toolkit which is enough to run PyTorch, but it is insufficient if you need to build cuda extensions.
大意是说 PyTorch 通过 pip 和 conda 提供的构建版本已经预装了 CUDA 工具包,但无法构建 CUDA 扩展。文档中还说,由于正确安装系统级的 CUDA 工具包可能会很复杂,因此 PyTorch 和 NVIDIA 发布了 NGC Docker 容器版本的 Pytorch。
因此,如果您的场景中存在以下任意情况,则需要安装系统级 CUDA 或 cuDNN:
- 要求下载安装 NVIDIA CUDA Toolkit,例如 LLaMA Factory 安装文档
- 要求使用 nvcc,例如 DeepSpeed
获取系统级 CUDA/cuDNN 的几种方式
您可以在 AIStudio 平台快速获取已安装系统级 CUDA 和 cuDNN 环境的容器镜像,这些镜像可用于平台开发机、推理服务、任务模块。另外,您也可以手动安装 CUDA / cuDNN。
使用平台预置镜像
AIStudio 平台镜像中心 中 CUDA 和 NGC 镜像均预装了 CUDA Toolkit 和 cuDNN。
- 预置 CUDA 镜像:来自 nvidia/cuda 镜像仓库 的
12.2.2-cudnn8-devel-ubuntu20.04
镜像,其中预装了 NVIDIA CUDA Toolkit 12.2 和 cuDNN8 - 预置 NGC 镜像:来自 NGC Docker 容器版本的 Pytorch 的镜像,例如
pytorch-24.03-py3
、pytorch-23.11-py3
,其中预装软件的具体版本可查询NGC Pytorch 官方 Release Notes。
直接拉取 NGC Pytorch 镜像
AIStudio 平台镜像中心已支持通过 URL 直接从公网拉取镜像,保存为租户的自定义镜像。
操作方式详见文档 迁移外部镜像至租户镜像仓库
使用 Dockerfile 构建镜像
AIStudio 平台镜像中心支持直接编写 Dockerfile 构建镜像。
CUDA 12.2.2
下面是一个 Dockerfile 示例,以 Ubuntu 22.04 为基础镜像,构建一个 CUDA 12.2.2 的镜像。
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${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} \
CUDA_HOME=/usr/local/cuda
# 安装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
CUDA 12.2.2 + cudnn9.x 最新版
下面的 Dockerfile 示例,以 Ubuntu 22.04 为基础镜像,安装 CUDA 12.2.2 和 cuDNN 最新版。
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并配置环境
# 1. 下载并安装NVIDIA CUDA仓库公钥
# 2. 更新apt源
# 3. 安装cuDNN
# 4. 配置额外的库路径
# 5. 更新动态链接库缓存
# 6. 清理安装包和apt缓存
RUN wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb \
&& dpkg -i cuda-keyring_1.1-1_all.deb \
&& apt-get update \
&& apt-get install -y cudnn-cuda-12 \
&& 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/*
CUDA 12.2.2 + cudnn8.x 指定版本
下面的 Dockerfile 示例,以 Ubuntu 22.04 为基础镜像,安装 CUDA 12.2.2 和 cuDNN 8.9.7.29。
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
NOTE
由于从 cuDNN Archive 下载 cuDNN 1.x-8.x 历史版本需要 NVIDIA 开发者账号,且仅提供需要验证的下载链接,因此在 Dockerfile 中处理较为不便。如果需要 cuDNN 8.x 或更早版本,可以参考上面的 dockerfile,使用 Tar File Installation 方式安装 cudnn。其他版本参见 cuDNN redist JSON。
手动在开发机安装特定版本的系统级 CUDA/cuDNN
如果上述方式无法满足您的要求,可以使用开发机和 Ubuntu 基础镜像,手动安装 CUDA / cuDNN。安装完成后,可以将开发机保存为自定义镜像,在平台其他服务模块中复用环境。
我们已提供详细教程,请移步在容器化 Ubuntu 22.04 上安装特定版本 CUDA/cuDNN。