
最近学院那边要在工作站上跑深度学习实验折腾了好几天U盘启动盘、系统镜像最后落到最关键的环节给工作站配一套干净的PyTorch深度学习环境。我选了Anaconda来做环境管理和依赖隔离配合PyTorch做GPU加速训练整个过程踩了不少坑也总结出一套比较顺手的流程今天完整记录下来给后面要配环境的同学做个参考。这篇内容适合谁看主要是要用PyTorch做深度学习实验、科研和毕设的同学们尤其是刚接触服务器环境配置、对conda虚拟环境和GPU版本适配不太熟悉的用户。我会从Anaconda的选型理由讲起把安装配置、清华镜像加速、虚拟环境创建、PyTorch的CPU/GPU版本选择到最终联调验证的完整路径都说清楚中间穿插我在复旦工作站实测中遇到的坑和排查思路尽量让大家照着操作就能顺利跑起来。1. 环境配置前的整体思路与版本选型1.1 为什么选择Anaconda来做环境管理初次接触深度学习环境的人可能会问既然系统里已经装了Python直接pip install torch不就行了为什么还要多装一个Anaconda这里面的关键原因在于环境隔离。工作站通常不止一个人用系统自带的Python往往还承担着系统包管理的职责。如果在上面直接装PyTorch非常容易和系统已有的包产生版本冲突。比如我之前在一台机器上装OpenCV时不小心把系统里一个关键库的版本给覆盖了结果导致系统自带的一些工具直接崩掉最后只能重装系统镜像浪费了大半天时间。Anaconda的核心价值是帮你把不同项目的依赖拆到独立的虚拟环境里。每个环境有自己的Python解释器版本和独立的包目录互不干扰。做PyTorch项目用3.10做TensorFlow项目用3.8做传统图像处理用3.7切换环境就能切换对应依赖完全不会冲突。这个隔离能力对于多人在一台工作站上协作的场景尤其重要。1.2 版本选型的几个关键考量2024年下半年这个时间点我推荐直接装Anaconda最新的发行版然后创建Python 3.10的虚拟环境来跑PyTorch。为什么不直接用Anaconda自带的base环境因为base环境默认的Python版本往往偏新而PyTorch和CUDA的适配需要时间base环境里装PyTorch容易碰上兼容性问题。另外新建独立的PyTorch环境也方便以后整体删除重建不影响Anaconda本体和其他环境。Python版本选择上3.10是个比较稳的选择PyTorch官网的默认安装命令也长期支持这个版本。3.11和3.12虽然也能跑但个别第三方库的预编译包可能还没有跟上会遇到需要自己编译的尴尬情况。3.8和3.9则偏旧部分新版本的PyTorch已经开始不再提供支持了。GPU驱动方面工作站的显卡驱动通常已经装好我们需要做的是确认当前驱动支持的CUDA版本上限。在命令行里输入nvidia-smi会显示当前驱动版本和对应的CUDA Version。比如显示CUDA Version: 12.2就说明驱动可以支持最高12.2的CUDA运行时。PyTorch只需要装上配套的CUDA运行库即可不需要单独安装完整的CUDA Toolkit。下载PyTorch时会带上对应的CUDA运行库这点后面会细说。2. Anaconda的安装与基础配置细节2.1 下载Anaconda和安装时的关键选项Anaconda从官网下载的话速度可能会不太理想而且对某些网络环境不太友好。建议直接走清华大学开源软件镜像站搜索Anaconda选择对应平台的安装包。以工作站常见的Linux系统为例下载文件名类似Anaconda3-2024.06-1-Linux-x86_64.sh。这个位置的版本可能不是绝对最新但胜在稳定安装后的镜像源配置也更方便走国内加速。下载完成后在命令行里执行安装脚本bash Anaconda3-2024.06-1-Linux-x86_64.sh安装过程中有几个必看的提示很多人就是在这里埋下隐患的。首先是协议确认一路回车或输入yes即可。然后是指定安装路径默认是$HOME/anaconda3如果工作站挂载了容量较大的数据盘也可以改成数据盘路径。我个人习惯装在家目录下权限好控制也避免其他用户误操作。最后一步是询问是否将Anaconda的bin目录添加到PATH环境变量。这里一定要选择yes否则之后每次都要手动指定conda的完整路径非常麻烦。安装完成后执行source ~/.bashrc使配置生效然后运行conda --version验证是否安装成功。2.2 配置国内镜像源与加速下载Anaconda默认的软件源在国外实际下载包时速度相当慢。第一次创建PyTorch环境时光下载Python和依赖包就可能要等十几分钟而且经常超时失败。这里需要换成清华的conda镜像源。直接在当前用户的根目录下用文本编辑器创建或修改.condarc文件写入以下内容channels: - defaults show_channel_urls: true default_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2 custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud这样配置后conda install走的是清华的镜像速度会快很多。需要注意的是PyTorch的conda安装包虽然也在清华镜像里有同步但PyTorch官方推荐的方式是使用pip来安装深度学习框架包直接装conda版本偶尔会出现CUDA版本不匹配的问题。所以我的策略是conda负责管理Python和基础环境PyTorch用pip安装。这样既享受了conda环境隔离的优点又避开了conda源里深度学习包可能更新滞后或依赖不够精准的问题。镜像源配置之后顺手做两件事。第一件是更新conda本身conda update -n base conda把conda升级到较新的版本。第二件是安装完成后重启一次终端确保所有配置真正生效。很多刚接触的人经常忘记这一步然后就遇到conda命令找不到的情况。3. 创建PyTorch虚拟环境与框架安装3.1 使用conda创建独立的Python虚拟环境环境创建是环境配置过程中最核心的一步。我的习惯是在创建环境的同时就指定Python版本避免后续再切换。conda create -n pytorch python3.10这个命令的含义是创建一个名为pytorch的虚拟环境并且在环境里安装Python 3.10。执行后会显示将要安装的包列表输入y确认即可。创建完成后使用以下命令激活进入这个环境conda activate pytorch激活后命令行的前缀会出现(pytorch)表示当前已经在虚拟环境中。此时在终端输入python --version应该显示为Python 3.10.x。之后所有涉及PyTorch的操作都要在这个激活状态下进行避免装错地方。如果哪天这个环境搞坏了不需要重装Anaconda直接删除重建就行conda deactivate conda remove -n pytorch --all整个环境清理得干干净净完全不影响Anaconda本体和系统的Python环境。这也是开头说的Anaconda最大的优势之一。3.2 安装PyTorch时如何选择CUDA版本PyTorch官方提供了一条自动适配安装命令的工具页面进入PyTorch官网选择Linux、Conda或Pip、你需要的CUDA版本就会生成对应的安装命令。但官网给出的默认选择是CUDA 12.1或12.4具体还要结合工作站的驱动版本来判断。先执行nvidia-smi查看驱动信息和驱动的CUDA版本支持范围。如果显示的是CUDA Version: 12.2那么安装CUDA 12.1版本的PyTorch就没有问题。驱动是向下兼容的只要PyTorch的CUDA版本不高于驱动版本的上限就可以。确认之后用pip安装对应版本的PyTorch。以CUDA 12.1为例安装命令如下pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121这里核心在于加上了--index-url参数指定从PyTorch官方的CUDA 12.1源下载。如果不加这个参数pip默认会从PyPI下载CPU版本的PyTorch导致GPU完全无法使用这是一个非常容易踩的坑。如果网络环境下载官方源速度太慢也可以通过一些镜像站来加速。但镜像站的PyTorch包版本可能不是最新的建议优先尝试官方源。实测在国内网络环境下PyTorch官方源的大文件下载速度偶尔也会飙得很快多试几次或错峰下载是可以接受的。3.3 验证PyTorch和CUDA是否正常工作安装完成后最重要的步骤就是验证。进入Python环境后依次执行以下代码python -c import torch; print(torch.__version__) python -c import torch; print(torch.cuda.is_available()) python -c import torch; print(torch.cuda.get_device_name(0))第一行能正常输出版本号说明PyTorch基础安装成功。第二行如果输出True说明PyTorch正确检测到了CUDA。第三行则会显示当前使用的显卡型号。三行全部通过后再做一次简单的GPU张量运算测试python -c import torch; x torch.randn(1000, 1000).cuda(); y torch.matmul(x, x); print(y.sum().item())如果能正常输出一个数字说明CUDA的算力链路完全打通可以正式开始用了。我第一次配环境时前两步都通过了GPU的名字也显示正常但一跑真正的深度学习训练脚本就报CUDA out of memory排查了半天才发现是另一个进程占用了显存。因此验证环境时最好找个空闲时段或者至少执行nvidia-smi确认显存没有被其他人占满。4. 搭建完整的深度学习开发环境4.1 配置Jupyter Notebook的kernel工作站上的日常开发除了直接用终端跑脚本更多时候还是基于Jupyter Notebook或VS Code的。默认情况下在base环境里打开Jupyter Notebook是看不到刚才创建的pytorch环境里的Python的因为Jupyter的kernel和conda环境之间还需要一步关联。进入pytorch环境安装ipykernel然后手动注册kernelconda activate pytorch conda install ipykernel python -m ipykernel install --user --name pytorch --display-name PyTorch (Python 3.10)这之后在Jupyter Notebook里新建或切换kernel时就能看到名为PyTorch (Python 3.10)的选项了。选它Notebook里的代码就跑在含有PyTorch的虚拟环境里。如果以后删除了这个conda环境记得也要把对应的kernel移除掉否则Jupyter里会残留一个无效的内核选项强迫症看着很难受。移除命令jupyter kernelspec remove pytorch4.2 安装常用训练辅助库PyTorch本身只提供深度学习模型构建的基础能力实际跑实验还会有很多辅助库需求。比如数据处理用到的numpy、pandas画图用的matplotlib科学计算用的scipy以及后续可能需要的scikit-learn、tensorboard、tqdm等。这些直接在pytorch环境里用pip或conda装上。pip install numpy pandas matplotlib scipy scikit-learn tqdm tensorboard这里的安装原则是只要PyPI上有预编译的wheel包优先用pip。因为pip的wheel依赖兼容性通常比conda好安装速度也快。conda在某些包的处理上会多做依赖解析偶尔反而会卡在求解环境这个环节尤其是包版本多了之后非常烦躁。如果你之前用过TensorFlow在同一台机器上还要继续用有个小技巧是不要在同一个conda环境里同时装TensorFlow和PyTorch。两者的依赖深度绑定比较复杂免不了互相干扰。更清爽的方案是再单独建一个环境conda create -n tensorflow python3.9 conda activate tensorflow pip install tensorflow用哪个框架就激活哪个环境互不耽误这也是conda环境隔离能力的最大应用场景。4.3 在PyCharm或VS Code中关联虚拟环境工作站上用命令行写Python的人不少但大部分人还是喜欢用IDE。VS Code打开项目后按CtrlShiftP调出命令面板输入Python: Select Interpreter选择路径里带有pytorch的那个解释器即可。PyCharm则是在Settings - Project - Python Interpreter里点击设置选择Conda Environment然后指定pytorch环境下的Python解释器路径。选对解释器是IDE环境配置成功的关键。如果选错成了base环境的Python虽然PyTorch也可能因为之前不小心装到了base里而能导入但这个状态的依赖管理是混乱的时间越久越难受。另外注意PyCharm关联conda环境时如果提示找不到conda executable需要在Conda Executable那边手动指定Anaconda安装目录下bin/conda或Scripts/conda.exe的路径。5. 实际踩坑与排查实录5.1 conda命令找不到的两种情况刚装完Anaconda经常会遇到重启终端后conda命令提示找不到。造成这个问题的通常是两个原因。第一种是安装时没有选择将Anaconda加入PATH。解决方法是再次执行export PATH/home/你的用户名/anaconda3/bin:$PATH并写入~/.bashrc。第二种是shell的配置文件没有生效直接执行source ~/.bashrc即可。还有一种是工作站上原本的Python管理方式比较复杂比如有些服务器用了virtualenv或pyenv会优先接管PATH环境变量导致每次conda activate都失败。这种情况建议在~/.bashrc里把Anaconda的初始化逻辑放到最后面确保conda在shell加载时有优先级。5.2conda activate在bash/zsh里的适配问题新装的Anaconda有时候激活环境会报conda activate pytorch不生效原因是shell的命令补全和数据绑定没有正确初始化。正常情况下安装Anaconda时会在~/.bashrc里自动写入一段初始化代码。如果没找到需要手动执行conda init bash如果你用的是zsh执行conda init zsh然后重新打开终端即可。工作站上如果切换了shell务必重新执行对应的conda init命令这个细节经常被人忽略。5.3 pip安装的torch不是GPU版本这个问题是新手遇到最多的。有时候看到torch.cuda.is_available()返回False第一反应是驱动问题。但更常见的是pip默认从PyPI装到了CPU版。有个方法可以快速验证安装的是不是GPU版python -c import torch; print(torch.version.cuda)如果输出是None那写明装的是CPU版本。解决办法是卸载重装pip uninstall torch torchvision torchaudio pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121重装完之后再次检查torch.version.cuda能看到CUDA版本号就说明GPU版本已经就位。5.4 常见问题速查表为了方便大家对照排查我整理了一份实际使用中最频繁遇到的问题速查表现象常见原因解决方案conda找不到命令未加入PATH或配置未生效执行source ~/.bashrc检查PATH配置activate不生效shell初始化被跳过执行conda init bash或conda init zshtorch.cuda.is_available()为Falsepip装了CPU版PyTorch卸载后用--index-url重装GPU版pip下载超时官方源网络不稳定换用合适的镜像源或错峰重试显存不足报错其他进程占用GPU显存执行nvidia-smi查看占用等空闲再跑Jupyter看不到pytorch环境kernel未注册执行python -m ipykernel install --user --name pytorch系统Python被覆盖不在虚拟环境直接装包养成先conda activate再装包的习惯5.5 环境配置完成后的第一件事环境搭好之后不要急着直接跑项目。我建议先花五分钟跑一个极简的cifar-10分类任务做冒烟测试。这个测试规模适中既能衡量GPU是否正常参与运算又不会花太多时间还能顺便确认数据加载流程没问题。比如用ResNet-18跑几个epoch观察损失是否正常下降。如果这个测试能顺利跑完说明Anaconda、虚拟环境、PyTorch、CUDA、显存调度和IDE关联这条全链路都是通的后续跑任何深度学习项目时就不用再怀疑基础环境的配置问题了。6. 针对工作站多人共用环境的几点额外建议6.1 合理规划磁盘空间与共享环境权限工作站往往磁盘紧张而Anaconda环境叠起来之后体积相当可观一个pytorch环境加PyTorch和常用库轻松超过5GB。因此在创建环境之前最好先确认磁盘剩余空间df -h看一眼再动手。另外有些工作站有专门的数据盘建议把Anaconda安装到数据盘上或者至少把缓存的包目录重定向到大容量分区conda config --set pkgs_dirs /data/conda_pkgs conda config --set envs_dirs /data/conda_envs这样做的好处是以后创建的虚拟环境会直接落在数据盘上不会挤占系统盘空间同时大家共享一份包缓存后续创建类似环境时会快很多。6.2 保存与恢复环境依赖清单为了复现实验结果和方便其他人快速搭建相同环境导出当前环境依赖清单是很有必要的。用以下命令把当前环境的所有包及版本号导出到文件pip freeze requirements.txt换一台新机器或另一个账号时先创建虚拟环境再执行pip install -r requirements.txt就能把依赖原样恢复。需要注意pip freeze会把一些非直接依赖的传递依赖也导出来如果只是想要项目所需的顶层依赖可以用pipreqs这个工具根据项目的import自动生成更精简的清单。6.3 关于环境配置的长远思考配环境这件事一开始觉得麻烦但其实是最值得花时间搞清楚的基础设施之一。环境和依赖理顺了后续的每一次实验复现都会省下大把时间。Anaconda的虚拟环境机制本质上是为软件开发中的依赖管理问题提供了一个通用解法学会它之后不仅限于PyTorch后续任何需要Python环境的项目这套思路都能直接用。我个人在实际操作中的体会是配环境最忌讳的是贪快每一步都清楚自己在做什么出问题才知道去哪里排查。建议大家在配置的时候把每条命令都敲一遍、看一遍输出尤其是我提到的验证环节千万别跳过。环境配置的顺利完成是深度学习实验真正开始前的最后一道门槛跨过去之后后续的训练、调试、调参都会顺畅许多。希望这篇文章能帮大家少走一些弯路。