教程

CUDA 教程

驱动下载

参考:

下载结果:

  • Nvidia-<os-name>-<arch>-<version>.run 文件

注意:

  • 可能存在,选择列表中没有给定的型号,但是有类似型号,详情页支持要搜索的型号的情况

    • eg: getforce gtx 1660 super, 只能搜索到 getforce -> getforce gtx 16 series -> gtx 1660Ti

A100 驱动下载

参考:

选择 Data Center / Tesla -> A series -> A100

Nvidia Driver Vs. CUDA Driver Vs. CUDA Toolkit

  1. 三个是不同的东西
  2. Nvidia Driver 负责 GPU 和 OS 交互
  3. CUDA Driver 负责 CUDA Enabled GPU 和 OS 交互
  4. CUDA Toolkit 是高层级工具, Nvidia 和 CUDA driver 是低层级工具

cuda 安装

nvidia .run 文件安装

conda 安装

conda search cuda -c nvidia

pip 安装

参考:

步骤:

  1. 安装 nvidia-pyindex 包
  2. 安装具体的包

    • 安装单个 cuda 运行时依赖: python3 -m pip install nvidia-cuda-runtime-cu12

      • 这个是安装 cuda 12 本身
    • 安装所有 cuda 工具: python3 -m pip install nvidia-<library>

      • 这里 <library> 具体的工具,如下文:

         1
         2
         3
         4
         5
         6
         7
         8
         9
        10
        11
        12
        13
        14
        15
        16
        
        nvidia-cuda-runtime-cu12
        nvidia-cuda-cupti-cu12
        nvidia-cuda-nvcc-cu12
        nvidia-nvml-dev-cu12
        nvidia-cuda-nvrtc-cu12
        nvidia-nvtx-cu12
        nvidia-cuda-sanitizer-api-cu12
        nvidia-cublas-cu12
        nvidia-cufft-cu12
        nvidia-curand-cu12
        nvidia-cusolver-cu12
        nvidia-cusparse-cu12
        nvidia-npp-cu12
        nvidia-nvjpeg-cu12
        nvidia-nvjitlink-cu12
        nvidia-cuda-opencl-cu12
      • cu12 代表 cuda 12

CUDA 和 multiprocess 多进程

参考:

  1. CUDA 不支持 python multiprocessing 的 fork 模式

    • 需要使用 forkserverspawn 模式
    • 设置方法:

      1
      2
      3
      4
      5
      6
      
      import multiprocessing as mp
      
      # 方法一:
      mp.set_start_method("spawn")
      # 方法二:
      mp.get_context(...)

CUDA 并行的方法

参考:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
s1 = torch.cuda.Stream()
s2 = torch.cuda.Stream()
# Initialise cuda tensors here. E.g.:
A = torch.rand(1000, 1000, device = 'cuda')
B = torch.rand(1000, 1000, device = 'cuda')
# Wait for the above tensors to initialise.
torch.cuda.synchronize()
with torch.cuda.stream(s1):
    C = torch.mm(A, A)
with torch.cuda.stream(s2):
    D = torch.mm(B, B)
# Wait for C and D to be computed.
torch.cuda.synchronize()
# Do stuff with C and D.

CUDA 版本切换方法

方法一: 使用 cuda-select 命令

  1. 安装 nvidia-cuda-toolkit
  1. cuda-select --list
  2. cuda-select --set <version>

    • eg: cuda-select –set 11.8

缺点:

  • nvidia-cuda-toolkit 是一个很大的包

方法二: 软链接

1
sudo ln -sfT /usr/local/cuda/cuda-11.1/ /usr/local/cuda
  • 把想要使用的版本链接到 /usr/local/cuda

方法三:修改 PATH 和 LD_LIBRARY_PATH, CUDA_PATH

1
LD_LIBRARY_PATH=/root/miniconda3/cuda118/lib:$LD_LIBRARY_PATH