CodeSky 代码之空

随手记录自己的学习过程

Windows WSL 启用 NVIDIA CUDA 配置教程

2025-01-27 16:26分类: Other评论: 0

拖稿时间太长,只能努力还原……QvQ,因为如你所见的近期主要功夫都在重写博客系统和简历页面上了,当然也包括在 NAS 上部署的 gitea + action 的配置之类的,因此后面可以更新的文章还是挺多的

之前我也写过两篇 AI 相关的文章,不过因为不涉及到开发,只涉及到使用,所以我还是用 Windows 宿主机开发的,这次由于涉及到了开发,所以就得折腾一下 WSL GPU 加速的方案。

安装

首先,先保证宿主机已经安装了驱动,也就是https://www.nvidia.com/Download/index.aspx中获得下载地址。

然后需要在 WSL 中安装 cuda toolkit,下载地址:https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=WSL-Ubuntu&target_version=2.0&target_type=deb_network,并按照官方提供的命令依次安装,比如通过 Network 安装的命令为:

1wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb
2sudo dpkg -i cuda-keyring_1.1-1_all.deb
3sudo apt-get update
4sudo apt-get -y install cuda-toolkit-12-8
5

安装完成后,你使用两个命令:

1nvidia-smi
2nvcc --version
3

如果上面两个命令都没问题且能输出你的显卡,那在安装商我们就初步获得了成功。

如果提示command not found,建议确认一下 PATH 配置,加上 /usr/bin/cuda/bin

使用与测试

下一步,我们要测试在 Python 中是否能够正常使用 GPU,这是一段测试代码:

1import torch
2
3def check_gpu():
4    # 检查 CUDA 是否可用
5    cuda_available = torch.cuda.is_available()
6    print(f"CUDA Available: {cuda_available}")
7
8    if cuda_available:
9        # 获取 GPU 设备数量
10        device_count = torch.cuda.device_count()
11        print(f"Number of CUDA Devices: {device_count}")
12
13        # 遍历所有 GPU 设备
14        for i in range(device_count):
15            print(f"\nDevice {i}:")
16            # 获取设备名称
17            print(f"  Name: {torch.cuda.get_device_name(i)}")
18            # 获取显存信息
19            print(f"  Total Memory: {torch.cuda.get_device_properties(i).total_memory / 1024**3:.2f} GB")
20            # 当前显存使用情况
21            print(f"  Memory Allocated: {torch.cuda.memory_allocated(i) / 1024**3:.2f} GB")
22            print(f"  Memory Reserved: {torch.cuda.memory_reserved(i) / 1024**3:.2f} GB")
23
24        # 简单计算测试(将张量移动到 GPU 并执行操作)
25        try:
26            device = torch.device("cuda:0")
27            x = torch.randn(1000, 1000).to(device)
28            y = torch.randn(1000, 1000).to(device)
29            z = torch.matmul(x, y)
30            print("\nGPU 计算测试成功!")
31            print(f"结果张量形状: {z.shape}")
32        except Exception as e:
33            print(f"\nGPU 计算测试失败: {str(e)}")
34    else:
35        print("未检测到可用的 CUDA 设备,请检查以下可能原因:")
36        print("1. 确保已在 Windows 中安装 NVIDIA 驱动程序")
37        print("2. 确保 WSL 2 已启用 GPU 支持")
38        print("3. 确保已安装 CUDA Toolkit")
39
40if __name__ == "__main__":
41    check_gpu()
42

因此你需要先安装 torch,期间如果报 llvmlite 安装的错误,可能需要先安装:

1sudo apt-get update
2sudo apt-get install llvm
3

然后再安装最新的 llvm 版本(我测试的时候出现了安装的 torch 和 llvmlite 版本不兼容的情况,可能需要视情况而定进行调整):

1poetry add "llvmlite>=0.39.0"
2

运行后如果输出显卡,证明识别成功了:

CUDA Available: True
Number of CUDA Devices: 1

Device 0:
  Name: NVIDIA GeForce RTX 4070 Ti SUPER
  Total Memory: 15.99 GB
  Memory Allocated: 0.00 GB
  Memory Reserved: 0.00 GB

GPU 计算测试成功!
结果张量形状: torch.Size([1000, 1000])

当然,在实际项目中,我也遇到过死活就是用的是 CPU 的情况(这点可以通过 Windows 的资源管理器或者 nvidia-smi 查看正在使用的进程得出)。比如我之前使用 whisper 时死活不生效,就需要手动指明 device:

1device = "cuda:0" if torch.cuda.is_available() else "cpu"
2print(f"使用设备: {device}")
3# 加载模型到指定设备
4model = whisper.load_model(model_name, device=device)
5

总结

在实际操作中,安装过程可能会遇到各种依赖版本不兼容、配置错误等问题,像llvmlite版本与torch不匹配、命令找不到需要检查 PATH 配置等情况,都需要我们根据具体报错信息进行排查和解决。

总之,不能让显卡白买了。

参考资料

评论 (0)