news 2026/5/1 10:22:34

【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/4/18 11:28:14

打工人上班摸魚小說-第十章 钓鱼邮件、边界测试与“灵感”再现

第十章 钓鱼邮件、边界测试与“灵感”再现 匿名信引发的暗流&#xff0c;在接下来的几天里并未平息&#xff0c;反而有愈演愈烈之势。 OA系统上的安全通告越发密集&#xff0c;措辞也一次比一次严厉。专项审查小组正式成立的消息被高亮置顶&#xff0c;后面附着一长串需要配合…

作者头像 李华
网站建设 2026/5/1 7:30:58

AI 赋能:如何利用大模型自动生成企微外部群高转化率文案?

​QiWe开放平台 个人名片 API驱动企微自动化&#xff0c;让开发更高效 核心能力&#xff1a;API 驱动企微自动化&#xff0c;提升开发效率 官方站点&#xff1a;https://www.qiweapi.com 对接通道&#xff1a;进入官方站点联系客服 团队定位&#xff1a;企微生态深度服务&…

作者头像 李华
网站建设 2026/5/1 6:26:47

CST案例:Interference Task车载GPS天线射频干扰desense仿真.docx

作者 | Zhou Ming 对于射频系统来说&#xff0c;潜在的数字电路干扰源除了时钟CLK信号外&#xff0c;还有可能是来自数据信号&#xff0c;数据信号的产生的频谱通常是宽频带的&#xff0c;如上图所示&#xff0c;我们称为任意噪声谱&#xff08;Arbitrary Noise Spectrum&#…

作者头像 李华