aim Pytorch Lightning Adapter在进行远程运行后调用finalize()方法会引发TypeErrors,

vc6uscn9  于 2个月前  发布在  其他
关注(0)|答案(9)|浏览(35)

🐛 Bug

在Pytorch Lightning的AimLogger适配器中调用finalize()后,日志记录器无法重新连接到Aim运行。例如,在以下训练循环中发生这种情况:

trainer = Trainer(logger=aim_logger, ...)
trainer.fit(...)
trainer.test(...)

完整的回溯信息

File "/home/cas/Documents/repositories/Yggdrasil/yggdrasil/apps/train.py", line 172, in train_cli
    aim_logger.experiment.add_tag("Interrupted")
  File "/home/cas/local/conda/envs/yggdrasil/lib/python3.9/site-packages/lightning_fabric/loggers/logger.py", line 117, in experiment
    return get_experiment() or _DummyExperiment()
  File "/home/cas/local/conda/envs/yggdrasil/lib/python3.9/site-packages/lightning_utilities/core/rank_zero.py", line 27, in wrapped_fn
    return fn(*args, **kwargs)
  File "/home/cas/local/conda/envs/yggdrasil/lib/python3.9/site-packages/lightning_fabric/loggers/logger.py", line 115, in get_experiment
    return fn(self)
  File "/home/cas/local/conda/envs/yggdrasil/lib/python3.9/site-packages/aim/sdk/adapters/pytorch_lightning.py", line 80, in experiment
    self._run = Run(
  File "/home/cas/local/conda/envs/yggdrasil/lib/python3.9/site-packages/aim/ext/exception_resistant.py", line 70, in wrapper
    _SafeModeConfig.exception_callback(e, func)
  File "/home/cas/local/conda/envs/yggdrasil/lib/python3.9/site-packages/aim/ext/exception_resistant.py", line 47, in reraise_exception
    raise e
  File "/home/cas/local/conda/envs/yggdrasil/lib/python3.9/site-packages/aim/ext/exception_resistant.py", line 68, in wrapper
    return func(*args, **kwargs)
  File "/home/cas/local/conda/envs/yggdrasil/lib/python3.9/site-packages/aim/sdk/run.py", line 828, in __init__
    super().__init__(run_hash, repo=repo, read_only=read_only, experiment=experiment, force_resume=force_resume)
  File "/home/cas/local/conda/envs/yggdrasil/lib/python3.9/site-packages/aim/sdk/run.py", line 276, in __init__
    super().__init__(run_hash, repo=repo, read_only=read_only, force_resume=force_resume)
  File "/home/cas/local/conda/envs/yggdrasil/lib/python3.9/site-packages/aim/sdk/base_run.py", line 50, in __init__
    self._lock.lock(force=force_resume)
  File "/home/cas/local/conda/envs/yggdrasil/lib/python3.9/site-packages/aim/storage/lock_proxy.py", line 38, in lock
    return self._rpc_client.run_instruction(self._hash, self._handler, 'lock', (force,))
  File "/home/cas/local/conda/envs/yggdrasil/lib/python3.9/site-packages/aim/ext/transport/client.py", line 258, in run_instruction
    return self._run_read_instructions(queue_id, resource, method, args)
  File "/home/cas/local/conda/envs/yggdrasil/lib/python3.9/site-packages/aim/ext/transport/client.py", line 283, in _run_read_instructions
    raise_exception(status_msg.header.exception)
  File "/home/cas/local/conda/envs/yggdrasil/lib/python3.9/site-packages/aim/ext/transport/message_utils.py", line 76, in raise_exception
    raise exception(*args) if args else exception()
TypeError: __init__() missing 1 required positional argument: 'lock_file'

重现问题

aim_repo = ...  # Remote repo
logger = AimLogger(experiment="test", repo=aim_repo)

logger.log_metrics({"A": 1, "B": 2}, step=0)
logger.log_metrics({"A": 10, "B": 20}, step=1)

logger.finalize()

logger.experiment.add_tag("working_or_not")  # raises the TypeError

预期行为

访问.experiment属性应该重新连接到远程Aim运行。

环境

  • Aim版本(例如,3.0.1):3.17.3
  • Python版本:3.9.16
  • pip版本:23.0.1
  • OS(例如,Linux):Linux

其他上下文信息

通过以下猴子补丁,异常不会被引发。具体来说:设置force_resume=True

uqcuzwp8

uqcuzwp81#

嘿,@cwognum!非常感谢你提供的详细报告。我会查看它。一旦有任何更新,我会在这里发布。

plupiseo

plupiseo2#

我还没有在简单的小例子中复现这个问题,但在一个较大的训练循环中,感觉提供的猴子补丁(force_resume=True)会让应用程序慢上几分钟。
我的训练循环是这样的:

trainer = Trainer(logger=aim_logger, ...)
trainer.fit(...)
trainer.test(...)

fit()test() 之间,循环会卡住几分钟,而在 Aim 的先前版本中并没有出现这种情况,我也无法将其归因于其他逻辑。
我知道这不是最有帮助的报告,但我还是想分享给大家,以防对 Aim 代码库有更好理解的人能明白其中的意义。在此期间,我会尝试在简单的例子中重现这个问题。

tktrz96b

tktrz96b3#

@cwognum 当跟踪大量数据时,这是预期的情况,因为当 fit() 完成时,aim 正在尝试清理待跟踪的值队列,同时它也在完成运行。

mwkjh3gx

mwkjh3gx4#

问题不在于补丁,而是使用远程跟踪时的一种预期情况。

drnojrws

drnojrws5#

清除!谢谢!在我看来,之前并没有花这么长时间,但也许我只是遇到了一天糟糕的WiFi,或者我记错了。谢谢你的快速回复!

fruv7luv

fruv7luv6#

可能不相关,但我现在在训练和测试之间也收到了类似的警告(进程没有退出)。再次(抱歉!),我无法在一个简单的示例中重现这个现象,因为它会在较长的训练(> 30分钟)中偶尔发生。

ha5z0ras

ha5z0ras7#

遇到相同的错误 TypeError: __init__() missing 1 required positional argument: 'lock_file' 。根据问题描述,以下简单的代码产生了错误:

trainer = Trainer(logger=aim_logger, ...)
trainer.fit(...)
trainer.test(...)

错误发生在 test 函数内部,在 fit 完成后出现。
修改代码以使用 aim.Run(..., force_resume=True) 有所帮助,但不确定这是否是正确的做法。
使用的 aim==3.17.3

hpcdzsge

hpcdzsge8#

修改代码以使用 aim.Run(..., force_resume=True) 有所帮助,但不确定这是否是正确的方法。
使用的 aim==3.17.3
@Zakhar17 我遇到了相同的问题。
你是说,而不是使用 aim.pytorch_lightning.AimLogger,你只需创建一个 aim.Run 的示例并将其附加到你的 lightning 模块上?

bvk5enib

bvk5enib9#

你好,这里有一个修复吗?我正在尝试使用上面的猴子补丁继承AimLogger,迭代次数似乎降低了。

相关问题