问题的核心在于 transformers 库版本与 InternLM3 模型代码不兼容,以下是系统化解决方案:
🔧 问题根源分析
-
版本冲突:
LossKwargs是 transformers 库在 2025年新增的类(用于统一管理损失函数参数),旧版本(<4.38.0)中不存在该模块5。- 您的模型文件
modeling_internlm3.py尝试导入新版特性,但当前环境的 transformers 版本过低。
-
模型与库的绑定关系:
🛠️ 完整解决方案
1. 强制升级 transformers 至兼容版本
# 指定安装2025年兼容版本(≥4.38.0)
pip install transformers==4.38.0 --upgrade
- 验证安装:
预期输出:python -c "import transformers; print(transformers.__version__)"4.38.0
2. 重建模型权重(若升级无效)
若升级后仍报错,需重新合并 LoRA 权重以匹配当前库版本:
# 使用新版 ms-swift 重新合并权重
swift export \
--adapters /root/paper/config/sft_swift_output/InternLM3-8B-Lora-sft/v5-20250721-173910/checkpoint-124 \
--merge_lora true \
--output_dir /root/paper/config/internlm3-remerged-20250726
- 在配置文件中更新模型路径为新输出目录6。
3. 环境重置(终极方案)
若存在复杂依赖冲突,重建隔离环境:
conda create -n oc_new python=3.10 -y
conda activate oc_new
pip install torch==2.7.1 torchvision==0.22.1 # 保持CUDA版本一致
pip install transformers==4.38.0 opencompass
⚠️ 关键注意事项
-
CUDA 兼容性:
- PyTorch 2.7.1 需 CUDA 12.6,执行
nvcc --version确认输出release 12.6。 - 若使用 NPU(如昇腾),需额外安装
torch_npu适配包。
- PyTorch 2.7.1 需 CUDA 12.6,执行
-
依赖冲突排查:
pip check # 检查包冲突若提示冲突(如
timm与torchvision),用pip uninstall移除冗余包。
📊 技术原理说明
-
**
LossKwargs的作用**:- 该类在 transformers 4.38.0 引入,用于封装 动态损失缩放(Dynamic Loss Scaling)参数,替代旧版的分散参数传递方式5。
- InternLM3 使用该特性实现混合精度训练中的梯度稳定性控制。
-
模型合并的版本敏感性:
- LoRA 权重合并工具(如 ms-swift)会嵌入 transformers 的 API 调用代码到输出模型中。
- 若合并时使用新版库,而推理环境为旧版,会触发元数据缺失错误(如本例)6。
✅ 验证步骤
-
创建测试脚本
/root/paper/config/losskwargs_test.py:from transformers.utils import LossKwargs print("LossKwargs import success!") -
运行验证:
python /root/paper/config/losskwargs_test.py预期输出:
LossKwargs import success! -
重新执行评测:
python run.py /root/paper/config/internlm3-oc_eval.py --debug
替代方案:若时间紧迫,可直接使用官方 OpenCompass Docker 镜像:
docker run -it --gpus all -v /root/paper:/workspace/paper \ opencompass/opencompass:2025.07 \ bash -c "cd /workspace && python paper/config/internlm3-oc_eval.py"
3253





