必须先安装兼容的nvidia驱动,再用conda安装cudatoolkit和pytorch;conda只管理用户空间运行时库,不处理内核级驱动,nvidia-smi能正常输出是前提,否则torch.cuda.is_available()必为false。

直接用 conda 装 CUDA 和 Python 是可行的,但“无缝”只在满足一个前提下成立:你的 NVIDIA 驱动已就绪且版本兼容。Conda 不负责安装或管理内核级驱动,它只管用户空间的 cudatoolkit 和 cuDNN —— 这一点很多人一开始就搞反了。
确认 NVIDIA 驱动已正确安装
这是整个流程的硬性前置条件,跳过必踩坑。Conda 安装的 cudatoolkit 是运行时库,不是驱动本身;它依赖 nvidia-smi 能正常输出信息。
- 运行
nvidia-smi,必须显示 GPU 列表和驱动版本(如Driver Version: 535.129.03) - 查驱动支持的最高 CUDA 版本:访问 NVIDIA 官方兼容表,例如驱动 535 支持 CUDA ≤ 12.2
- 如果
nvidia-smi报错或无输出,先装驱动,别碰 Conda —— 否则后续所有torch.cuda.is_available()都会返回False
用 conda install cudatoolkit 而非手动配 PATH
传统方式把 /usr/local/cuda 加进 PATH 和 LD_LIBRARY_PATH,在 Conda 环境里反而容易冲突。Conda 的 cudatoolkit 是自包含的,它被安装到当前环境路径下(如 ~/miniconda3/envs/pytorch/lib/),并由 Conda 自动注入 LD_LIBRARY_PATH。
- 执行
conda install cudatoolkit=11.8 -c conda-forge或conda install pytorch-cuda=11.8 -c pytorch -c nvidia,后者更推荐,因为它会连带拉取匹配的cuDNN、nccl - 不要手动修改
~/.bashrc添加系统级 CUDA 路径,否则可能覆盖 Conda 环境的库搜索顺序 - 验证是否生效:
python -c "import torch; print(torch.cuda.is_available())"—— 如果为True,说明 Conda 已成功桥接驱动与运行时
Python 版本与 cudatoolkit 的隐式绑定关系
Conda 不会允许你随意组合任意 Python 和 CUDA 版本。它的 solver 会根据 channel 中预编译包的可用性自动约束范围。比如 python=3.12 目前(2026 年中)在 pytorch channel 中仅提供 cudatoolkit=12.1 及以上构建,而 python=3.9 仍广泛支持 cudatoolkit=11.3。
- 创建环境时显式指定两者:
conda create -n py39-cu118 python=3.9 cudatoolkit=11.8 -c conda-forge - 避免只写
python=3.10然后指望 Conda “猜对” CUDA —— 它可能选一个你驱动不支持的版本 - 查看实际安装了什么:
conda list | grep -E "(cuda|cudnn|python)"
为什么 conda env export 不含驱动信息?
conda env export > environment.yml 导出的是环境内可重分布的组件,包括 cudatoolkit、pytorch、python,但绝不会包含 NVIDIA 驱动。这意味着该 YAML 文件在另一台服务器上复现时,必须提前确保目标机器有兼容的驱动。
- 部署前务必检查目标机:
nvidia-smi+ 驱动版本 + 对应 CUDA 支持上限 - 若目标机驱动老旧(如只有 470),你就不能在
environment.yml中写cudatoolkit=12.4,得降级到=11.8或更低 - 团队协作时,建议在 README 中明确标注:“需 NVIDIA 驱动 ≥ 525.60.13”
最常被忽略的一点是:Conda 管理的 cudatoolkit 和系统级 /usr/local/cuda 可以共存,但不能混用。一旦你在代码里调用了 os.environ["CUDA_HOME"] 或硬编码路径,就等于绕过了 Conda 的隔离机制 —— 这种写法在 CI/CD 或容器化部署中极易失效。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











