Ubuntu 下 PyTorch 常见问题与快速修复
一 安装与版本兼容
- 建议使用隔离环境(venv 或 conda),Python 版本控制在 3.8–3.11,先升级 pip;GPU 场景选择与驱动匹配的 CUDA 标签(如 cu118/cu121)。示例:
venv:
python3 -m venv ~/pytorch_env && source ~/pytorch_env/bin/activate
python -m pip install --upgrade pip
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
conda:
conda create -n pytorch_env python=3.10 -y
conda activate pytorch_env
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
安装后用 python - <<‘PY’ 验证:
import torch; print(“torch:”, torch.version, “cuda:”, torch.cuda.is_available())
若使用系统包管理器 apt 安装过旧版 PyTorch,可能与 pip 冲突,建议卸载后再用 pip/conda 安装:sudo apt remove python3-pytorch && pip uninstall torch。Ubuntu 24.04 默认可能是 Python 3.12,需安装 3.10/3.11 并在虚拟环境中使用。
二 GPU CUDA 驱动 cuDNN 与环境变量
- 驱动与工具链核对:用 nvidia-smi 查看驱动与“支持的 CUDA 上限”,用 nvcc --version 查看已装 CUDA Toolkit 版本;两者概念不同,PyTorch 的 CUDA 标签需不高于驱动上限且与安装命令匹配。若 torch.cuda.is_available() 为 False,优先检查驱动与安装标签是否一致。
- 驱动安装与升级:ubuntu-drivers devices 查看推荐版本,sudo apt install nvidia-driver-<版本号> 安装,重启后用 nvidia-smi 验证。
- cuDNN 与依赖:若报 libcudnn.so 缺失或不兼容,安装与 CUDA 匹配的 cuDNN(如 CUDA 11.8 对应 cuDNN 8.6+);使用 conda 可通过 pytorch-cuda=11.8 自动处理依赖。
- 环境变量:如使用自装 CUDA,确保 ~/.bashrc 中有
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
并执行 source ~/.bashrc 生效。
三 依赖库缺失与系统库冲突
- 常见运行时缺库:ImportError: libGL.so.1、libglib2.0-0、ffmpeg 等,执行:
sudo apt update && sudo apt install -y libgl1 libglib2.0-0 ffmpeg
- 其他构建依赖(部分功能需要):sudo apt install -y libssl-dev libffi-dev build-essential
- 若出现 libmkl_intel_lp64.so 等 MKL/库路径问题,检查虚拟环境或 conda 环境的库路径配置,必要时在 ~/.bashrc 中调整 LD_LIBRARY_PATH 指向正确位置。
四 数据加载训练与显存问题
- DataLoader 报错:num_workers>0 时报 “already started” 多为子进程/平台限制,先设为 0 排查;图像未转张量导致 TypeError,需在 transform 中加入 transforms.ToTensor()。
- 设备不匹配:CPU 张量喂入 GPU 模型会报 “Input type (torch.FloatTensor) and weight type (torch.cuda.FloatTensor) should be the same”,使用 device 统一设备:
device = torch.device(“cuda” if torch.cuda.is_available() else “cpu”)
model = model.to(device); input_data = input_data.to(device)
- 显存不足:减小 batch size、使用梯度累积、在合适位置调用 torch.cuda.empty_cache() 释放未使用显存。
五 虚拟环境与 IDE 配置及网络问题
- 虚拟环境与路径:确保 which python 与 which pip 指向同一虚拟环境,避免系统包与虚拟环境混用;在 VSCode 按 Ctrl+Shift+P 选择 “Python: Select Interpreter” 指向虚拟环境的 Python(如 ~/miniconda3/envs/pytorch_env/bin/python)。
- 镜像与超时:pip 安装慢或超时可用国内镜像并增加超时,例如:
pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeout=1000
- 最小化定位流程:新建干净环境→升级 pip→安装对应 CUDA 标签的 PyTorch→运行验证脚本(打印 Python/PyTorch 版本与 torch.cuda.is_available()/nvidia-smi 输出),据此判断是版本不匹配、缺库还是路径问题。