1. 为什么要在 WSL2 里折腾 AI 开发环境如果你是一个长期在 Windows 上写代码的人,同时又需要跑深度学习训练或者推理,大概率经历过这样的纠结:Windows 的桌面生态和办公体验确实舒服,但 AI 这套工具链——CUDA、cuDNN、各种 Python 包、编译工具——在原生 Windows 上总会有那么几个环节让你抓狂。而纯 Linux 双系统或者远程服务器方案,要么切换成本高,要么网络延迟和文件同步让人心烦。WSL2 的出现基本解决了这个矛盾。它本质上是跑在轻量级虚拟机里的完整 Linux 内核,不是早期 WSL1 那种系统调用翻译层。这意味着你在里面装 CUDA、跑 PyTorch、编译自定义算子,行为跟一台原生 Ubuntu 机器几乎一致。更关键的是,从 WSL2 开始,微软官方支持了 GPU 直通(GPU paravirtualization),你的 NVIDIA 显卡可以直接被 WSL2 里的 Linux 发行版调用,不需要额外配置什么复杂的设备映射。这套方案适合谁?我总结下来是三类人:第一类是以 Windows 为主力工作机、但需要 Linux 工具链的算法工程师;第二类是学生或者个人开发者,只有一台带独显的笔记本,想同时兼顾日常使用和模型训练;第三类是需要快速搭建可复现环境、又不想每次都重装系统的团队。这篇文章我会把从零部署的完整过程、每一步背后的原理、以及我踩过的坑全部讲清楚,你照着做基本能一次跑通。需要提前说明的是,GPU 直通对硬件和驱动有硬性要求,不是所有机器都能开箱即用。下面我会先讲清楚前置条件,再进入实操。2. 部署前的硬件与软件前置条件核查2.1 显卡与驱动的硬性门槛GPU 直通这件事,第一个卡点就是显卡型号。NVIDIA 这边,只有较新的架构才支持 WSL2 的 GPU paravirtualization。根据我的实测经验,GTX 10 系列及以上的消费级显卡基本都可以,但一些非常老的型号或者专业卡的特殊配置可能会遇到问题。AMD 和 Intel 的显卡在 WSL2 下也有对应的支持路径,但 AI 开发场景里绝大多数人用的是 NVIDIA,所以本文以 NVIDIA 为主线。驱动层面有两个东西要分清楚:Windows 侧的显卡驱动,和 WSL2 内部的 CUDA 驱动。很多人第一次配置时会犯一个错误——在 WSL2 里又装一遍完整的 NVIDIA 驱动,结果把系统搞崩。正确的做法是:Windows 侧安装支持 WSL 的 Game Ready 或 Studio 驱动,WSL2 内部只装 CUDA Toolkit,不装驱动本体。WSL2 会通过/usr/lib/wsl/lib这个路径把 Windows 的驱动库映射进来,你可以在里面看到libcuda.so之类的文件。注意:如果你在 WSL2 里执行nvidia-smi报错说找不到命令或者找不到设备,先别急着在 Linux 里装驱动,回到 Windows 检查驱动版本是否足够新。2.2 Windows 版本与 WSL2 功能开启WSL2 的 GPU 支持需要 Windows 10 版本 21H2 及以上,或者 Windows 11。我建议直接用 Windows 11,因为后续的 WSL 更新(比如 systemd 支持、镜像网络模式)在 Win11 上体验更完整。开启 WSL2 的步骤本身不复杂,但有几个细节容易漏。首先是在“启用或关闭 Windows 功能”里勾选“适用于 Linux 的 Windows 子系统”和“虚拟机平台”。然后需要把 WSL 的默认版本设为 2:wsl --set-default-version 2如果你之前装过 WSL1 的发行版,可以用wsl --list --verbose查看版本,用wsl --set-version <发行版名> 2升级。这里有个经验:升级过程可能会花几分钟,期间不要中断,否则可能损坏文件系统。2.3 磁盘空间与内存规划AI 开发环境对磁盘的消耗比一般开发大得多。一个 CUDA Toolkit 加上 PyTorch 的 GPU 版本,轻松吃掉 10GB 以上。如果你还要下载预训练模型、数据集,那空间需求会迅速膨胀。我的建议是给 WSL2 至少预留 100GB 的可用空间,如果做 CV 或者大模型相关的工作,200GB 起步。内存方面,WSL2 默认会占用宿主机最多 50% 的内存,这个比例可以在.wslconfig文件里调整。对于训练任务,我一般会把内存上限设到宿主机总内存的 70% 左右,同时给 WSL2 分配足够的交换空间。但要注意,交换空间用的是磁盘,如果频繁触发交换,训练速度会断崖式下跌,所以内存还是尽量给够。3. WSL2 发行版选择与基础环境搭建3.1 发行版选型:Ubuntu 为什么是默认答案WSL2 支持很多发行版,Ubuntu、Debian、Fedora、openSUSE 都有。做 AI 开发我强烈建议用 Ubuntu,具体版本选 22.04 LTS 或者 24.04 LTS。原因很实际:NVIDIA 的官方文档、CUDA 的安装指引、PyTorch 的预编译包,几乎都是以 Ubuntu 为第一优先级适配的。你用别的发行版不是不行,但遇到问题时能搜到的解决方案会少很多。安装命令很简单:wsl --install -d Ubuntu-22.04装完之后第一次启动会让你设置用户名和密码。这里有个小技巧:用户名不要用中文,也不要用带空格的,否则后续一些脚本会出问题。密码记住就行,sudo 操作会频繁用到。3.2 系统初始化:换源、更新与基础工具进入 Ubuntu 之后,第一件事是更新软件源。默认的源在国内访问可能比较慢,换成国内镜像会快很多。以 Ubuntu 22.04 为例,编辑/etc/apt/sources.list,把里面的地址替换成合适的镜像地址。换完之后执行:sudo apt update && sudo apt upgrade -y然后装一批基础工具,这些在后面编译和调试时都会用到:sudo apt install -y build-essential git curl wget vim cmake pkg-config libssl-devbuild-essential提供了 gcc、g++、make 这些编译工具,很多 Python 包在安装时需要现场编译,没有它就会报错。cmake和pkg-config在编译一些 C++ 扩展时会用到。这一步看起来基础,但省掉它后面会各种报错。3.3 systemd 支持与网络模式调整WSL2 早期版本不支持 systemd,导致一些依赖 systemd 的服务没法正常跑。现在较新的 WSL 版本已经可以通过配置开启 systemd。在/etc/wsl.conf里加上:[boot] systemd=true然后在 Windows 侧执行wsl --shutdown重启 WSL。开启 systemd 之后,你可以用systemctl管理服务,这对需要跑一些后台服务的场景很有用。网络方面,WSL2 默认是 NAT 模式,Windows 和 WSL2 之间的网络访问需要经过地址转换。较新的 WSL 支持镜像网络模式(mirrored networking),可以让 WSL2 直接共享 Windows 的网络接口,访问局域网设备和被局域网访问都更方便。在.wslconfig里加:[wsl2] networkingMode=mirrored这个模式不是所有场景都需要,但如果你要跑一些需要被外部访问的服务(比如 Jupyter Notebook 让手机或另一台电脑访问),镜像模式会省去很多端口转发的麻烦。4. GPU 直通的核心配置与验证4.1 Windows 侧驱动安装要点GPU 直通能不能成,Windows 侧的驱动是决定性因素。你需要去 NVIDIA 官网下载支持 WSL 的驱动。注意,不是随便一个驱动都行,要选带 WSL 支持的版本。安装的时候选择“自定义安装”,确保勾选了与 WSL 相关的组件。装完之后,在 Windows 的 PowerShell 里执行nvidia-smi,确认驱动正常工作。然后进入 WSL2,执行同样的命令。如果一切正常,你会看到和 Windows 侧类似的输出,包括显卡型号、驱动版本、CUDA 版本等信息。这里有个非常关键的细节:WSL2 里显示的 CUDA 版本是驱动支持的最高版本,不代表你已经装了 CUDA Toolkit。比如显示 CUDA Version: 12.4,意思是这个驱动最高支持到 12.4,你实际装 12.1 或 12.4 都可以。4.2 WSL2 内部 CUDA Toolkit 安装CUDA Toolkit 的安装我推荐用 NVIDIA 官方提供的 apt 源方式,比 runfile 方式更干净,卸载也方便。步骤大致是:下载并安装 CUDA 的 keyring 包,配置 apt 源,然后安装指定版本的 toolkit。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 update sudo apt install -y cuda-toolkit-12-4注意这里用的是wsl-ubuntu这个专门的仓库路径,不是普通的ubuntu2204路径。这是很多人会搞错的地方——WSL 的 CUDA 包和原生 Ubuntu 的包是分开维护的,用错了源可能装不上或者装出问题。装完之后配置环境变量,在~/.bashrc里加上:export PATH=/usr/local/cuda-12.4/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH然后source ~/.bashrc,执行nvcc -V验证。如果能看到版本信息,说明 CUDA Toolkit 装好了。4.3 验证 GPU 是否真正可用光有nvidia-smi输出还不够,要确认 GPU 真的能被计算任务调用。最直接的方法是装一个 PyTorch 的 GPU 版本,然后跑一段测试代码:import torch print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0)) x = torch.randn(1000, 1000).cuda() y = torch.mm(x, x) print(y.sum())如果is_available()返回 True,并且矩阵乘法能跑出结果,说明 GPU 直通完全正常。我遇到过一种情况:nvidia-smi正常,但 PyTorch 里is_available()是 False。这通常是因为 PyTorch 装的是 CPU 版本,或者 CUDA 版本和 PyTorch 编译时用的版本不匹配。解决办法是去 PyTorch 官网查对应 CUDA 版本的安装命令,重新装。提示:PyTorch 的 CUDA 版本和系统装的 CUDA Toolkit 版本不需要完全一致,但大版本要对得上。比如系统装的是 CUDA 12.4,PyTorch 装 cu121 或 cu124 都可以。5. Python 环境与 AI 框架的落地配置5.1 用 Conda 还是 venv:我的选择逻辑Python 环境管理这块,AI 圈子里 Conda 和 venv 各有拥趸。我的实际经验是:如果你需要频繁切换不同版本的 CUDA 和 PyTorch 组合,Conda 更方便,因为它能帮你管理非 Python 的依赖(比如 CUDA 运行时库)。如果你只是固定一套环境,venv 更轻量。在 WSL2 里,我一般用 Miniconda,比完整版 Anaconda 干净很多。安装完之后创建环境:conda create -n ai python=3.10 -y conda activate aiPython 版本选 3.10 或 3.11 比较稳妥,太新的版本有些包还没适配,太老的版本又用不了新特性。5.2 PyTorch 安装的版本匹配陷阱PyTorch 安装最容易踩的坑就是版本不匹配。你需要同时考虑三个东西:显卡驱动支持的 CUDA 版本、系统装的 CUDA Toolkit 版本、PyTorch 预编译包对应的 CUDA 版本。这三者不需要完全相同,但驱动支持的版本必须大于等于后两者。去 PyTorch 官网的安装页面,选择对应的 CUDA 版本,它会给你一条 pip 或 conda 命令。直接复制执行就行。装完之后用前面那段测试代码验证。如果验证失败,排查顺序是:先看nvidia-smi是否正常,再看nvcc -V是否正常,最后看 PyTorch 的版本信息torch.version.cuda。这样能快速定位是哪一层出了问题。5.3 常用 AI 工具链的补充安装除了 PyTorch,实际项目里还会用到一堆工具。我列一个常用的清单:Jupyter Lab:交互式开发必备,装完之后可以用--ip=0.0.0.0启动,配合镜像网络模式,在 Windows 浏览器里直接访问。transformers / diffusers:做 NLP 和图像生成的基础库。opencv-python:CV 项目常用,注意装 headless 版本可以避免 GUI 依赖问题。tensorboard:训练可视化,配合 PyTorch 的 SummaryWriter 使用。nvitop:比 nvidia-smi 更好用的 GPU 监控工具,能实时看显存和利用率。这些装完之后,一个完整的 AI 开发环境基本就成型了。6. 实操中高频问题与排查速查6.1 GPU 相关问题的排查路径GPU 问题是 WSL2 AI 环境里最常遇到的。我整理了一个排查顺序,按这个走基本能覆盖 90% 的情况:现象可能原因排查方法nvidia-smi找不到命令WSL 内装了驱动或 PATH 问题检查/usr/lib/wsl/lib是否存在,不要装 Linux 驱动nvidia-smi报 no devicesWindows 驱动不支持 WSL更新 Windows 侧驱动到支持 WSL 的版本PyTorchis_available()False装了 CPU 版 PyTorch用torch.version.cuda确认,重装 GPU 版显存报错但 nvidia-smi 正常显存被其他进程占用用 nvitop 查看占用进程,必要时重启 WSL6.2 文件系统性能的坑WSL2 访问 Windows 文件系统(/mnt/c之类)的性能比访问 Linux 原生文件系统慢很多,尤其是大量小文件读写时。做 AI 训练时,如果数据集放在 Windows 盘里,通过/mnt/c访问,数据加载会成为瓶颈。我的做法是把项目和数据集都放在 WSL2 的原生文件系统里,也就是~/下面。如果数据原本在 Windows 盘,复制过来而不是直接访问。复制命令:cp -r /mnt/d/datasets ~/datasets虽然复制要花时间,但训练时的速度提升是值得的。另外,WSL2 的虚拟磁盘文件会随着使用不断增大,即使你删了文件,磁盘文件也不会自动缩小。可以用wsl --shutdown之后执行磁盘压缩来回收空间。6.3 内存与交换空间的调优前面提到过.wslconfig的配置。一个典型的配置长这样:[wsl2] memory=16GB swap=8GB processors=8memory是给 WSL2 的最大内存,swap是交换空间大小,processors是分配的 CPU 核心数。这些值要根据你的宿主机配置来定。我的经验是内存给到宿主机的一半到七成,CPU 核心数留一两个给 Windows 本身。如果训练时发现系统变卡,可能是 WSL2 占用了太多内存导致 Windows 侧不够用。这时候要么调低memory,要么在训练脚本里控制 batch size 和数据加载的 worker 数量。7. 一些让环境更顺手的经验补充环境搭好只是开始,日常使用中还有一些细节能明显提升体验。比如把常用的启动命令写成脚本,一键启动 Jupyter 或者训练任务。再比如配置 SSH,让你可以从别的机器连到 WSL2 里操作,这在跑长任务时很有用。还有一个容易被忽略的点是时间同步。WSL2 在宿主机休眠唤醒后,系统时间可能会漂移,导致一些依赖时间戳的操作出问题。可以装ntpdate定期同步,或者直接用hwclock从硬件时钟同步。关于备份,我建议在环境完全配置好之后,用wsl --export把整个发行版导出成一个 tar 文件。这样以后环境搞坏了,或者换机器,直接导入就能恢复,省去重新配置的麻烦。导出命令:wsl --export Ubuntu-22.04 ai-env-backup.tar这个文件可能比较大,但比起重新踩一遍所有的坑,这点磁盘空间花得值。我在多台机器上重复过这套流程,最大的体会是:WSL2 的 GPU 直通现在已经相当成熟,只要驱动版本对、CUDA 装对源、PyTorch 版本匹配,基本不会出问题。真正花时间的往往是那些环境细节——文件系统性能、内存分配、网络模式——这些在官方文档里不会重点讲,但实际用起来影响很大。把这几块调顺了,WSL2 里的 AI 开发体验和原生 Linux 已经没什么差别,同时还能享受 Windows 的桌面便利。
1. 为什么要在 WSL2 里折腾 AI 开发环境如果你是一个长期在 Windows 上写代码的人,同时又需要跑深度学习训练或者推理,大概率经历过这样的纠结:Windows 的桌面生态和办公体验确实舒服,但 AI 这套工具链——CUDA、cuDNN、各种 Python 包、编译工具——在原生 Windows 上总会有那么几个环节让你抓狂。而纯 Linux 双系统或者远程服务器方案,要么切换成本高,要么网络延迟和文件同步让人心烦。WSL2 的出现基本解决了这个矛盾。它本质上是跑在轻量级虚拟机里的完整 Linux 内核,不是早期 WSL1 那种系统调用翻译层。这意味着你在里面装 CUDA、跑 PyTorch、编译自定义算子,行为跟一台原生 Ubuntu 机器几乎一致。更关键的是,从 WSL2 开始,微软官方支持了 GPU 直通(GPU paravirtualization),你的 NVIDIA 显卡可以直接被 WSL2 里的 Linux 发行版调用,不需要额外配置什么复杂的设备映射。这套方案适合谁?我总结下来是三类人:第一类是以 Windows 为主力工作机、但需要 Linux 工具链的算法工程师;第二类是学生或者个人开发者,只有一台带独显的笔记本,想同时兼顾日常使用和模型训练;第三类是需要快速搭建可复现环境、又不想每次都重装系统的团队。这篇文章我会把从零部署的完整过程、每一步背后的原理、以及我踩过的坑全部讲清楚,你照着做基本能一次跑通。需要提前说明的是,GPU 直通对硬件和驱动有硬性要求,不是所有机器都能开箱即用。下面我会先讲清楚前置条件,再进入实操。2. 部署前的硬件与软件前置条件核查2.1 显卡与驱动的硬性门槛GPU 直通这件事,第一个卡点就是显卡型号。NVIDIA 这边,只有较新的架构才支持 WSL2 的 GPU paravirtualization。根据我的实测经验,GTX 10 系列及以上的消费级显卡基本都可以,但一些非常老的型号或者专业卡的特殊配置可能会遇到问题。AMD 和 Intel 的显卡在 WSL2 下也有对应的支持路径,但 AI 开发场景里绝大多数人用的是 NVIDIA,所以本文以 NVIDIA 为主线。驱动层面有两个东西要分清楚:Windows 侧的显卡驱动,和 WSL2 内部的 CUDA 驱动。很多人第一次配置时会犯一个错误——在 WSL2 里又装一遍完整的 NVIDIA 驱动,结果把系统搞崩。正确的做法是:Windows 侧安装支持 WSL 的 Game Ready 或 Studio 驱动,WSL2 内部只装 CUDA Toolkit,不装驱动本体。WSL2 会通过/usr/lib/wsl/lib这个路径把 Windows 的驱动库映射进来,你可以在里面看到libcuda.so之类的文件。注意:如果你在 WSL2 里执行nvidia-smi报错说找不到命令或者找不到设备,先别急着在 Linux 里装驱动,回到 Windows 检查驱动版本是否足够新。2.2 Windows 版本与 WSL2 功能开启WSL2 的 GPU 支持需要 Windows 10 版本 21H2 及以上,或者 Windows 11。我建议直接用 Windows 11,因为后续的 WSL 更新(比如 systemd 支持、镜像网络模式)在 Win11 上体验更完整。开启 WSL2 的步骤本身不复杂,但有几个细节容易漏。首先是在“启用或关闭 Windows 功能”里勾选“适用于 Linux 的 Windows 子系统”和“虚拟机平台”。然后需要把 WSL 的默认版本设为 2:wsl --set-default-version 2如果你之前装过 WSL1 的发行版,可以用wsl --list --verbose查看版本,用wsl --set-version <发行版名> 2升级。这里有个经验:升级过程可能会花几分钟,期间不要中断,否则可能损坏文件系统。2.3 磁盘空间与内存规划AI 开发环境对磁盘的消耗比一般开发大得多。一个 CUDA Toolkit 加上 PyTorch 的 GPU 版本,轻松吃掉 10GB 以上。如果你还要下载预训练模型、数据集,那空间需求会迅速膨胀。我的建议是给 WSL2 至少预留 100GB 的可用空间,如果做 CV 或者大模型相关的工作,200GB 起步。内存方面,WSL2 默认会占用宿主机最多 50% 的内存,这个比例可以在.wslconfig文件里调整。对于训练任务,我一般会把内存上限设到宿主机总内存的 70% 左右,同时给 WSL2 分配足够的交换空间。但要注意,交换空间用的是磁盘,如果频繁触发交换,训练速度会断崖式下跌,所以内存还是尽量给够。3. WSL2 发行版选择与基础环境搭建3.1 发行版选型:Ubuntu 为什么是默认答案WSL2 支持很多发行版,Ubuntu、Debian、Fedora、openSUSE 都有。做 AI 开发我强烈建议用 Ubuntu,具体版本选 22.04 LTS 或者 24.04 LTS。原因很实际:NVIDIA 的官方文档、CUDA 的安装指引、PyTorch 的预编译包,几乎都是以 Ubuntu 为第一优先级适配的。你用别的发行版不是不行,但遇到问题时能搜到的解决方案会少很多。安装命令很简单:wsl --install -d Ubuntu-22.04装完之后第一次启动会让你设置用户名和密码。这里有个小技巧:用户名不要用中文,也不要用带空格的,否则后续一些脚本会出问题。密码记住就行,sudo 操作会频繁用到。3.2 系统初始化:换源、更新与基础工具进入 Ubuntu 之后,第一件事是更新软件源。默认的源在国内访问可能比较慢,换成国内镜像会快很多。以 Ubuntu 22.04 为例,编辑/etc/apt/sources.list,把里面的地址替换成合适的镜像地址。换完之后执行:sudo apt update && sudo apt upgrade -y然后装一批基础工具,这些在后面编译和调试时都会用到:sudo apt install -y build-essential git curl wget vim cmake pkg-config libssl-devbuild-essential提供了 gcc、g++、make 这些编译工具,很多 Python 包在安装时需要现场编译,没有它就会报错。cmake和pkg-config在编译一些 C++ 扩展时会用到。这一步看起来基础,但省掉它后面会各种报错。3.3 systemd 支持与网络模式调整WSL2 早期版本不支持 systemd,导致一些依赖 systemd 的服务没法正常跑。现在较新的 WSL 版本已经可以通过配置开启 systemd。在/etc/wsl.conf里加上:[boot] systemd=true然后在 Windows 侧执行wsl --shutdown重启 WSL。开启 systemd 之后,你可以用systemctl管理服务,这对需要跑一些后台服务的场景很有用。网络方面,WSL2 默认是 NAT 模式,Windows 和 WSL2 之间的网络访问需要经过地址转换。较新的 WSL 支持镜像网络模式(mirrored networking),可以让 WSL2 直接共享 Windows 的网络接口,访问局域网设备和被局域网访问都更方便。在.wslconfig里加:[wsl2] networkingMode=mirrored这个模式不是所有场景都需要,但如果你要跑一些需要被外部访问的服务(比如 Jupyter Notebook 让手机或另一台电脑访问),镜像模式会省去很多端口转发的麻烦。4. GPU 直通的核心配置与验证4.1 Windows 侧驱动安装要点GPU 直通能不能成,Windows 侧的驱动是决定性因素。你需要去 NVIDIA 官网下载支持 WSL 的驱动。注意,不是随便一个驱动都行,要选带 WSL 支持的版本。安装的时候选择“自定义安装”,确保勾选了与 WSL 相关的组件。装完之后,在 Windows 的 PowerShell 里执行nvidia-smi,确认驱动正常工作。然后进入 WSL2,执行同样的命令。如果一切正常,你会看到和 Windows 侧类似的输出,包括显卡型号、驱动版本、CUDA 版本等信息。这里有个非常关键的细节:WSL2 里显示的 CUDA 版本是驱动支持的最高版本,不代表你已经装了 CUDA Toolkit。比如显示 CUDA Version: 12.4,意思是这个驱动最高支持到 12.4,你实际装 12.1 或 12.4 都可以。4.2 WSL2 内部 CUDA Toolkit 安装CUDA Toolkit 的安装我推荐用 NVIDIA 官方提供的 apt 源方式,比 runfile 方式更干净,卸载也方便。步骤大致是:下载并安装 CUDA 的 keyring 包,配置 apt 源,然后安装指定版本的 toolkit。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 update sudo apt install -y cuda-toolkit-12-4注意这里用的是wsl-ubuntu这个专门的仓库路径,不是普通的ubuntu2204路径。这是很多人会搞错的地方——WSL 的 CUDA 包和原生 Ubuntu 的包是分开维护的,用错了源可能装不上或者装出问题。装完之后配置环境变量,在~/.bashrc里加上:export PATH=/usr/local/cuda-12.4/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH然后source ~/.bashrc,执行nvcc -V验证。如果能看到版本信息,说明 CUDA Toolkit 装好了。4.3 验证 GPU 是否真正可用光有nvidia-smi输出还不够,要确认 GPU 真的能被计算任务调用。最直接的方法是装一个 PyTorch 的 GPU 版本,然后跑一段测试代码:import torch print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0)) x = torch.randn(1000, 1000).cuda() y = torch.mm(x, x) print(y.sum())如果is_available()返回 True,并且矩阵乘法能跑出结果,说明 GPU 直通完全正常。我遇到过一种情况:nvidia-smi正常,但 PyTorch 里is_available()是 False。这通常是因为 PyTorch 装的是 CPU 版本,或者 CUDA 版本和 PyTorch 编译时用的版本不匹配。解决办法是去 PyTorch 官网查对应 CUDA 版本的安装命令,重新装。提示:PyTorch 的 CUDA 版本和系统装的 CUDA Toolkit 版本不需要完全一致,但大版本要对得上。比如系统装的是 CUDA 12.4,PyTorch 装 cu121 或 cu124 都可以。5. Python 环境与 AI 框架的落地配置5.1 用 Conda 还是 venv:我的选择逻辑Python 环境管理这块,AI 圈子里 Conda 和 venv 各有拥趸。我的实际经验是:如果你需要频繁切换不同版本的 CUDA 和 PyTorch 组合,Conda 更方便,因为它能帮你管理非 Python 的依赖(比如 CUDA 运行时库)。如果你只是固定一套环境,venv 更轻量。在 WSL2 里,我一般用 Miniconda,比完整版 Anaconda 干净很多。安装完之后创建环境:conda create -n ai python=3.10 -y conda activate aiPython 版本选 3.10 或 3.11 比较稳妥,太新的版本有些包还没适配,太老的版本又用不了新特性。5.2 PyTorch 安装的版本匹配陷阱PyTorch 安装最容易踩的坑就是版本不匹配。你需要同时考虑三个东西:显卡驱动支持的 CUDA 版本、系统装的 CUDA Toolkit 版本、PyTorch 预编译包对应的 CUDA 版本。这三者不需要完全相同,但驱动支持的版本必须大于等于后两者。去 PyTorch 官网的安装页面,选择对应的 CUDA 版本,它会给你一条 pip 或 conda 命令。直接复制执行就行。装完之后用前面那段测试代码验证。如果验证失败,排查顺序是:先看nvidia-smi是否正常,再看nvcc -V是否正常,最后看 PyTorch 的版本信息torch.version.cuda。这样能快速定位是哪一层出了问题。5.3 常用 AI 工具链的补充安装除了 PyTorch,实际项目里还会用到一堆工具。我列一个常用的清单:Jupyter Lab:交互式开发必备,装完之后可以用--ip=0.0.0.0启动,配合镜像网络模式,在 Windows 浏览器里直接访问。transformers / diffusers:做 NLP 和图像生成的基础库。opencv-python:CV 项目常用,注意装 headless 版本可以避免 GUI 依赖问题。tensorboard:训练可视化,配合 PyTorch 的 SummaryWriter 使用。nvitop:比 nvidia-smi 更好用的 GPU 监控工具,能实时看显存和利用率。这些装完之后,一个完整的 AI 开发环境基本就成型了。6. 实操中高频问题与排查速查6.1 GPU 相关问题的排查路径GPU 问题是 WSL2 AI 环境里最常遇到的。我整理了一个排查顺序,按这个走基本能覆盖 90% 的情况:现象可能原因排查方法nvidia-smi找不到命令WSL 内装了驱动或 PATH 问题检查/usr/lib/wsl/lib是否存在,不要装 Linux 驱动nvidia-smi报 no devicesWindows 驱动不支持 WSL更新 Windows 侧驱动到支持 WSL 的版本PyTorchis_available()False装了 CPU 版 PyTorch用torch.version.cuda确认,重装 GPU 版显存报错但 nvidia-smi 正常显存被其他进程占用用 nvitop 查看占用进程,必要时重启 WSL6.2 文件系统性能的坑WSL2 访问 Windows 文件系统(/mnt/c之类)的性能比访问 Linux 原生文件系统慢很多,尤其是大量小文件读写时。做 AI 训练时,如果数据集放在 Windows 盘里,通过/mnt/c访问,数据加载会成为瓶颈。我的做法是把项目和数据集都放在 WSL2 的原生文件系统里,也就是~/下面。如果数据原本在 Windows 盘,复制过来而不是直接访问。复制命令:cp -r /mnt/d/datasets ~/datasets虽然复制要花时间,但训练时的速度提升是值得的。另外,WSL2 的虚拟磁盘文件会随着使用不断增大,即使你删了文件,磁盘文件也不会自动缩小。可以用wsl --shutdown之后执行磁盘压缩来回收空间。6.3 内存与交换空间的调优前面提到过.wslconfig的配置。一个典型的配置长这样:[wsl2] memory=16GB swap=8GB processors=8memory是给 WSL2 的最大内存,swap是交换空间大小,processors是分配的 CPU 核心数。这些值要根据你的宿主机配置来定。我的经验是内存给到宿主机的一半到七成,CPU 核心数留一两个给 Windows 本身。如果训练时发现系统变卡,可能是 WSL2 占用了太多内存导致 Windows 侧不够用。这时候要么调低memory,要么在训练脚本里控制 batch size 和数据加载的 worker 数量。7. 一些让环境更顺手的经验补充环境搭好只是开始,日常使用中还有一些细节能明显提升体验。比如把常用的启动命令写成脚本,一键启动 Jupyter 或者训练任务。再比如配置 SSH,让你可以从别的机器连到 WSL2 里操作,这在跑长任务时很有用。还有一个容易被忽略的点是时间同步。WSL2 在宿主机休眠唤醒后,系统时间可能会漂移,导致一些依赖时间戳的操作出问题。可以装ntpdate定期同步,或者直接用hwclock从硬件时钟同步。关于备份,我建议在环境完全配置好之后,用wsl --export把整个发行版导出成一个 tar 文件。这样以后环境搞坏了,或者换机器,直接导入就能恢复,省去重新配置的麻烦。导出命令:wsl --export Ubuntu-22.04 ai-env-backup.tar这个文件可能比较大,但比起重新踩一遍所有的坑,这点磁盘空间花得值。我在多台机器上重复过这套流程,最大的体会是:WSL2 的 GPU 直通现在已经相当成熟,只要驱动版本对、CUDA 装对源、PyTorch 版本匹配,基本不会出问题。真正花时间的往往是那些环境细节——文件系统性能、内存分配、网络模式——这些在官方文档里不会重点讲,但实际用起来影响很大。把这几块调顺了,WSL2 里的 AI 开发体验和原生 Linux 已经没什么差别,同时还能享受 Windows 的桌面便利。