拖稿时间太长,只能努力还原……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
如果上面两个命令都没问题且能输出你的显卡,那在安装商我们就初步获得了成功。
如果提示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 配置等情况,都需要我们根据具体报错信息进行排查和解决。
总之,不能让显卡白买了。