PyTorch作为当前最流行的深度学习框架之一,其安装过程看似简单实则暗藏玄机。作为一名在AI领域摸爬滚打多年的从业者,我见过太多人因为安装不当导致后续开发受阻的情况。下面我将分享在Ubuntu系统上安装PyTorch的完整指南,包含pip和conda两种主流方式的选择策略与实操细节。
在开始安装前,必须做好三项基础检查:
bash复制lsb_release -a
Ubuntu 18.04/20.04/22.04等不同版本对CUDA的支持存在差异,建议使用LTS版本以获得最佳兼容性。
bash复制nvidia-smi
这个命令不仅能显示GPU信息,顶部还会显示当前安装的CUDA驱动版本(注意:这里显示的是驱动支持的CUDA最高版本,而非实际安装的CUDA Toolkit版本)。
bash复制python3 --version
pip3 --version
PyTorch对Python版本有严格要求,建议使用Python 3.7-3.10之间的版本以获得最佳支持。
重要提示:如果系统同时存在Python 2和Python 3,务必使用python3和pip3命令以避免版本混淆。
两种安装方式的本质区别在于包管理机制:
| 特性 | pip安装 | conda安装 |
|---|---|---|
| 依赖管理 | 较简单,可能产生冲突 | 更完善的依赖解决方案 |
| 隔离性 | 需配合venv使用 | 原生支持环境隔离 |
| CUDA集成 | 需手动匹配版本 | 自动处理CUDA依赖 |
| 适用场景 | 快速试用、简单项目 | 长期开发、复杂项目 |
| 磁盘占用 | 较小 | 较大(包含更多依赖) |
个人建议:如果是短期项目或快速原型开发,使用pip更轻量;如果是长期研究或企业级项目,conda的环境隔离特性更能保证项目稳定性。
首先更新系统包并确保pip处于最新状态:
bash复制sudo apt update
sudo apt upgrade -y
python3 -m pip install --upgrade pip
强烈建议使用虚拟环境避免污染系统Python:
bash复制python3 -m venv pytorch_env
source pytorch_env/bin/activate
PyTorch官网提供的安装命令会根据CUDA版本变化,但实际安装时需要区分三种情况:
bash复制pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
bash复制pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
bash复制pip3 install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113
关键细节:
+cuXXX后缀必须与系统实际安装的CUDA Toolkit版本严格匹配,可通过nvcc --version查询。常见的版本对应关系如下:
| PyTorch版本 | 支持CUDA版本 | 备注 |
|---|---|---|
| 2.0+ | 11.7/11.8 | 最新稳定版 |
| 1.12.x | 11.3/11.6 | 长期支持版本 |
| 1.8.x | 10.2/11.1 | 旧版兼容性选择 |
问题1:ERROR: Could not find a version that satisfies the requirement torch...
解决方案:
--pre参数安装预览版问题2:ImportError: libcudart.so.11.0: cannot open shared object file
解决方案:
bash复制sudo apt install nvidia-cuda-toolkit
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
问题3:安装后torch.cuda.is_available()返回False
检查步骤:
推荐使用Miniconda而非完整的Anaconda,更节省空间:
bash复制wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
安装后初始化conda:
bash复制source ~/.bashrc
conda init
创建专用环境(示例使用Python 3.9):
bash复制conda create -n pytorch python=3.9
conda activate pytorch
基础安装命令:
bash复制conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
参数详解:
pytorch-cuda=12.1:显式指定CUDA版本-c pytorch -c nvidia:从官方频道获取最新版本-c conda-forge:替代频道,有时更新更快对于特定版本需求:
bash复制conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.3 -c pytorch
bash复制conda env export > environment.yaml
conda env create -f environment.yaml
bash复制conda clean --all
bash复制conda search pytorch --channel pytorch
bash复制conda install cudatoolkit=11.3
conda install cudatoolkit=11.8
创建test_pytorch.py文件:
python复制import torch
print(f"PyTorch版本: {torch.__version__}")
print(f"CUDA可用: {torch.cuda.is_available()}")
print(f"CUDA版本: {torch.version.cuda}")
print(f"设备数量: {torch.cuda.device_count()}")
print(f"当前设备: {torch.cuda.current_device()}")
print(f"设备名称: {torch.cuda.get_device_name(0)}")
预期输出示例:
code复制PyTorch版本: 2.0.1+cu118
CUDA可用: True
CUDA版本: 11.8
设备数量: 1
当前设备: 0
设备名称: NVIDIA GeForce RTX 3090
使用以下代码测试矩阵运算性能:
python复制import torch
import time
device = 'cuda' if torch.cuda.is_available() else 'cpu'
x = torch.randn(10000, 10000).to(device)
y = torch.randn(10000, 10000).to(device)
start = time.time()
z = torch.matmul(x, y)
elapsed = time.time() - start
print(f"矩阵乘法耗时: {elapsed:.4f}秒")
print(f"结果大小: {z.size()}")
健康指标参考:
通过venv+conda实现灵活版本管理:
bash复制conda create -n pt18 python=3.8
conda activate pt18
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1 -c pytorch
conda create -n pt20 python=3.9
conda activate pt20
conda install pytorch==2.0.0 torchvision==0.15.0 torchaudio==2.0.0 pytorch-cuda=11.8 -c pytorch -c nvidia
对于无网络环境:
bash复制pip download torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
bash复制pip install --no-index --find-links=/path/to/packages torch torchvision torchaudio
安装时启用优化选项:
bash复制CMAKE_ARGS="-DUSE_CUDA=ON -DUSE_CUDNN=ON -DUSE_NCCL=ON" pip install torch --no-cache-dir
官方提供预配置镜像:
bash复制docker pull pytorch/pytorch:2.0.1-cuda11.7-cudnn8-runtime
自定义Dockerfile示例:
dockerfile复制FROM nvidia/cuda:11.7.1-base
RUN apt update && apt install -y python3-pip
RUN pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu117
典型报错:CUDA error: no kernel image is available for execution
解决方案矩阵:
| 错误类型 | 检查点 | 解决方法 |
|---|---|---|
| 架构不匹配 | torch.cuda.get_arch_list() | 安装sm_xx兼容版本 |
| 驱动版本过低 | nvidia-smi显示版本 | 升级驱动到≥CUDA要求版本 |
| Toolkit版本不一致 | nvcc --version与torch.version.cuda | 重装匹配版本的CUDA Toolkit |
报错:CUDA out of memory
优化策略:
python复制for i, (inputs, labels) in enumerate(dataloader):
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
if (i+1) % 4 == 0: # 每4个batch更新一次
optimizer.step()
optimizer.zero_grad()
python复制scaler = torch.cuda.amp.GradScaler()
with torch.cuda.amp.autocast():
outputs = model(inputs)
loss = criterion(outputs, labels)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
DataParallel基础用法:
python复制model = torch.nn.DataParallel(model, device_ids=[0, 1])
更高效的DistributedDataParallel:
python复制torch.distributed.init_process_group(backend='nccl')
model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[local_rank])
启动命令:
bash复制python -m torch.distributed.launch --nproc_per_node=2 train.py
安全升级步骤:
bash复制conda env export > backup.yaml
pip freeze > requirements.txt
bash复制conda create -n test_upgrade --clone pytorch
conda activate test_upgrade
bash复制conda update pytorch torchvision torchaudio cudatoolkit -c pytorch -c nvidia
PyTorch LTS版本路线图:
| 版本号 | 维护截止 | 适用场景 |
|---|---|---|
| 2.0.x | 2025.06 | 生产环境推荐 |
| 1.12.x | 2023.10 | 旧代码兼容 |
| 1.8.x | 已停止 | 仅限历史项目维护 |
使用conda的精确依赖解决:
bash复制conda install --freeze-installed pytorch
或者使用mamba加速器:
bash复制conda install -n base -c conda-forge mamba
mamba install pytorch torchvision torchaudio
对于复杂冲突,可以尝试:
bash复制conda env create -f environment.yaml --force