Windows 11 上 WSL2 + Ubuntu 24.04 + PyCharm 2024.1 深度学习环境搭建保姆级教程
Windows 11 上 WSL2 + Ubuntu 24.04 + PyCharm 2024.1 深度学习环境搭建保姆级教程
如果你是一位长期在 Windows 上工作的开发者,最近被 AI 和深度学习的浪潮吸引,想要亲手搭建一个顺手的本地实验环境,那么这篇文章就是为你准备的。我理解那种感觉:既不想放弃 Windows 的便利性,又渴望一个原生的、高效的 Linux 开发体验,尤其是在处理 Python 科学计算和 GPU 加速时。过去,我们可能需要在虚拟机、双系统或者直接租用云服务器之间纠结,但现在,Windows Subsystem for Linux 2 (WSL2) 的出现,让这一切变得前所未有的丝滑。结合最新的 Ubuntu 24.04 LTS 和 PyCharm 2024.1 专业版的远程开发能力,我们可以在 Windows 11 上构建一个近乎完美的深度学习工作站。这篇文章不会只是命令的堆砌,而是会分享我在多次搭建和踩坑过程中总结出的最佳实践,确保你从零开始,一路畅通。
1. 基石:WSL2 与 Ubuntu 24.04 的安装与精调
万事开头难,但一个好的开始是成功的一半。WSL2 已经非常成熟,安装过程基本是“下一步”的艺术,但其中一些细节配置,却能极大影响后续的使用体验。我们的目标不仅是“能用”,更是“好用”。
1.1 启用 WSL2 与安装 Ubuntu
首先,确保你的 Windows 11 是最新版本(建议 22H2 或更高)。虚拟化功能通常是默认开启的,但为了保险起见,可以打开任务管理器,在“性能”标签页查看“虚拟化”是否已启用。如果显示“已禁用”,则需要进入电脑的 BIOS/UEFI 设置中开启(选项通常名为 Intel VT-x、AMD-V 或 SVM Mode)。
接下来,我们用最现代的方式开启 WSL。以管理员身份打开 PowerShell 或 Windows 终端,执行以下命令:
wsl --install
这个简单的命令会一次性完成所有必要组件的安装,包括适用于 Linux 的 Windows 子系统、虚拟机平台,并默认安装 Ubuntu 发行版。安装完成后,系统会提示你重启计算机。
重启后,一个 Ubuntu 终端窗口会自动弹出,要求你设置新的 UNIX 用户名和密码。这个密码在后续使用 sudo 命令时会经常用到,请务必记住。
此时,基础的 WSL2 环境已经就绪。我们可以通过以下命令验证安装的版本和状态:
wsl --list --verbose
输出应该类似这样:
NAME STATE VERSION
* Ubuntu Running 2
确保 VERSION 是 2,这代表你正在使用性能更好的 WSL2。
1.2 基础系统优化与文件系统互通
新安装的 Ubuntu 第一件事就是更新软件源和升级现有包。在 Ubuntu 终端中执行:
sudo apt update && sudo apt upgrade -y
WSL2 的一个核心优势是与 Windows 文件系统的无缝互通。你可以在 Linux 中通过 /mnt/c/、/mnt/d/ 等路径直接访问 Windows 的 C 盘、D 盘。反之,在 Windows 的文件资源管理器中,地址栏输入 \\wsl$\Ubuntu 或 \\wsl.localhost\Ubuntu,就能直接访问 Ubuntu 的家目录(/home/你的用户名)。
注意:虽然可以跨系统操作文件,但强烈建议将项目代码和数据放在 WSL 的文件系统内(即
/home/username/下)。在 Linux 原生文件系统上运行性能最佳,尤其是涉及大量小文件读写时,能避免 NTFS 到 ext4 转换的性能损耗。
为了方便,我习惯在 Windows 桌面上创建一个指向 WSL 项目目录的快捷方式。你也可以在 PowerShell 中通过 wsl ~ 命令快速跳转到 WSL 用户主目录。
2. 构建 Python 宇宙:Conda 环境与深度学习核心库
在 Linux 世界里管理 Python 环境和包,conda 依然是科学计算领域的首选,它不仅能管理 Python 包,还能处理二进制依赖(如 CUDA 库)。我们将使用更轻量、更快的 Miniconda 来代替完整的 Anaconda。
2.1 安装与配置 Miniconda
首先,从清华大学开源软件镜像站下载 Miniconda 安装脚本,速度更快:
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh
然后运行安装脚本。安装过程中,当询问“Do you wish the installer to initialize Miniconda3?”时,建议选择 yes,这样它会自动帮你配置好 shell 环境。
bash ~/miniconda.sh
安装完成后,关闭并重新打开终端,或者执行 source ~/.bashrc 来激活 conda 命令。你应该能在命令提示符前看到 (base) 环境标识。
为了获得更快的下载速度,我们配置 conda 的国内镜像源:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --set show_channel_urls yes
2.2 创建专属的深度学习环境
永远不要在 base 环境里直接安装项目包。为你的深度学习项目创建一个独立、纯净的环境是专业性的体现。这里我们创建一个名为 dl_env 的 Python 3.10 环境:
conda create -n dl_env python=3.10 -y
conda activate dl_env
接下来安装深度学习的基础三件套:numpy, pandas, matplotlib。使用 conda 安装可以确保这些科学计算库与其底层的数学库(如 MKL)完美兼容。
conda install numpy pandas matplotlib scikit-learn jupyter -y
2.3 安装 PyTorch 与 TensorFlow
这是最关键的一步。我们需要根据 WSL2 中可用的 GPU 驱动情况来选择合适的版本。WSL2 可以直接调用 Windows 主机上安装的 NVIDIA 显卡驱动,无需在 Linux 内单独安装驱动。
首先,在 WSL2 的 Ubuntu 终端里检查 GPU 是否可见:
nvidia-smi
如果命令成功执行并显示出显卡信息(如 GeForce RTX 4070),恭喜你,GPU 直通已经就绪。如果报错,请回到 Windows 主机,确保已通过 GeForce Experience 或 NVIDIA 官网安装了最新的 Game Ready 或 Studio 驱动程序。
假设你的显卡是较新的 NVIDIA RTX 30/40 系列,CUDA 12.1 是一个兼容性很好的选择。访问 PyTorch 官网,获取最新的安装命令。例如,在撰写本文时,命令可能如下:
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
对于 TensorFlow,情况稍微复杂一些。TensorFlow 2.x 对 CUDA/cuDNN 版本有严格匹配要求。一个相对省心的方案是使用 conda 来安装,因为它会自动处理 CUDA 依赖。在激活的 dl_env 环境中:
conda install tensorflow-gpu -c conda-forge
安装完成后,分别启动 Python 解释器进行验证:
# 验证 PyTorch
import torch
print(f"PyTorch 版本: {torch.__version__}")
print(f"CUDA 是否可用: {torch.cuda.is_available()}")
print(f"CUDA 版本: {torch.version.cuda}")
print(f"当前设备: {torch.cuda.get_device_name(0)}")
# 验证 TensorFlow
import tensorflow as tf
print(f"\nTensorFlow 版本: {tf.__version__}")
print(f"GPU 列表: {tf.config.list_physical_devices('GPU')}")
如果两段代码都能正确识别到 GPU,那么核心的深度学习框架环境就搭建成功了。
3. 打通任督二脉:配置 WSL2 的 CUDA 与开发工具
虽然通过 conda 安装的 TensorFlow 已经包含了 CUDA 运行时,但有时我们可能需要更完整的 CUDA 工具包(如 nvcc 编译器)或其他深度优化的库。此外,一个高效的开发环境离不开得心应手的工具。
3.1 (可选)安装完整 CUDA Toolkit
如果你的项目需要从源码编译 CUDA 扩展,或者使用一些依赖特定 CUDA 工具的命令行程序,可以安装 NVIDIA 官方为 WSL2 提供的 CUDA Toolkit。
访问 NVIDIA 官网的 CUDA Toolkit 下载页面,选择:
- Operating System: Linux
- Architecture: x86_64
- Distribution: WSL-Ubuntu
- Version: 2.0 (对应 WSL2)
- Installer Type: runfile (local)
按照网页上生成的指令安装。例如,对于 CUDA 12.1:
wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run
sudo sh cuda_12.1.0_530.30.02_linux.run
在安装过程中,当询问是否安装驱动时,一定要选择否,因为驱动由 Windows 主机提供。我们只安装工具包和样本。
安装后,将 CUDA 路径添加到环境变量中。编辑 ~/.bashrc 文件:
export PATH=/usr/local/cuda-12.1/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
3.2 配置高效的终端与 Shell
Windows 终端(Windows Terminal)是现代 Windows 开发的绝配。从 Microsoft Store 安装它,并将其设置为默认终端。你可以为 WSL 的 Ubuntu 配置文件设置漂亮的主题(如“One Half Dark”)、合适的字体(如“Cascadia Code PL”)和启动目录。
在 WSL 内部,我强烈推荐安装 zsh 和 oh-my-zsh 来获得更强大的 shell 体验,包括智能补全、语法高亮和丰富的主题。
sudo apt install zsh -y
sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# 安装插件
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
然后编辑 ~/.zshrc 文件,启用插件并更换主题(如 agnoster)。
4. 集成开发环境:PyCharm 2024.1 专业版的远程魔法
PyCharm 专业版对 WSL 和远程解释器的支持已经做到了开箱即用的级别。它能让你在熟悉的 Windows GUI 界面下,无缝地编辑、运行和调试位于 WSL 文件系统中的代码,并利用其中配置好的 Conda 环境和 GPU。
4.1 配置 WSL 解释器
- 打开或创建项目:在 PyCharm 中,打开你的项目文件夹。关键点在于,这个项目文件夹的路径必须是 WSL 路径(例如
\\wsl$\Ubuntu\home\yourname\projects\my_dl_project)。你可以在 Windows 文件资源管理器中通过访问\\wsl$\Ubuntu来定位,然后从 PyCharm 的“打开”对话框中选中它。 - 添加解释器:点击 PyCharm 右下角的“解释器”状态栏,或者通过
File -> Settings -> Project: xxx -> Python Interpreter打开设置。 - 选择 WSL:点击齿轮图标,选择“Add Interpreter... -> On WSL”。PyCharm 会自动检测到可用的 WSL 发行版(我们的 Ubuntu)。
- 定位 Python:在“Python interpreter path”栏,我们需要指向之前创建的 Conda 环境。路径通常是:
\\wsl$\Ubuntu\home\yourname\.conda\envs\dl_env\bin\python。你也可以点击“...”按钮,在打开的 WSL 文件浏览器中导航选择。 - 同步文件夹:确保“Sync folders”选项正确映射了你的项目目录。通常 PyCharm 会自动设置好。
点击“OK”后,PyCharm 会索引远程环境中的包,稍等片刻,你就能在“Python Interpreter”窗口中看到 torch, tensorflow 等所有已安装的包了。
4.2 实战:在 PyCharm 中运行和调试 GPU 代码
现在,让我们创建一个简单的测试脚本来验证整个工作流。在项目中新建一个 test_gpu.py 文件:
import torch
import tensorflow as tf
def test_pytorch():
print("=== PyTorch Test ===")
print(f"Version: {torch.__version__}")
print(f"CUDA Available: {torch.cuda.is_available()}")
if torch.cuda.is_available():
device = torch.device("cuda:0")
x = torch.randn(1000, 1000).to(device)
y = torch.randn(1000, 1000).to(device)
z = torch.mm(x, y) # 一个简单的矩阵乘法,在GPU上执行
print(f"Matrix multiplication on {torch.cuda.get_device_name(0)} successful!")
print(f"Result shape: {z.shape}")
print()
def test_tensorflow():
print("=== TensorFlow Test ===")
print(f"Version: {tf.__version__}")
gpus = tf.config.list_physical_devices('GPU')
print(f"GPUs Available: {gpus}")
if gpus:
try:
# 启用内存自增长,避免一次性占满
for gpu in gpus:
tf.config.experimental.set_memory_growth(gpu, True)
with tf.device('/GPU:0'):
a = tf.constant([[1.0, 2.0], [3.0, 4.0]])
b = tf.constant([[5.0, 6.0], [7.0, 8.0]])
c = tf.matmul(a, b)
print(f"Matrix multiplication on GPU successful!")
print(f"Result:\n{c.numpy()}")
except RuntimeError as e:
print(f"Error: {e}")
print()
if __name__ == "__main__":
test_pytorch()
test_tensorflow()
print("All tests passed! Environment is ready for deep learning.")
在 PyCharm 中,右键点击该文件,选择“Run ‘test_gpu’”。你将在 PyCharm 的“Run”工具窗口中看到输出,确认 PyTorch 和 TensorFlow 都能成功调用 GPU 进行计算。
调试同样简单。在代码行号旁点击设置断点,然后选择“Debug ‘test_gpu’”。你可以像调试本地代码一样,查看变量、单步执行,体验完全一致,但实际执行环境是隔离在 WSL 中的 Conda 环境。
4.3 高级技巧:终端、数据库与 Jupyter 集成
- 终端:PyCharm 内置的终端(Alt+F12)默认会启动 WSL 的 Bash,并且自动激活当前项目配置的 Conda 环境(
dl_env)。你可以在这里直接运行 shell 命令,无需切换窗口。 - 数据库工具:如果你的项目涉及数据库(如 PostgreSQL、MySQL),你可以在 WSL 中安装这些服务(
sudo apt install postgresql),然后在 PyCharm 的“Database”工具窗口中,通过 SSH 隧道(主机填localhost,端口默认)连接它们,进行可视化管理。 - Jupyter Notebook 集成:这是 PyCharm 的强项。你可以直接在
.ipynb文件中工作。PyCharm 会自动使用你配置的 WSL 解释器作为 Jupyter 内核。点击单元格左侧的运行按钮,代码会在 WSL 环境中执行,结果和图表直接内联显示在编辑器中,交互体验极佳。
5. 性能调优与日常维护指南
环境搭建好只是开始,让它持续稳定、高效地运行同样重要。这里有几个我实践中总结的要点。
5.1 WSL2 资源限制与配置
默认情况下,WSL2 会动态分配内存和 CPU。对于深度学习任务,我们可能希望给予它更多固定资源,避免与 Windows 前台应用争抢。在用户目录(C:\Users\<你的用户名>\)下创建或编辑 .wslconfig 文件:
[wsl2]
memory=16GB # 限制最大内存,根据你的物理内存调整(例如32GB物理内存,分配16-24GB给WSL2)
processors=8 # 分配可用的CPU核心数(例如12核,分配8-10个)
localhostForwarding=true
保存后,在 PowerShell 中执行 wsl --shutdown 关闭 WSL,然后重新打开 Ubuntu 终端,配置生效。你可以使用 free -h 和 nproc 命令来检查分配的资源。
5.2 环境备份与迁移
你的 Conda 环境是工作的核心。定期导出环境配置是个好习惯:
conda activate dl_env
conda env export > dl_env_backup.yaml
这份 yaml 文件记录了所有包的精确版本。要在新系统或为同事复现环境,只需:
conda env create -f dl_env_backup.yaml
对于整个 WSL 发行版,你也可以使用 wsl --export 和 --import 命令进行备份和迁移,但这会备份整个系统,体积较大。
5.3 常见问题与解决思路
- PyCharm 连接 WSL 解释器速度慢:首次索引可能会慢,后续会缓存。确保项目路径在 WSL 文件系统内,而非
/mnt/c/下。 - CUDA out of memory:这是深度学习的老朋友。在代码中使用
torch.cuda.empty_cache()及时清空缓存。调整模型批次大小(batch size)。使用nvidia-smi命令监控 GPU 内存使用情况,找出可能的内存泄漏。 - 包安装冲突:优先使用
conda install而不是pip install,因为 conda 能更好地解决依赖关系。如果必须用 pip,尽量在 conda 环境内使用,并避免与 conda 安装的包产生冲突。 - WSL2 磁盘空间占用过大:WSL2 的虚拟硬盘文件(
ext4.vhdx)不会自动收缩。可以定期在 PowerShell 中运行wsl --shutdown后,使用磁盘清理工具或optimize-vhd命令进行压缩。
最后,别忘了享受这个环境带来的便利。你可以在 Windows 上刷着网页,听着音乐,同时在 WSL 里训练一个模型,在 PyCharm 里优雅地调试代码。这种无缝切换的体验,正是现代开发者所需要的生产力融合。当你的第一个模型在本地 GPU 上成功跑起来时,那种成就感,就是折腾环境最好的回报。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)