问题背景
最近在学习和训练多模态大模型时,执行训练脚本:
bash
python train_pretrain_vlm.py --epochs 4
程序启动后立即报错:
text
AttributeError: module 'torch' has no attribute 'float8_e8m0fnu'
随后引发:
text
ModuleNotFoundError: Could not import module 'PreTrainedModel'
很多同学第一反应会认为是 CUDA 版本不兼容,实际上问题往往出在 PyTorch 与 Transformers 版本不匹配。
一、先确认 GPU 与 CUDA 环境
训练前建议先确认服务器环境。
查看显卡驱动:
bash
nvidia-smi
示例:
text
Driver Version: 575.xx
CUDA Version: 13.0
这里显示的 CUDA Version 并不是实际安装的 CUDA Toolkit,而是当前驱动支持的最高 CUDA 版本。
查看 PyTorch 环境:
bash
python -c "
import torch
print('Torch:',torch.__version__)
print('CUDA:',torch.version.cuda)
print('GPU Available:',torch.cuda.is_available())
"
输出:
text
Torch: 2.5.1+cu124
CUDA: 12.4
GPU Available: True
说明:
- 驱动支持 CUDA 13.0
- PyTorch 使用 CUDA 12.4
- GPU 可正常调用
这是完全正常的情况。
二、查看 Transformers 版本
查看当前安装版本:
bash
python -c "import transformers; print(transformers.__version__)"
或者:
bash
pip show transformers
我这里发现版本为:
text
5.10.2
这个版本明显偏新。
三、错误原因分析
报错核心:
text
torch.float8_e8m0fnu
来自:
text
transformers/integrations/finegrained_fp8.py
新版 Transformers 在导入时尝试加载 FP8 相关功能:
python
torch.float8_e8m0fnu
但当前 PyTorch:
text
torch 2.5.1+cu124
并未提供该属性。
因此出现:
text
AttributeError
最终导致:
text
ModuleNotFoundError: Could not import module 'PreTrainedModel'
四、如何判断是不是版本兼容问题
执行:
bash
pip list | grep -E "torch|transformers"
例如:
text
torch 2.5.1+cu124
transformers 5.10.2
如果:
- torch < 2.7
- transformers > 5.x
大概率会出现类似问题。
五、推荐解决方案
最简单的方法:
降级 Transformers。
卸载:
bash
pip uninstall -y transformers
安装稳定版本:
bash
pip install transformers==4.51.3
验证:
bash
python -c "import transformers; print(transformers.__version__)"
输出:
text
4.51.3
即可。
六、推荐的大模型学习环境
当前较稳定的组合:
text
Python 3.10~3.12
Torch 2.5.1+cu124
Transformers 4.51.3
Accelerate 最新稳定版
Safetensors 最新稳定版
安装命令:
bash
pip install \
torch==2.5.1 \
torchvision==0.20.1 \
torchaudio==2.5.1 \
--index-url https://download.pytorch.org/whl/cu124
pip install \
transformers==4.51.3 \
accelerate \
safetensors
七、常用排查命令汇总
查看 GPU:
bash
nvidia-smi
查看 CUDA Toolkit:
bash
nvcc -V
查看 Torch:
bash
python -c "
import torch
print(torch.__version__)
print(torch.version.cuda)
print(torch.cuda.is_available())
"
查看 Transformers:
bash
python -c "
import transformers
print(transformers.__version__)
"
查看依赖:
bash
pip list | grep -E "torch|transformers|accelerate|tokenizers"
八、经验总结
遇到大模型训练报错时,不要第一时间怀疑 CUDA。
建议按照以下顺序排查:
- GPU 是否可用
- CUDA Runtime 是否正常
- PyTorch 是否正常识别 GPU
- Transformers 版本是否过新
- Accelerate、PEFT 等依赖是否匹配
大部分「导入失败」「找不到属性」「PreTrainedModel 无法导入」的问题,本质上都是依赖版本不兼容导致的。
记住一句话:
CUDA 能识别 GPU,不代表 Transformers 一定兼容;大模型训练环境最重要的是整套依赖版本的匹配。