第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」——折腾了一下午。

我的建议:用 Python 3.8 或 3.10,兼容性最好。别追新。

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 或者自己编译算子,那就得手动装。

注意:我曾经踩过一个坑——系统里装了 CUDA 12.0,但 PyTorch 只支持到 11.8。结果一跑 torch.cuda.is_available() 返回 False。查了半天,发现是 PATH 环境变量里 CUDA 版本冲突了。

解决办法很简单:用 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-51e-3 ~ 1e-5
atol绝对误差容忍度1e-81e-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

如果全部通过,恭喜你,环境搭建完成。

避坑指南:我曾经在服务器上配环境,发现 GPU 算出来的结果跟 CPU 对不上。查了两天,最后发现是 cuDNN 的确定性算法没开。加上一行代码就解决了:
torch.backends.cudnn.deterministic = True

4.5 知识体系总览

下面这张图,是我自己总结的环境搭建全流程。你照着走,基本不会出问题。

精度对齐环境搭建流程 Python 环境 conda create -n precision_align CUDA 工具包 nvidia-smi 确认版本 PyTorch 安装 conda install pytorch-cuda 精度对齐库 torch.testing + numpy.testing + pytest 环境验证 assert_close 测试 + GPU 可用性检查 ✅ 通过 → 开始精度对齐 ❌ 失败 → 检查版本冲突

嗯,环境搭建这块,说白了就是「版本匹配」四个字。Python 版本、CUDA 版本、PyTorch 版本,三者必须对齐。少一个都不行。

我个人的经验是:先确定 PyTorch 版本,再反推 CUDA 版本,最后选 Python 版本。这样最省事。

好了,环境搭好了,下一章咱们就开始真正动手做精度对齐了。


想要更多资料,联系可可