ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

PyTorch安装避坑指南:从CPU版到GPU版的环境配置全解析

PyTorch安装避坑指南:从CPU版到GPU版的环境配置全解析 本来想在官网复制两行命令直接装完收工结果卡在下载进度条半个多小时一动不动好容易等它下完一敲import torch又给我甩个DLL load failed。这种开场白我见过太多次了身边不少朋友第一次接触PyTorch安装教程刷了十几篇最后还是在环境配置上折了腰。这篇PyTorch安装教程我不打算只给你贴几条命令而是把安装这件事拆开揉碎讲清楚为什么推荐用Anaconda垫底、CPU版和GPU版到底差在哪、CUDA那一堆东西跟你有什么关系、装完之后第一件事该做什么。无论你是刚摸到深度学习门槛的新手还是需要在新机器上快速部署环境的老手这篇文章应该都能给你省下不少冤枉时间。有一点先说在前头当下做深度学习研究、CV、NLP、语音合成包括不少TTS项目基本上绕不开PyTorch2024年它已经是论文复现和工业落地的绝对主流框架之一。所以环境装好了后面路就好走了。1. 装之前先做决定CPU版和GPU版的差别不在命令在整条学习路径很多人拿到安装教程就急着往下抄结果抄到一半发现不对劲为什么有人装的是torch有人装的是torchvision还有人命令行里带着cu121这种奇怪后缀这些差异的背后其实是CPU版和GPU版这两条截然不同的路线。1.1 用CPU版的场景写代码、调逻辑、跑小模型CPU版PyTorch没有任何额外要求只要是台电脑就能装。它的定位是让你能写出能跑的代码——数据加载、模型搭建、训练循环、断点调试这些操作在CPU上都能正常执行只是速度感人。我用一个不严谨但很直观的比喻CPU版就像在市区道路上开跑车红绿灯多、路口多你油门踩到底也快不起来GPU版相当于上了封闭赛道每一脚油门都能转化成圈速。比如跑一个几万参数的MNIST手写数字识别CPU可能几分钟一个epochGPU几秒钟就完事。几百层的Transformer大模型CPU直接跑不动显存一上就是几十个G。所以如果你是纯新手第一周只是想跑通一个简单demo、看看张量操作长什么样那CPU版完全够用。哪天你觉得等训练结果等到想砸电脑了再折腾GPU版也不迟。1.2 用GPU版的前提先看看自己有没有NVIDIA显卡GPU版PyTorch本质上是利用NVIDIA显卡做并行计算。检查方法很简单Windows下打开任务管理器点性能选项卡看左边有没有GPU这一项再确认右边显示的显卡型号是不是NVIDIA比如GeForce RTX系列、Quadro系列。有NVIDIA显卡可以接着往下看。如果你用的恰好是AMD显卡Windows系统下的支持目前仍然一言难尽ROCm生态在Linux上还凑合Windows上我不太推荐折腾苹果的M系列芯片走的是MPS后端安装命令和Linux/Windows不太一样至于一些国产加速卡平台比如某些特殊硬件一般硬件厂商会提供自己的PyTorch分支版本安装逻辑仍然是装好Python环境再装对应wheel包只是要注意它的文档里明确要求的配套版本。1.3 Python版本和PyTorch版本先对表再动手PyTorch不是每个版本都支持所有Python版本装了不匹配的组合pip install的时候就会直接报错或者装完import torch就崩。这里我把常见的对应关系整理了一下以官网实际支持为准PyTorch版本支持的主流Python版本说明PyTorch 2.0 - 2.13.8 - 3.11老项目里还很常见PyTorch 2.2 - 2.33.8 - 3.12兼容性最稳的区间PyTorch 2.4 及以上3.9 - 3.13新特性都在这条线上我个人的建议是新环境直接上Python 3.10或者3.11这两个版本在深度学习生态里兼容性最好不管是PyTorch、TensorFlow还是各种第三方库都不会挑刺。网上有人用Python 3.10.11配上PyTorch 2.8.0加CUDA 12.1跑得很欢这组合在逻辑上没问题关键就是别让Python版本太新或者太老。2. 用Anaconda垫底为什么我几乎不给裸Python装机关于到底用不用Anaconda网上吵了很多年。我的态度很明确新手老老实实用Anaconda老手用Miniconda反正别裸装。2.1 Anaconda解决了环境分裂问题依赖冲突是Python开发最折磨人的事情之一。今天这个项目要TensorFlow 1.x明天那个项目要PyTorch 2.x两个框架的依赖经常是死对头。conda环境隔离的思路相当于给每个项目准备一个独立的小房间房间里的Python版本、包版本互不干扰。PyTorch这种底层依赖复杂、有时候需要指定CUDA版本的框架尤其适合放在conda环境里。Miniconda和Anaconda的区别就是前者只带conda和Python后者帮你预装了几百个常用数据科学包。Anaconda省事但体积大Miniconda克制但装什么都要自己来。对装PyTorch这件事来说两者没有本质区别用哪个看你的硬盘和心情。2.2 Windows下的安装细节去Anaconda官网下载最新版安装包选Python 3.x对应的64位版本。安装过程中有几个容易忽略的点安装路径不要带空格和中文C:\ProgramData\anaconda3这类纯英文路径最省心安装到Advanced Options那一步如果你不想在命令行里敲conda还要先找路径建议勾选Add Anaconda to my PATH environment variable不过这个操作有些教程不建议理由是会和系统Python冲突。我的经验是如果你这台机器就是用来搞深度学习的勾上没毛病如果平时还要做其他开发建议把Register Anaconda as my default Python取消掉装完之后打开Anaconda Prompt不是PowerShell也不是CMD输入conda --version能输出版本号就说明成功了2.3 Ubuntu系统下的命令行安装Ubuntu用户直接在终端用wget下载安装脚本然后bash执行。这一步的坑主要出在安装结束后——很多人装完发现conda命令找不到是因为还没有激活环境变量执行一次source ~/.bashrc就好了。如果你用的是CentOS这类服务器系统安装流程一样但要注意系统自带的Python版本可能很旧更要用conda来管理。我在离线环境里装PyTorch 1.13.0的时候就是先在这类机器上装好Miniconda再把要装的whl包一次性传到服务器上后面就不用手动跟系统Python纠缠了。2.4 国内源配置装PyTorch前先换个下载通道直接从官方源下载Anaconda和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 --set show_channel_urls yes # 配置pip源Windows在用户目录下创建pip.iniLinux/Mac是pip.conf pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple这些镜像站是官方维护的同步站点数据安全没有问题。配好之后后面装包的速度会有质的提升。3. 核心安装环节从官网命令到落地验证环境准备就绪之后终于到了动手装PyTorch的环节。这里我会同时讲conda和pip两条路线并解释为什么网络上的教程建议经常互相矛盾。3.1 创建独立的conda环境不推荐直接装在base环境里。base环境里装的东西太多太杂万一哪个包版本冲突了整套环境都跟着遭殃。给PyTorch单独开个环境出事了大不了删掉重来损失可控。conda create -n pytorch python3.10 conda activate pytorch第一行命令创建了一个名叫pytorch的新环境并指定Python版本为3.10第二行是激活这个环境。激活之后命令行提示符前面会出现(pytorch)字样这就代表你已经在独立环境里了下面所有安装操作都不会污染系统环境。3.2 官网命令的正确打开方式打开PyTorch官网首页就会给出当前稳定版的安装命令。这个界面会根据你选择的系统、包管理器、CUDA版本实时生成对应的命令。官网给的是这类命令# conda路线 conda install pytorch torchvision torchaudio pytorch-cuda12.1 -c pytorch -c nvidia # pip路线 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121-c pytorch和-c nvidia是指定从PyTorch和NVIDIA的官方conda频道拉取这样能保证拿到的是预编译好的匹配版本。--index-url后面那一长串是PyTorch自己维护的wheel索引cu121表示CUDA 12.1对应的版本。我在国内网络环境下实测下来pip路线比conda路线成功率更高因为pip能配合前面配好的镜像源做加速。但官网pip命令里的--index-url会覆盖你配置的镜像源所以要么挂加速工具等到它慢慢下完要么直接用下面的技巧先访问https://download.pytorch.org/whl/这个地址看有哪些文件找到对应版本的whl直链用下载工具下好之后本地pip install。3.3 国内网络环境下的实用方案这里分享一个我常用的稳妥方案。到PyTorch官方wheel仓库页面就是上面那个download.pytorch.org/whl按CtrlF搜索cu121加你的Python版本号找到torch开头的whl文件下载。文件一般比较大几个G很正常用支持断点续传的下载工具拉回来然后执行pip install 本地路径/torch-2.x.xcu121-cp310-cp310-win_amd64.whlcp310代表这个包是给Python 3.10用的win_amd64代表Windows 64位这些标识符是wheel包命名规范的一部分下载时注意别搞错。顺便把torchvision和torchaudio也一起下好装掉后两者是图像和音频相关的配套库很多项目会用到它们。3.4 第一次验证两行代码确认安装成功安装完成之后不要急着关终端先敲两行代码验证一下import torch print(torch.__version__)能正确输出版本号比如2.4.0cu121说明安装成功。注意版本号末尾的cu121这个标记说明你装的是CUDA 12.1对应的GPU版本。如果输出的是2.4.0后面不带cu字样那你装的可能是CPU版需要检查安装命令里是不是少了对应的index-url。再敲一行print(torch.cuda.is_available())输出True说明GPU通道已经打通可以开始愉快地炼丹了输出False说明哪里出了岔子跳到下面GPU专题部分排查。4. GPU版专题驱动、CUDA、cuDNN这三层关系的真相对于刚接触深度学习环境的人来说CUDA可能是最劝退的概念。你可能会在教程里看到让你去NVIDIA官网下载CUDA Toolkit的也看到有人说不用装的两种说法到底谁对4.1 驱动、CUDA Toolkit和cuDNN的职责划分这三者的关系我用一个不太严谨但很好懂的类比来说明如果把GPU比作一台高性能跑车那么NVIDIA显卡驱动就是车子的发动机管理系统负责最基本的工作运转CUDA相当于一条专业赛道它提供了一套让开发者能够用代码调动GPU算力的编程接口cuDNN则是针对深度学习场景专门优化的驾驶技巧库——卷积、池化、归一化这些算子它都有最高效的底层实现。PyTorch在设计上做了一件很聪明的事它在自己的wheel包里捆绑了CUDA运行时和cuDNN库。也就是说只要你装了GPU版的PyTorch里面自带了一整套CUDA相关的运行组件你不需要再单独去装一份完整的CUDA Toolkit。只有一种情况需要你手动装CUDA Toolkit就是你打算自己写CUDA扩展或者编译某些自定义算子。那为了验证环境去装一套十几个G的CUDA Toolkit就属于纯纯的费力不讨好。4.2 怎么解读nvidia-smi的输出Windows或Linux命令行输入nvidia-smi会显示显卡信息、驱动版本以及一个容易被误解的字段右上角或表头位置的CUDA Version。很多人会问我nvidia-smi里面显示CUDA Version: 12.2为什么PyTorch里面torch.version.cuda却是11.8这俩数字对不上是不是装错了不是。nvidia-smi里显示的CUDA版本是当前显卡驱动能支持的最高CUDA版本它是一个上限值。而PyTorch里面打印的是它自带的CUDA运行时版本只要这个版本不大于驱动的最高支持版本就能正常工作。比如驱动支持12.2PyTorch自带11.8这个时候没问题反过来驱动只支持11.4PyTorch非要跑12.1那才是真出问题。4.3 为什么明明装了GPU版is_available()还是False这是排查频率最高的一个问题。我列一下通常的排查顺序import torch; print(torch.__version__)——看看版本号里有没有cu后缀没有的话说明你装的是CPU版回炉重装检查驱动是不是太老——老GPU驱动可能不支持新版CUDA运行时去NVIDIA官网把驱动升到最新一般能解决确认你当前激活的conda环境——有时候环境装乱了在A环境装好的PyTorch到B环境里import就找不到模块这种低级错误我犯过不止一次Windows下检查设备管理器里显卡是否被正确识别——如果显了个黄色感叹号说明驱动真的有问题4.4 Windows平台特有的DLL报错Windows用户装完GPU版PyTorchimport torch直接报ImportError: DLL load failed或者报OSError: [WinError 126]找不到模块这是非常经典的错误。根因90%是系统缺了Microsoft Visual C Redistributable运行库。PyTorch在Windows下编译依赖MSVC运行库而很多精简版系统默认不带。解决办法是去微软官网下载Visual C Redistributable for Visual Studio 2015-2022装好之后重启终端再试大概率就好了。这个运行库没有坏处装一次一劳永逸。5. 装完必踩的坑从环境混乱到网络半路中断环境安装永远不是一条直线。我把这几年在实践和帮别人排错中遇到的经典问题汇总一下给你打个预防针。5.1 conda环境里pip和conda混装的隐患在conda环境里pip install和conda install是可以共存的但混装同一类包会出问题。具体现象你用conda装了PyTorch后来又用pip去装某个依赖pip可能会顺手把PyTorch的某个依赖库升级或降级最后导致import torch报错找不到某个so/dll文件。经验法则是一个环境里能只用conda就用conda非要用pip装某个conda里没有的包装完再验证一下import torch是否正常。5.2 conda解决依赖时卡到地老天荒执行conda install的时候提示Solving environment然后一卡就是十几分钟。这是conda在解析依赖关系时最常见的情况。解决办法有两个一是加-c conda-forge让conda用社区频道源二是干脆改用pip装pip的解析速度要快很多。我个人在后来的实践中PyTorch一律用pip装省心不少。5.3 下载中断导致wheel包损坏大文件下载最容易出现这问题。pip会校验文件哈希如果下载过程中文件损坏pip会报HASH mismatch错误这时候需要清理pip缓存再重试pip cache purge如果自己的网络环境实在不稳定建议还是用带断点续传的下载工具先把whl拉回来再本地安装。5.4 Ubuntu/CentOS服务器上import报libcuda错误Linux服务器上装好GPU版PyTorchimport torch报找不到libcuda.so这类错误。排查思路是检查LD_LIBRARY_PATH环境变量是否包含了NVIDIA驱动的库目录通常是/usr/lib/x86_64-linux-gnu或/usr/local/cuda/lib64。在~/.bashrc里加上export LD_LIBRARY_PATH/usr/local/cuda/lib64:$LD_LIBRARY_PATH然后source ~/.bashrc再试。这条经验在CentOS类服务器上尤其常见因为系统自带的库搜索路径往往不包含CUDA目录。6. 进阶场景离线安装、Docker部署与特殊版本组合基础安装跑通只是第一步现实中的部署环境远远比开发机复杂。这里分享几个我在实际工作中经常用到的进阶安装思路。6.1 完全离线安装有网机器拉包、无网机器装包服务器不能连外网的场景太常见了。这种情况下去官网复制命令是没有意义的因为命令必须联网执行。正确做法是找一台有网的机器用pip download把PyTorch和它的所有依赖包全部拉下来然后拷贝到离线机器上安装# 有网机器上执行下载到offline_packages目录 mkdir offline_packages pip download torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 -d offline_packages/ # 把offline_packages传到离线机器上然后执行 pip install --no-index --find-linksoffline_packages/ torch torchvision torchaudio--no-index告诉pip只从本地查找--find-links指定本地包目录。这两个参数配合使用就能实现完全不联网的安装。注意下载时要保证Python版本和目标机器的Python版本一致否则装不上。6.2 Docker部署从源码安装里彻底抽身容器化部署是多人协作和上线场景下的最佳选择。pytorch/pytorch官方镜像本身就是带好CPU/GPU版本PyTorch的你只需要docker pull pytorch/pytorch:2.4.0-cuda12.1-cudnn9-runtime如果你的机器支持GPU记得安装NVIDIA Container Toolkit然后启动容器时加--gpus all参数容器里就能正常访问显卡。这个方案的好处是环境完全可复用队友拉取同一个镜像就能复现完全相同的依赖版本再也不用在我电脑上明明能跑这样的扯皮。6.3 特殊版本组合怎么判断一组版本靠不靠谱热词里有人搜python 3.10.11 pytorch 2.8.0 cuda 12.1组合包说明不少人已经开始尝试较新的版本组合了。这类组合能不能用我一般看三步看PyTorch官方安装命令生成器上有没有这个CUDA版本选项——有说明官方支持看Python版本是否在PyTorch对应版本的支持范围内——这个第1部分的表可以对照看显卡驱动的CUDA版本上限是否不低于PyTorch自带的CUDA版本——用nvidia-smi确认三步都对得上基本就能放心装。另外提醒一下如果是为了复现某个开源项目尽量不要自己升级PyTorch大版本因为项目的requirements.txt里通常已经锁好了依赖版本擅自升级容易遇到接口不兼容的问题。装PyTorch这件事说难也难说简单也简单。难在它牵扯到显卡驱动、CUDA运行时、Python版本、包管理器、网络环境这么多变量任何一个环节掉链子都有可能让安装失败简单在于你只要理解了驱动是基础、PyTorch自带CUDA运行时、环境隔离是前提这三点大部分坑都能绕开。我自己在实际操作中的体会是头一回装环境花上半天一天很正常别觉得是自己能力不行大家都是从这一步过来的。装好之后建议跑一个最简单的模型训练脚本把整个流程走通确认数据加载、训练、验证这几个环节都正常这个环境才算真正可用。后面再遇到什么问题欢迎按这个排查思路一步步来大概率都能找到解法。
返回列表