Linux 上使用 PyTorch 开展深度学习研究的实操指南
一 环境准备与安装
- 建议使用 Anaconda/Miniconda 或 venv 创建隔离环境,避免依赖冲突。
- 先确认是否有 NVIDIA GPU 及其驱动是否正常:运行 nvidia-smi 查看驱动与支持的 CUDA 版本。
- 前往 PyTorch 官网安装页 选择系统、包管理器(Conda/Pip)与计算平台(CPU/CUDA),复制生成命令执行;若使用 GPU,通常选择与 nvidia-smi 所示版本接近或略低的 CUDA 版本。
- 常用安装示例:
- Conda CPU:conda install pytorch torchvision torchaudio cpuonly -c pytorch
- Conda CUDA 11.8:conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
- Pip CPU:pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
- Pip CUDA 11.8:pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
- 安装后验证:
- python - <<‘PY’
import torch
print(“PyTorch:”, torch.version)
print(“CUDA available:”, torch.cuda.is_available())
if torch.cuda.is_available():
print(“CUDA version:”, torch.version.cuda)
print(“GPU count:”, torch.cuda.device_count())
print(“GPU name:”, torch.cuda.get_device_name(0))
PY
以上步骤覆盖环境确认、官网命令生成、常见安装方式与验证要点。
二 数据准备与加载
- 使用 torchvision.datasets 与 transforms 快速获取并增强数据;用 DataLoader 批量加载与并行预取。
- 示例(FashionMNIST):
- from torchvision import datasets, transforms
from torch.utils.data import DataLoader
transform = transforms.Compose([transforms.ToTensor()])
train_ds = datasets.FashionMNIST(root=“data”, train=True, download=True, transform=transform)
test_ds = datasets.FashionMNIST(root=“data”, train=False, download=True, transform=transform)
train_loader = DataLoader(train_ds, batch_size=64, shuffle=True)
test_loader = DataLoader(test_ds, batch_size=64)
- 研究建议:
- 训练/验证/测试集严格划分;
- 训练时启用 shuffle 与 num_workers>0;
- 图像任务常用 Normalize;文本/音频按需做 Tokenization/FeatureExtract。
上述数据管线与 FashionMNIST 用法可直接复用,便于快速实验。
三 训练与评估模板
- 设备选择:device = “cuda” if torch.cuda.is_available() else “cpu”;模型与张量统一 to(device)。
- 模型、损失、优化器:
- class Net(nn.Module): …(略)
- model = Net().to(device); criterion = nn.CrossEntropyLoss(); optimizer = optim.SGD(model.parameters(), lr=1e-3)
- 训练循环(每个 batch):
- optimizer.zero_grad(); output = model(x); loss = criterion(output, y)
- loss.backward(); optimizer.step()
- 评估与保存:
- 验证阶段使用 model.eval() 与 torch.no_grad();
- 保存与加载权重:torch.save(model.state_dict(), “model.pth”); model.load_state_dict(torch.load(“model.pth”))
- 完整流程(数据→模型→训练→测试→保存)可直接套用至分类/回归等任务。
四 研究常用实践
- 可复现性:固定随机种子(Python/NumPy/PyTorch/cuda),设置 deterministic 与 benchmark 策略。
- 资源配置:
- 使用 pin_memory=True、合适的 num_workers;
- 混合精度训练(如 torch.cuda.amp)在保持精度的同时提升吞吐;
- 多卡训练优先 DistributedDataParallel(DDP),单机多卡或单卡均可;必要时用 DataParallel(DP)做快速验证。
- 日志与可视化:
- 记录 loss/accuracy 与关键指标,使用 TensorBoard/Weights & Biases;
- 保存 配置、代码版本(git)、随机种子、模型权重与指标,便于复现实验。
- 调试技巧:
- 小样本过拟合验证代码正确性;
- 使用 torch.autograd.detect_anomaly() 定位异常梯度;
- 逐步放大 batch size 与模型规模,观察显存/吞吐变化。
- 实验管理:
- 采用 Hydra/JSON/YAML 管理超参;
- 定期清理无效检查点,保留最佳与最新 N 个权重。
五 常见问题与排查
- GPU 不可用:
- 运行 nvidia-smi 确认驱动与 CUDA;
- 检查 PyTorch 是否安装为 GPU 版本(torch.cuda.is_available() 为 True);
- 若使用 conda 安装 GPU 版,确保包含 pytorch-cuda=xx 且通道正确(如 -c pytorch -c nvidia)。
- 版本不匹配:
- 驱动支持的 CUDA 与 PyTorch 编译时的 CUDA 不必完全一致,通常选择接近或略低的 CUDA 版本即可;
- 出现符号缺失/库冲突时,优先重建干净环境并统一包来源。
- 性能问题:
- 开启 pin_memory 与合适的 num_workers;
- 使用 AMP 混合精度;
- 数据增强与预处理尽量放在 DataLoader 的多进程中完成。
- 环境隔离:
- 始终在 conda/venv 中工作,避免系统 Python 包污染;
- 记录并复用成功的环境 environment.yml/requirements.txt。
以上排查要点覆盖 GPU 检测、版本选择与性能优化路径。