CUDA 版本下 Transformers 报错排查与解决办法

问题背景

最近在学习和训练多模态大模型时,执行训练脚本:

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。

建议按照以下顺序排查:

  1. GPU 是否可用
  2. CUDA Runtime 是否正常
  3. PyTorch 是否正常识别 GPU
  4. Transformers 版本是否过新
  5. Accelerate、PEFT 等依赖是否匹配

大部分「导入失败」「找不到属性」「PreTrainedModel 无法导入」的问题,本质上都是依赖版本不兼容导致的。

记住一句话:

CUDA 能识别 GPU,不代表 Transformers 一定兼容;大模型训练环境最重要的是整套依赖版本的匹配。

相关推荐
用户460381291941 小时前
ChatMemory 要被弃用了?Spring AI 2.1 用事件溯源重做 Agent 记忆
llm·agent
泯泷3 小时前
别再死磕提示词了:Anthropic 说,AI Agent 真正的胜负手是“上下文工程”
llm·aigc·agent
布吉岛的石头3 小时前
Java 程序员第 50 阶段14:灾难性遗忘与回放
人工智能·深度学习·transformer
mCell3 小时前
AI 时代,我为什么开始追求 100% 的测试覆盖率?
llm·ai编程·测试
weixin_468466857 小时前
视觉Transformer的“第二次革命”:ViT³如何用测试时训练重构注意力范式
人工智能·深度学习·机器学习·ai·重构·transformer·vit
lucas_AI9 小时前
给 Claude Code 挂上代码地图:token 省了 39%,但先看你的瓶颈在哪
llm·agent
用户0328240970591 天前
大模型不按指定语言回答怎么办:一次线上事故的修法(脚本检查 → 带规则重问一次 → 翻译兜底,附 Python 代码)
llm
DevOps老兵1 天前
Transformer拆解13:现代大模型改了什么,RoPE、RMSNorm、SwiGLU与GQA
transformer·gqa·rope·rmsnorm·swiglu
chengzhnag2 天前
用一台旧手机,把 AI 记账搬进微信
llm
wovow_mak2 天前
零基础本地部署大模型完整指南:附一键脚本 + 全踩坑记录,家用电脑就能跑
llm