cuda

不过cuda和cuda toolkit之间的区别还挺大的,一般nvidia-smi能有输出的话就不用管了,一些特殊的依赖才必须nvcc。

个人用户安装nvcc

  1. 下载地址:cuda-toolkit-archive
  2. lsb_release -a查看版本,安装类型选择runfile
  3. 出现下载指令,下载后得到一个.run的文件
    1
    wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run
  4. 在安装之前要新建一个CUDA的文件夹 用来作为安装路径 否则默认安装路径没有权限也会以报错,比如~/application/cuda/cuda_12_1
  5. 在.run文件的位置sh cuda_12.1.0_530.30.02_linux.run 执行比较慢
    1. 可以不安装driver
    2. 要在optional里面选择自己定义的位置

看到这个:安装成功

1
2
3
4
5
6
===========
= Summary =
===========

Driver: Not Selected
Toolkit: Installed in /home/user/application/cuda/cuda_12_1/

但是还是无法nvcc,因为没有加入环境变量

vim ~/.bashrc,加入

1
2
3
export CUDA_HOME=/home/user/application/cuda/cuda_12_1/
export PATH="$CUDA_HOME/bin:$PATH"
export LD_LIBRARY_PATH="$CUDA_HOME/lib64:$LD_LIBRARY_PATH"
然后保存,source ~/.bashrc

nvcc --version能看到输出,表示安装成功

1
2
3
4
5
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Tue_Feb__7_19:32:13_PST_2023
Cuda compilation tools, release 12.1, V12.1.66
Build cuda_12.1.r12.1/compiler.32415258_0

能否使用

cuda检验能否使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import torch
import multiprocessing as mp
import time

def check_cuda(queue):
try:
result = {
"torch.cuda.is_available": torch.cuda.is_available(),
"device_count": torch.cuda.device_count(),
"current_device": torch.cuda.current_device(),
"device_name": torch.cuda.get_device_name(0),
}
queue.put(result)
except Exception as e:
queue.put({"error": str(e)})

if __name__ == "__main__":
queue = mp.Queue()
p = mp.Process(target=check_cuda, args=(queue,))
p.start()

p.join(timeout=5) # 最多等待 5 秒
if p.is_alive():
print("⚠️ CUDA 初始化卡住了,终止子进程!")
p.terminate()
p.join()
else:
result = queue.get()
print("✅ 检测结果:")
for k, v in result.items():
print(f"{k}: {v}")
CUDA_VISIBLE_DEVICES=0 python check_cuda.py可以看多个gpu

使用

  1. nvidia-smi
  2. 如果有pid,想看是谁再用 ps -o user -p pid
  3. 如果是自己的,且想关掉的进程,走 `kill -9 pid`` (我第一次以为这是kill -p (毕竟process),kill详细的放在linux那里比较好)