背景我是一名计算机专业的在校大学生最近在学 Datawhale 的 hello-gpu 这门课需要在自己的笔记本上搭一个能跑 CUDA 的环境。这篇文章结合我在环境部署时遇到的真实情况当然也有 AI 笔记辅助希望能帮初学者少走弯路。我的电脑配置AMD R9 8940HX RTX 5060 Laptop GPU8GB 显存 16GB 内存硬盘当时也只剩 100GB 左右经典配置X_X。一开始我电脑上装着 VMware Workstation Pro想着直接用虚拟机装个 Ubuntu 跑 CUDA 应该挺方便。实际试下来发现这条路在笔记本上根本走不通于是去学习了相关知识搞清楚自己为什么卡进度之后换成了 WSL2整个过程顺畅很多。这篇笔记记录一下为什么不能用 VMware以及 WSL2 的优势在哪里。先放一下我最终的环境清单组件版本/方案宿主机Windows 11 NVIDIA 显卡驱动570 及以上虚拟化WSL2GPU-PV 半虚拟化Linux 发行版Ubuntu 22.04CUDA Toolkit12.8PyTorchcu128 版本一、VMware Workstation 在笔记本上跑 CUDA根本走不通先说最根本的原因VMware Workstation Pro 是 Type-2寄居型虚拟机根本不提供 GPU / PCIe 直通功能。要让虚拟机里的 CUDA 访问物理显卡必须走 PCIe 直通而那是 ESXi、KVM 这类 Type-1 方案的能力。所以在 Workstation 里跑 CUDA 不是“难”是“没这个功能”。那如果换成支持直通的方案呢笔记本硬件也不满足条件笔记本的 RTX 5060 没有独立显卡 BIOSVBIOS 集成在系统固件里直通缺少必要的 OpROM独显挂在 SoC 的 PCIe 根复合体上AMD 平台 IOMMU 分组不干净笔记本固件也不暴露 ACS 支持宿主 Windows 无法把独显从系统中释放出来即便在桌面平台上勉强直通消费级 N 卡还经常触发 NVIDIA 驱动错误 43驱动检测到虚拟机环境后拒绝加载稳定性很差。WSL2 这边走的是微软和 NVIDIA 联合支持的 GPU 半虚拟化方案GPU-PV不需要直通Windows 里装好驱动Linux 里直接就能用配置成本低得多。二、16GB 内存扛不住 VMware 的内存策略VMware 默认会把分配给虚拟机的内存预分配并锁定在物理内存里。给虚拟机分 8GBWindows 主机就基本只剩 8GB 可用同时开浏览器、IDE、CUDA 编译的时候系统会卡到几乎没法操作。如果只给虚拟机分 4GBCUDA 编译稍微大一点的工程就会直接 OOM 崩掉。WSL2 的内存是动态的按需增长、闲置回收。我通过.wslconfig把上限限制在 6GB平时只占 1~2GB真正需要时才会涨上去。对 16GB 内存的笔记本来说这个机制友好太多了。配置文件在C:\Users\你的用户名\.wslconfig没有就新建一个[wsl2] # 分配给 WSL2 的最大内存 memory6GB # 交换空间大小 swap2GB # 分配的 CPU 核心数 processors6修改后需要在 PowerShell 里执行wsl --shutdown重新打开 Ubuntu 才会生效。三、磁盘空间经不起虚拟机折腾我的 SSD 当时只剩约 100GB 可用空间。创建一个带 CUDA 环境的 Ubuntu 虚拟机虚拟磁盘动辄要预留 40~50GBVMware 虽然支持精简置备但完整桌面环境 CUDA Toolkit PyTorch 装完实际占用很快就上去了再算上各种快照空间很快就告急。WSL2 的磁盘ext4.vhdx是动态增长的初始只占几 GB用多少占多少不会一次性划走几十 GB。不过有个坑要提前说WSL2 的 vhdx 文件只增不减。你在 Linux 里删了文件Windows 上的 vhdx 不会自动变小需要定期回收wsl --shutdown # 发行版名称用 wsl -l -v 查看需要 WSL 2.1.4 及以上版本 wsl --manage Ubuntu-22.04 --set-sparse true四、性能是“能跑和不能跑”的区别严格来说如果 GPU 直通真的成功性能是接近原生的。但问题在于笔记本上直通走不通而 Workstation 又不提供直通——所以在 VMware 里CUDA 是“跑不了”而不是“跑得慢”。WSL2 基于 Hyper-V 轻量级虚拟化配合 NVIDIA 官方的 GPU-PV 支持CUDA 计算性能接近原生实测大约 5% 左右的损耗对学习和开发完全够用同样的代码跑起来和原生环境几乎没有体感差别。五、工具链支持差很多NVIDIA 官方推荐用 WSL2 做 CUDA 开发CUDA Toolkit、Nsight Compute、Nsight Systems 都有专门的 WSL 版官方文档和成熟支持。在 VMware 里折腾这些工具经常遇到 nvcc 路径识别错误、驱动版本不匹配之类的问题排查成本很高。WSL2 这边省心很多。六、WSL2 环境搭建全流程国内镜像方案既然决定了用 WSL2接下来记录一下我实际用的搭建流程。因为国内直连 GitHub 和 NVIDIA 官方源经常超时下面的命令都换成了国内镜像的写法实际跑下来速度可接受。0. 前置条件先确认这些再往下走Windows 10 21H2 及以上或 Windows 11BIOS 里已开启虚拟化AMD 平台一般是 SVM 选项Windows 上已经装好较新的 NVIDIA 显卡驱动RTX 50 系是 Blackwell 架构需要 570 及以上版本建议直接去官网装最新版重点WSL2 里不需要、也不应该再装 Linux 显卡驱动libcuda会由 Windows 驱动自动注入。先在 PowerShell 里检查一下 WSL 版本# 查看 WSL 版本离线导入 .wsl 文件需要 2.4.4 及以上 wsl --version1. 安装 WSL2 和 Ubuntu最省事的方式管理员 PowerShell 一条命令# 从微软 CDN 安装 Ubuntu 22.04国内一般可以直接连上 wsl --install -d Ubuntu-22.04微软商店下载慢的话也可以在商店里直接搜 Ubuntu 22.04.5 安装效果一样。实在不行再考虑离线导入 .wsl 文件从 Ubuntu 官网下载要求 WSL 2.4.4 及以上# 离线导入 .wsl 镜像文件 wsl --install --from-file D:\迅雷下载\ubuntu-22.04.5-wsl-amd64.wsl注意网上一些教程会让你去清华镜像的 ubuntu-releases 目录下载那个目录下只有 ISO 镜像装物理机或完整虚拟机用的并没有 .wsl 文件别下错了。如果wsl --install本身的组件太旧需要先更新 WSL 内核。GitHub 直连慢的话可以访问微软官方文档获取最新内核更新包浏览器打开后按提示下载并双击安装https://github.com/microsoft/WSL/releases2. 更换 Ubuntu 的 APT 源为国内镜像WSL2 里的 Ubuntu 默认用国外源装软件非常慢。换成阿里云源# 备份原始源 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 替换为阿里云源 sudo sed -i s|http://archive.ubuntu.com|https://mirrors.aliyun.com|g /etc/apt/sources.list sudo sed -i s|http://security.ubuntu.com|https://mirrors.aliyun.com|g /etc/apt/sources.list 更新软件包列表 sudo apt update3. 修复 WSL2 的 DNS 问题WSL2 有时会出现域名解析失败的情况表现为 ping 223.5.5.5 通但 ping baidu.com 不通。经典解法是关闭自动生成 resolv.conf手动指定 DNS。先关闭自动生成sudo nano /etc/wsl.conf写入以下内容[network] generateResolvConf false然后手动设置 DNS# 删除自动生成的符号链接重建为普通文件 sudo rm /etc/resolv.conf sudo nano /etc/resolv.conf写入以下内容nameserver 8.8.8.8 nameserver 223.5.5.5最后回到 Windows PowerShell 执行wsl --shutdown重新打开 Ubuntu 即可。补充一个更现代的方案Win11 22H2 的新版 WSL 支持镜像网络模式在.wslconfig里加一行可以一并解决 DNS 和 localhost 互访的问题[wsl2] networkingModemirrored4. 安装 CUDA Toolkit 12.8RTX 5060 是 Blackwell 架构sm_120需要 CUDA 12.8 及以上版本。先下载并安装 NVIDIA 的 CUDA 密钥包# 下载 NVIDIA CUDA 密钥包文件很小官方直连一般能下动无法下载请自行AI检索链接 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装完密钥包后apt 源默认还是指向 NVIDIA 官方国内下载大文件会很慢可以换成阿里云镜像# 把 CUDA 的 apt 源换成阿里云镜像 # 如果提示文件不存在先执行 ls /etc/apt/sources.list.d/ 看一下实际文件名 sudo sed -i s|https://developer.download.nvidia.com|https://mirrors.aliyun.com/nvidia-cuda|g /etc/apt/sources.list.d/cuda.list然后安装# 更新源并安装 CUDA Toolkit 12.8 sudo apt update sudo apt install -y cuda-toolkit-12-8这里有个细节要特别说一下装的是cuda-toolkit-12-8而不是cuda-12-8。后者会连带安装 Linux 版显卡驱动而 WSL2 里装 Linux 驱动会破坏 Windows 驱动的桥接导致nvidia-smi报错——这是 WSL2 新手最常见的坑之一。配置环境变量并验证# 写入环境变量 echo export PATH/usr/local/cuda-12.8/bin:$PATH ~/.bashrc echo export LD_LIBRARY_PATH/usr/local/cuda-12.8/lib64:$LD_LIBRARY_PATH ~/.bashrc 重新加载配置 source ~/.bashrc 验证应输出 release 12.8 相关信息 nvcc --version5. 安装 PyTorch cu128先确认 pip 可用Ubuntu 22.04 默认没装# 安装 pip sudo apt install -y python3-pipPyTorch 官方源国内下载比较慢用上海交大镜像# 上海交大 PyTorch 镜像cu128 pip3 install torch torchvision torchaudio \ --index-url https://mirror.sjtu.edu.cn/pytorch-wheels/cu128/如果速度还是不理想就用迅雷之类的下载工具手动下载 whl 文件再本地安装。注意文件名里的cp310要和 Python 版本对应Ubuntu 22.04 自带 Python 3.10选 cp310版本号以镜像实际提供的为准# 本地安装下载好的 whl 文件文件名以实际下载的为准 pip3 install torch-2.7.1cu128-cp310-cp310-linux_x86_64.whl更规范的做法是用 venv 虚拟环境隔离项目依赖这里为了流程简洁直接装在系统环境里。6. 验证环境# 检查 GPU 是否可见由 Windows 驱动提供Linux 里不用装驱动 nvidia-smi 检查 PyTorch 是否能调用 GPU python3 -c import torch; print(torch.version); print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))如果输出True和NVIDIA GeForce RTX 5060 Laptop GPU说明环境搭建完成。七、那 VMware 还能干什么VMware Workstation Pro 本身没问题只是不适合 GPU / CUDA 开发。而且从 2024 年起它对个人使用已经免费了Broadcom 收购后的政策拿来干下面这些事还是很香的学 Linux 基础命令、做网络实验跑不带 GPU 的服务器程序测试不同 Linux 发行版做系统隔离实验八、总结在笔记本上用 CUDA 做 GPU 开发WSL2 是更现实的选择不需要显卡直通内存和磁盘占用都是动态的性能接近原生NVIDIA 官方也提供了完整支持。我现在的组合是 WSL2 Ubuntu 22.04 CUDA Toolkit 12.8 PyTorch cu128跑 Datawhale hello-gpu 的代码没有问题。后面如果需要在 AMD 环境上跑实验就直接切到课程提供的云环境本地这套 NVIDIA 环境保留着做 CUDA 相关的练习。参考资料NVIDIA CUDA on WSL 官方指南微软 WSL 官方文档Datawhale hello-gpu 课程此处替换为课程页面链接