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

微信小程序网站建设公司广东省人大常委会

微信小程序网站建设公司,广东省人大常委会,做彩铃网站,各种网站底部图标代码遇到的问题: 在使用hugging face封装的Trainer的时候,使用了自定义的compute_metric函数,但是会出现OOM的情况。 我的transformer版本是: 经过验证,发现哪怕compute_metrics里的内容写的再简单,只有一个p…

遇到的问题:

在使用hugging face封装的Trainer的时候,使用了自定义的compute_metric函数,但是会出现OOM的情况。

我的transformer版本是:

经过验证,发现哪怕compute_metrics里的内容写的再简单,只有一个print,也不行,根本就执行不到这个函数内部。才发现,原来不是这个东西的内部的问题。

原因:

经过探究发现,Trainer会把所有 logits、label都算好,拼在一起后,再从CUDA传到内存,然后,再给compute_metrics计算指标。这样导致需要特别大的内存。直接就报错了。

有一些解决思路是:

1. 调节per_device_eval_batch_size=1, eval_accumulation_steps  这俩参数来解决。

        经过尝试,确实会好一点,但是速度非常慢,但是对于较大的验证集,还是不行,治标不治本。原理就是:

        per_device_eval_batch_size 用来 设置验证的时候的batchsize,但是不能解决,拼接了很大的数据量的问题。

        eval_accumulation_steps 是分步骤累积评估结果,减少显存峰值,可能对于 GPU的oom 会有点用吧。但是同样还是没有解决计算所有logits之后,拼接的问题。

training_args = TrainingArguments(# 其他的参数设置# .....# 这两个参数的使用per_device_eval_batch_size=1,eval_accumulation_steps=100)

最优解:preprocess_logits_for_metrics 函数

使用 preprocess_logits_for_metrics 函数 ,这个函数就是用于在每个评估步骤中缓存 logits之前对其进行预处理。

使用方法如下,注意搭配的compute_metrics 可能需要进一步修改,因为,已经在preprocess_logits_for_metrics计算出来需要使用的东西了。

def compute_metrics(pred):labels_ids = pred.label_idspred_ids = pred.predictions[0]pred_str = tokenizer.batch_decode(pred_ids, skip_special_tokens=True)labels_ids[labels_ids == -100] = tokenizer.pad_token_idlabel_str = tokenizer.batch_decode(labels_ids, skip_special_tokens=True)rouge_output = rouge.compute(predictions=pred_str,references=label_str,rouge_types=["rouge1", "rouge2", "rougeL", "rougeLsum"],)return {"R1": round(rouge_output["rouge1"], 4),"R2": round(rouge_output["rouge2"], 4),"RL": round(rouge_output["rougeL"], 4),"RLsum": round(rouge_output["rougeLsum"], 4),}def preprocess_logits_for_metrics(logits, labels):"""Original Trainer may have a memory leak. This is a workaround to avoid storing too many tensors that are not needed."""pred_ids = torch.argmax(logits[0], dim=-1)return pred_ids, labelstrainer = Trainer(model=model,args=training_args,train_dataset=train_dataset,eval_dataset=test_dataset,compute_metrics=compute_metrics,# 关键函数preprocess_logits_for_metrics=preprocess_logits_for_metrics
)

参考的:

https://discuss.huggingface.co/t/cuda-out-of-memory-when-using-trainer-with-compute-metrics/2941/13

https://huggingface.co/docs/transformers/main_classes/trainer#transformers.Trainer.preprocess_logits_for_metrics

http://www.dtcms.com/wzjs/291547.html

相关文章:

  • 青岛城乡建设委员会网站香港百度广告
  • 支付网站建设推广的会计分录真正免费建站
  • php玩具公司网站源码磁力搜索器 磁力猫
  • 网站做直播需要什么资质模拟搜索点击软件
  • 用dw做静态网站的步骤千峰培训可靠吗?
  • 三水 网站建设百度推广开户2400
  • 小企业网站建设的基础知识传统营销方式有哪些
  • 系统之家网站怎么做的seo个人博客
  • 历下区网站建设公司北京建站
  • wordpress门户网站模板引擎搜索有哪些
  • 做网站会什么问题武汉seo首页优化技巧
  • 网站开发过程说明怎么写免费seo网站推广在线观看
  • 网站建站企业seo关键词排名查询
  • 怎么评价网站做的好坏seo在线教学
  • 西安网站建设地址优化关键词软件
  • wordpress网站搬家图片路径营业推广名词解释
  • 奢侈品+网站建设方案深圳全网营销方案
  • 网站建设与网络营销网站seo排名优化工具
  • 用ps做零食网站模板seo网络推广招聘
  • 深圳做网站的好公司北京网站推广机构
  • 天河区进一步seo英文怎么读
  • 如何免费建网站赚钱中国网站排名前100
  • 手机应用开发湖南正规seo公司
  • b2b网站首页设计南宁seo推广优化
  • 做司法考试真题的网站网站排名优化培训课程
  • wordpress客户端APP广东seo推广贵不贵
  • 网站建设使用的什么软件有哪些内容百度关键词优化策略
  • 自建网站视频教程seo推广任务小结
  • 新型h5网站建设电商seo优化
  • 手机网站大全1百度人气榜排名