很多刚开始接触 PyTorch 的同学,最先遇到的其实不是模型跑不通,而是环境装不上。打开教程,第一步让你装 Anaconda,第二步让你建虚拟环境,第三步装 CUDA 版 PyTorch,然后命令行报错一个接一个,最后连import torch这句代码长什么样都没见到。
这次我们直接把这个过程走完。目标是让一台电脑里同时存在两套 PyTorch 环境:一套 CPU 版,负责日常跑通代码、写实验、做调试;一套 GPU 版,负责真正的模型训练和推理。两者通过 Anaconda 的虚拟环境随时切换,互不干扰。再配合一个顺手能用的编辑器,把“装环境—写代码—跑训练—看结果”这条链路一次性拉通。
文章只讲能落地的事。每一条命令都能直接复制,每个步骤都给判断标准,装完哪一步、看到什么输出算成功,失败又该去哪里排查。不想在配环境上反复折腾的话,这篇可以直接收藏。
1. 核心能力速览
先给一张总表,搞清楚这套组合能做什么。
| 能力项 | 说明 |
|---|---|
| 核心工具 | Anaconda(Python 环境与包管理)、PyTorch(深度学习训练与推理框架)、编辑器(VS Code 或 PyCharm) |
| 目标结构 | 一台电脑同时具备 PyTorch CPU 版和 GPU 版两套独立环境 |
| 环境隔离方式 | conda 虚拟环境,不同项目使用不同 Python 版本与依赖包 |
| 支持平台 | Windows / Linux / macOS,按官方安装包选择对应版本 |
| 启动方式 | 命令行启动、Anaconda Navigator 图形界面启动、编辑器内直接切换解释器 |
| 是否支持接口 API | 环境搭好后可用 FastAPI、Flask 等自行封装推理服务,PyTorch 本身不限制 |
| 是否支持批量任务 | 支持。通过 PyTorch DataLoader 可完成批量训练、批量推理 |
| 适合读者 | 刚接触 PyTorch、被环境问题劝退、需要同时维护 CPU 与 GPU 环境的开发者 |
这里的核心思路不是只装一个 PyTorch,而是先理解“为什么要用 Anaconda 管环境”。下面逐步展开。
2. 适用场景与使用边界
这套方案适合以下场景。
第一类是本地学习与验证。你只是想跑通一个示例代码、看一下张量输出、测试某个模型结构能不能 forward,这时候不需要 GPU 参与。CPU 环境加载模型更快,也不会因为显存不够报错。
第二类是真实模型训练。进入训练阶段后,数据量变大、网络变深,CPU 算力明显不够。此时切换到 GPU 环境,通过 CUDA 调用显卡加速。两套环境并存,就是为了让“实验”和“训练”走不同的运行通道。
第三类是项目隔离。你同时做图像分类和自然语言处理,两个项目依赖的 torchvision、transformers 版本可能互相冲突。conda 虚拟环境可以为每个项目单独建一个空间,避免“装 A 库把 B 库搞坏”的连锁反应。
使用边界同样明确。Anaconda 解决的是 Python 包关系和运行环境问题,它不解决 CUDA 驱动版本与 PyTorch 不匹配的问题,也不解决模型本身不收敛、数据标注有误、显存容量不够的问题。简单说,环境工具只保证你能启动程序,不保证你的程序一定训练得好。
另外要提醒一点:在安装深度学习框架和后续处理训练数据、模型文件时,务必使用已获得授权的数据与模型。涉及人脸、声音、版权图像等内容时,要确认来源合法,不要在未授权的前提下批量处理或生成内容。
3. 环境准备与前置条件
安装之前,先花十分钟确认电脑现状,能省掉后面大量排错时间。
3.1 操作系统
Windows 建议使用 Windows 10/11 的 64 位版本。Linux 建议使用 Ubuntu 18.04 之后的发行版,服务器场景常用。macOS 也能装 Anaconda 和 CPU 版 PyTorch,但 GPU 支持受限,Apple Silicon 芯片需要参考 PyTorch 官方对 MPS 后端的支持情况。后续命令以 Windows 为例,Linux/macOS 的主要差异在于激活环境的命令,例如 Windows 用conda activate,Linux 同样支持,但部分终端需要先执行source ~/.bashrc。
3.2 显卡与 CUDA 驱动
想用 GPU 版 PyTorch,先看显卡。NVIDIA 显卡用户可以在命令行输入:
nvidia-smi如果命令能执行,说明驱动已装。输出里的CUDA Version是当前驱动支持的最高 CUDA 版本,例如显示CUDA Version: 12.x,说明驱动可以支持 11.x、12.x 等较新的 CUDA 运行时。注意,安装 PyTorch 时选择的 CUDA 版本,要和驱动兼容,不需要完全等于驱动显示的数字,通常选择不高于驱动支持最高版本的 CUDA 版本更稳妥。
如果命令报“不是内部或外部命令”,说明 NVIDIA 驱动未安装或未加入 PATH,需要先装驱动。
AMD 显卡、Intel 显卡的情况相对复杂,建议直接去 PyTorch 官方安装页查询对应指令,不要照搬 NVIDIA 的命令。
查看 Python 版本:
python --version新环境不必追求最新 Python,PyTorch 对高版本 Python 的适配存在滞后。更稳妥的选择是 Python 3.9 或 3.10,这也是目前大部分深度学习项目、第三方库兼容最好的区间。
3.3 磁盘空间
Anaconda 本体约 3 GB 到 5 GB,一个 PyTorch 虚拟环境大约需要 3 GB 到 8 GB 空间。如果还计划保存模型权重和数据集,建议预留至少 30 GB。磁盘不足时,安装到一半报错的情况很常见。
4. Anaconda 安装部署
Anaconda 的核心价值是环境管理。它自带的 conda 命令可以创建多个互相隔离的 Python 环境,每个环境有自己的 Python 版本和第三方库。这比直接在系统 Python 里pip install安全得多。
4.1 下载与安装
进入 Anaconda 官方网站下载页面,选择与操作系统匹配的版本。如果只想用 conda 管理环境、不要预装大量科学计算包,也可以选择 Miniconda,体积更小,安装更快。
安装时注意几点:
- 安装在纯英文路径下,不要包含中文目录。
- 安装过程中选择“为当前用户安装”,避免权限问题。
- 安装完成后,打开新的终端窗口输入
conda --version,正常会输出 conda 版本号。
如果conda命令无法识别,说明安装时没有加入 PATH。可以手动把 Anaconda 安装目录下的Scripts和根目录加入系统环境变量,也可以在开始菜单中重新打开 Anaconda Prompt 使用,后者会自动加载环境变量。
4.2 更换国内镜像源
国内网络环境下,从官方源下载 pytorch 这类大型包速度可能很慢。建议配置清华镜像源,加速 conda 和 pip 的下载。这里给出 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/pytorch/ conda config --set show_channel_urls yes配置完成后,执行:
conda clean -i刷新索引缓存。之后安装会优先从镜像源拉取。
pip 也可以配置镜像源。在用户目录下新建pip文件夹,写入pip.ini文件:
[global] index-url = https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple trusted-host = mirrors.tuna.tsinghua.edu.cn5. PyTorch 双版本环境搭建
这一节是核心。目标很明确:创建两个 conda 环境,一个装 CPU 版 PyTorch,一个装 GPU 版 PyTorch。
5.1 创建两个虚拟环境
打开 Anaconda Prompt 或系统终端,输入:
conda create -n torch-cpu python=3.10这里torch-cpu是环境名,python=3.10指定 Python 版本。等待 conda 分析依赖并下载基础包,输入y确认安装。
同理创建 GPU 环境:
conda create -n torch-gpu python=3.10创建完成后,可以通过:
conda env list查看当前已有环境。带星号的是当前激活的环境。
5.2 安装 CPU 版本 PyTorch
激活 CPU 环境:
conda activate torch-cpu确认当前环境:
python -V此时python指向torch-cpu环境下的解释器,而不是系统的 Python。
CPU 版 PyTorch 安装命令以 PyTorch 官网给出的命令为准。当前官网通常提供类似结构:
pip install torch torchvision torchaudio也可以使用 conda 安装。注意两点:第一,CPU 版不含 CUDA 相关库,安装包体积更小;第二,如果是在 Windows 上,建议优先使用 pip 安装官方预编译包,兼容性更好。
安装完成后,在 Python 中验证:
python进入交互式环境后输入:
import torch print(torch.__version__) print(torch.cuda.is_available())如果输出版本号并且torch.cuda.is_available()为False,这是正常的,因为 CPU 环境本来就不启用 CUDA。
5.3 安装 GPU 版本 PyTorch
退出当前 Python,执行:
conda deactivate激活 GPU 环境:
conda activate torch-gpu然后根据显卡驱动支持的 CUDA 版本,在 PyTorch 官网选择对应安装命令。例如驱动支持 CUDA 12.x 时,官网会给出类似命令:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121这里cu121表示 CUDA 12.1 的预编译版本。不同时代官网会提供不同的 CUDA 版本,例如 cu118、cu121、cu124 等。选择原则是:不要超过驱动支持的最高版本。
GPU 版安装包体积明显更大,等待时间取决于网速。安装完成后同样进入 Python 验证:
import torch print(torch.__version__) print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0))如果torch.cuda.is_available()输出为True,并且get_device_name能显示显卡型号,说明 GPU 环境可用。
5.4 双环境切换机制
双版本的核心优势是切换成本几乎为零。运行日常训练前:
conda activate torch-gpu调试 CPU 代码或模型结构时:
conda activate torch-cpu切换后,torch会对应不同环境的安装版本,互不干扰。也可以通过 Anaconda Navigator 图形界面切换,选中环境后点击“Open Terminal”,会自动进入该环境。
6. 编辑器配置与开发验证
环境配好之后,需要一个编辑器来写代码、跑脚本、看输出。这里给出 VS Code 和 PyCharm 两种常见配置方式,二选一即可。
6.1 VS Code 配置
VS Code 安装 Python 扩展后,按Ctrl+Shift+P,输入Python: Select Interpreter,可以看到当前所有 conda 环境。选择torch-gpu作为当前项目的解释器。
新建test.py:
import torch x = torch.tensor([1.0, 2.0, 3.0]) y = x * 2 print(y) print(f"CUDA available: {torch.cuda.is_available()}")在终端运行:
python test.py如果输出包含tensor([2., 4., 6.]),说明解释器选择正确、PyTorch 可以正常使用。
VS Code 的另一个优势是终端自动联动。打开 VS Code 内置终端时,它会自动激活当前选择的 conda 环境,省去手动conda activate的步骤。这个功能要在设置中确认“Python > Terminal: Activate Environment”处于开启状态。
6.2 PyCharm 配置
PyCharm 中新建项目,进入File -> Settings -> Project -> Python Interpreter,点击设置图标选择Add Interpreter -> Conda Environment,选择Existing environment并指定torch-gpu。
也可以直接在 PyCharm 新建一个 conda 环境,但既然我们已经创建好了两个环境,建议直接复用。
配置完成后,右下角状态栏会显示当前解释器路径。运行同一个测试脚本,看到torch输出即表示成功。
6.3 编辑器选择建议
VS Code 适合轻量编辑、快速跑脚本、配合 Jupyter Notebook 使用。PyCharm 适合大型项目、多人协作、断点调试。两者都不是必须的,但配置好一个编辑器,之后跑实验会顺畅很多。
如果不习惯这两个编辑器,也可以使用 Jupyter Notebook。在环境中执行:
conda activate torch-gpu pip install jupyter jupyter notebook它会在浏览器中打开交互式笔记本,适合逐步调试代码。
7. 功能测试与效果验证
环境搭好后必须有验证环节。下面给出一套从“环境信息”到“真实计算”的测试流程,照着做就能确认整条链路是否可用。
7.1 环境信息检查
运行以下脚本,打印依赖版本和计算设备信息:
import platform import torch print("Python 版本:", platform.python_version()) print("PyTorch 版本:", torch.__version__) print("能否使用 CUDA:", torch.cuda.is_available()) if torch.cuda.is_available(): print("显卡名称:", torch.cuda.get_device_name(0)) print("显存总量:", torch.cuda.get_device_properties(0).total_memory / 1024**3, "GB")输出中,CPU 环境下能否使用 CUDA应为False,GPU 环境下应为True。如果反了,说明解释器选择错误或安装版本不对。
7.2 GPU 计算验证
在 GPU 环境中执行:
import torch x = torch.randn(10000, 10000, device="cuda") y = torch.matmul(x, x) print("GPU 矩阵乘法完成,结果形状:", y.shape)这个脚本会在 GPU 上创建 1 万个 10000×10000 的随机矩阵并进行乘法。能顺利执行且不报显存错误,说明 CUDA 计算链路可用。
显存占用观察方式取决于操作系统。Windows 可以使用任务管理器中的“性能”标签查看 GPU 专用显存使用情况,也可以使用:
nvidia-smi命令观察进程占用的显存。显存占用受批次大小、输入尺寸影响,具体数值以实际运行脚本为准。此时观察 GPU 的利用率,如果从 0% 跳到较高值,说明确实在调用显卡计算。
7.3 简单模型训练测试
验证完整训练流程,可以写一个极简线性回归样例:
import torch import torch.nn as nn import torch.optim as optim model = nn.Linear(10, 1) loss_fn = nn.MSELoss() optimizer = optim.SGD(model.parameters(), lr=0.01) x = torch.randn(64, 10) y = torch.randn(64, 1) for step in range(100): optimizer.zero_grad() pred = model(x) loss = loss_fn(pred, y) loss.backward() optimizer.step() if step % 20 == 0: print(f"step {step}, loss: {loss.item():.6f}")能看到 loss 数值且能持续打印,说明“前向传播—反向传播—参数更新”这条链路没问题。
7.4 批量任务验证思路
实际训练时,我们需要对大量数据分批处理。PyTorch 用DataLoader实现批量加载:
from torch.utils.data import TensorDataset, DataLoader dataset = TensorDataset(torch.randn(1000, 10), torch.randn(1000, 1)) dataloader = DataLoader(dataset, batch_size=32, shuffle=True) for batch_idx, (data, target) in enumerate(dataloader): print(f"batch {batch_idx}: data shape {data.shape}, target shape {target.shape}")这段代码说明环境支持批量数据读取。后续接入自己的数据集时,只需要把TensorDataset替换为自定义 Dataset。
7.5 接口服务扩展
深度学习环境本身是一套 Python 运行空间,可以承载 Web 服务。比如使用 FastAPI 封装一个简单的推理接口:
from fastapi import FastAPI import torch app = FastAPI() model = torch.nn.Linear(10, 1) @app.post("/predict") def predict(data: list[float]): tensor = torch.tensor(data).reshape(1, -1) result = model(tensor).item() return {"prediction": result}这是一个示例,体现“环境搭好之后可以继续接 API 服务”的思路。实际项目中需要加载训练好的权重文件,并设计请求字段与异常处理。
8. 资源占用与性能观察
环境安装完毕后,系统会产生多种资源占用。了解它们能帮助你判断问题出在哪一层。
Anaconda 本身会常驻少量后台进程,但它不会一直占用大量 CPU。真正占用资源的是 Python 解释器和 PyTorch 计算。CPU 环境跑模型时,CPU 使用率会上升;GPU 环境跑模型时,显存和 GPU 利用率上升,CPU 使用率相对不高。
PyTorch 中影响性能的关键参数包括:batch_size、num_workers、输入分辨率和训练步数。num_workers控制 DataLoader 使用的子进程数量,加大它可以加快数据读取,但也会提升内存占用。显存不足时优先降低batch_size,而不是换显卡。
CPU 与 GPU 的差异主要体现在大规模矩阵计算上。CPU 版适合小批量测试和代码逻辑验证,GPU 版适合真正的训练任务。同一个模型,在 GPU 上训练一轮的速度通常远快于 CPU,但小模型、小数据量时差异不明显。
优化建议:
- 设置
torch.set_num_threads(4)限制 CPU 环境线程数,避免资源争抢。 - 在 GPU 环境中,优先使用
torch.cuda.amp混合精度训练。 - 使用
pin_memory=True与non_blocking=True优化数据搬运。 - 训练结束后及时调用
del variable并回收显存,必要时执行torch.cuda.empty_cache()。
显存不够时,也可以考虑使用 CPU 环境完成数据预处理,再切换到 GPU 环境训练模型。
9. 常见问题与排查方法
下面是这套环境搭建中最容易踩的坑,按“现象—原因—排查—解决”列出。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
conda命令无法识别 | 安装时未加入 PATH | 在终端输入where conda | 使用 Anaconda Prompt 或手动加入环境变量 |
| 安装包下载速度极慢 | 官方源网络延迟高 | 观察进度条卡住的位置 | 配置清华镜像源 |
conda create报 404 错误 | conda 镜像源配置问题,频道不可用 | 执行conda info查看 channel 配置 | 重新执行conda config --remove-key channels并重新配置镜像源 |
import torch提示找不到模块 | 当前环境不是 PyTorch 所在环境 | 执行which python或python -V | 确认 conda 环境激活,或在编辑器中切换解释器 |
| CUDA 可用性为 False | 安装的是 CPU 版,或 CUDA 版本与驱动不匹配 | 执行nvidia-smi查看驱动版本 | 在 GPU 环境重新安装匹配的 CUDA 版 PyTorch |
| 运行时报显存不足 | batch_size 过大或模型输入尺寸过大 | 观察报错中的显存数字 | 降低 batch_size,缩小输入尺寸或使用混合精度 |
| VS Code 选了环境但仍报错 | 终端未跟随解释器切换 | 查看终端顶部环境名称 | 手动执行conda activate torch-gpu,或重启 VS Code |
| 端口被占用 | 服务端口冲突 | 查看报错端口号 | 换端口启动,如 Jupyter 增加--port=8899 |
| 同一个环境装了多个版本的 torch | pip 与 conda 混装导致版本覆盖 | 执行 `pip list | findstr torch` |
针对unavailableinvalidchannel: http 404 not found for channel anaconda/pkgs/msys这类问题,直接删除引起异常的频道配置:
conda config --remove-key channels conda clean -i然后重新添加可靠的镜像地址。
10. 最佳实践与使用建议
这套环境配置要长期好用,有几个工程化习惯建议尽早养成。
第一,环境名精确对应项目。创建环境时建议使用能够描述用途的名称,比如torch-cpu、torch-gpu、nlp-transformers、cv-yolov8,方便多个项目之间区分。不要所有项目共用一个环境,否则依赖冲突迟早会出现。
第二,每次安装新包前先确认当前环境。在终端中输入:
conda env list可以快速看到当前激活的环境。也可以观察命令行的提示符,环境名通常显示在最前面。不确认环境直接pip install,很容易把包装到错误的 Python 空间里。
第三,项目文件按目录分离。建议将代码、数据、模型分别放在src、data、models目录中,不要把所有文件都塞在环境目录下。环境目录是运行时组件,不应该混入项目文档。
第四,批量任务要留日志。PyTorch 训练不会因为日志缺失而出错,但排查问题时会非常困难。建议在训练脚本中加入 checkpoint 保存机制,每 N 轮保存一次模型权重。如果训练中断,可以从最近一次保存的权重继续。
torch.save(model.state_dict(), f"model_epoch_{step}.pth")第五,接口服务要注意访问权限。将 FastAPI、Flask 等服务绑定到127.0.0.1而不是0.0.0.0,可以避免局域网内其他设备直接访问。如果确需远程访问,也要加上 token 或鉴权机制。
第六,注意合规授权。使用开源数据集时确认许可证类型;使用人脸、声音、版权图像进行训练或生成时,必须确保已获得相应授权。本地训练和推理应当在测试环境内验证效果,发布或商用前需要做二次复核。
最后,第一次跑通时建议只跑一个最小示例。不要一上来就挂一个大规模模型训练任务,先验证环境、验证数据加载、验证梯度能够正确传播,再逐步放大任务规模。这样即使后面出问题,也能快速定位是环境问题还是代码问题。
这篇教程最值得留下的核心内容其实只有三句话:用 Anaconda 创建独立环境,CPU 环境和 GPU 环境分开安装,编辑器选中对应解释器就能直接跑。剩下的事情,无非是在这个基础上不断扩展项目。建议把上面这些命令保存下来,下次重装系统或换电脑时,能省下大量查资料的时间。