惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Schneier on Security
P
Proofpoint News Feed
Apple Machine Learning Research
Apple Machine Learning Research
WordPress大学
WordPress大学
博客园 - Franky
V
V2EX
爱范儿
爱范儿
J
Java Code Geeks
小众软件
小众软件
Last Week in AI
Last Week in AI
The Cloudflare Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Hugging Face - Blog
Hugging Face - Blog
T
The Blog of Author Tim Ferriss
酷 壳 – CoolShell
酷 壳 – CoolShell
The Register - Security
The Register - Security
GbyAI
GbyAI
Vercel News
Vercel News
Y
Y Combinator Blog
腾讯CDC
F
Fortinet All Blogs
I
InfoQ
N
Netflix TechBlog - Medium
B
Blog RSS Feed
D
Docker
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
量子位
博客园 - 司徒正美
阮一峰的网络日志
阮一峰的网络日志
The GitHub Blog
The GitHub Blog
Microsoft Security Blog
Microsoft Security Blog
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
宝玉的分享
宝玉的分享
Blog — PlanetScale
Blog — PlanetScale
H
Help Net Security
云风的 BLOG
云风的 BLOG
A
About on SuperTechFans
Scott Helme
Scott Helme
T
Tor Project blog
U
Unit 42
Google Online Security Blog
Google Online Security Blog
PCI Perspectives
PCI Perspectives
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
NISL@THU
NISL@THU
D
Darknet – Hacking Tools, Hacker News & Cyber Security
aimingoo的专栏
aimingoo的专栏
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Stack Overflow Blog
Stack Overflow Blog
Security Archives - TechRepublic
Security Archives - TechRepublic

CodeSky 代码之空

如何让 AI 成为 24 小时牛马:我的个人项目实践 - CodeSky 代码之空 AI 浪潮下真实诉求的想象空间—同志仍需努力 - CodeSky 代码之空 AI 浪潮下的新时代开发模式—AI Coding 的快速成长 - CodeSky 代码之空 体验豆包手机的 24 小时 - CodeSky 代码之空 Agent Platform Self-Host 开源项目对比 - Coze Studio - CodeSky 代码之空 Chrome 端到端网络排查战记 - CodeSky 代码之空 瞎逼逼:2025 年还没有升级研发工具的你落伍了吗 - CodeSky 代码之空 Project. 博客重建计划 - CodeSky 代码之空 群晖 Gitea + Gitea Actions 安装与部署服务教程 - CodeSky 代码之空 Python 音频去广告+字幕提取 - CodeSky 代码之空 群晖通过 Active Backup for Business 实现服务器快照 - CodeSky 代码之空 HTTP Auth From BasicAuth to WebAuthn - CodeSky 代码之空 Redis 分布式锁的实现 - CodeSky 代码之空 限流与常见实现 - CodeSky 代码之空 Redis 大 key、热 key 判别和解决方案 - CodeSky 代码之空 缓存:高并发读的救世主 - CodeSky 代码之空 如何解决服务中的事务问题 - CodeSky 代码之空 聊聊 MySQL 索引与索引设计 - CodeSky 代码之空 Redis 中使用键空间监听 key 过期消息 - CodeSky 代码之空 AI:Make 死宅 Great Again - CodeSky 代码之空
Windows WSL 启用 NVIDIA CUDA 配置教程 - CodeSky 代码之空
敖天羽 · 2025-01-27 · via CodeSky 代码之空

拖稿时间太长,只能努力还原……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 配置等情况,都需要我们根据具体报错信息进行排查和解决。

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

参考资料