ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

PyTorch环境配置安装避坑:驱动、CUDA、cuDNN与conda版本匹配

PyTorch环境配置安装避坑:驱动、CUDA、cuDNN与conda版本匹配 PyTorch 环境配置和安装这件事表面看就是把两三行命令敲进终端实际动手才知道坑有多密。import torch 报 DLL 加载失败、torch.cuda.is_available() 死活返回 False、显存明明有 24G 却提示 out of memory、换了台机器整个环境又得从头再来一遍——这些问题我几乎每个季度都要在同事或者学弟学妹那边再遇到一次。它不难但它的难点不在敲命令而在于你得先搞清楚一堆名词之间的关系显卡驱动、CUDA、cuDNN、conda 环境里的 cudatoolkit、PyTorch 自己的编译版本这五个东西任何一个错位最后都会以一句看不懂的报错收场。这篇东西我想按先讲清楚为什么这么配再讲怎么一步步敲的顺序写。适合两类人看一类是刚买卡准备跑第一个深度学习模型的新手另一类是被环境问题折磨过、想搞明白底层逻辑的中级选手。我会把 Windows、Linux、纯 CPU、老显卡这几种场景都覆盖到配上我实际踩过的坑和排查路径。装完能干嘛能让你在 PyCharm、VSCode、Jupyter 里随便切跑 YOLOv8、跑 Transformer、跑自己写的张量运算都不出环境问题。1. 先想清楚再动手PyTorch 环境配置的整体设计1.1 为什么不建议直接把 PyTorch 装进系统 Python我见过太多人第一步就错了打开命令行直接pip install torch装完项目跑起来了三个月后要跑另一个依赖旧版本 numpy 的代码直接崩掉。原因很简单系统 Python 只有一个 site-packages 目录所有包全挤在一起numpy、protobuf、pillow 这些公共依赖的版本要求一旦冲突你只能二选一。正确做法是给每一个项目或者每一类任务开一个独立的虚拟环境。环境隔离带来的好处不只是不打架还在于可复现——你可以把环境导出成一份 yml 文件交给同事对方一行命令就能还原出和你完全一致的包版本。这一点在跑论文复现实验的时候价值极高很多人论文结果复现不出来八成不是代码问题是环境里的 torch 或者 numpy 版本差了半个小版本。另外还有个现实问题PyTorch 的 GPU 版本体积巨大一个完整的 conda 环境动辄 5G 到 8G。如果你只用一个系统环境想同时留着 CPU 版和 GPU 版做对比测试基本没戏。分开建环境torch-cpu和torch-gpu两个目录并存切换成本就是一行conda activate。1.2 conda、pip、venv 这三条路线到底怎么选这是新手问得最多的问题我给一个我自己用了很多年的判断标准。conda 适合的场景需要同时管理 Python 版本和非 Python 依赖比如 cudatoolkit、mkl、ffmpeg 这些底层库、机器上要放多个 Python 版本、做数据科学和深度学习为主。conda 最大的优势是它能装二进制包不需要本机有编译环境。Windows 上装 PyTorchconda 的体验明显比 pip 顺因为它会把 CUDA runtime 一并塞进环境里不会和你系统的 CUDA 打架。pip 适合的场景你已经有一个干净的 Python 解释器比如 conda 建好的环境里只是想装包或者你需要某个 PyTorch 的 nightly 版本、特定 CUDA 小版本的轮子pip 的源更新更快。实践中我推荐的方式是conda 建环境 pip 装 torch这个组合环境和底层库用 conda 管PyTorch 本体用 pip 从官方 wheel 源装速度和版本灵活性都更好。venv 适合的场景轻量级纯 Python 项目、部署到服务器不想装 conda、做 Web 后端或者写脚本。venv 是标准库自带的没有额外依赖但它管不了 cudatoolkit 这类非 Python 包所以纯 venv 环境里装 GPU 版 PyTorch你本机必须已经装好了对应的 CUDA Toolkit。方案管理 Python 版本管理非 Python 依赖环境体积上手难度conda支持支持大5-8G中pip venv不支持不支持小2-4G低conda pip支持支持大中1.3 驱动、CUDA、PyTorch 之间到底是什么绑定关系这是整套配置里最容易出错的地方我用一句话概括显卡驱动决定了这台机器能支持的最高 CUDA 版本PyTorch 的 wheel 决定了它需要哪个 CUDA 版本最后需要满足驱动支持的最高版本 ≥ PyTorch 需要的版本。举个具体例子。你机器nvidia-smi右上角显示 CUDA Version: 12.4这说明驱动版本足够新最高能跑到 CUDA 12.4。这时候你想装一个只提供 cu118 轮子的 PyTorch 版本完全没问题因为向下兼容。反过来如果你的驱动只到 CUDA 11.4却想装 cu121 的 PyTorch那就不行必须先升级驱动。很多人在这里有个误解以为装 PyTorch 必须先自己手动装一遍 CUDA Toolkit。其实不是。用 pip 装官方 wheel 的时候CUDA runtime 的库是打包进轮子里的PyTorch 自己会带着用用 conda 装的时候pytorch-cuda11.8这个包会把对应的 runtime 装进 conda 环境。系统层面那个 CUDA Toolkit 只有在你需要自己编译 CUDA 扩展比如编译某些自定义算子、装 apex、装 flash-attn的时候才是必需的。2. 装之前必须搞明白的几个核心概念2.1 显卡驱动和 CUDA Toolkit 根本不是一回事这两个词经常被混着说但它们的角色完全不同。显卡驱动是操作系统和显卡之间说话的翻译官它属于系统级组件装了它你的显示器才能正常输出、游戏才能跑。CUDA Toolkit 是一套开发工具包包含编译器 nvcc、各种库和头文件是给开发者写 CUDA 程序用的。nvidia-smi里显示的那个 CUDA Version指的是当前驱动所能承载的 CUDA runtime 最高版本不是你已经装了 CUDA Toolkit 12.4。而nvcc --version显示的是你系统里实际安装的 CUDA Toolkit 版本。这两个数字不一致是正常的也是允许的。判断标准很简单你只跑 PyTorch不看 nvcc只看 nvidia-smi。只有当你要编译自定义 CUDA 扩展时才需要关心 nvcc 和 Toolkit 版本并且这时候 Toolkit 版本要 ≤ 驱动支持的最高版本。2.2 cuDNN 在背后到底做了什么cuDNN 是专门为深度学习优化的一套 GPU 加速库卷积、池化、归一化、RNN 这些常见算子的高性能实现都在里面。PyTorch 在 GPU 上跑卷积的时候底层调用的就是 cuDNN 的 kernel。好消息是用 pip 或 conda 装 PyTorch 时cuDNN 是自动带上的你不需要单独去下载安装。只有一种情况需要你手动处理你自己编译 PyTorch 源码或者要跑某些对 cuDNN 版本有硬要求的推理框架比如早期版本的 TensorRT。实际使用中你唯一要留意的变量是环境变量TORCH_CUDNN_V8_API_ENABLED和cudnn.benchmark。前者一般不用动后者我在训练固定输入尺寸的模型时一定会设成 True让它自动挑最快的卷积算法我的实测是 ResNet 类模型能有 5% 到 15% 的提速。输入尺寸变化频繁的场景比如变长序列就别开会反复 autotune 反而变慢。import torch torch.backends.cudnn.benchmark True # 输入尺寸固定时开启 torch.backends.cudnn.deterministic False # 追求可复现时设为 True2.3 conda 环境里的 cudatoolkit 和你系统的 CUDA 是两套东西这一点我觉得值得单独拎出来讲因为我见过同事为这个折腾了整整两天。你在 conda 环境里conda list看到的cudatoolkit 11.8是装在envs/你的环境名/lib下的运行时库它和/usr/local/cuda-11.8那套系统级安装互不干扰。这意味着什么意味着你可以在一台完全没有装 CUDA Toolkit 的机器上靠 conda 环境跑起 GPU 版 PyTorch。也意味着你可能会遇到明明系统装了 CUDA 12.1PyTorch 却报找不到 libcudart.so.11.0这种事——因为 PyTorch 找的是环境里的 runtime不是系统的。排查时用ldd或者看torch.version.cuda就能确认 PyTorch 到底是按哪个 CUDA 版本编译的import torch print(torch.version.cuda) # 输出如 11.8表示编译时用的 CUDA 版本 print(torch.__version__) # 输出如 2.3.1cu118cu118这个后缀就是编译版本标识看到cpu说明装的是纯 CPU 版这是最容易被忽略的一个细节。2.4 CPU 版和 GPU 版的取舍不是有卡就用 GPU有独立显卡就无脑装 GPU 版不一定我列几个真实场景。第一种你的卡比较老。GTX 750 Ti 这种计算能力 5.0 的卡新版本 PyTorch 的官方 wheel 已经不支持了装了会报 no kernel image is available for execution on the device。这种时候要么降 PyTorch 版本要么老老实实跑 CPU。第二种你的模型很小、数据加载是瓶颈。我跑过一个只有三层全连接的小网络GPU 版本因为每次都要做 H2D 拷贝反而比 CPU 慢。这种情况判断标准是看 batch 大小和单步计算量计算量太小就别折腾。第三种笔记本双显卡 省电模式。某些笔记本上独显会被系统挂起torch.cuda.is_available()第一次调用返回 False第二次才 True。这种用torch.cuda.init()预热一下就行。场景建议理由计算能力 6.1 的独显GPU 版官方 wheel 完整支持计算能力 5.x 老卡降版本或 CPU新 wheel 不含对应 kernel小模型 / 小 batch先测 CPU 基线拷贝开销可能吃掉收益纯推理部署看框架要求部分推理框架用 ONNX 更省事3. Windows 平台从零跑通的完整流程3.1 第一步Miniconda 还是 Anaconda我个人的选择是 Miniconda。Anaconda 装完默认塞进来一千多个包base 环境 5G 起步其中 90% 你一年都用不到一次。Miniconda 只有 conda 和 Python装完不到 500M后续按需装。安装的时候有两个必须做的操作很多人会漏掉。第一安装路径不要带空格和中文C:\Program Files\Miniconda3这种默认路径就挺好但如果你要装到 D 盘写成D:\Miniconda3别写成D:\我的软件\miniconda。第二安装向导里的 Add Miniconda3 to my PATH environment variable 不要勾让安装器自己在开始菜单建快捷方式然后通过 Anaconda Prompt 打开终端。勾了 PATH 会和系统里其他 Python 打架这是无数人python命令指向错误的根源。装完打开 Anaconda Prompt执行conda --version能输出就说明 OK。顺手把 conda 的自动激活关掉省得每次开终端都卡一下conda config --set auto_activate_base false3.2 第二步建环境Python 版本怎么挑Python 版本的选择有个简单原则看你依赖链里最挑剔的那个库。PyTorch 2.x 支持 Python 3.8 到 3.12但很多周边生态还没跟上。我的经验是2024 年之后新建环境Python 3.10 是容错率最高的选择3.11 也可以3.12 在某些老库上还会遇到没有预编译轮子的情况。conda create -n torch-gpu python3.10 -y conda activate torch-gpu环境名别用pytorch这种太通用的名字以后你可能会同时存在 pytorch-gpu-118、pytorch-gpu-121、pytorch-cpu 好几个环境名字带上用途和版本一目了然。注意环境创建完先别急着装 torch先确认一下当前 Python 是不是环境里的那个where python输出的路径里应该包含envs\torch-gpu。这一步 30 秒能帮你省掉后面半小时的困惑。3.3 第三步查清驱动能撑到哪个 CUDA 版本在终端里执行nvidia-smi看右上角的 CUDA Version。假设显示 12.4那么 cu118、cu121、cu124 三种轮子你都可以用。我一般选中间偏保守的那个也就是 cu121原因是这个组合的踩坑帖子最多遇到问题好搜。如果nvidia-smi命令不存在说明驱动没装或者装错了。去显卡厂商官网下对应的驱动包装完重启再执行一次。这一步别偷懒去用什么第三方驱动管理工具直接装官方驱动最省事。顺便记一下显卡型号用它查计算能力显卡系列计算能力新版本 PyTorch 支持GTX 10 系6.1支持RTX 20 系7.5支持RTX 30 系8.6支持RTX 40 系8.9支持A100 / H1008.0 / 9.0支持计算能力 8.0 以上的卡还能额外启用 Flash Attention 和 torch.compile 的部分优化这个是硬件门槛达不到就是达不到不用纠结。3.4 第四步装 PyTorchGPU 版官方推荐的命令生成页面会根据你选的版本给出对应的命令我直接把常用的几条列出来方便你抄。pip 路线cu121pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121pip 路线cu118pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118conda 路线conda install pytorch torchvision torchaudio pytorch-cuda12.1 -c pytorch -c nvidia这两条路线我更喜欢 pip。原因有三点一是 pip 从官方 wheel 源下载速度快尤其配上国内镜像之后二是 pip 装的包版本更新更及时三是 conda 解依赖有时候会把你环境里已有的包降级装完一看 numpy 被换了版本反而引发新问题。安装过程要盯着终端输出重点看两行一是下载的 wheel 文件名里有没有 cu 字样二是最后有没有 Successfully installed。如果看到Downloading ... torch-2.x.x-cp310-cp310-win_amd64.whl没有 cu 后缀说明源走错了装的是 CPU 版。3.5 第五步验证是不是真的用上了显卡装完必须验证这三行代码我建议每次都跑一遍import torch print(torch version:, torch.__version__) print(cuda available:, torch.cuda.is_available()) print(cuda version:, torch.version.cuda) print(device count:, torch.cuda.device_count()) print(device name:, torch.cuda.get_device_name(0)) # 真正做一次 GPU 运算确认 kernel 能跑起来 x torch.randn(1000, 1000).cuda() y torch.randn(1000, 1000).cuda() z x y print(matmul ok:, z.shape, z.device)最后那个矩阵乘法是关键。is_available()返回 True 只能说明驱动和 runtime 对上了不代表 kernel 能执行。老显卡遇到 no kernel image 报错就是卡在这一步。跑一次真实运算才能确认整条链路是通的。提示如果is_available()是 True 但矩阵乘法报 CUDA error八成是显卡驱动太旧或者 PyTorch 版本对不上你的计算能力这时候降一个 PyTorch 大版本试试比升级驱动省事。3.6 第六步镜像源配置与日常维护国内环境下下载慢是常态。pip 和 conda 都可以配镜像源。pip 的配置pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip config set global.trusted-host pypi.tuna.tsinghua.edu.cnconda 的配置写在用户目录下的.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有一点要特别说明镜像源适合装 numpy、pandas 这种通用包但装 PyTorch 本体时我反而建议直接用官方 wheel 源就是上面--index-url那条命令。原因是镜像站的 PyTorch 轮子更新有延迟有时候你想要的 cu124 版本镜像上还没有会静默回退到 CPU 版等你发现的时候已经练了半天模型了。环境用久了会膨胀定期清理一下conda clean --all # 清理 conda 缓存 pip cache purge # 清理 pip 缓存4. Linux 平台和其他场景的补充方案4.1 Ubuntu LTS 上的安装流程Linux 下的流程和 Windows 几乎一样差异主要在驱动安装。Ubuntu 上我推荐用系统自带的附加驱动工具装闭源驱动别手动去跑 runfile那个装完容易和外层内核更新打架某次内核升级之后直接黑屏。环境部分照旧wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda3 $HOME/miniconda3/bin/conda init bash source ~/.bashrc conda create -n torch-gpu python3.10 -y conda activate torch-gpu pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121Linux 上一个常见的坑是conda activate报 CommandNotFoundError。这通常是因为 shell 初始化没做conda init bash之后要么 source 配置文件要么重开终端。如果是 zsh把 bash 换成 zsh 再执行一次。另一个坑是服务器上/tmp分区太小pip 下载大 wheel 的时候解压失败报 No space left on device。解决办法是指定临时目录TMPDIR$HOME/tmp pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu1214.2 多用户服务器上怎么做到互不干扰实验室或者公司的共享服务器一台机器上十来个人用这是最容易出乱子的场景。我的做法是每个人在自己的 home 目录下装自己的 Miniconda互不共享 base 环境。磁盘不够的话至少每个人建独立的环境前缀。共享的只有两样东西显卡驱动和系统级的 CUDA Toolkit如果有人要编译扩展。conda 环境各自一份谁也别动谁的。为了省磁盘可以用硬链接的方式共享只读的包缓存conda create -n proj-a --clone base # 同机克隆比重新下载快跑任务的时候记得用CUDA_VISIBLE_DEVICES指定卡号别让两个人抢同一张卡CUDA_VISIBLE_DEVICES0 python train.py CUDA_VISIBLE_DEVICES1,2 python train_other.py这条命令还有个副作用是能帮你调试——把变量设成空字符串CUDA_VISIBLE_DEVICES程序里torch.cuda.is_available()就会返回 False等价于强制跑 CPU比自己改代码判断方便得多。4.3 CPU-only 版本和老旧显卡的处理先明确一点CPU 版和 GPU 版是同一个 PyTorch 的两套编译产物API 完全一样代码里不用改任何东西。装法pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpuCPU 版有一个实际好处很多人不知道它的 wheel 体积小得多大概 200M 对比 GPU 版的 2G在容器镜像里能省不少空间。做 CI 单元测试、做纯数据预处理流水线用 CPU 版足够。至于老旧显卡我的建议是别硬撑。计算能力低于 5.0 的卡PyTorch 从 1.3 之后就不再提供官方轮子了自己编译源码的成本远高于换张二手卡。如果实在要用PyTorch 1.x 的早期版本还留着对应的 wheel配合 Python 3.7 环境能跑起来但很多新库你都没法用属于权宜之计。4.4 conda 和系统 Python 的冲突机器人场景的真实教训这个坑我要单独说因为踩的人不少而且症状很迷惑。很多机器人项目ROS 生态整个框架是绑死在系统 Python 上的比如/usr/bin/python3你一旦conda activate之后PYTHONPATH和PATH都被改了系统 Python 找不到自己的库或者反过来 conda 的 Python 去加载了系统的 .so 文件报一堆版本不匹配。我的处理方式是彻底分开需要跑 ROS 的时候用系统 Python 和系统的python3 -m pip install --user需要跑 PyTorch 训练的时候开 conda 环境。两者不要在同一台终端会话里混用。如果非要在同一个脚本里调那就用明确路径调用解释器比如/usr/bin/python3 script.py和~/miniconda3/envs/torch-gpu/bin/python train.py别依赖python这个模糊的名字。调试这类问题的利器是这几个命令遇到诡异导入错误先跑一遍which python python -c import sys; print(sys.path) echo $PYTHONPATH5. 编辑器与开发环境对接5.1 PyCharm 里怎么绑定 conda 解释器环境装完代码编辑器得能认出来。PyCharm 的路径是 File - Settings - Project - Python Interpreter - Add Interpreter - Conda Environment - Existing environment然后指定到.../envs/torch-gpu/python.exeWindows或者.../envs/torch-gpu/bin/pythonLinux。绑定之后有个必做的检查在 PyCharm 底部的 Terminal 里敲python -c import torch; print(torch.cuda.is_available())看输出是不是 True。PyCharm 的 Terminal 默认会用项目解释器激活环境但如果你装了 oh-my-zsh 或者自定义了 shell 配置可能会出现 IDE 用的解释器和终端用的不是同一个。这个不一致会导致IDE 里报 ImportError命令行里明明能跑的诡异现象。如果 PyCharm 启动慢把环境里的科学计算包索引关掉可以提速。Settings - Project - Python Interpreter 右上角的齿轮里有一项 Show All进去可以调。我一般会把torch和numpy这类大包的文档索引关掉索引一次几十秒没必要每开一次项目都重来。5.2 VSCode 里的解释器选择与调试配置VSCode 靠 Python 扩展来识别解释器。装完扩展后按CtrlShiftP输入 Python: Select Interpreter列表里应该能看到你的 conda 环境。如果没看到检查设置里的python.condaPath是不是指向了正确的 conda 可执行文件。要在 VSCode 里调试 PyTorch 代码.vscode/launch.json里可以配一些实用参数{ version: 0.2.0, configurations: [ { name: Python: Current File, type: debugpy, request: launch, program: ${file}, console: integratedTerminal, env: { CUDA_VISIBLE_DEVICES: 0 } } ] }console设成 integratedTerminal 很重要用默认的内部调试台有时候 tqdm 进度条会刷屏刷到没法看。env里指定显卡多卡机器上特别有用。VSCode 还有一个我常用的技巧用 Remote-SSH 连服务器开发。本地机器没显卡服务器有卡代码在服务器上跑编辑器界面在本地。这种模式下解释器选服务器上的 conda 环境路径其他配置和本地一样。要注意的是服务器上的端口转发和文件同步我一般直接用 Remote-SSH 的原生文件系统访问不做额外同步避免版本错乱。5.3 Jupyter 内核注册让 notebook 用上你的环境做实验、画图、快速验证想法Jupyter 比脚本方便得多。要让自己建的 conda 环境出现在 Jupyter 的 kernel 列表里做一次注册conda activate torch-gpu pip install ipykernel python -m ipykernel install --user --name torch-gpu --display-name Python (torch-gpu)--display-name是你在 Jupyter 界面上看到的名字取个能一眼分辨的名字比如 Python 3.10 (torch cu121)。注册完在 notebook 里跑一句!nvidia-smi和import torch; torch.cuda.is_available()确认跑的是对的环境。我遇到过不少次notebook 里跑得特别慢最后一查发现 kernel 选的是 base 环境的 CPU 版 torch。6. 常见问题与排查技巧实录6.1 torch.cuda.is_available() 返回 False 的排查链路这是最高频的问题我按排查顺序列一遍照着一层层往下走。第一步确认nvidia-smi能正常输出。如果这个命令本身报错那就不是 PyTorch 的问题是驱动没装好先去解决驱动。第二步确认装的是 GPU 版。跑print(torch.__version__)看后缀有没有cu。如果显示的是纯版本号或者cpu那就是装错了重装。第三步确认 conda 环境里的 cudatoolkit 和驱动兼容。conda list | grep cudatoolkit看版本对照驱动支持的最高版本超了就得降。第四步检查CUDA_VISIBLE_DEVICES环境变量。如果它被设成了-1或者空字符串进程就看不到卡。这种情况在 CI 环境和某些 IDE 配置里很常见。第五步检查是不是 WSL 或者虚拟机环境。WSL2 需要装专门的 GPU 驱动虚拟机里默认是看不到宿主机显卡的需要配置直通。现象大概率原因处理方式nvidia-smi 报错驱动未装/装错重装官方驱动版本号无 cu装成 CPU 版用 --index-url 重装第一次 False 第二次 True显卡被挂起先调一次 torch.cuda.init()WSL 里不可用缺 WSL GPU 驱动装对应驱动包虚拟机里不可用无显卡直通配置直通或改用物理机6.2 DLL load failed 和运行库缺失Windows 上的经典报错是OSError: [WinError 126] 找不到指定的模块或者DLL load failed while importing _C。这个基本都和 Microsoft Visual C 运行库有关。解决方式是装最新的 Microsoft Visual C Redistributablex64 版本装完重启终端。如果装完运行库还报错那可能是环境本身装坏了。这种情况我一般直接删环境重建比一行行排查快conda deactivate conda env remove -n torch-gpu重建的时候注意不要在环境目录里手动删文件也不要用管理员权限装包这两个操作都很容易造成文件权限和元数据不一致。6.3 版本不匹配的报错速查torch、torchvision、torchaudio这三兄弟的版本是严格绑定的随便升级一个就会报错。典型报错是 torchvision::nms does not exist 或者 operator torchvision::nms does not exist本质就是 torchvision 编译时依赖的 torch 版本和你当前装的不一致。解决办法是三个一起装别单独升降某一个pip install torch2.3.1 torchvision0.18.1 torchaudio2.3.1 --index-url https://download.pytorch.org/whl/cu121版本对应关系可以直接查官方提供的兼容表。我为省事一般会记几个常用组合torch 2.0.x 配 torchvision 0.15.xtorch 2.1.x 配 0.16.xtorch 2.2.x 配 0.17.xtorch 2.3.x 配 0.18.xtorch 2.4.x 配 0.19.x。小数点后面的第三位也有讲究但大版本对上基本就不会出问题。报错关键词常见原因解决方向torchvision::nms does not existtorch/torchvision 版本不匹配成套重装undefined symbol: xxxCUDA runtime 版本冲突统一到同一 CUDA 版本no kernel image available显卡计算能力不在编译列表内降 PyTorch 版本libcudart.so.11.0 not found环境内 runtime 缺失重装 GPU 版 torchnumpy 版本不兼容被依赖降级锁定 numpy 版本6.4 环境体积膨胀与日常清理一个用了一年的 conda 环境长到 15G 我一点都不奇怪。清理分三步走。第一步清缓存conda clean -a和pip cache purge。第二步清无用的环境conda env list看一遍三个月没动过的直接删。第三步如果某个环境里装了一堆失败的实验包直接conda env export env.yml导出干净的依赖列表删环境重建再按 yml 装回去。导出环境这一步有个细节要注意conda env export默认会带上prefix:这一行绝对路径跨机器使用会报错。加--no-builds参数并且手动删掉 prefix 行得到的 yml 才通用conda env export --no-builds | grep -v prefix: environment.yml我还习惯在项目根目录放一个requirements.txt记录 pip 装的包和 conda 的 yml 互为补充。原因很简单conda 导出有时候会把 pip 装的包也一并写进去格式容易乱分成两份更清爽。7. 几条踩过坑之后才明白的经验环境配好之后的很长一段时间里我以为最麻烦的部分已经过去了直到有次在异地的一台机器上复现自己的实验同样的 yml 文件装出来的环境跑出来的指标对不上。最后查出来是 cuDNN 的算法选择策略不同导致的浮点误差累积。从那之后我养成了一个习惯训练脚本开头固定随机种子并且在需要严格复现的实验里把torch.backends.cudnn.deterministic设为 True。代价是速度掉一截但结果能对上。另一件事是关于升级。我现在的原则是不轻易动能跑的环境。看到一个包有新版本就手痒升级结果 torch 或 numpy 一升整个环境的依赖树重排之前调好的代码报错。真要升级先在新建的环境里试跑通了自己项目的核心流程再切换。conda list --revisions能看到环境的变更历史conda install --revision N可以回滚到某个版本这个功能救过我两次值得记住。还有个小技巧分享一下如果你的机器上有多个项目需要频繁切换环境可以写一个极简的 shell 函数一行命令完成激活环境 切到项目目录 打印显卡状态这三件事。用久了能省下大量重复输入。至于把环境配置脚本化——把创建环境、装依赖、注册内核这几步写成一个.sh或.ps1文件放进仓库——我强烈建议每个正式项目都这么做。新人加入的时候一条命令就能跑起来比你口述十分钟靠谱得多。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表