conda是唯一靠谱起点,因它能在无root权限下将CUDA runtime与PyTorch一并装入用户目录并自动配置LD_LIBRARY_PATH;pip则依赖系统级libcudart.so等库,无root时无法解决路径和权限问题。

conda 是唯一靠谱的起点,其他路径(比如直接 pip install torch 或手动装 CUDA)在无 root 权限下基本会卡死在驱动调用、动态库找不到或权限拒绝这三关。
为什么必须用 conda 而不是 pip?
因为 pip 安装的 torch GPU 版本只打包了 Python 层代码,它依赖系统级的 libcudart.so、libcublas.so 等,而这些库必须由 /usr/local/cuda 提供——你没 root 就没法改系统路径,也没法软链到自己目录;conda 则不同,它能把整套 CUDA runtime(比如 cudatoolkit=11.8)连同 PyTorch 一起下载到用户目录,自动配置 LD_LIBRARY_PATH,不碰系统任何位置。
-
pip install torch→ 报错libcudart.so.11.2: cannot open shared object file -
conda install pytorch-cuda=11.8 -c nvidia→ 自动把cudatoolkit和pytorch装进~/miniconda3/envs/myenv/,且import torch后torch.cuda.is_available()返回True - 注意:不要用
conda install pytorch torchvision torchaudio cudatoolkit=11.8 -c pytorch,那个cudatoolkit来自pytorch频道,和 NVIDIA 官方二进制不完全兼容,容易导致 RTX 30xx/40xx 卡报sm_86或sm_90不支持
如何确认服务器实际支持的 CUDA 计算能力?
别信 nvidia-smi 显示的 “CUDA Version: 12.0”,那是驱动能支持的最高版本,不是你可用的运行时版本。真正决定 PyTorch 能否用 GPU 的,是显卡架构(sm_xx)和你装的 cudatoolkit 是否匹配。
- 先查显卡型号:
nvidia-smi -L→ 得到类似GPU 0: NVIDIA A100-SXM4-40GB (UUID: xxx) - 再查对应架构:
nvidia-smi --query-gpu=name,compute_cap --format=csv→ 输出"A100-SXM4-40GB", "8.0" - 最后查 PyTorch 官网支持表:PyTorch 2.3 支持
sm_75(V100)、sm_80(A100)、sm_86(3090)、sm_90(H100/4090),但不支持sm_60(P100)以下的老卡 - 如果服务器只有
sm_60(如 P100)且预装 CUDA 10.2,你就只能用 PyTorch 1.10,不能硬上 2.x
Miniconda 安装后必须做的三件事
很多人装完 Miniconda 就直接 conda activate,结果 torch.cuda.is_available() 还是 False,问题往往出在这几步漏了。
立即学习“Python免费学习笔记(深入)”;
- 执行
$HOME/miniconda3/bin/conda init bash(或zsh,取决于echo $0输出),然后source ~/.bashrc—— 否则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 --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/+conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/nvidia/ - 创建环境时指定 Python 版本并立即装 PyTorch:
conda create -n pt23 python=3.10 && conda activate pt23 && conda install pytorch-cuda=11.8 -c nvidia—— 不要分开执行,否则可能因缓存导致装错 channel 的包
验证 GPU 是否真在工作,别被 is_available() 骗了
torch.cuda.is_available() 返回 True 只代表库加载成功,不代表显存能分配、核函数能跑。很多人在 Jupyter 里跑通了这个,一跑训练就卡住,其实是显存不足或 NCCL 初始化失败。
- 最简验证:
python -c "import torch; x = torch.ones(1000, 1000).cuda(); print(x.device, x.mean())"—— 必须输出cuda:0且不报OSError: [Errno 12] Cannot allocate memory - 检查可见设备:
export CUDA_VISIBLE_DEVICES=0(如果你有多个 GPU,又没权限用nvidia-smi -i 0 -c 3锁定) - 避免常见坑:
torch.compile在非 root 环境下默认用cudagraphs,可能触发RuntimeError: CUDA error: operation not supported when stream is capturing,临时禁用:torch._dynamo.config.suppress_errors = True或直接不用torch.compile
真正的难点不在安装,而在确认你用的 cudatoolkit 架构、PyTorch 编译版本、NVIDIA 驱动三者是否咬合。服务器上多张卡、混合架构、旧驱动混用的情况太常见,光靠 nvcc -V 或 nvidia-smi 看一眼就开干,90% 会掉坑里。


















