同一Python脚本中训练多个模型时的 wandb 配置错误解决方案

news2024/9/21 20:05:01

文章目录

    • 摘要
    • 背景介绍
    • 报错信息
    • wandb 模型训练名

摘要

在机器学习项目中,使用Python脚本训练多个模型时,可能会遇到WandB(Weights and Biases)配置错误,尤其是在训练多个模型参数大小不一致的情况下。
本文将介绍如何解决因模型参数变化导致的WandB配置错误,具体报错信息为“Attempted to change value of key ‘model/num_parameters’ from xxxx to xxxx”。我们将探讨如何通过调用wandb.finish()来结束前一个模型的训练,并确保下一个模型的训练能够顺利进行。可以有效地避免因模型参数变化而导致的训练中断,并提升模型训练的可管理性。

此外,文章还将介绍如何自定义wandb日志名称,通过设置transformers.TrainingArguments.run_name来改变默认的输出路径名称,以便更好地管理和识别不同模型的训练记录。

背景介绍

在同一个python脚本文件中,训练两个不同参数大小的模型,从而出现了下述报错。

报错信息

/home/jie/anaconda3/envs/llm/lib/python3.10/site-packages/transformers/training_args.py:1525: FutureWarning: `evaluation_strategy` is deprecated and will be removed in version 4.46 of 🤗 Transformers. Use `eval_strategy` instead
  warnings.warn(
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 475/475 [00:12<00:00, 43.48it/s]wandb: ERROR Attempted to change value of key "model/num_parameters" from 102269186 to 102270724
wandb: ERROR If you really want to do this, pass allow_val_change=True to config.update()
Traceback (most recent call last):
  File "/home/jie/github/text_classification/BERT/demo/test.py", line 193, in <module>
    pred = bert_multi_cls.pred(ds["test"])
  File "/home/jie/github/text_classification/BERT/demo/test.py", line 147, in pred
    predictions = self.trainer.predict(pred_dataset)
  File "/home/jie/anaconda3/envs/llm/lib/python3.10/site-packages/transformers/trainer.py", line 3761, in predict
    self.control = self.callback_handler.on_predict(self.args, self.state, self.control, output.metrics)
  File "/home/jie/anaconda3/envs/llm/lib/python3.10/site-packages/transformers/trainer_callback.py", line 492, in on_predict
    return self.call_event("on_predict", args, state, control, metrics=metrics)
  File "/home/jie/anaconda3/envs/llm/lib/python3.10/site-packages/transformers/trainer_callback.py", line 507, in call_event
    result = getattr(callback, event)(
  File "/home/jie/anaconda3/envs/llm/lib/python3.10/site-packages/transformers/integrations/integration_utils.py", line 989, in on_predict
    self.setup(args, state, **kwargs)
  File "/home/jie/anaconda3/envs/llm/lib/python3.10/site-packages/transformers/integrations/integration_utils.py", line 853, in setup
    self._wandb.config["model/num_parameters"] = model.num_parameters()
  File "/home/jie/anaconda3/envs/llm/lib/python3.10/site-packages/wandb/sdk/wandb_config.py", line 149, in __setitem__
    key, val = self._sanitize(key, val)
  File "/home/jie/anaconda3/envs/llm/lib/python3.10/site-packages/wandb/sdk/wandb_config.py", line 285, in _sanitize
    raise config_util.ConfigError(
wandb.sdk.lib.config_util.ConfigError: Attempted to change value of key "model/num_parameters" from 102269186 to 102270724
If you really want to do this, pass allow_val_change=True to config.update()

报错信息如上所示,主要看这个报错信息:

wandb.sdk.lib.config_util.ConfigError: Attempted to change value of 
key "model/num_parameters" from 102269186 to 102270724

模型参数从 102269186 变化到了 102270724。模型尺寸变化是不允许的,从而出现了报错。
但是我在 同一个python 文件中,训练多个模型,模型尺寸就是不同的。

报错信息的解决方案是给 wandb 的config.update 传参 allow_val_change=True。由于我们使用的是 transformers 的 Trainer 进行训练,allow_val_change参数很难通过Trainer传递给 wandb 的 config。

此时的解决方案就是使用:

import wandb
wandb.finish()

在前一个 Trainer 模型训练结束之后,调用 wandb.finish(),结束 wandb 的日志记录。

下一个模型训练,transformers 的 Trainer,又会自动创建 wandb。对日志记录也不会有任何影响。

wandb 模型训练名

浏览 wandb 网站的日志记录,名字默认是 transformers.TrainingArguments.output_dir。wandb 的日志名,默认是输出路径名。
在这里插入图片描述

如果想让wandb显示的名字和output_dir不一样,通过设置transformers.TrainingArguments.run_name
wandb的名字就会变成 run_name

run_name (`str`, *optional*, defaults to `output_dir`):
    A descriptor for the run. Typically used for [wandb](https://www.wandb.com/),
    [mlflow](https://www.mlflow.org/) and [comet](https://www.comet.com/site) logging. If not specified, will
    be the same as `output_dir`.

上述是TrainingArguments的源代码,其中说道 run_name 是供wandb使用的。
run_name默认是None,如果不指定,run_name 会和 output_dir 保持一致。

如下代码所示,在初始化TrainingArguments 时,指定 run_name

args = TrainingArguments(
         output_dir=output_dir,
         eval_strategy="epoch",
         save_strategy="epoch",
         save_total_limit=3,
         learning_rate=2e-5,
         num_train_epochs=epoch,
         weight_decay=0.01,
         per_device_train_batch_size=32,
         per_device_eval_batch_size=16,
         # logging_steps=16,
         save_safetensors=True,
         overwrite_output_dir=True,
         load_best_model_at_end=True,
         run_name=run_name,
     )

如下图所示,在 wandb 的网站中,就可以看到。名字变成和run_name一致,不再是 output_dir
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2142702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue学习记录之三(ref全家桶)

ref、reactive是在 setup() 声明组件内部状态用的&#xff0c; 这些变量通常都要 return 出去&#xff0c;除了供 < template > 或渲染函数渲染视图&#xff0c;也可以作为 props 或 emit 参数 在组件间传递。它们的值变更可触发页面渲染。 ref &#xff1a;是一个函数&…

Get包中的根组件

文章目录 1. 知识回顾2. 使用方法2.1 源码分析2.2 常用属性 3. 示例代码4. 内容总结 我们在上一章回中介绍了"Get包简介"相关的内容&#xff0c;本章回中将介绍GetMaterialApp组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 知识回顾 我们在上一章回中已经…

Unity webgl跨域问题 unity使用nginx设置跨域 ,修改请求头

跨域 什么是跨域 跨域是指浏览器因安全策略限制&#xff0c;阻止一个域下的网页访问另一个域下的资源。 一些常见的跨域情况&#xff1a; 协议不同 从 http://example.com 请求 https://example.com。域名不同 从 http://example.com 请求 http://anotherdomain.com。端口不…

Village Exteriors Kit 中世纪乡村房屋场景模型

此模块化工具包就是你一直在寻找的适合建造所有中世纪幻想村庄和城市建筑所需要的工具包。 皇家园区 - 村庄外饰套件的模型和纹理插件资源包 酒馆和客栈、魔法商店、市政大厅、公会大厅、布莱克史密斯锻造厂、百货商店、珠宝商店、药店、草药师、银行、铠甲、弗莱切、马厩、桌…

list从0到1的突破

目录 前言 1.list的介绍 2.list的常见接口 2.1 构造函数&#xff08; (constructor)&#xff09; 接口说明 2.2 list iterator 的使用 2.3 list capacity 2.4 list element access 2.5 list modifiers 3.list的迭代器失效 附整套练习源码 结束语 前言 前面我们学习…

Defining Constraints with ObjectProperties

步骤4&#xff1a;使用对象定义约束 物业 您可以创建时间和放置约束&#xff0c;如本教程所示。你也可以 更改单元格的属性以控制Vivado实现如何处理它们。许多 物理约束被定义为单元对象的属性。 例如&#xff0c;如果您在设计中发现RAM存在时序问题&#xff0c;为了避免重新合…

C语言代码练习(第二十六天)

今日练习&#xff1a; 数据的交换输出输入 n 个数&#xff0c;找出其中最小的数&#xff0c;将它与最前面的数交换后输出这些数 输入一个英文句子&#xff0c;将每个单词的第一个字母改成大写字母 输入一个十进制数 N &#xff0c;将它转换成 R 进制数输出 数据的交换输出输入 …

阿里OSS对象存储服务,实现图片上传回显

阿里OSS对象存储服务 OSS服务1. 创建buckte2. 获取accesskey3. 参照官方SDK编写程序安装SDK 4. 程序编写5. 封装6. 在spring中调用 OSS服务 阿里云对象存储 OSS&#xff08;Object Storage Service&#xff09;是一款海量、安全、低成本、高可靠的云存储服务&#xff0c;提供最…

利用JS数组根据数据生成柱形图

要求 <html> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document…

精准识别,高效管理:工服识别AI检测算法在多场景中的应用优势

随着人工智能技术的快速发展&#xff0c;其在各个行业的应用也日益广泛。特别是在工业生产和安全监管领域&#xff0c;工服识别AI检测算法凭借其高效、精准的特点&#xff0c;成为提升生产效率、保障工作人员安全的重要手段。本文将详细介绍TSINGSEE青犀AI智能分析网关V4工服识…

Hibernate基础

Hibernate基础总结 有利的条件和主动的恢复产生于再坚持一下的努力之中&#xff01; 好久没更新了&#xff0c;今天入门了Hibernate&#xff0c;由于之前学习了MyBatis&#xff0c;初步感觉二者的底层实现思想有很多相似之处&#xff0c;下面让我们以一个入门Demo的形式感受一…

3.Java高级编程实用类介绍(一)

三、Java高级编程实用类介绍(一) 文章目录 三、Java高级编程实用类介绍(一)一、枚举类型二、包装类三、Math 一、枚举类型 使用enum进行定义 public enum 枚举名字{值1,值2.... }二、包装类 每个基本类型在java.lang包中都有一个相应的包装类 /** new包装类&#xff08;字符…

【C++笔记】类和对象的深入理解(三)

【C笔记】类和对象的深入理解(三) &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】类和对象的深入理解(三)前言一.日期类的实现1.1声明和定义分离1.2日期类整数1.3日期类整数1.4日期类-整数1.5日期类-日期1.6复用对…

并发安全与锁

总述 这篇文章&#xff0c;我想谈一谈自己对于并发变成的理解与学习。主要涉及以下三个部分&#xff1a;goroutine&#xff0c;channel以及lock 临界区 首先&#xff0c;要明确下面两组概念 并发和并行 并行&#xff1a;指几个程序每时每刻都同时进行 并发&#xff1a;指…

lnmp - 登录技术方案设计与实现

概述 登录功能是对于每个动态系统来说都是非常基础的功能&#xff0c;用以区别用户身份、和对应的权限和信息&#xff0c;设计出一套安全的登录方案尤为重要&#xff0c;接下来我介绍一下常见的认证机制的登录设计方案。 方案设计 HTTP 是一种无状态的协议&#xff0c;客户端…

iOS - TestFlight使用

做的项目需要给外部人员演示&#xff0c;但是不方便获取对方设备的UDID&#xff0c;于是采用TestFlight 的方式邀请外部测试人员的方式给对方安装测试App&#xff0c;如果方便获取对方设备的UDID&#xff0c;可以使用蒲公英 1.在Xcode中Archive完成后上传App Store Connect之前…

浙大上交联合阿里腾讯,共同构建医学AI领域的顶尖科研+商业团队|个人观点·24-09-17

小罗碎碎念 昨晚锻炼时&#xff0c;我想着是时候对推文的内容做一些改进了——既能通过写推文来锻炼自己写paper的能力&#xff0c;也希望凭借自己一点微弱的影响力&#xff0c;去带动更多的人加入医学AI的队伍中。 这一期推文系统且深度的分析一下&#xff0c;国内哪些学者在医…

Linux基础开发环境(git的使用)

1.账号注册 git 只是一个工具&#xff0c;要想实现便捷的代码管理&#xff0c;就需要借助第三方平台进行操作&#xff0c;当然第三平台也是基于git 开发的 github 与 gitee 代码托管平台有很多&#xff0c;这里我们首选 Github &#xff0c;理由很简单&#xff0c;全球开发者…

算法题之回文子串

回文子串 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 示例 1&#xff1a; 输入&#xff1a;s "abc" 输出&#xff1a;3 解释…

C++ 带约束的Ceres形状拟合

C 带约束的Ceres形状拟合 一、Ceres Solver1.定义问题2. 添加残差AddResidualBlockAutoDiffCostFunction 3. 配置求解器4. 求解5. 检查结果 二、基于Ceres的最佳拟合残差结构体拟合主函数 三、带约束的Ceres拟合残差设计拟合区间限定 四、拟合结果bestminmax 五、完整代码 对Ce…