🐛 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
。
9条答案
按热度按时间uqcuzwp81#
嘿,@cwognum!非常感谢你提供的详细报告。我会查看它。一旦有任何更新,我会在这里发布。
plupiseo2#
我还没有在简单的小例子中复现这个问题,但在一个较大的训练循环中,感觉提供的猴子补丁(
force_resume=True
)会让应用程序慢上几分钟。我的训练循环是这样的:
在
fit()
和test()
之间,循环会卡住几分钟,而在 Aim 的先前版本中并没有出现这种情况,我也无法将其归因于其他逻辑。我知道这不是最有帮助的报告,但我还是想分享给大家,以防对 Aim 代码库有更好理解的人能明白其中的意义。在此期间,我会尝试在简单的例子中重现这个问题。
tktrz96b3#
@cwognum 当跟踪大量数据时,这是预期的情况,因为当
fit()
完成时,aim
正在尝试清理待跟踪的值队列,同时它也在完成运行。mwkjh3gx4#
问题不在于补丁,而是使用远程跟踪时的一种预期情况。
drnojrws5#
清除!谢谢!在我看来,之前并没有花这么长时间,但也许我只是遇到了一天糟糕的WiFi,或者我记错了。谢谢你的快速回复!
fruv7luv6#
可能不相关,但我现在在训练和测试之间也收到了类似的警告(进程没有退出)。再次(抱歉!),我无法在一个简单的示例中重现这个现象,因为它会在较长的训练(> 30分钟)中偶尔发生。
ha5z0ras7#
遇到相同的错误
TypeError: __init__() missing 1 required positional argument: 'lock_file'
。根据问题描述,以下简单的代码产生了错误:错误发生在
test
函数内部,在fit
完成后出现。修改代码以使用
aim.Run(..., force_resume=True)
有所帮助,但不确定这是否是正确的做法。使用的 aim==3.17.3
hpcdzsge8#
修改代码以使用
aim.Run(..., force_resume=True)
有所帮助,但不确定这是否是正确的方法。使用的 aim==3.17.3
@Zakhar17 我遇到了相同的问题。
你是说,而不是使用
aim.pytorch_lightning.AimLogger
,你只需创建一个aim.Run
的示例并将其附加到你的 lightning 模块上?bvk5enib9#
你好,这里有一个修复吗?我正在尝试使用上面的猴子补丁继承AimLogger,迭代次数似乎降低了。