第4章:精度对齐环境搭建
说实话,环境搭建这事儿,看着简单,坑可不少。
我见过太多同学,代码写得挺溜,结果一跑精度对齐,各种报错。最后发现,原来是环境没配好。嗯,咱们今天就把这事儿捋清楚。
4.1 Python环境配置
我个人习惯用 conda 来管理环境。为什么?因为干净、隔离、好回滚。
# 创建独立环境
conda create -n precision_align python=3.8 -y
# 激活环境
conda activate precision_align
# 确认版本
python --version
# 输出:Python 3.8.18
这里有个小细节——Python 版本别选太新。3.8 或 3.10 都行,但 3.12 以上容易跟一些旧版 CUDA 工具链打架。我在项目中遇到过,用 Python 3.11 装某个老版本的 torch,直接报「找不到 libcudart.so」——折腾了一下午。
4.2 CUDA/cuDNN 安装
CUDA 版本怎么选?说白了,看你的显卡驱动和 PyTorch 版本。
先查驱动支持的最高 CUDA 版本:
nvidia-smi
# 右上角会显示 CUDA Version: 12.1
然后去 PyTorch 官网,选对应的安装命令。比如我常用的是 CUDA 11.8:
# CUDA 11.8 版本
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
cuDNN 呢?其实 PyTorch 自带了。你不需要单独装。但如果你要跑 TensorFlow 或者自己编译算子,那就得手动装。
解决办法很简单:用 conda 管理 CUDA 工具包,别用系统全局的。
# 查看 CUDA 是否可用
python -c "import torch; print(torch.cuda.is_available())"
# 输出:True
# 查看 CUDA 版本
python -c "import torch; print(torch.version.cuda)"
# 输出:11.8
4.3 精度对齐库安装与验证
精度对齐的核心工具,我推荐三个:
- torch.testing — PyTorch 官方,最稳
- numpy.testing — 轻量级,适合标量对比
- pytest — 组织测试用例,批量跑
安装很简单:
# torch.testing 随 PyTorch 自带,无需额外安装
# 但建议更新到最新
pip install --upgrade torch
# numpy.testing 随 numpy 自带
pip install --upgrade numpy
# pytest 需要单独装
pip install pytest
验证一下能不能用:
python -c "
import torch
from torch.testing import assert_close
# 模拟两个张量,故意制造微小差异
a = torch.tensor([1.0, 2.0, 3.0])
b = torch.tensor([1.0001, 2.0002, 3.0003])
# 默认 rtol=1e-5, atol=1e-8
try:
assert_close(a, b, rtol=1e-3, atol=1e-5)
print('精度对齐通过!')
except AssertionError as e:
print(f'精度对齐失败:{e}')
"
输出应该是「精度对齐通过!」。如果报错,说明环境有问题。
| 参数 | 含义 | 默认值 | 我常用的值 |
|---|---|---|---|
| rtol | 相对误差容忍度 | 1e-5 | 1e-3 ~ 1e-5 |
| atol | 绝对误差容忍度 | 1e-8 | 1e-5 ~ 1e-7 |
你想想看,为什么要有两个容忍度?
因为当数值很大时,绝对误差没意义;当数值接近零时,相对误差会爆炸。两个一起用,才能覆盖各种场景。
4.4 环境验证全流程
我习惯写一个验证脚本,一键跑通所有环节:
# check_env.py
import torch
import numpy as np
from torch.testing import assert_close
print(f'PyTorch 版本: {torch.__version__}')
print(f'CUDA 可用: {torch.cuda.is_available()}')
if torch.cuda.is_available():
print(f'CUDA 版本: {torch.version.cuda}')
print(f'GPU 型号: {torch.cuda.get_device_name(0)}')
# 测试矩阵乘法精度
a = torch.randn(100, 100, device='cuda')
b = torch.randn(100, 100, device='cuda')
c = a @ b
# 用 numpy 做参考
a_np = a.cpu().numpy()
b_np = b.cpu().numpy()
c_np = a_np @ b_np
try:
assert_close(c.cpu(), torch.from_numpy(c_np), rtol=1e-3, atol=1e-5)
print('矩阵乘法精度验证通过!')
except AssertionError as e:
print(f'精度异常:{e}')
跑一下:
python check_env.py
如果全部通过,恭喜你,环境搭建完成。
torch.backends.cudnn.deterministic = True
4.5 知识体系总览
下面这张图,是我自己总结的环境搭建全流程。你照着走,基本不会出问题。
嗯,环境搭建这块,说白了就是「版本匹配」四个字。Python 版本、CUDA 版本、PyTorch 版本,三者必须对齐。少一个都不行。
我个人的经验是:先确定 PyTorch 版本,再反推 CUDA 版本,最后选 Python 版本。这样最省事。
好了,环境搭好了,下一章咱们就开始真正动手做精度对齐了。
想要更多资料,联系可可