news 2026/7/16 20:19:14

【llm】——计算llm的ppl损失

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【llm】——计算llm的ppl损失

代码:

# 浮点结果计算+ppl计算fromtransformersimportAutoModelForCausalLM,AutoTokenizerimportjsonfromtqdmimporttqdmimporttorchfromtorch.nnimportCrossEntropyLoss model_name="/data1/huf/Qwen3-0.6B"json_file="/data1/05_ax/01_eval/ppl/qnn/gsm8k_17d799.json"out_json_file="/data1/05_ax/01_eval/ppl/qnn/gsm8k_17d799_qwen3_0.6B_pred.json"num_samples=100device="cuda:7"# load the tokenizer and the modeltokenizer=AutoTokenizer.from_pretrained(model_name)model=AutoModelForCausalLM.from_pretrained(model_name,torch_dtype=torch.float32,device_map=device).to(device)deffind_subsequence(tensor,subsequence):len_tensor=len(tensor)len_subsequence=len(subsequence)foriinrange(len_tensor-len_subsequence+1):iftorch.equal(tensor[i:i+len_subsequence],subsequence):returnireturn-1# 如果没有找到子序列,返回 -1withopen(json_file,'r')asf:datas=json.loads(f.read())template="<|im_start|>user\n{}<|im_end|>\n<|im_start|>assistant\n<think>\n\n</think>\n\n"loss=0.0num_batches=0forkey,itemintqdm(datas.items()):withtorch.no_grad():prompt=item['origin_prompt'][0]['prompt']prompt=template.format(prompt)inputs=tokenizer(prompt,return_tensors="pt").to(model.device)## 浮点模型输出generated_ids=model.generate(**inputs,max_new_tokens=128)output_ids=generated_ids[0][len(inputs.input_ids[0]):].tolist()try:index=len(output_ids)-output_ids[::-1].index(151668)exceptValueError:index=0thinking_content=tokenizer.decode(output_ids[:index],skip_special_tokens=True).strip("\n")content=tokenizer.decode(output_ids[index:],skip_special_tokens=True).strip("\n")## 将浮点结果写回jsonitem['prediction']=content# 计算浮点模型的pplnew_prompt=prompt+content new_inputs=tokenizer(new_prompt,return_tensors="pt").to(model.device)input_ids=new_inputs['input_ids']index=find_subsequence(input_ids[0],torch.tensor([151644,77091,198]).to(device))index=index+3+4## 将编码写入jsonitem['input_ids']=input_ids[0].cpu().numpy().tolist()item['gen_index']=index item['origin_prompt'][0]['new_prompt']=new_prompt outputs=model(input_ids)shift_logits=outputs.logits[...,index:-1,:].contiguous().to(dtype=torch.float32)shift_labels=input_ids[...,index+1:].contiguous().to(shift_logits.device)loss_fct=CrossEntropyLoss()ce_loss=loss_fct(shift_logits.view(-1,shift_logits.size(-1)),shift_labels.view(-1)).detach()loss+=ce_lossprint(f"ce_loss:{ce_loss:3f}, ppl:{ce_loss.exp():3f}")num_batches+=1ifnum_batches>=num_samples:breakloss=loss/num_batches ppl=loss.exp()print(f"ppl loss:{ppl:3f}")# 保存jsonwithopen(out_json_file,'w')asf:json.dump(datas,f,indent=4)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 2:56:34

《夜色正浓》熟男熟女太好磕了!张兆辉蓝盈莹成全剧C位

如果近期你也被都市剧《夜色正浓》刷屏&#xff0c;大概很难不被剧中一对特别的CP吸引&#xff0c;那就是剧中由张兆辉与蓝盈莹所组成的cp&#xff0c;这对年龄悬殊的组合竟碰撞出意料之外的默契火花。这对CP的魅力&#xff0c;在于演员与角色之间的高度契合。张兆辉饰演的沈默…

作者头像 李华
网站建设 2026/6/30 16:27:52

ACN配电监控模块:过流保护+能耗统计,工业场景适配

智能配电监控模块主要用于实时监测、保护、控制、远程管理配电回路&#xff0c;广泛覆盖需要稳定供电、能耗管理、安全报警、无人值守的场景。一、规格分类 4DO(50A)4DI4AI485232 50A电流检测4DO(50A)4DI4AI485232 50A电流检测4DO(50A)4DI4AI网口485232 50A电流检测4DO(50A)4DI…

作者头像 李华
网站建设 2026/7/1 6:16:42

ACN配电监控模块:4路/8路全电参监控,50A磁保持继电器长效运行

ACN配电监控模块是一款集成监测、控制、保护、远程管理功能于一体的智能电力终端设备&#xff0c;特别适用于照明与动力配电回路的精细化管理&#xff0c;通过内置磁保持继电器与智能芯片&#xff0c;实现“监、控、保、管”全流程智能化。一、核心定位 ACN配电监控模块是智能配…

作者头像 李华
网站建设 2026/7/1 8:53:25

天然氧吧的“守护者”:景区负氧离子监测站揭秘

走进山林景区&#xff0c;清新的空气总能让人神清气爽&#xff0c;这背后离不开“空气维生素”——负氧离子的滋养。而撑起这片“天.然氧吧”的&#xff0c;还有一位默默坚守的“守护者”&#xff0c;它就是景区负氧离子监测站。看似不起眼的它&#xff0c;藏着太多鲜为人知的奥…

作者头像 李华
网站建设 2026/7/1 8:53:28

招人求职哪个平台好用?2026招聘平台效果排行榜揭晓

在人才竞争日益激烈的当下&#xff0c;企业HR和求职者都面临一个共同难题&#xff1a;如何高效、精准地完成人岗匹配&#xff1f;传统“海投简历”“广撒网式招聘”已难以满足快节奏的职场需求。据艾瑞咨询《2025年中国智能招聘行业报告》显示&#xff0c;超68%的企业希望借助A…

作者头像 李华