很多人第一次在 Ubuntu 上配 PyTorch 环境最容易卡住的往往不是 PyTorch 安装命令本身而是前面那一长串环境准备Ubuntu 装哪个版本、显卡驱动到底要不要装、Anaconda 装完为什么 python 命令没反应、VSCode 里明明装了 Python 插件却提示找不到解释器……每一步单独拎出来都不难串在一起就变成了劝退现场。这篇我按自己实际配环境的顺序把 Ubuntu VSCode Anaconda PyTorch 从零到能用串成一条完整链路。所有命令我都给到可以直接复制执行的程度同时会把“为什么这么选”写清楚免得你只抄到了命令下次换个环境又懵。适合三类人刚在虚拟机里装上 Ubuntu 的小白、在 Windows 能跑但换到 Linux 就各种报错的人、以及想彻底重装一套干净 Python 开发环境的老手。1. 开局先解决版本选型Ubuntu、显卡与安装方式的三角决策很多人一上来就闷头装结果装到第三步发现显卡驱动不兼容、Ubuntu 版本选错了、虚拟机和双系统选错了全盘推倒重来。所以先把这三个问题定下来后面就是流水线操作。1.1 Ubuntu 版本怎么挑不是越新越好Ubuntu 的版本分 LTS长期支持版和普通版。普通版半年一更支持周期短部分软件源和驱动适配往往滞后LTS 版本支持周期非常长软件生态最稳是绝大多数开发者的默认选择。当前阶段最推荐的就是 22.04 LTS 和 24.04 LTS。我自己是用 22.04 更多一些原因是这个版本的用户基数大你遇到的所有坑几乎都有人踩过并且留下了解决方案搜问题一搜一个准。24.04 在新硬件上表现得也不错但它对内核和驱动的要求更高如果你用的是近两年的新机器倒也可以直接上 24.04。一句话结论选 LTS别追新。如果你不确定选哪个直接 22.04。1.2 GPU 方案先确认有没有 NVIDIA 显卡决定了你后面所有的命令这一步经常被忽略但它直接决定你 PyTorch 装 CPU 版还是 GPU 版也决定你要不要折腾驱动。打开机器确认一下如果你有 NVIDIA 独立显卡比如 RTX 3060、4060 等那可以走 GPU 加速路线后续需要装 NVIDIA 驱动、需要选对 CUDA 版本如果你用的是核显、A 卡或者单纯只是学习用那一律装 CPU 版 PyTorch省掉驱动环节能少踩一半的坑。新手最容易误解的一件事系统里不装 CUDA Toolkit照样能用 GPU 版 PyTorch。因为 pip 安装的 torch 会自带一套 CUDA 运行时你真正需要关心的是显卡驱动够不够新、能不能支持对应版本。这个点后面第 5 章会展开。1.3 虚拟机、双系统还是 WSL三套方案各有什么代价虚拟机VMware / VirtualBox最推荐新手完全不碰现有系统装坏了直接删掉重建镜像。代价是有轻微性能损耗GPU 直通配置麻烦所以虚拟机方案一般就走 CPU 版 PyTorch用来学语法、跑小 demo 完全够用。双系统如果你是要正经做深度学习实验靠算力出结果那就必须双系统这样显卡驱动能直接用GPU 加速没有中间层损耗。代价是安装时要注意分区有一定引导风险。WSLWindows 下也能用的 Linux 子系统GPU 支持在近一两年做得很不错不少人在里面配好了 CUDA 环境。但它的网络和 systemd 机制和原生 Ubuntu 有差异偶尔会遇到奇怪的权限问题我不建议纯新手第一套环境就选它。我个人的务实建议如果是入门学着玩先在虚拟机里把整条链路配通等确定要用 GPU 训练了再装双系统届时环境重建也就半小时的事。2. 从零装 Ubuntu虚拟机与双系统的实操要点以及装后必做的三件事系统层面的准备工作比较琐碎但我见过太多人卡在这一步虚拟机装完没网、双系统装完进不去 Windows、驱动装完黑屏。所以这部分我按方案分开讲。2.1 虚拟机方案半小时建好一套可随意折腾的 Ubuntu我用 VMware Workstation 举例VirtualBox 同理操作大同小异。镜像下载去 Ubuntu 官网下载 22.04 的 desktop 版 ISO 文件。新建虚拟机选择“典型”安装稍后安装操作系统选 Ubuntu 64 位。分配资源内存建议 8 GB 起步至少 4 GB处理器给 2 核以上磁盘 60 GB。如果你的硬盘空间充裕直接给 80 GB 也不亏后面装 Anaconda、PyTorch、数据集缓存都要占空间。启动后进入安装界面语言选中文简体安装类型选“清除整个磁盘并安装 Ubuntu”这一步是在虚拟磁盘内操作不影响你真实电脑的文件可以放心选。创建用户名和密码等待安装完成重启即可。虚拟机里的 Ubuntu 界面分辨率如果太小安装 VMware Tools / open-vm-tools 后重启就好了命令如下sudo apt update sudo apt install -y open-vm-tools open-vm-tools-desktop sudo reboot2.2 双系统方案分区给多大引导怎么处理如果你决定双系统安装前务必先备份 Windows 里的重要资料这一步马虎不得。用 Rufus 或者 UltraISO 把 Ubuntu ISO 写入 U 盘制作启动盘。Windows 里先压缩出一个空闲分区右键“此电脑” - 管理 - 磁盘管理 - 压缩卷至少腾出 100 GB。U 盘启动进入 Ubuntu 安装界面选择“与 Windows 共存”或者“其他选项”手动分区。手动分区时建议这样分/boot1 GBext4swap如果你内存是 16 GB给 8 GB 就够了/剩余所有空间ext4安装完成后会进入 GRUB 引导界面可以切换进 Ubuntu 或 Windows。如果引导丢失用 Boot Repair 工具修复即可记住这个关键词真遇到了再去搜具体流程。2.3 装完系统立刻做的三件事换源、更新、装驱动这三件事的顺序不能乱尤其是第一件否则下载速度会怀疑人生。先把 apt 源换成国内镜像。以清华源为例编辑源列表文件sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i s/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g /etc/apt/sources.list sudo apt update sudo apt upgrade -y然后安装常用基础工具sudo apt install -y build-essential git curl wget net-tools接着处理显卡驱动。有 NVIDIA 显卡的朋友先看系统推荐哪个驱动版本ubuntu-drivers devices然后执行自动安装sudo ubuntu-drivers autoinstall这里有个重要提示不建议去 NVIDIA 官网手动下载 .run 驱动包。手动装驱动的坑非常多代码签名、内核模块编译、Secure Boot 都可能出问题而ubuntu-drivers autoinstall会从源里安装最适合的驱动省心得多。装完驱动后重启执行nvidia-smi能看到显卡型号和驱动版本就说明成功了。如果你还需要中文输入法Ubuntu 自带的“智能拼音”基本够用。路径是设置 - 系统 - 区域与语言 - 输入源添加“汉语智能拼音”。用不惯的话去搜狗输入法官网下载 Linux 版按它给出的安装文档装也不难只有一点要注意搜狗输入法依赖 fcitx安装完后要重启会话才生效。3. VSCode 安装、插件搭配与 Python 解释器选择系统准备好了接下来配编辑器。VSCode 本身是轻量编辑器真正的灵魂在插件配置以及“你的解释器到底指向哪个 Python”。3.1 用 .deb 包安装一条命令解决依赖问题去 VSCode 官网下载 Linux 版的.deb安装包比如code_1.9x.0_amd64.deb然后在下载目录执行sudo dpkg -i code_1.9x.0_amd64.deb如果这一条命令因为缺少依赖报错就改用sudo apt install -f或者直接一步到位sudo apt install ./code_1.9x.0_amd64.deb我用第二种方式最多apt会自动拉取依赖几乎不会失败。安装完成后执行code --version如果能输出版本号就说明安装成功。如果你想用中文界面装完插件后按CtrlShiftP输入Configure Display Language安装“Chinese (Simplified) Language Pack”然后重启即可。3.2 必装插件清单Python、Pylance、Jupyter 三件套VSCode 插件的选择可以很杂但对这套环境来说下面的组合最实用Python微软官方插件提供代码补全、调试、运行支持。Pylance配合 Python 插件做类型检查和智能提示装完会作为 Python 插件的语言服务自动启用。Jupyter如果你想在 .ipynb 里跑 PyTorch 代码这个必须装普通 .py 脚本则不强制。Remote-SSH如果后续要把代码放到服务器上跑这个插件能把 VSCode 变成远程开发前端体验非常好。安装方式很简单插件市场里搜名字点 Install 就行。装完后在code --list-extensions里能看到已安装的插件方便排查问题。3.3 把 Python 解释器指到 Anaconda 虚拟环境这是 VSCode 里最关键的步骤。很多新手打开一个 .py 文件右下角显示的 Python 版本还是系统自带的/usr/bin/python3运行代码时 import torch 直接 ModuleNotFoundError还以为 PyTorch 没装好其实是指错了解释器。等第 4 章把 conda 环境和 PyTorch 都装好之后回到 VSCode按CtrlShiftP输入Python: Select Interpreter选择路径为/home/你的用户名/anaconda3/envs/pytorch/bin/python的那个解释器。之后再运行代码所有包都会从虚拟环境里加载。如果列表里没出现这个解释器可以点击“Enter interpreter path”手动填路径。一个真实经验改完解释器后最好关掉当前终端窗口重新开一个否则终端会话里的环境变量没有刷新依然会调到旧环境。4. Anaconda 安装、换源加速与虚拟环境创建Anaconda 是整套环境的“环境管理器”它的作用不止是装包还能让你同时维护多套不同版本的 Python 和依赖互不污染。我用它管 PyTorch 环境已经很多年踩过的坑主要集中在环境变量和源配置上。4.1 下载安装脚本并一键安装先去清华镜像站或者 Anaconda 官网页面找到最新的 Linux 安装脚本文件名一般是Anaconda3-2024.10-1-Linux-x86_64.sh这类格式。下载后执行bash Anaconda3-2024.10-1-Linux-x86_64.sh安装过程中会让你看协议、输 yes然后选择一个安装路径默认是$HOME/anaconda3我建议就用默认路径不要改后续配置省心。安装结束时它会问“Do you wish the installer to initialize Anaconda3?”选 yes这样安装器会在.bashrc里自动写入 conda 初始化配置。安装完成后执行source ~/.bashrc conda --version如果出现类似conda 24.x.x的版本号就说明安装成功。这一步失败通常是新开终端没生效直接新开一个终端就可以。4.2 环境变量原理为什么不能直接照抄网上的 export网上很多教程会教“手动把 Anaconda 的 bin 目录加到 PATH 里”比如在.bashrc里写export PATH/home/xxx/anaconda3/bin:$PATH这个方法不是不行但容易和 conda 自身的初始化逻辑冲突。更稳妥的做法是使用官方初始化命令conda init bash它会自动把下面这一段写进.bashrc# conda initialize # !! Contents within this block are managed by the conda init !! __conda_setup$(/home/xxx/anaconda3/bin/conda shell.bash hook 2 /dev/null) if [ $? -eq 0 ]; then eval $__conda_setup else if [ -f /home/xxx/anaconda3/etc/profile.d/conda.sh ]; then . /home/xxx/anaconda3/etc/profile.d/conda.sh else export PATH/home/xxx/anaconda3/bin:$PATH fi fi unset __conda_setup # conda initialize 这段逻辑的核心作用是每次新开终端时自动激活 conda 的 base 环境同时保证你手动装的工具不会因为 PATH 顺序问题被覆盖。理解这一点很重要——很多“为什么我明明装了 conda 但 vim、git 还是找不到”的问题根源就是 PATH 顺序被打乱了。4.3 配置国内镜像源让 conda 和 pip 都提速conda 默认源在国外下载包时经常几十 KB/s换源是必做项。在终端执行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之后可以查看生成的.condarc文件确认cat ~/.condarcpip 同样建议换源注意到这是 pip 的源配置不是 condapip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple这么一配后面装 torch、numpy 之类的包都是几 MB/s 的速度。4.4 创建虚拟环境并按需指定 Python 版本Aconda 里最常用的虚拟环境创建命令是conda create -n pytorch python3.10 -y这里-n pytorch是给环境命名你可以叫任何名字只要后续能对上就行python3.10指定的是环境内 Python 版本。为什么不直接用 base 环境因为 base 很容易被各种安装搞乱万一弄坏了整套 Anaconda 都得重装。而虚拟环境坏了删掉重建一条命令的事。创建完成后conda activate pytorch命令行的开头会出现(pytorch)前缀就说明已经进入虚拟环境了。在这个环境里你敲python用的是环境内的解释器和系统 Python 完全隔离。至此Anaconda 这一大块就通了。5. PyTorch 安装命令的选择逻辑CPU 版、GPU 版、CUDA 版本配套到这一步你开始接触 PyTorch 安装也是很多新手最容易下错命令的地方。这一章我给你一套判断方法而不是只扔一条命令。5.1 先看显卡驱动再决定 CUDA 版本执行这条命令nvidia-smi输出右上角有一行CUDA Version: 12.4之类的信息。请注意这个数字代表“你的驱动最高支持 CUDA 12.4”不代表系统装了 CUDA 12.4。PyTorch 通过 pip 安装时会自动捆绑对应 CUDA 版本的运行时库所以你完全不需要手动安装 CUDA Toolkit。选择逻辑很简单驱动输出的 CUDA 版本大于等于 PyTorch 要求的版本就能用。目前 PyTorch 官方提供的常见版本有cu118、cu121、cu124等分别对应 CUDA 11.8、12.1、12.4。老一些的机器选cu118或cu121很稳妥近两年的驱动选cu124或更高就行。如果你的机器没有 NVIDIA 显卡直接跳到 5.2 的 CPU 安装命令。5.2 CPU 版安装命令Linux 下最省心的选择CPU 版在无显卡机器上完全够用安装命令也最简单pip install torch torchvision torchaudio由于第 4 章已经给 pip 配好了清华源这里会自动从国内源下载速度很快。安装完验证一下python -c import torch; print(torch.__version__)能输出2.x.x这种版本号即为成功。此时torch.cuda.is_available()会返回 False这是正常的因为你没走 GPU 路线。5.3 GPU 版安装命令与一条额外注意GPU 版需要从 PyTorch 官方源拉取带 CUDA 依赖的 wheel 包。以 CUDA 12.4 为例pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124下载体积较大链路从国内到国外速度可能不太理想耐心等就行。装完同样验证python -c import torch; print(torch.__version__, torch.cuda.is_available())第二项如果输出True说明 CUDA 后端可用。再跑一句python -c import torch; print(torch.cuda.get_device_name(0))能看到你的显卡型号就算彻底打通了。这里想特别提醒一个容易混淆的点如果你用conda install pytorch来装conda 在 Linux 上经常解析出带 CPU 版的包或者和 system 的库产生冲突。所以现在社区主流做法是环境用 conda 管包用 pip 装。我踩过这个坑之后再也没用 conda 装过 PyTorch。5.4 常见报错GLIBCXX 版本错误、libgomp 打不开两种最常见的安装后报错先给你打个预防针。第一种运行import torch时报libgomp.so.1: cannot open shared object file。一般是环境里的 GCC 版本和 PyTorch 预编译库不匹配解决办法是在当前虚拟环境里更新库conda install libgcc -y第二种报GLIBCXX_3.4.x not found。多半是 conda 环境内libstdc太旧同样在环境里更新conda install -c conda-forge libstdcxx-ng -y这类“环境和预编译包版本不一致”的问题在处理 PyTorch 这类重依赖库时很常见以后遇到别慌先看报错里缺的是哪个.so文件再去对应更新环境里的基础库。6. 跑通第一个训练脚本用最小案例验证 CPU 和 GPU 链路是否都正常环境配好不跑点真东西总感觉不踏实。这一章用一个最小的线性回归训练脚本把整条链路完整验证一遍。6.1 从 0 到 1 的最小训练脚本在 VSCode 里新建test_pytorch.py写入import torch import torch.nn as nn # 自动识别设备有 GPU 用 GPU没有就用 CPU device torch.device(cuda if torch.cuda.is_available() else cpu) print(Using device:, device) torch.manual_seed(42) # 构造一个简单的线性关系 y 2x 1 x torch.linspace(-1, 1, 100).reshape(-1, 1) y 2 * x 1 model nn.Linear(1, 1).to(device) loss_fn nn.MSELoss() optimizer torch.optim.SGD(model.parameters(), lr0.1) for epoch in range(300): pred model(x.to(device)) loss loss_fn(pred, y.to(device)) optimizer.zero_grad() loss.backward() optimizer.step() if (epoch 1) % 50 0: print(fepoch {epoch 1:3d}, loss: {loss.item():.6f}) print(训练完成模型参数, model.weight.item(), model.bias.item())这段代码很小但覆盖了数据构造、模型创建、设备迁移、梯度回传、优化器更新这几个 PyTorch 核心环节。只要它顺利跑完就说明你的 Python 环境、Anaconda 环境、PyTorch 包、VSCode 解释器全都通了。6.2 CPU 与 GPU 的首次运行体验对比在 CPU 机器上运行输出大约长这样Using device: cpu epoch 50, loss: 0.001234 epoch 100, loss: 0.000345 ...在 GPU 机器上是Using device: cuda epoch 50, loss: 0.001234 ...注意观察 loss 是否在逐渐下降如果 loss 纹丝不动优先检查数据是否需要.to(device)。新手最容易漏的一步就是模型挪到 GPU 了输入数据还在 CPU 上一运行就报张量设备不一致的错误。我早期也栽过后来养成习惯了凡是出现 Device mismatch 的报错先看两端在不在同一个设备。跑通之后你还可以在 VSCode 里试一下断点调试在loss.backward()那一行打一个断点按 F5能停在断点上说明调试功能也正常。这套环境到这里已经算真正可用了。7. 保姆级教程的拦路虎PATH 写错、SSH 失联、conda 卡顿的排查链路环境配完不代表万事大吉接下来你大概率会遇到几个高发问题。我把排查链路写给你以后遇到同类问题可以照着操作。7.1 手滑把 PATH 写坏连 ls 都 command not found有次我在.bashrc里想加一个新工具路径结果不小心写成了export PATH/home/xxx/some_tool/bin注意我漏了$PATH直接把原来的 PATH 覆盖了。再开终端bash 找不到ls、vim这些基础命令瞬间进入半瘫痪状态。修复办法是用绝对路径打开配置文件。先找到系统自带的编辑器完整路径比如/usr/bin/vim ~/.bashrc把错误的那一行改回来export PATH/home/xxx/some_tool/bin:$PATH然后执行source ~/.bashrc如果.bashrc里问题太严重直接删掉出问题的行或者从备份恢复cp ~/.bashrc.bak ~/.bashrc这件事发生在你身上后你要记住两条规矩一是export PATH写新路径时永远带:$PATH二是改.bashrc、.profile之前先备份。很多时候恢复比修复还重要。7.2 SSH 连不上从本地到远程的服务排查链路把 Ubuntu 当开发服务器用或者用宿主机 SSH 连虚拟机时最常见的就是连不上。排查顺序应该是确认服务端有没有装 SSH 服务sudo apt install -y openssh-server sudo systemctl status ssh如果状态不是running先启动sudo systemctl start ssh sudo systemctl enable ssh确认本机能不能连自己ssh 你的用户名localhost本机能连说明服务端正常问题出在网络层。查看防火墙状态sudo ufw status如果ufw是 active 的需要放行 22 端口sudo ufw allow ssh检查虚拟机网卡虚拟机如果是 NAT 模式宿主机一般可以直接通过 IP 访问如果是桥接模式确保和宿主机在同一个网段。用ip addr查看当前 IP然后用该 IP 在宿主机里执行ssh测试。整个链路本质上是“服务端进程 - 本机回环 - 防火墙 - 网卡网络”四层按这个顺序查基本不会漏。7.3 conda 创建环境时卡住不动根源往往在源如果你配置了官方源创建环境时经常会卡在Solving environment阶段或者几十 KB/s 慢慢爬。换源是第一解法前面 4.3 节已经写过。有时换完源还卡可能是 conda 包缓存里的元数据过期了执行一下conda clean -i -y旧版 conda 的依赖解析算法确实比较慢如果项目依赖特别多可以换成 mamba 来解决它和 conda 逻辑完全兼容但解析速度能快好几倍pip install mamba mamba create -n pytorch python3.10 -y日常管理用 mamba命令和 conda 几乎一模一样这就够了。7.4 关于这套环境的运维习惯最后说几句实在话环境配好只是开始维护环境才是持续的事。我自己的习惯是每个项目都单独建一个 conda 环境绝不共用环境能跑通之后立刻导出配置留底conda env export environment.yml下次换机器恢复环境conda env create -f environment.ymlAnaconda 和 PyTorch 这类重依赖工具新版本迭代很快但只要环境隔离做得好就算折腾坏了也只是删掉重建不会影响其他项目。我后来重装系统、换新电脑都是靠这套流程半小时内把环境恢复出来再也没有手忙脚乱过。