WSL2 Ubuntu下CUDA Toolkit的安装与配置全攻略

张开发
2026/4/21 1:28:55 15 分钟阅读

分享文章

WSL2 Ubuntu下CUDA Toolkit的安装与配置全攻略
1. 为什么要在WSL2 Ubuntu中安装CUDA Toolkit作为一个长期在Windows和Linux双系统间反复横跳的开发者我深知GPU加速对深度学习工作的重要性。WSL2的出现让我们终于可以在Windows环境下直接使用Ubuntu系统运行CUDA程序这简直是AI开发者的福音。不过在实际操作中我发现很多朋友都会遇到各种安装配置问题今天就把我踩过的坑和解决方案完整分享给大家。WSL2相比WSL1最大的改进就是提供了完整的Linux内核支持这意味着我们可以直接调用NVIDIA GPU进行加速计算。根据我的实测在WSL2 Ubuntu 22.04上运行CUDA程序性能损耗只有不到5%几乎和原生Linux系统没有区别。这对于需要频繁切换Windows办公和Linux开发的机器学习工程师来说简直是生产力神器。注意在开始安装前请确保你的Windows版本是19041或更高并且已经安装了最新版的NVIDIA驱动。我遇到过不少问题都是因为驱动版本过旧导致的。2. 准备工作搭建WSL2环境2.1 检查当前WSL版本首先我们需要确认系统是否已经切换到WSL2。打开PowerShell管理员权限运行以下命令wsl -l -v这个命令会列出所有已安装的Linux发行版及其WSL版本。在我的电脑上输出是这样的NAME STATE VERSION * Ubuntu-22.04 Running 2如果你的版本显示为1就需要升级到WSL2。我刚开始时就因为没注意这个细节折腾了半天CUDA就是装不上。2.2 启用虚拟机平台功能WSL2需要依赖Windows的虚拟机平台功能。在PowerShell中执行dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart执行完成后需要重启电脑。这里有个小技巧如果你使用的是企业版Windows可能需要先检查组策略设置我遇到过因为组策略限制导致功能启用失败的情况。2.3 设置默认WSL版本升级完虚拟机平台后我们需要将WSL默认版本设置为2wsl --set-default-version 2然后对已安装的Ubuntu发行版进行版本转换wsl --set-version Ubuntu-22.04 2这个转换过程可能需要几分钟时间取决于你的系统性能。我在一台16G内存的笔记本上大概花了3分钟完成转换。3. 安装CUDA Toolkit3.1 验证NVIDIA环境在正式开始安装前我们先确认WSL2已经可以正确识别NVIDIA GPU。在Ubuntu终端中运行nvidia-smi如果看到类似下面的输出说明GPU驱动已经正确安装----------------------------------------------------------------------------- | NVIDIA-SMI 525.85.12 Driver Version: 527.41 CUDA Version: 12.0 | |--------------------------------------------------------------------------- | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | || | 0 NVIDIA GeForce ... On | 00000000:01:00.0 On | N/A | | N/A 45C P8 10W / N/A | 200MiB / 6144MiB | 0% Default | | | | N/A | ---------------------------------------------------------------------------如果遇到command not found错误说明Windows端的NVIDIA驱动没有正确安装。这时需要去NVIDIA官网下载最新驱动我推荐使用Studio驱动而不是Game Ready驱动因为前者对开发工具的支持更稳定。3.2 安装CUDA Toolkit现在我们可以开始安装CUDA Toolkit了。目前最新稳定版本是12.3以下是具体安装步骤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-3这个过程会根据你的网络情况花费10-30分钟不等。我在安装时遇到过一个常见问题由于Ubuntu默认的软件源在国外下载速度很慢。解决方法是在运行apt-get update前先更换为国内镜像源。安装完成后建议运行一下简单的测试/usr/local/cuda-12.3/extras/demo_suite/deviceQuery如果看到Result PASS的输出说明CUDA已经正确安装。我在第一次安装时因为没有安装完整的demo_suite导致这个测试无法运行后来发现需要在安装时加上cuda-demo-suite-12-3这个包。4. 环境配置与验证4.1 配置环境变量为了让系统能够找到CUDA的相关命令和库文件我们需要配置环境变量。编辑~/.bashrc文件vi ~/.bashrc在文件末尾添加以下内容根据你的CUDA版本调整路径export PATH/usr/local/cuda-12.3/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda-12.3/lib64:$LD_LIBRARY_PATH保存后执行source ~/.bashrc这里有个细节需要注意如果你同时安装了多个CUDA版本可以通过修改.bashrc文件来快速切换。我通常会创建一个alias来管理不同版本alias cuda11export PATH/usr/local/cuda-11.8/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH alias cuda12export PATH/usr/local/cuda-12.3/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda-12.3/lib64:$LD_LIBRARY_PATH4.2 验证安装最后我们来验证CUDA是否安装成功。运行nvcc -V应该能看到类似输出nvcc: NVIDIA (R) Cuda compiler release 12.3, V12.3.52 Build cuda_12.3.r12.3/compiler.32688072_0为了进一步验证CUDA的运行能力我们可以编译运行一个简单的CUDA样例cd /usr/local/cuda-12.3/samples/1_Utilities/deviceQuery make ./deviceQuery如果看到设备信息和Result PASS恭喜你CUDA环境已经完全配置好了。我在测试阶段遇到过编译错误后来发现是因为没有安装g通过sudo apt install g解决了问题。5. 常见问题解决5.1 CUDA版本兼容性问题在实际项目中不同框架对CUDA版本的要求可能不同。比如TensorFlow 2.10需要CUDA 11.2而PyTorch最新版可能需要CUDA 11.7。我的建议是使用conda创建虚拟环境并在每个环境中安装对应的CUDA工具包conda create -n tf210 python3.8 conda activate tf210 conda install cudatoolkit11.2 cudnn8.1这样可以在不同项目间灵活切换而不会影响系统级的CUDA安装。5.2 内存不足问题WSL2默认会限制内存使用量。如果你在训练模型时遇到内存不足的问题可以在Windows用户目录下创建或修改.wslconfig文件[wsl2] memory16GB swap8GB processors8然后重启WSL实例wsl --shutdown这个配置将WSL2的内存限制提高到16GB交换空间8GB并使用8个CPU核心。根据你的硬件配置适当调整这些值。5.3 GPU不可见问题有时候即使正确安装了驱动nvidia-smi仍然显示No devices were found。这种情况通常有几个原因Windows端的NVIDIA驱动没有正确安装WSL2版本过旧系统BIOS中的虚拟化功能未开启我的建议是按照以下步骤排查在Windows中运行dxdiag检查显示选项卡中的驱动信息确保BIOS中开启了VT-x/AMD-V虚拟化支持更新WSL2内核到最新版本6. 性能优化技巧经过多次测试和调优我总结出几个提升WSL2 CUDA性能的小技巧数据存储位置将训练数据放在WSL2文件系统中而不是Windows挂载的/mnt目录下。我做过对比测试前者IO性能能提升3-5倍。内存分配策略在Python脚本开始处添加以下代码可以优化CUDA内存分配import torch torch.backends.cudnn.benchmark True批处理大小调整根据GPU内存大小合理设置batch size。我的经验法则是先用大batch size尝试遇到OOM错误后逐步减半直到找到稳定运行的尺寸。混合精度训练使用AMP自动混合精度可以显著减少显存占用并提升训练速度。以PyTorch为例scaler torch.cuda.amp.GradScaler() with torch.cuda.amp.autocast(): outputs model(inputs) loss criterion(outputs, labels) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update()在实际项目中这些优化技巧帮助我将训练时间从原来的8小时缩短到了3小时效果非常明显。

更多文章