从零配置合适版本的CUDA容器

本文最后更新于:3 个月前

Configure a container from zero

一、文档目的

​ 由于实验需要pytorch2.0和cuda<=11.8的实验环境,若使用pytorch NGC,最早支持pytorch2.0的容器版本是23.03-py3,但其中的CUDA_VERSION为12.1(查看需注册NVIDIA账号)。经查阅CUDA Driver与CUDA Version的对应关系,在现有NSL服务器驱动版本470.74的条件下,支持的最新cuda版本为11.8。考虑到pytorch官网对pytorch2.0版本只提供了cuda11.7和cuda11.8的安装链接,于是本文选择cuda11.8+cudnn8.9.0(参照https://developer.nvidia.com/rdp/cudnn-archive

二、文件准备

在 NSL1的 /home/share/from_zero 目录下准备好了cuda11.8和cdunn8.9.0的安装文件。这里附上下载链接,可以使用wget直接下载,也可以下载到本地,再使用xftp上传到服务器。

cuda:https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run

cudnn:https://developer.nvidia.com/downloads/compute/cudnn/secure/8.9.0/local_installers/11.8/cudnn-linux-x86_64-8.9.0.131_cuda11-archive.tar.xz/

三、构建步骤

​ 本文选择在NSL1服务器上进行操作,如选择别的server,请确保已有ubuntu:20.04镜像。

  1. 选择ubuntu:20.04镜像,run一个容器,如:
1
docker run -it --gpus all --name myenv -w /workspace ubuntu:20.04 bash
  1. 将/home/share/from_zero中的两个安装包拷贝到当前容器中
1
2
3
apt install openssh-client -y
scp username@192.168.1.151:/home/share/from_zero .
# 根据提示输入yes和密码,此处更换用户名
  1. 按照顺序执行以下命令
1
2
3
4
5
6
7
8
9
10
cd from_zero
chmod +x cuda_11.8.0_520.61.05_linux.run

# 安装libxml2,按照指引选择地区和时区(6.Aisa && 70 Shanghai)
apt install libxml2 -y

# 运行cuda安装程序
./cuda_11.8.0_520.61.05_linux.run
# 出现报错如下
Failed to verify gcc version. See log at /var/log/cuda-installer.log for details.
  1. 安装gcc,再次安装cuda
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Step 1: download model from huggingface
查看/var/log/cuda-installer.log
cat /var/log/cuda-installer.log
[INFO]: Driver not installed.
[INFO]: Checking compiler version...
[INFO]: gcc location:
[ERROR]: Missing gcc. gcc is required to continue.

# 发现缺少gcc,于是安装gcc
apt install gcc -y

# 再次运行安装程序
./cuda_11.8.0_520.61.05_linux.run

# 跟随安装程序的指引进行安装
# 注意不要安装cuda driver,容器不需要安装cuda driver,直接使用server上的cuda driver

img

​ 选择install进行安装。

  1. 添加环境变量
1
2
3
4
5
6
7
8
9
10
11
vim ~/.bashrc

# 在最后加入这两行
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64

# 使其生效
source ~/.bashrc

# 验证安装成功
nvcc -V
  1. 安装cudnn(其实就是解压,复制部分文件到cuda的相关目录下)
1
2
3
4
5
6
7
8
9
10
11
# 解压安装包 这里我已解压完成

# 复制文件到相应目录
cp from_zero/cudnn-linux-x86_64-8.9.0.131_cuda11-archive/include/cudnn.h /usr/local/cuda/include/
cp /workspace/from_zero/cudnn-linux-x86_64-8.9.0.131_cuda11-archive/lib/libcudnn* /usr/local/cuda/lib64
chmod a+r /usr/local/cuda/include/cudnn.h
chmod a+r /usr/local/cuda/lib64/libcudnn*
cp /workspace/from_zero/cudnn-linux-x86_64-8.9.0.131_cuda11-archive/include/cudnn_version.h /usr/local/cuda/include

# 查看cudnn版本
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
  1. 安装对应版本的pytorch2.0
1
2
3
4
5
6
7
8
9
# 竟然没有安装python,那么安装一下
apt install python3
apt install python3-pip
# 配置软连接
ln -s /usr/bin/python3 /usr/bin/python
apt-get install python3-pip -y

# 运行pytorch官网安装脚本
pip install torch==2.0.0+cu118 torchvision==0.15.1+cu118 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu118

至此,所有的步骤完成,笔者在myenv容器中clone一个nanoGPT仓库,可以正常运行flashattention的实验。

四、说明

​ 当需要一个容器时,首先考虑NVIDIA NGC。当NGC无法满足要求时,按照本guide,理论上来说可以自行选择cuda版本,选择的时候需要注意以下几个条件:

  1. cuda版本适配cuda driver版本:https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#id4
  2. cuda版本适配cudnn版本:https://developer.nvidia.com/rdp/cudnn-archive
  3. pytorch(tensorflow)版本适配cuda版本

从零配置合适版本的CUDA容器
http://example.com/2023/12/05/从零配置合适版本的CUDA容器/
作者
dutsc
发布于
2023年12月5日
许可协议