看到这个标题我愣了一下,因为几个月前我也差一点在这个流程上烂尾。其实安装 Anaconda 本身十分钟就能搞定,conda 里装 PyTorch 也不算难,真正让人崩溃的是那些版本号——NVIDIA 驱动、CUDA、PyTorch、Python 四套版本放在一起,任何一个没对上,后面就是连环报错。这篇文章我把从 Anaconda 下载到 conda 环境里能正常调用 GPU 跑起来 PyTorch 的完整路径再走一遍,每一步除了命令之外,重点讲清楚为什么这么做,再把最容易让新手烂尾的报错按排查顺序列出来。适合正在搭建深度学习环境的朋友,尤其是第一次接触 Python 环境管理、装完不知道下一步该怎么办的读者。
1. 动手之前先把四个版本号的关系捋清楚
很多教程只给命令,不给逻辑,结果就是换一台电脑、换一个版本,同样的命令立刻失效。安装之前,我建议你先花十分钟把下面几个概念分开。
1.1 驱动、CUDA Toolkit、PyTorch 自带 CUDA,各自负责什么
我把它们拆成三层,方便你对照:
- 第一层:显卡驱动。它负责让操作系统认出显卡,并给上层提供 GPU 访问能力。驱动是接口,不装驱动显卡就是一块废铁。
- 第二层:CUDA Toolkit。这是 NVIDIA 官方提供的一整套开发工具包,里面包括运行时库、编译器 nvcc、调试工具等。你手动从 NVIDIA 官网下载并安装的那个好几个 GB 的东西,就是它。
- 第三层:PyTorch 官方预制包。你在 PyTorch 官网选好 CUDA 版本后生成的安装命令,下载下来的
torch这个安装包里其实已经打包好了一份 CUDA 运行时库和常用的 cuDNN 动态库。它不需要依赖你系统中单独安装的 CUDA Toolkit,而是自带的。
这三层的关系有点像:驱动是“修好的路”,CUDA Toolkit 是“修路工具包”,PyTorch 自带的 CUDA 运行时是“一辆自带燃料的小推车”。路修得够宽,你的小推车就能正常跑起来;就算你系统里没装完整的 CUDA Toolkit,只要驱动够新,PyTorch 也能通过自带的小推车在 GPU 上干活。
1.2 nvidia-smi 显示的“CUDA 版本”不是“当前已安装版本”
终端里输入nvidia-smi,左上角会显示两行信息:
+---------------------------------------------------------------------------------------+ | NVIDIA-SMI 545.92 Driver Version: 545.92 CUDA Version: 12.3 | +---------------------------------------------------------------------------------------+这里有个高频误解:大家看到CUDA Version: 12.3,就以为系统里已经安装了 CUDA 12.3。其实这里的值表示当前显卡驱动最高能支持的 CUDA 版本上限,跟你系统里装没装 CUDA Toolkit 没有关系。即使你机器上连一个 CUDA 组件都没装,只要驱动够新,这里照样会显示一个数字。
这意味着两件事:
- 你不用因为 nvidia-smi 显示 12.3 就觉得“必须装 CUDA 12.3 才行”,PyTorch 选 cu121 或 cu118 都可以在同一个驱动上跑。
- 你的驱动版本如果比较老,nvidia-smi 显示的上限会很低,比如只有 11.2,这时候你装了 cu121 的 PyTorch,运行时会直接报“CUDA driver version is insufficient”,这个放到第 5 章细讲。
1.3 哪种情况才需要手动装完整版 CUDA Toolkit
绝大多数 PyTorch 项目不需要你手动装完整版 CUDA Toolkit。除非你要:
- 自己编译自定义 CUDA 算子,比如某些源码安装的扩展包;
- 用 CUDA C/C++ 写独立的 GPU 程序,需要 nvcc 编译器;
- 做底层驱动与运行时深度调优。
否则,老老实实用 PyTorch 官方打包好的版本就行。手动装完整版不仅占十几个 GB 磁盘,还容易把你机器的环境变量和系统库搞乱,装完 PyTorch 反而跑不起来。
2. Anaconda 安装里最容易后悔的几个选项
Anaconda 本质是一个 Python 发行版,里面预装了 conda 包管理器、Python 解释器和一堆常用科学计算库。安装过程不算复杂,但有几个选项选错了,后面非常折腾。
2.1 下载与安装路径的注意事项
到 Anaconda 官网下载安装包时,Windows 用户记得看准当前安装包内置的 Python 版本。新版的 Anaconda 安装器会内置 Python 3.10 或 3.11,通常没问题。如果机器是公司统一管理、安装权限受限,或者你只是需要一个干净的环境管理工具,直接用 Miniconda 更轻量,占空间小很多,我就是从 Anaconda 换到 Miniconda 的,conda 命令完全一样。
安装路径要记住一个原则:不要用中文路径,不要用带空格的路径,不要装在系统盘的系统目录里。默认的用户目录路径就很安全,比如C:\Users\你的用户名\anaconda3。我之前见过有人为了管理方便,装到D:\软件\Python环境\Anaconda3,后续编译一些需要定位安装路径的库时,经常莫名其妙找不到目录,排查了很久才发现是中文路径惹的祸。
安装过程中有个勾选框“Add Anaconda to my PATH environment variable”,建议不勾选。勾了之后,Anaconda 的 Python 会被注册到系统 PATH,你机器上原有 Python 和第三方工具链可能会被扰乱,命令行里执行python的时候也不知道调用的到底是系统 Python 还是 Anaconda Python。日常使用 Anaconda Prompt 就够了,它已经帮你把环境变量配好了。
2.2 装完必做的三件事:验证命令行、配镜像、清理缓存
装完先打开 Anaconda Prompt,验证一下命令行工具是否正常:
conda --version python --version如果提示“conda 不是内部或外部命令”,说明你没有用 Anaconda Prompt,或者安装时没有初始化环境变量。在普通终端里想用 conda,可以执行conda init cmd.exe,然后重新打开命令窗口。
默认情况下,conda 下载包用的境外源,速度属于“时好时坏、坏的时候多”的状态。为了避免后续装 PyTorch 时反复超时,先配置国内高校开源镜像站。这里不列固定地址,因为镜像站的路径在不同时期会有调整,请到你常用的开源镜像站首页找“anaconda 仓库入口”,把对应地址复制进命令,并添加进 conda 的 channels:
conda config --add channels https://你的镜像站地址/anaconda/pkgs/main/ conda config --add channels https://你的镜像站地址/anaconda/pkgs/free/ conda config --set show_channel_urls yes配完执行一下清理命令,让下一次下载重新加载索引:
conda clean -i如果你用的是 pip,同理也可以把全局索引换成国内 PyPI 镜像源,配置方式后面第 5 章会讲到。
2.3 base 环境别乱动是第一条环境纪律
Anaconda 装完自带一个 base 环境,类似“初始房间”。很多人习惯所有包都往 base 里装,装到最后发现某个库和某个库版本冲突,想删又删不干净,只能重装 Anaconda。所以从今天开始,给深度学习专门建一个独立环境,base 保持干净,这是一个非常重要的习惯。
3. conda 虚拟环境:把 PyTorch 和系统 Python 彻底隔离
3.1 为什么非要用独立环境
虚拟环境可以理解为你厨房之外单独的一间“客房”。PyTorch 和它自带的一堆 CUDA 运行时组件,如果一股脑塞进 base 环境,那些依赖的版本很可能和 base 里原有的科学计算库互相拉扯,今天缺一个版本,明天升级一个库,后天整个环境就无法 import。
独立环境的好处是:环境之间相互隔离,各自有各自的包版本;环境坏了直接删掉重建,机器干干净净;同一个驱动可以同时支撑多个不同 CUDA 版本的 PyTorch 环境,互不干扰。比如一个项目需要 torch 1.12,另一个项目需要 torch 2.1,你就可以在 conda 里建两个环境,想用哪个激活哪个。
3.2 创建环境并激活的完整命令
打开 Anaconda Prompt,输入下面这条命令:
conda create -n torch python=3.10 -y参数说明:
torch是环境名称,你可以改成项目名;python=3.10指定创建环境时安装的 Python 版本;-y跳过确认提示。
为什么建议显式指定 Python 版本?PyTorch 官方预编译包对新版本 Python 的支持有一定滞后,比如 Python 3.12 刚发布时,torch 的 wheel 没有及时跟上,装完才发现版本不兼容。用 3.9 或 3.10 基本稳,各个老项目新项目都能兼容。
创建完激活环境:
conda activate torch激活成功后,命令行提示符前面会出现(torch),表示你目前身处 torch 环境。之后再执行python、pip、conda install,操作的都是这个独立环境,不会污染 base。
如果在conda activate时报错“CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'”,这是 conda init 没有初始化的问题。Windows 下在 Anaconda Prompt 里执行conda init cmd.exe,PowerShell 用户执行conda init powershell,然后重新打开终端即可。Linux/macOS 用户执行conda init bash,然后重新加载 shell 配置文件。
3.3 如何确认当前在哪一个环境
烂尾最常见的原因之一,是命令敲了半天,结果发现全都装到了 base 环境,自己在 torch 环境里却一个包都 import 不到。养成两个习惯:
- 看命令行提示符前缀,没有
(torch)就先激活。 - 用
conda env list查看所有环境,当前所在的环境后面会带一个*号。
conda env list输出示例:
# conda environments: # base * /home/user/miniconda3 torch /home/user/miniconda3/envs/torch看到星号在 base 那边,就说明你现在还在初始环境里,先激活再去安装。
4. 安装带 CUDA 的 PyTorch:从查驱动到首次验证
4.1 先看驱动上限,再决定用哪个 cu 版本
打开终端输入nvidia-smi,记录顶部Driver Version和CUDA Version两个数字。假如显示CUDA Version: 12.4,代表你的驱动最高支持到 CUDA 12.4,那么 PyTorch 选择 cu121、cu124 都安全;如果显示CUDA Version: 11.4,就别碰 cu121,老老实实选 cu118。
PyTorch 安装命令中的cu118、cu121、cu124指的是 PyTorch 官方构建时打包的 CUDA 运行时版本,和驱动支持上限是两套体系。选版原则很简单:
- 看项目文档或 requirements.txt:如果项目明确写了要
torch==2.1.0+cu118,就严格按项目来; - 项目没指定时,优先选 cu118 或 cu121,兼容范围最广,踩坑概率最小;
- 如果你的显卡架构特别老,比如十年前的老卡,新版 PyTorch 的任何 cu 版本都可能不支持,报错是“no kernel image is available”,这种情况只能找对应老版本 PyTorch。
另外,cu118和cu121都支持多个 PyTorch 小版本,选择时优先看项目要求,没有被项目绑定时再用“默认选稳”的保守策略。如果你拿捏不准,可以把驱动升级到较新版本,然后放心装 cu121。
4.2 官方推荐的 conda 命令为什么容易卡住,又该怎么处理
PyTorch 官网安装页面生成出来的 conda 命令通常是这种形式:
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia这条命令有两个关键点:
pytorch-cuda=12.1指定要装 CUDA 版运行时,少了它很可能会装成 CPU 版本;-c pytorch -c nvidia指定从 PyTorch 官方频道和 NVIDIA 官方频道获取包。
问题也出在这:如果不先配镜像源,conda 要同时连接官方几个频道做依赖解析,速度非常慢,甚至卡在 “Solving environment” 界面几个小时不动。就算解析出来了,下载期间还可能频繁出现CondaHTTPError。
处理顺序是:先配好镜像源,再执行官网命令;如果还是慢或者断断续续,就切到 pip 路线,第 4.3 节会详细说。还有一个技巧,安装命令执行前先conda clean -i清理一遍索引缓存,往往能解决一部分“死活下载不到”的问题。
4.3 用 pip 安装带 CUDA 的 PyTorch:更快更稳的备选路线
pip 在本场景下比 conda 简单直接,依赖条数少,下载目标明确,速度也更快。安装命令长这样:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121这里的--index-url表示从 PyTorch 官方 wheel 仓库下载,地址里的cu121决定版本。安装成功后,torch 的版本号会带+cu121后缀,例如2.1.0+cu121。
一个容易出错的地方:如果你贪图快,把 PyPI 全局镜像配成了国内源,然后直接pip install torch,大概率会装到 CPU 版本,因为 PyPI 上默认的 torch 源并不带 CUDA 加速。所以安装 torch 本体时,一定要用上面的--index-url走 PyTorch 官方仓库,PyPI 镜像只用来装 numpy、pandas 这类普通包。
conda 和 pip 怎么选?我的实测结论是:你只是想把环境跑起来,pip 路线更省心;你希望以后用conda env export做完整的环境备份,或者团队统一用 conda 管理,那就坚持 conda 路线。两条路线的最终效果完全一样,不用纠结。
4.4 装完立刻做的验证脚本
环境激活状态下,执行:
python -c "import torch; print(torch.__version__); print(torch.version.cuda); print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"也可以用 Python 交互式逐行输入。正常输出类似:
2.1.0+cu121 12.1 True NVIDIA GeForce RTX 3060 Laptop GPU判断标准:
torch.__version__末尾带+cu121、+cu118这种后缀,说明是 CUDA 版;torch.version.cuda输出12.1而不是None;torch.cuda.is_available()输出True,说明 PyTorch 能真正调用显卡;torch.cuda.get_device_name(0)能显示你的 GPU 型号。
如果前两个都正常,但is_available()是False,恭喜你,进入第 5 章的踩坑排查现场。
5. 烂尾现场的排查顺序:这是我反复踩过的路
如果你已经走到“装完跑不通”这一步,先别着急把 Anaconda 卸载重装,按照下面顺序排查。绝大多数情况不是装不进去的问题,而是装进了错误的环境、用错了版本。
5.1 装完了却 import torch 失败:先搞清楚包的归属
ModuleNotFoundError: No module named 'torch'有两种可能:根本没装上,或者装到了别的环境。此时不要直接重装,按顺序查看:
conda env list conda list -n torch | grep torch第一条看当前在哪个环境,第二条看 torch 环境里到底有没有 torch 相关包。再用where python(Windows)或which python(Linux/macOS)确认当前 Python 路径,如果路径显示的是/usr/bin/python而不是你的 conda 环境路径,说明你当前不在 conda 环境里,激活一下再试。
有个很经典的场景:很多人打开 Python 解释器后才发现 import 失败,其实解释器是系统 Python,而 torch 装在 conda 环境里。解决方式就一句话:先conda activate torch,再启动 Python。
5.2 is_available() 返回 False:按顺序查三件事
如果 torch 已经装上且版本显示+cu121,但torch.cuda.is_available()为False,按下面顺序查:
- 先跑
nvidia-smi,如果提示找不到命令,说明驱动没装好或驱动路径不在 PATH,这属于驱动层面问题,先解决驱动; - 再看
torch.version.cuda的值,如果是None,说明你当前环境里的 torch 是 CPU 版,需要先卸载再装带 CUDA 后缀的版本; - 最后比对 nvidia-smi 显示的驱动支持 CUDA 上限和 torch 版本里 cu 的数值。驱动上限 11.4 却装了 cu121,就会在程序运行时报类似下面的错误,而不是在
is_available()时立刻暴露出来:
RuntimeError: CUDA error: CUDA driver version is insufficient for CUDA runtime version这时要么升级驱动,要么换低一档的 cu 版本。我的建议是,如果你机器不是刚买的,优先换 cu118 重装,升级驱动有概率影响原有其他软件。
5.3 下载中断、CondaHTTPError、SSL 报错:镜像和网络问题集中处理
装包过程中遇到CondaHTTPError或反复 Retrying,基本都是网络连接和源的问题,按这三步处理:
- 执行
conda clean -i清理索引缓存; - 把 conda 的网络超时时间调大:
conda config --set remote_read_timeout_secs 1200 conda config --set remote_connect_timeout_secs 120- 确认已经在第 2.2 步配置过镜像源。如果你此前手动改过 conda 的 Channel 配置,先执行
conda config --show channels看看当前的源列表,确认没有奇怪的残留地址。
如果在 Windows 上关闭了系统防火墙或者杀毒软件后能正常下载,建议把 Anaconda 目录加进白名单。这个环境问题和防火墙的冲突平时很少见,但一旦碰上,排查起来极其费劲。
5.4 驱动相关的高级报错:no kernel image 与 unexpected error from cudaGetDeviceCount
这两个报错相对隐蔽,很多人遇到后完全不知道往哪个方向查。
第一个错误信息是:
CUDA error: no kernel image is available for execution on the device直白翻译:你的显卡太老,PyTorch 编译时没有包含你这张显卡对应的 GPU 架构。遇到这个,换 cu121、cu124 都没用,只能往下找老版本 PyTorch,比如 torch 1.x 搭配 cu113。如果换版本后依然报错,说明该显卡不受 PyTorch 官方发布版支持,建议放弃 GPU 加速或者换卡。
第二个错误信息是:
RuntimeError: Unexpected error from cudaGetDeviceCount()多数情况是驱动和运行时冲突,或者 Windows 下安全软件拦截了 GPU 调用。最简单的处理是重启电脑,更新驱动,然后重新conda activate torch再跑验证脚本。不要大动干戈重装系统。
5.5 大量报错已经无法收拾:终极方案是重建环境
如果你的环境已经装了一堆包,版本互相冲突,怎么看怎么乱,最快最有效的方案不是手动卸载这一个那一个,而是直接把整个环境删了重建。命令很简单:
conda deactivate conda env remove -n torch删除后重新创建:
conda create -n torch python=3.10 -y conda activate torch pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121这个操作五分钟就能完成,本质上是推倒重来,但只影响你指定的环境,不会动 Anaconda 本体和 base 环境。很多“烂尾”问题最后都是靠这招救回来的,不用担心会搞坏机器。
6. 跑通之后的三件小事:让新环境真正顺手
PyTorch 能调用 GPU 之后,还有几件看似小但很实用的事情值得做。
6.1 在 Jupyter Notebook 里找不到新建环境怎么办
如果你在 Jupyter Notebook 里新建项目,发现内核列表里没有刚才的 torch 环境,这是因为新环境还没注册到 Jupyter。在 torch 环境中执行:
conda install ipykernel python -m ipykernel install --user --name torch --display-name "Python (torch)"然后在 Jupyter 的“新建”菜单里就能找到名为Python (torch)的内核。这个操作我一开始也经常忘,每次都要颠回去翻文档。
6.2 显存不够或想限定某张卡:用 CUDA_VISIBLE_DEVICES
机器有多个 GPU 时,代码可能默认选中显存占用最多的那张,或者直接显存溢出。你可以在运行前指定显卡:
Windows 命令提示符:
set CUDA_VISIBLE_DEVICES=0Linux/macOS:
export CUDA_VISIBLE_DEVICES=0多个 GPU 可以用逗号分隔,比如CUDA_VISIBLE_DEVICES=0,1。这个方法对 pyTorch 和其他框架都有效,属于日常高频操作。
6.3 环境备份与复制:conda env export 与 requirements.txt
环境跑通后,如果想把配置分享给朋友或备份到新机器,可以在 torch 环境激活状态下执行:
conda env export -n torch > environment.yml这个文件会记录环境里所有包的版本、频道来源和依赖树。但在换电脑时,GPU 驱动版本可能不同,直接把 environment.yml 拿到新机器上重建不一定完全匹配驱动。更稳妥的做法是:新机器上先建一个同版本 Python 的环境,再用pip freeze > requirements.txt生成的清单安装普通依赖,最后单独执行第 4.3 节的 PyTorch 安装命令。这样既保留了依赖版本,又避开了驱动差异带来的诡异问题。
最后分享一个我到现在还在用的小习惯:凡是深度学习项目,一定单独建一个 conda 环境,并且把环境名称、PyTorch 版本、CUDA 版本写进项目 README。凡是在 conda 装包卡住,我的第一反应永远是先查当前环境名和 conda 源配置,而不是反复重装同一个命令。如果你现在正卡在某个报错上,别急着重置整个 Anaconda,按第 5 章的顺序从上到下走一遍,基本都能找到原因;实在乱了就删掉一个环境重新建,机器不会坏。祝顺利跑通。