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



所有评论(0)