当前位置: 首页 > news >正文

带有embeding 同时训练的Lora 权重合并,合并后的权重的模型,再训练数的Loss 突然增加

带有embeding 同时训练的Lora 权重合并

from peftimportPeftModel from transformersimportAutoModelForCausalLM, AutoTokenizer base_model_path="/root/private_data/models/deepseek-ai/6epoch-merged"adapter_path="/root/private_data/output/sharedata/checkpoint-10500/"output_path="/root/private_data/models/deepseek-ai/merged_correct"# 加载基础模型model=AutoModelForCausalLM.from_pretrained(base_model_path,torch_dtype="bfloat16",device_map="cuda:0")# 加载 adaptermodel=PeftModel.from_pretrained(model, adapter_path)# 合并model=model.merge_and_unload()# 保存model.save_pretrained(output_path)tokenizer=AutoTokenizer.from_pretrained(base_model_path)tokenizer.save_pretrained(output_path)

错误的写法 合并后的权重的模型,再训练数的Loss 突然增加

### 合并llamafactory lora 到新的模型,### 注意 --export_dir这个路径,要新的路径,### 新训练的 checkpoint路径不要用原来checkpoint路径,否则会lora对不齐错误### 对应带有embedding 不合适 会丢失信息llamafactory-cliexport\--model_name_or_path/root/private_data/models/deepseek-ai/6epoch-merged\--adapter_name_or_path/root/private_data/output/binding_sft_short_part_004-005_lora64_epoch1/checkpoint-9000\--templatealpaca\--finetuning_typelora\--export_dir/root/private_data/models/deepseek-ai/6epoch-merged-lora64_data005\--export_size4\--export_deviceauto\--export_legacy_formatfalse

错误写法2

importtorchimportjsonimportosimportshutil from safetensors.torchimportload_file, save_file def merge_full_optimized(base_model_path: str, adapter_path: str, output_merged_path: str, device: str="cuda:0"): print(f"🚀 [START] 开始全量合并流程 (LoRA + Embedding)...")# 1. 加载 Adapter 权重并解析 LoRA 配置print(f"📥 加载 Adapter 权重...")adapter_weights=load_file(os.path.join(adapter_path,"adapter_model.safetensors"),device=device)with open(os.path.join(adapter_path,"adapter_config.json"),'r')as f: lora_config=json.load(f)r=lora_config["r"]alpha=lora_config["lora_alpha"]scaling=alpha / r print(f"✅ LoRA 配置读取成功: r={r}, alpha={alpha}, scaling={scaling}")# 2. 【修复】准备输出目录:先从基础模型复制配置文件os.makedirs(output_merged_path,exist_ok=True)print(f"📋 从基础模型复制配置文件...")forfileinos.listdir(base_model_path): src=os.path.join(base_model_path,file)ifos.path.isfile(src)and not any(file.endswith(ex)forexin['.safetensors','.bin','.pt']): shutil.copy2(src, os.path.join(output_merged_path,file))# adapter 目录的非权重文件一般不需要(adapter_config.json 不是合并模型的一部分)# 如果 adapter 目录有其他特殊文件,可以按需添加# 3. 核心合并逻辑:分片处理safetensors_files=sorted([fforfinos.listdir(base_model_path)iff.endswith('.safetensors')])weight_map={}new_num_tokens=Noneforst_fileinsafetensors_files: print(f"📦 处理分片: {st_file}...")src_path=os.path.join(base_model_path, st_file)dst_path=os.path.join(output_merged_path, st_file)state_dict=load_file(src_path,device=device)updated_keys=[]forkeyinlist(state_dict.keys()):# --- A. 处理 LoRA 合并 ---prefix="base_model.model."lora_a_key=f"{prefix}{key.replace('.weight', '.lora_A.weight')}"lora_b_key=f"{prefix}{key.replace('.weight', '.lora_B.weight')}"iflora_a_keyinadapter_weights and lora_b_keyinadapter_weights: W=state_dict[key].to(torch.bfloat16)A=adapter_weights[lora_a_key].to(torch.bfloat16)B=adapter_weights[lora_b_key].to(torch.bfloat16)state_dict[key]=W +(B @ A)* scaling updated_keys.append(key)# --- B. 处理 Embedding 和 LM_Head 替换 ---embed_save_key=f"{prefix}{key}.modules_to_save.default.weight"ifembed_save_keyinadapter_weights: state_dict[key]=adapter_weights[embed_save_key].to(state_dict[key].dtype)if"embed_tokens"inkey: new_num_tokens=state_dict[key].shape[0]print(f"💎 已替换模块: {key}")# 保存分片cpu_state_dict={k: v.contiguous().cpu()fork,vinstate_dict.items()}save_file(cpu_state_dict, dst_path)forkinstate_dict.keys(): weight_map[k]=st_file del state_dict, cpu_state_dict torch.cuda.empty_cache()# 4. 更新 config.jsonifnew_num_tokens: cfg_path=os.path.join(output_merged_path,"config.json")ifos.path.exists(cfg_path): with open(cfg_path,'r+')as f: config=json.load(f)config["vocab_size"]=new_num_tokens f.seek(0)json.dump(config, f,indent=2)f.truncate()print(f"📝 已更新 config.json: vocab_size = {new_num_tokens}")else: print(f"⚠️ 警告: 未找到 config.json,无法更新 vocab_size")# 5. 生成索引total_size=sum(os.path.getsize(os.path.join(output_merged_path, f))forfinsafetensors_files)index_path=os.path.join(output_merged_path,"model.safetensors.index.json")with open(index_path,'w')as f: json.dump({"metadata":{"total_size":total_size},"weight_map":weight_map}, f,indent=2)print(f"✨ [DONE] 全量合并成功!输出目录: {output_merged_path}")print(f"📁 请确认以下文件存在:")forfin["config.json","tokenizer.json","tokenizer_config.json","model.safetensors.index.json"]: p=os.path.join(output_merged_path, f)status="✅"ifos.path.exists(p)else"❌"print(f" {status} {f}")if__name__=="__main__":CONFIG={"base_model_path":"/root/private_data/models/deepseek-ai/6epoch-merged","adapter_path":"/root/private_data/output/sharedata/checkpoint-10500/","output_merged_path":"/root/private_data/models/deepseek-ai/6epoch-merged-sft","device":"cuda:0"}merge_full_optimized(**CONFIG)# 这是一个 Python 的语法技巧,叫做 "字典解包"(Dictionary Unpacking)。# 简单来说,CONFIG 的作用是将一个字典里的键值对,# "拆解"成一个个独立的关键字参数(Keyword Arguments)传给函数。# merge_full_optimized(**CONFIG)
http://www.jsqmd.com/news/784292/

相关文章:

  • 如何免费获取网盘直链:八大主流网盘下载助手完整使用教程
  • 硬件补贴、软件盈利:互联网商业模式的再次轮回?——从软件测试视角看生态闭环与质量博弈
  • Voxtral-4B-TTS-2603部署案例:AI初创公司构建语音内容工厂,日均生成5000+分钟语音
  • CANN/hixl性能基准测试
  • 机器人潜在运动建模技术:提升工业自动化精度
  • 无轨道PD门:重新定义建筑空间通行的技术解析与行业趋势 - 资讯焦点
  • AI文献综述工具评估:性能、可用性与透明度三维度解析
  • 数据要素化与资产化:个人和企业的数据如何产生价值?
  • Phi-4-mini-reasoning 3.8B 网络协议分析助手:智能化解读与故障模拟
  • CANN/pyasc图像加载API
  • 2026 西北旅游优质旅行社推荐:专业定制,畅游甘青 - 深度智识库
  • 2026年数据治理平台综合选型:数据中台落地前必须回答的几个问题
  • 低资源语言AI写作助手:数据质量与微调策略的工程实践
  • 初次使用taotoken模型广场进行模型选型与对比的直观体验
  • 不用等冬季,迈吉科壁挂炉当“夏”安装好处多! - 资讯焦点
  • ROS Navigation编译踩坑记:解决Amcl模块Python3兼容性问题(附完整命令)
  • 保姆级避坑指南:速腾RS-Hellos-16P雷达驱动在Ubuntu20.04下的完整配置流程(含ROS Noetic)
  • AI系统复杂性临界点:从LLM性能瓶颈看AGI发展障碍
  • 找表面共挤塑料型材厂家?2026工业型材定制厂家推荐 - 品牌2025
  • AI编码操作系统oh-my-openagent:多模型智能体编排与哈希锚定编辑实战
  • 厂家推荐首选|2026浙江润鑫便携式公路超载检测仪,适配极端工况 - 品牌速递
  • AI如何革新系统文献综述:从自动化检索到LLM深度信息提取
  • 零代码体验Meta-Llama-3-8B-Instruct:快速搭建对话界面
  • 江西本地餐饮连锁加盟费用全解析及合规选型参考 - 资讯焦点
  • 区块链与AI构建反性勒索平台:SocialDAO的技术架构与伦理实践
  • DeepSeek-OCR入门必看:图文混合文档解析原理与Markdown输出规范
  • 动态CoT切换与并行RL优化在自动定理证明中的应用
  • AEC行业AI与机器人应用中的四大核心伦理挑战与应对策略
  • 2026汽车轴重轮重仪厂家哪家靠谱?浙江润鑫,深耕领域更专业 - 品牌速递
  • GTA5线上小助手免费完整指南:新手如何轻松解锁洛圣都无限可能