Linux服务器PyTorch环境配置全攻略:驱动、CUDA与conda实战
我们直接进入正题。这段时间总有朋友在后台问我自己在本地电脑上跑深度学习代码时一切正常一放到Linux服务器上就各种报错不是缺依赖就是版本对不上折腾一晚上环境还没搭好。其实Linux服务器上的PyTorch环境配置没有想象中那么玄乎核心就是理清驱动、CUDA、Python环境和PyTorch这几层的关系。这篇文章我就把自己平时在服务器上配置PyTorch环境的完整流程和踩过的坑整理出来从最基础的硬件检测开始到conda环境隔离再到PyTorch的安装和验证每一步都给出具体命令和判断依据希望能帮你少走一些弯路。这套配置流程适用于大多数深度学习场景无论是跑CV模型、NLP模型还是自己搭Transformer做实验都是一样的套路。如果你是刚接触Linux服务器的学生或者是从Windows转到Linux开发的工程师这篇文章应该能帮你建立起一套清晰的环境配置思路。就算你已经配过好几次环境也可以看看里面关于版本匹配和故障排查的部分说不定能解决你之前没想明白的疑惑。1. 环境配置前的核心思考配置PyTorch环境之前我建议你先花几分钟想清楚三件事你这台服务器有没有NVIDIA显卡准备用conda还是virtualenv做环境隔离以及PyTorch官方版本和你机器上CUDA版本怎么对应。这三件事想明白了后面所有命令基本都是机械操作。1.1 先搞清楚你的服务器配置很多人在配置环境时第一个错误就是把服务器当成一台普通电脑上来就装PyTorch装完跑代码才发现没有GPU可用。所以在动手之前先执行下面这些命令把机器的家底摸清楚。查看CPU和内存信息用lscpu和free -h这两条命令能让你对机器的算力有个基本概念。查看操作系统版本用cat /etc/os-release这个信息决定了你后面用apt还是yum装依赖。最关键的是查看GPU信息执行nvidia-smi。如果提示command not found说明你还没装NVIDIA驱动或者这台机器压根没有NVIDIA显卡。还有一种是特殊情况就是云服务器厂商提供的深度学习镜像。这类镜像通常已经把驱动、CUDA、cuDNN都预装好了你只需要验证一下版本即可没必要自己重新折腾一遍驱动。我见过有同事在云服务器上手动重装NVIDIA驱动结果把镜像自带的驱动搞坏了最后只能重置系统白白浪费了大半天时间。1.2 理解CUDA、cuDNN和PyTorch的版本匹配关系这一块是整个环境配置中最容易出问题的地方我把这三者的关系捋清楚。CUDA是NVIDIA提供的并行计算平台是运行在驱动之上的。cuDNN是基于CUDA的深度学习加速库专门为卷积神经网络、循环神经网络这类计算做了深度优化。PyTorch在编译时就需要指定一个CUDA版本编译出来的库文件会在运行时调用对应的CUDA接口。这里有个关键点PyTorch官方预编译包的命名方式比如cu118、cu121、cu124这里的数字分别对应CUDA 11.8、12.1和12.4。你不需要精确匹配机器上的CUDA版本只要PyTorch要求的CUDA版本不高于你机器上驱动的最高支持版本即可。为什么说“不高于”就行因为PyTorch的预编译包会自带一份CUDA运行时的库文件它运行的时候用的是自带的这些库而不是系统目录里的CUDA。这就是为什么有人的机器上根本没装CUDA只装了NVIDIA驱动PyTorch也能用GPU跑。这个机制理解清楚了很多报错就能自己排查了。当然如果你需要自己动手编译CUDA扩展比如装一些需要编译的第三方库那还是建议把完整版CUDA Toolkit装上因为编译时需要头文件和相关工具链。1.3 为什么推荐用conda做环境隔离Python项目最痛苦的事情就是依赖冲突这个项目要PyTorch 2.0那个项目要PyTorch 1.8还有的项目要TensorFlow三个项目装在同一个Python环境里等着互相打架光是处理依赖就能劝退不少人。conda的核心理念就是环境隔离。每个环境就像一间独立的小房间房间里的Python版本、pip包、conda包都互不干扰。你需要哪个环境就激活哪个环境不需要了就整个删掉不会影响其他项目的运行。相比virtualenvconda还能管理Python解释器本身和CUDA相关的库这就是它在深度学习社区里这么流行的原因。我建议装Miniconda而不是Anaconda因为Anaconda自带的那些预装包和IDE工具大多数用不上白白占了好几个G的磁盘空间。Miniconda才是真正的最小化版本只有conda和Python需要什么包自己再装。2. 一步步搭建PyTorch环境前面的准备工作做完了现在开始正式搭建环境。整个过程分四步下载安装Miniconda、创建独立的conda环境、安装PyTorch、验证环境可用。每一步我都会给出具体命令和判断结果的方法。2.1 安装Miniconda先去清华源下载Miniconda的安装脚本比直接从官网下载快很多。选最新版本就好注意区分操作系统架构一般服务器都是Linux x86_64架构。wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh如果你不确定服务器的架构执行uname -m查看结果x86_64就是64位标准架构aarch64就是ARM架构两条安装脚本不一样。下载完成后执行下面的命令开始安装bash Miniconda3-latest-Linux-x86_64.sh安装过程中会遇到几个提示。第一个是查看许可协议直接按回车翻页就行。第二个是问你是否接受协议输入yes。第三个是安装路径默认是当前用户家目录下的miniconda3如果你没有特殊的空间规划需求直接回车用默认路径就好。最后一个是问你是否要把conda初始化写入shell配置这里建议输入yes这样每次打开终端就能直接使用conda命令了。安装完成后执行source ~/.bashrc让配置立即生效然后执行conda --version验证是否安装成功。如果提示找不到命令检查一下~/.bashrc或者~/.zshrc文件里是否包含conda的初始化代码找到类似__conda_setup的段落手动执行一下这段代码即可。2.2 配置conda国内源国内连接Anaconda官方源非常慢有时候下载一个包要等好几分钟甚至直接超时。建议先把源切换成清华源速度会有质的提升。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 --set show_channel_urls yes这里需要提醒一下清华源到2023年之后已经停止对Anaconda官方源的镜像同步保留的是pytorch等第三方源在清华的镜像。如果你发现conda装某些包时还是慢完善一下配置文件添加pytorch对应的镜像即可。还有一个操作可以提高后续包安装速度就是配置.condarc文件。执行conda config --set remote_read_timeout_secs 600把连接超时时间从默认的几十秒延长到600秒这样即便是网络波动比较大的时候也不容易因为超时而安装失败。2.3 创建并激活conda环境先把conda自身升级到最新版本免得到时候因为conda版本太旧出现各种各样的问题。conda update -n base -c defaults conda然后创建PyTorch环境。我习惯给环境起一个直观的名字比如用pytorch加上版本号这样以后创建别的环境时不会混淆。conda create -n pytorch python3.10这里我推荐Python 3.10版本。PyTorch从2.0开始对Python 3.11提供了完整支持但3.10依然是兼容性最稳妥的选择。如果你要跑一些老项目里面用了numba、jit这些对Python版本有严格限制的库那可能需要根据项目要求选择Python 3.8或者3.9。创建好之后激活环境conda activate pytorch激活后命令行的提示符前面会出现环境名。如果你发现conda activate不生效大概率是没有执行conda init回到2.1节把初始化补上。2.4 在conda环境中安装PyTorch到了最关键的一步安装PyTorch。这里我推荐用pip而不是conda安装。为什么用pip一个主要原因是PyTorch官方在pip上发布的预编译包更新更快版本选择更多而且pip对依赖的处理方式更直接。另一个原因是用conda安装PyTorch时conda会自动分析依赖关系这个过程在处理大型依赖树时可能会非常慢甚至进入无限求解的卡顿状态。安装前需要明确你的目标CUDA版本。打开PyTorch官网的Get Started页面选择你的操作系统、安装方式、CUDA版本页面会生成对应的安装命令。这个页面的版本信息持续更新比任何第三方教程都实时。以我现在在用的环境为例服务器驱动支持CUDA 12.1我执行的是pip install torch torchvision torchaudio默认安装的PyTorch 2.4及其之后的版本不需要你再指定--index-url因为PyTorch官方已经把默认的PyPI源切换到了CUDA 12.x的版本直接安装就绑定了CUDA 12.4运行时。如果你的驱动比较老只支持CUDA 11.8那就得指定老的安装源pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118这里顺便说明一下怎么看驱动支持的最高CUDA版本。执行nvidia-smi后输出内容右上角会有一行CUDA Version字样这个数字表示你的驱动最高能支持的CUDA版本。只要PyTorch要求的CUDA版本小于或等于这个数字基本上就可以正常工作。比如驱动显示的CUDA Version是11.8那你就只能装cu118的包不能装cu121。如果要装特定版本的PyTorch指定版本号安装即可pip install torch2.0.1 torchvision0.15.2 torchaudio2.0.2 --index-url https://download.pytorch.org/whl/cu118这里提醒一句torch、torchvision、torchaudio三者的版本号是有对应关系的。PyTorch 2.0.1对应的torchvision是0.15.2、torchaudio是2.0.2版本配对错误会出现类似ModuleNotFoundError: No module named torchvision之类的报错或者运行时报函数签名不匹配的错误。建议安装时仔细检查版本配对关系。2.5 验证PyTorch是否安装成功配置好环境之后验证这一步千万不能省。我见过不少人装完PyTorch就直接跑训练脚本遇到报错还以为是代码问题排查半天才发现是环境没配好。在终端执行python -c import torch; print(torch.__version__)如果能正常输出版本号比如2.4.0cu124说明PyTorch基础库导入成功。然后测试CUDA是否可用python -c import torch; print(torch.cuda.is_available())输出True说明GPU已经被PyTorch识别并支持CUDA运算。输出False的话绝大多数情况是版本不匹配或者驱动问题具体排查方法看第4节。最后再测试一下GPU的实际计算执行python -c import torch; print(torch.randn(3,3).cuda())正常输出一个3x3的随机数张量说明张量已经能在GPU上正常运算环境配置彻底完成。3. 深入理解PyTorch环境配置的几个关键技术点环境配置好只是第一步理解背后的机制才能让你在后续使用中遇到问题时游刃有余。3.1 Linux系统下Python环境的常见坑Linux系统自带的Python是系统级的很多系统工具和脚本都依赖它。如果你直接用系统Python来装PyTorch会遇到两个问题第一pip安装包时经常报权限不足因为系统Python的site-packages目录对普通用户不可写第二哪天你手滑执行了pip install --upgrade升级系统Python的关键库可能直接搞坏系统工具。这就是为什么强依赖虚拟环境。conda创建的环境是完全独立的一套Python体系即使你在里面把Python升级了、删了某些系统库宿主机的系统Python也不会受影响。这个隔离机制在多人共用的开发机上尤其重要每个人都用自己的环境互不影响。3.2 PyTorch的CPU版本和GPU版本怎么选PyTorch官方同时提供CPU版本和GPU版本。CPU版本安装包很小只有一两百MB纯CPU环境下可以正常运行计算全部走CPU。GPU版本的安装包通常有两三个GB里面捆绑了对应CUDA版本的运行时库。CPU版本和GPU版本在代码层面的用法完全一样区别只在于性能。如果你的服务器没有NVIDIA显卡那直接用CPU版本就行。注意没有NVIDIA显卡的情况下就算你安装了GPU版本的PyTorch执行torch.cuda.is_available()也会返回False而且会在导入时加载一些不必要的CUDA库浪费内存。怎么判断自己装的PyTorch是CPU还是GPU版本执行python -c import torch; print(torch.version.cuda)如果输出了CUDA版本号说明是GPU版本输出None的话就是CPU版本。3.3 服务器上配置PyCharm或VSCode远程开发环境环境配置完成之后你大概率需要用IDE来写代码。在Linux服务器上装图形界面做开发是大忌一是浪费宝贵的系统资源二是远程访问体验很差。最推荐的方式是用IDE的远程开发功能让IDE在本地展示界面实际代码和运行都在服务器上。PyCharm Professional和VSCode都支持SSH远程开发。以VSCode为例安装好Remote-SSH插件后用ssh 用户名服务器地址连接服务器VSCode会在服务器端安装一个轻量级的服务端组件然后你就能像在本地写代码一样操作远程文件。选择Python解释器时在VSCode的命令面板中选择Python: Select Interpreter找到conda环境的Python路径通常是在~/miniconda3/envs/pytorch/bin/python。这里有个小技巧VSCode连接到服务器后默认打开的目录是用户家目录。如果你的代码项目存放在其他位置比如/data/projects直接用File - Open Folder打开对应路径即可。远程开发的延迟取决于你的网络状况如果感觉卡顿建议优先排查网络延迟和对端服务器负载。4. 常见问题与排查技巧实录环境配置类的问题不像代码逻辑错误那样有明确的报错位置很多问题都是隐性的需要你一步步排除。这一节我把实际工作中遇到的几个典型问题整理出来每一个都附上解决方案。4.1 torch.cuda.is_available()返回False这是最典型的高频问题。返回False说明PyTorch没有正确调用到CUDA接口排查思路如下。先用nvidia-smi确认驱动状态。如果输出的是错误提示或者提示找不到命令说明NVIDIA驱动没有安装。安装驱动的过程比较繁琐不同版本的驱动安装方式不一样这里不做展开建议优先确认你的服务器是否有GPU以及驱动是否已正确安装。驱动正常的话检查PyTorch版本和CUDA版本的匹配关系。执行python -c import torch; print(torch.version.cuda)看这个版本号是否在驱动支持的CUDA版本范围内。比如你的驱动支持CUDA 11.8但PyTorch自带的CUDA是12.4那大概率就不能用。这时候要么升级驱动要么把PyTorch换成对应版本的包。还有一种容易忽略的情况当你使用conda install cudatoolkit或手动添加CUDA路径到PATH时环境变量里的CUDA版本和PyTorch期望的版本冲突了。处理方法是删除手动设置CUDA环境变量的代码让PyTorch直接使用自带的运行时。4.2 pip安装PyTorch时下载速度极慢PyTorch的GPU版本安装包动辄两三个GB如果网络条件不好下载时间长得让人崩溃。解决方法是使用镜像源。这里推荐清华的PyTorch镜像pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple如果你要用CUDA 11.8的源写成pip install torch2.0.1 torchvision0.15.2 torchaudio2.0.2 --index-url https://download.pytorch.org/whl/cu118 -i https://pypi.tuna.tsinghua.edu.cn/simple这个写法是先把默认源切换成清华源再指定PyTorch官方索引去查找对应CUDA版本的包实测速度能提升好几倍。如果你需要从PyTorch官方索引下载指定版本也可以直接用pip download把包先下载到本地再离线安装这样能给团队共享省去重复下载的时间。4.3 多个conda环境之间操作串了多人共用一台服务器时最容易出现问题的地方是conda环境激活混乱。比如A用户在base环境安装了包B用户激活pytorch环境却发现这个包能import进来原因可能是B用户找不到对应的环境直接用了base环境。建议在终端提示符上直接显示当前激活的环境名。如果你看到命令行前面有括号里面写的是环境名就不会搞混。如果没有显示执行conda env list查看当前所在环境当前环境前面会有一个星号标记。还有一个好习惯在网格服务器上跑训练任务时训练脚本里显式声明要用的conda环境。比如在提交任务的脚本里加上source activate pytorch比手动在终端激活环境可靠得多。4.4 服务器重启后conda环境消失很多人在服务器上配好环境重启系统后却发现conda命令找不到了或者环境列表是空的心里一慌以为自己把环境弄坏了。冷静下来大概率是conda初始化没有写入shell配置文件。重新执行conda init bash后重新打开一个终端窗口或者执行source ~/.bashrcconda命令就恢复了。环境本身并没有丢失存储在Miniconda安装目录下的envs文件夹里你可以用ls ~/miniconda3/envs/查看。这个问题的前提是你在安装Miniconda时没有输入yes接受初始化写入。如果你确实多了这个步骤后续可以把conda init执行一遍再恢复。4.5 conda create时提示PackagesNotFoundError创建新环境时如果指定了某个Python版本但conda在源里找不到对应版本会提示PackagesNotFoundError错误。原因大概率是你的conda源配置有问题或者Python版本号写错了。先查看当前源配置conda config --show channels正常会显示你在2.2节配置的镜像源。如果你觉得源有问题把.condarc文件删掉再重新配置conda config --remove-key channels然后按上面的步骤重新添加源即可。还有一种情况是conda缓存了损坏的元数据执行conda clean -a清理缓存后重试。5. 给新人的几条实用建议经过多次踩坑这里我总结几条环境配置中的实用建议不算官方文档里的标准做法但实际操作下来非常管用。第一维护一个requirements.txt文件。每次配置好一个新的conda环境把自己安装的核心依赖的精确版本记录下来之后在其他机器上复现环境时执行pip install -r requirements.txt就能快速装好。这个文件同时也有助于你在文档里向同事说明环境情况。第二不要把conda环境放在系统盘根目录。默认安装路径是用户家目录一般没问题。如果家目录空间紧张想放到数据盘创建环境时用conda create -p /data/envs/pytorch python3.10指定路径激活时也要用conda activate /data/envs/pytorch。这是conda的定位支持路径式环境你可以把环境放在任何磁盘空间充裕的位置。第三系统升级和驱动升级要谨慎。NVIDIA驱动升级后之前编译过的CUDA扩展可能会失效需要重新编译。所以除非必须驱动版本不要随意变来变去。这也是为什么很多成熟的深度学习团队会固定服务器的驱动版本和CUDA版本制定严格的版本基线因为这套组合一旦跑通稳定性远大于版本追新。第四养成用nvidia-smi监控显卡使用情况的习惯。跑训练任务时每隔一段时间看一眼显卡利用率和显存占用就能及时发现问题。显卡利用率在90%以上说明计算密集显存占用接近上限说明批次大小可能设大了需要调低batch size。5.1 用脚本完成环境配置的自动化如果公司内部有多台同配置的服务器靠人工一台台敲命令效率太低而且容易出错。更好的做法是把环境配置过程写成一个脚本传参指定服务器IP脚本自动完成所有操作。一个简单的自动化配置思路是在本地准备好Miniconda安装脚本和PyTorch依赖包然后用scp或者rsync把文件批量复制到服务器再通过ssh远程执行安装命令。这种方式适合少量机器批量部署。如果你是做集群管理有几十台甚至上百台机器那就得考虑用Ansible这类自动化运维工具了不过这也是后话。5.2 经验之谈最耗时的环节往往是网络问题回顾我多年配置环境的经验真正消耗大量时间的其实不是配置本身而是网络问题。下载安装包超时、pip源连接不上、conda包解析卡住这些问题反复出现。我的建议是安装Miniconda后第一时间配置国内源和超时时间安装PyTorch时优先用pip加镜像源如果安装过程中卡住了用Ctrl C中断记下来卡在哪个包单独针对这个包换源安装。这种方法比死等或反复重试有效率得多。另外如果你所在的公司或学校有内部软件源一定要优先用速度比外面的任何公共源都快。我曾经在一家单位做过容器化改造他们在内部网络架设了PyPI和conda的镜像源所有服务器的包安装都是在几秒内完成的这份便利值得学习。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →