4、实验环境搭建:PyTorch 2.0+环境配置、CUDA与cuDNN版本选择、Weights & Biases实验追踪设置
做实验嘛,环境搭不好,后面全是坑。我见过太多同学在环境上浪费一两天,结果发现是CUDA版本不对。今天咱们就把这事一次性搞定。
4.1 PyTorch 2.0+ 环境配置
PyTorch 2.0 是个大版本,引入了 torch.compile,能显著加速模型训练。我个人习惯用 conda 来管理环境,干净利落。
核心要点:PyTorch 2.0+ 对 CUDA 版本有明确要求,别装错了。
先创建一个干净的环境:
conda create -n swiglu_gelu python=3.10
conda activate swiglu_gelu
然后安装 PyTorch。这里要注意,官方推荐用 pip 安装,因为 conda 源有时候更新慢。我建议直接去 PyTorch 官网选对应版本:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
为什么选 cu118?因为 CUDA 11.8 是目前兼容性最好的版本。我踩过 CUDA 12.0 的坑,有些老算子不兼容,折腾了半天。
小技巧:安装完后,跑一下 python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())",确认 GPU 可用。
4.2 CUDA 与 cuDNN 版本选择
说白了,CUDA 是 NVIDIA 的并行计算平台,cuDNN 是专门为深度学习优化的加速库。两者版本必须匹配。
我整理了一个版本对照表,方便你参考:
| PyTorch 版本 | 推荐 CUDA 版本 | 推荐 cuDNN 版本 | 备注 |
|---|---|---|---|
| 2.0.0 | 11.7 / 11.8 | 8.5.0 | 稳定首选 |
| 2.1.0 | 11.8 / 12.1 | 8.7.0 | 支持新特性 |
| 2.2.0+ | 11.8 / 12.1 | 8.9.0 | 推荐 11.8 |
我曾经在项目中用过 CUDA 12.0,结果发现 cuDNN 8.6 有个 bug,导致卷积运算偶尔出错。后来老老实实换回 11.8,再也没出过问题。所以我的建议是:别追新,求稳。
安装 cuDNN 也很简单,下载对应版本的 tar 包,解压后复制到 CUDA 目录:
tar -xzvf cudnn-linux-x86_64-8.7.0.84_cuda11-archive.tar.xz
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
注意:cuDNN 版本必须和 CUDA 版本严格对应,否则训练时会报奇怪的错误。我曾经因为版本不匹配,模型跑了一天才发现精度不对,血泪教训。
4.3 Weights & Biases 实验追踪设置
做实验不记录,等于白做。W&B 是我最常用的实验追踪工具,比 TensorBoard 好用多了。它能自动记录超参数、损失曲线、GPU 利用率,还能对比不同实验。
安装很简单:
pip install wandb
然后登录:
wandb login
会弹出一个链接,复制到浏览器,获取 API key 粘贴回来就行。
在代码里集成 W&B 也很简单,我一般这样写:
import wandb
# 初始化
wandb.init(
project="swiglu_vs_gelu",
config={
"learning_rate": 0.001,
"architecture": "SwiGLU",
"dataset": "ImageNet-1k",
"epochs": 100
}
)
# 训练循环中记录
for epoch in range(epochs):
train_loss = train_one_epoch()
val_acc = validate()
wandb.log({
"train_loss": train_loss,
"val_accuracy": val_acc,
"epoch": epoch
})
个人经验:我习惯在 config 里记录所有超参数,包括 batch size、优化器类型、激活函数等。这样回头对比实验时,一眼就能看出差异。
W&B 还有一个很实用的功能——对比实验。你可以把 SwiGLU 和 GELU 的实验放在同一个 project 里,用不同的 run name 区分。然后在 W&B 网页上直接对比损失曲线和准确率曲线,非常直观。
嗯,这里要注意一点:W&B 默认会记录所有 print 输出和系统指标,如果你觉得信息太多,可以在 init 时设置 settings=wandb.Settings(_disable_stats=True) 来关闭。
4.4 环境验证脚本
为了确保一切就绪,我写了个小脚本,跑一下就知道环境对不对:
import torch
import wandb
print(f"PyTorch 版本: {torch.__version__}")
print(f"CUDA 是否可用: {torch.cuda.is_available()}")
print(f"CUDA 版本: {torch.version.cuda}")
print(f"cuDNN 版本: {torch.backends.cudnn.version()}")
print(f"GPU 数量: {torch.cuda.device_count()}")
print(f"当前 GPU: {torch.cuda.get_device_name(0)}")
# 测试 W&B
wandb.init(project="test_env", mode="dryrun")
wandb.log({"test": 1})
wandb.finish()
print("W&B 配置成功!")
如果所有输出都正常,恭喜你,环境搭建完成。如果报错,别慌,多半是 CUDA 版本或 cuDNN 路径的问题。检查一下 LD_LIBRARY_PATH 环境变量,确保指向正确的 CUDA 目录。
总结一下:PyTorch 2.0+ 配 CUDA 11.8 + cuDNN 8.7,这是目前最稳的组合。W&B 用来记录实验,省心省力。环境搭好了,后面才能安心做评测。
这张图把整个环境搭建的流程串起来了。从 PyTorch 安装,到 CUDA/cuDNN 配置,再到 W&B 集成,最后用验证脚本收尾。每一步都有坑,但按这个流程走,基本不会出大问题。