Mac M2加载大模型时offload_dir配置报错问题求助
问题原因
加载Peft模型后,模型结构被base_model包裹,系统会重新计算device_map,但此时未正确传递卸载目录参数,或未复用原模型的device_map,导致触发缺少offload_dir的错误。
解决方案
方案一:复用原模型的device_map
加载原模型后保存其device_map,在Peft加载时传入该映射,避免重新计算:
from peft import PeftModel from transformers import AutoTokenizer, GPTJForCausalLM, BitsAndBytesConfig quantization_config = BitsAndBytesConfig(llm_int8_enable_fp32_cpu_offload=True) tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-j-6B") tokenizer.pad_token = tokenizer.eos_token tokenizer.pad_token_id = tokenizer.eos_token_id offload_folder="/Users/matthewberman/Desktop/offload" # 加载原模型 model = GPTJForCausalLM.from_pretrained( "EleutherAI/gpt-j-6B", device_map="auto", offload_folder=offload_folder, quantization_config=quantization_config ) # 保存原模型的设备映射 original_device_map = model.hf_device_map # 加载Peft模型时复用设备映射 model = PeftModel.from_pretrained( model, "samwit/dolly-lora", offload_dir=offload_folder, device_map=original_device_map )
方案二:加载Peft时明确指定device_map和offload_dir
在Peft加载时同时指定device_map="auto"和offload_dir,让系统重新计算设备映射时能找到卸载目录:
model = PeftModel.from_pretrained( model, "samwit/dolly-lora", offload_dir=offload_folder, device_map="auto" )
方案三:升级依赖版本
若为版本兼容问题,执行以下命令升级相关库:
pip install --upgrade transformers peft bitsandbytes
内容的提问来源于stack exchange,提问作者Matthew Berman
相关产品推荐
相关产品推荐

