AttributeError: ‘Qwen2ForCausalLM‘ object has no attribute猴子补丁为 Qwen2ForCausalLM 补充 set_submodule 方法
适配 PyTorch 2.4 Transformers 5.2 的解决方案你提到的版本组合PyTorch 2.4 Transformers 5.2是关键信息这个版本组合下需要针对性调整代码核心解决set_submodule兼容问题和 Qwen2 模型加载适配问题。第一步确认依赖版本验证环境先执行以下命令确认版本匹配避免版本混杂# 检查版本python-cimport torch, transformers; print(fPyTorch: {torch.__version__}); print(fTransformers: {transformers.__version__})# 确保版本输出为# PyTorch: 2.4.0# Transformers: 5.2.0第二步适配版本的完整代码以下是针对 PyTorch 2.4 Transformers 5.2 优化的代码重点修复 Qwen2 模型加载的set_submodule问题importosimporttorchimportloggingfromtransformersimport(AutoModelForCausalLM,AutoTokenizer,BitsAndBytesConfig,Qwen2ForCausalLM# 显式导入Qwen2模型类)fromunslothimportFastLanguageModelimportwarnings warnings.filterwarnings(ignore)# 配置日志logging.basicConfig(levellogging.INFO,format%(asctime)s - %(levelname)s - %(message)s)# 修复Transformers 5.2中Qwen2的set_submodule兼容问题defmonkeypatch_qwen2_set_submodule():为Qwen2ForCausalLM添加缺失的set_submodule方法适配PyTorch 2.4ifnothasattr(Qwen2ForCausalLM,set_submodule):defset_submodule(self,module_name,value):# 拆分模块名如 model.layers.0.self_attn.q_projpartsmodule_name.split(.)parentselfforpartinparts[:-1]:parentgetattr(parent,part)# 设置最终模块setattr(parent,parts[-1],value)Qwen2ForCausalLM.set_submoduleset_submodule logging.info(✅ 已为Qwen2ForCausalLM补丁set_submodule方法)defmain():try:# 【0/5】补丁Qwen2模型核心修复monkeypatch_qwen2_set_submodule()# 【1/5】加载本地扩充词库logging.info(【1/5】加载本地扩充词库...)vocab_size203711# 替换为你的实际词库大小逻辑logging.info(f✅ 本地词库加载完成扩充后词库大小{vocab_size})# 【2/5】配置4bit量化适配Transformers 5.2logging.info(【2/5】加载本地DeepSeekR1-Qwen-14B模型...)bnb_configBitsAndBytesConfig(load_in_4bitTrue,bnb_4bit_use_double_quantTrue,bnb_4bit_quant_typenf4,bnb_4bit_compute_dtypetorch.bfloat16,bnb_4bit_quant_storagetorch.float32# Transformers 5.2新增参数)# 模型路径替换为你的实际路径model_path/path/to/your/DeepSeekR1-Qwen-14B# 加载tokenizertokenizerAutoTokenizer.from_pretrained(model_path,trust_remote_codeTrue,padding_sideright,use_fastFalse,dtypetorch.bfloat16# 替换废弃的torch_dtype)# 加载模型适配Transformers 5.2 PyTorch 2.4modelAutoModelForCausalLM.from_pretrained(model_path,quantization_configbnb_config,device_mapauto,trust_remote_codeTrue,dtypetorch.bfloat16,# 替换torch_dtypelow_cpu_mem_usageTrue)logging.info(✅ Qwen2模型加载完成适配PyTorch 2.4 Transformers 5.2)# 【3/5】后续训练逻辑示例logging.info(【3/5】开始模型训练...)# 这里添加你的训练代码exceptExceptionase:logging.error(f训练出错{str(e)})raiseif__name____main__:main()关键修改说明针对 PyTorch 2.4 Transformers 5.2核心补丁set_submoduleTransformers 5.2 在调用 bitsandbytes 4bit 量化时会调用模型的set_submodule方法但 Qwen2ForCausalLM 原生未实现该方法我们通过猴子补丁monkeypatch为 Qwen2ForCausalLM 手动添加set_submodule方法逻辑与 PyTorch 2.4 原生实现一致适配 Transformers 5.2 的参数变更移除废弃的torch_dtype参数统一使用dtype添加bnb_4bit_quant_storagetorch.float32Transformers 5.2 对 4bit 量化的必填参数显式导入Qwen2ForCausalLM类避免 AutoModel 自动加载时的类型识别问题版本兼容优化保留trust_remote_codeTrueQwen2 模型必须使用device_mapauto适配 PyTorch 2.4 的设备分配逻辑关闭use_fasttokenizerQwen2 与 fast tokenizer 存在兼容性问题第三步验证修复效果运行代码后如果看到以下日志说明修复成功2026-03-16 XX:XX:XX,XXX - INFO - ✅ 已为Qwen2ForCausalLM补丁set_submodule方法 2026-03-16 XX:XX:XX,XXX - INFO - 【1/5】加载本地扩充词库... 2026-03-16 XX:XX:XX,XXX - INFO - ✅ 本地词库加载完成扩充后词库大小203711 2026-03-16 XX:XX:XX,XXX - INFO - 【2/5】加载本地DeepSeekR1-Qwen-14B模型... 2026-03-16 XX:XX:XX,XXX - INFO - ✅ Qwen2模型加载完成适配PyTorch 2.4 Transformers 5.2补充版本兼容注意事项Unsloth 版本适配确保 Unsloth 版本 ≥ 2024.9否则可能与 Transformers 5.2 冲突pipinstall--upgradeunsloth2024.9-ihttps://pypi.org/simple/Bitsandbytes 版本建议使用 0.43.1与 PyTorch 2.4 Transformers 5.2 最佳兼容pipinstallbitsandbytes0.43.1总结核心修复通过猴子补丁为 Qwen2ForCausalLM 补充set_submodule方法解决 Transformers 5.2 调用该方法时的属性缺失问题。版本适配针对 Transformers 5.2 调整量化参数新增bnb_4bit_quant_storage替换废弃的torch_dtype参数为dtype。环境保障确保 Unsloth ≥ 2024.9、Bitsandbytes 0.43.1与 PyTorch 2.4 Transformers 5.2 形成稳定兼容组合。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2415859.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!