Windows WSL 启用 NVIDIA CUDA 配置教程

893 阅读3分钟

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

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

安装

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

然后需要在 WSL 中安装 cuda toolkit,下载地址:developer.nvidia.com/cuda-downlo…,并按照官方提供的命令依次安装,比如通过 Network 安装的命令为:

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

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

nvidia-smi
nvcc --version

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

Pasted image 20250127142716.png

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

使用与测试

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

import torch

def check_gpu():
    # 检查 CUDA 是否可用
    cuda_available = torch.cuda.is_available()
    print(f"CUDA Available: {cuda_available}")

    if cuda_available:
        # 获取 GPU 设备数量
        device_count = torch.cuda.device_count()
        print(f"Number of CUDA Devices: {device_count}")

        # 遍历所有 GPU 设备
        for i in range(device_count):
            print(f"\nDevice {i}:")
            # 获取设备名称
            print(f"  Name: {torch.cuda.get_device_name(i)}")
            # 获取显存信息
            print(f"  Total Memory: {torch.cuda.get_device_properties(i).total_memory / 1024**3:.2f} GB")
            # 当前显存使用情况
            print(f"  Memory Allocated: {torch.cuda.memory_allocated(i) / 1024**3:.2f} GB")
            print(f"  Memory Reserved: {torch.cuda.memory_reserved(i) / 1024**3:.2f} GB")

        # 简单计算测试(将张量移动到 GPU 并执行操作)
        try:
            device = torch.device("cuda:0")
            x = torch.randn(1000, 1000).to(device)
            y = torch.randn(1000, 1000).to(device)
            z = torch.matmul(x, y)
            print("\nGPU 计算测试成功!")
            print(f"结果张量形状: {z.shape}")
        except Exception as e:
            print(f"\nGPU 计算测试失败: {str(e)}")
    else:
        print("未检测到可用的 CUDA 设备,请检查以下可能原因:")
        print("1. 确保已在 Windows 中安装 NVIDIA 驱动程序")
        print("2. 确保 WSL 2 已启用 GPU 支持")
        print("3. 确保已安装 CUDA Toolkit")

if __name__ == "__main__":
    check_gpu()

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

sudo apt-get update
sudo apt-get install llvm

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

poetry add "llvmlite>=0.39.0"

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

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:

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

总结

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

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

参考资料