https://pytorch.org/get-started/locally/

image-20241029090638157

1. 概念

GPU(图形处理单元)是执行并行计算的硬件

CUDA是NVIDIA 提供的并行计算软件平台,使开发者能够利用 GPU 的强大计算能力

  • 每个GPU设备都需要安装合适版本的CUDA(通常指CUDA Toolkit
  • 可通过nvidia-smi命令查找,如下图表示当前GPU驱动支持的最大CUDA版本为12.2(可向下兼容)

image-20241028210335850

nvidia-smi shows the highest version of CUDA supported by your driver.

https://stackoverflow.com/questions/53422407/different-cuda-versions-shown-by-nvcc-and-nvidia-smi

(但后来发现有时安装12.4的cuda也依旧可以进行pytorch运算)

PyTorch 是一个开源的深度学习框架

  • CUDA 是连接 PyTorch 和 GPU 的桥梁。PyTorch 可利用 CUDA 将计算任务放到 GPU,从而加速深度学习模型的训练和推理。
  • Pytorch的版本与CUDA的版本也要匹配,每个Pytorch版本可以支持多个CUDA版本,具体可查看 https://pytorch.org/get-started/previous-versions/

2. 最简安装顺序

  • 首先检查当前服务器,有无GPU设备驱动,以及型号数量,支持的CUDA版本等信息,
1
nvidia-smi
  • 再根据上述信息,直接打包安装合适版本的torch+cuda环境,https://pytorch.org/get-started/previous-versions/ 这里选择选择了cuda 11.8, torch 2.3的版本组合
1
2
# 可使用mamba加速
conda install pytorch==2.3.0 torchvision==0.18.0 torchaudio==2.3.0 pytorch-cuda=11.8 -c pytorch -c nvidia
  • 最后,检查上述是否安装成功
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import torch

print("CUDA available:", torch.cuda.is_available())
# CUDA available: True

print("CUDA version:", torch.version.cuda)
# CUDA version: 11.8

print("cuDNN version:", torch.backends.cudnn.version())
# cuDNN version: 8700

# 此时是没有安装cuda开发环境的
nvcc -V  # Command 'nvcc' not found
ls /home01/liss/miniconda3/envs/cuda_env/include | grep '^cuda'
# 没有cuda_runtime.h等文件

3. 安装cuda开发环境

  • 有些情况下,我们需要安装cuda的开发编译环境。由于上述安装方式中是在系统安装了cuda驱动软件时,再通过conda将pytorch+cuda打包安装,并非是在linux系统直接安装cuda。
  • 好处是:通过conda环境很方便地设置多个独立、不同cuda版本;
  • 坏处是:对于cuda编译环境需要格外注意,因为一般是假设Linux系统层面安装好了cuda。可能会遇到cuda_runtime.h: No such file or directorycublas_v2.h: No such file or directory等报错。 主要原因是默认cuda path在根路径的/usr目录下。 下面将演示如何使用conda安装开发环境,并结合一个例子进行演示。

安装方式1: cudatoolkit-dev 不太推荐。因为其最近的一次更新还是一年前,只到了cuda11.7版本

1
conda install -c conda-forge cudatoolkit-dev # max 11.7

安装方式2: nvidia::cuda 比较推荐,但有一点注意。如果采用默认官方给的指定版本安装命令,发现总是安装最新的cuda版本。 通过搜索他人的记录分享,使用如下方式,可以成功安装指定版本。

1
conda install nvidia/label/cuda-11.8.0::cuda --channel nvidia/label/cuda-11.8.0
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 安装成功后
nvcc -V 
# nvcc: NVIDIA (R) Cuda compiler driver
# Copyright (c) 2005-2022 NVIDIA Corporation
# Built on Wed_Sep_21_10:33:58_PDT_2022
# Cuda compilation tools, release 11.8, V11.8.89
# Build cuda_11.8.r11.8/compiler.31833905_0

ls /home01/liss/miniconda3/envs/cuda_env/include | grep '^cuda'
# 有了cuda_runtime.h等文件

cuda_path=/home01/liss/miniconda3/envs/cuda_env
  • 案例 Github上的gpu-burn项目可以用来对GPU进行压力测试。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# (1) 下载并解压缩:https://github.com/wilicc/gpu-burn
unzip gpu-burn-master.zip

# (2) make编译报错了
cd gpu-burn-master
make 
# g++  -O3 -Wno-unused-result -I/usr/local/cuda/include -std=c++11 -c gpu_burn-drv.cpp
# gpu_burn-drv.cpp:62:10: fatal error: cublas_v2.h: No such file or directory
#    62 | #include "cublas_v2.h"
#       |          ^~~~~~~~~~~~~
# compilation terminated.
# make: *** [Makefile:39: gpu_burn-drv.o] Error 1

在该仓库中,也有类似的issue。解决方式就是采用上述的cuda开发环境安装方式,然后修改Makefile文件。

1
2
3
4
5
6
# head of original Makefile
ifneq ("$(wildcard /usr/bin/nvcc)", "")
CUDAPATH ?= /usr
else ifneq ("$(wildcard /usr/local/cuda/bin/nvcc)", "")
CUDAPATH ?= /usr/local/cuda
endif

将上述设置进行注释后,将cuda路径指定为conda环境

1
2
# head of modified Makefile
CUDAPATH ?= /home01/liss/miniconda3/envs/cuda_env_5
1
2
3
4
5
# (2) 成功编译,产生一个可执行文件 gpu_burn
make

# (3) 对GPU进行100s的压力测试
./gpu_burn 100