在使用哈希定位运行时,Aim的Bug,

1hdlvixo  于 25天前  发布在  其他
关注(0)|答案(8)|浏览(36)

🐛 Bug

在使用AIM时遇到了一个bug。当尝试使用aim.Run函数通过哈希值定位运行时,遇到了以下错误:

>>> aim.Run(run_hash='51031438759943878c6f9808')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/me/miniconda3/lib/python3.11/site-packages/aim/ext/exception_resistant.py", line 70, in wrapper
    _SafeModeConfig.exception_callback(e, func)
  File "/home/me/miniconda3/lib/python3.11/site-packages/aim/ext/exception_resistant.py", line 47, in reraise_exception
    raise e
  File "/home/me/miniconda3/lib/python3.11/site-packages/aim/ext/exception_resistant.py", line 68, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/me/miniconda3/lib/python3.11/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/me/miniconda3/lib/python3.11/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/me/miniconda3/lib/python3.11/site-packages/aim/sdk/base_run.py", line 50, in __init__
    self._lock.lock(force=force_resume)
  File "/home/me/miniconda3/lib/python3.11/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/me/miniconda3/lib/python3.11/site-packages/aim/ext/transport/client.py", line 260, in run_instruction
    return self._run_read_instructions(queue_id, resource, method, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/me/miniconda3/lib/python3.11/site-packages/aim/ext/transport/client.py", line 285, in _run_read_instructions
    raise_exception(status_msg.header.exception)
  File "/home/me/miniconda3/lib/python3.11/site-packages/aim/ext/transport/message_utils.py", line 76, in raise_exception
    raise exception(*args) if args else exception()
                                        ^^^^^^^^^^^
TypeError: Timeout.__init__() missing 1 required positional argument: 'lock_file'

重现问题

只需运行以下代码(我已经确保这段代码已经放在目标仓库中)就可以重现这个问题。

import aim
aim.Run(run_hash='51031438759943878c6f9808')

预期行为

按照文档中所述,定位具有目标哈希值的运行。

环境

  • Aim版本3.17.5
  • Python版本3.11.4(conda)
  • pip版本23.1.2
  • OS(Linux和Mac都存在问题)
  • 其他相关信息
vaqhlq81

vaqhlq811#

你链接的修复是否适用于所有情况,还是仅在使用PyTorch Lightning时有效?

yrefmtwq

yrefmtwq2#

它只会修复 lightning ,但你可以在你的func调用中添加类似的参数,这应该能解决你的问题。

jmo0nnb3

jmo0nnb33#

感谢HoBeedzc报告此问题。据我了解,这个问题仅出现在远程跟踪服务器上吗?

j13ufse2

j13ufse24#

是的,我正在使用远程跟踪服务器。出于隐私考虑,我已经隐藏了aim远程仓库的IP地址。实际代码如下:

import aim
aim.Run(run_hash='51031438759943878c6f9808', repo="aim:ip:port")

我尝试了各种方法,包括本地和远程仓库,并得出以下结论:

  • 当使用本地仓库时,哈希值可以用于唯一标识运行。但是,如果已经有打开的运行,必须在再次使用哈希值获取运行之前关闭它(使用 aim.Run.close() 方法)。
  • 然而,当使用远程仓库时,无论是否有任何打开的运行,都无法使用哈希值来识别运行。
lqfhib0f

lqfhib0f5#

是否有任何解决方案?当我尝试在远程存储库中识别运行时,我也遇到了这个错误。我尝试关闭和释放锁,但似乎没有什么帮助。

这在后续版本中修复了吗?我正在使用3.17.5

zengzsys

zengzsys6#

在我看来,这个功能似乎超时了,错误没有被正确处理。在lock函数上设置较短的超时时间绝对是个bug,因为整个想法是等待直到安全地获取锁。

vhipe2zx

vhipe2zx7#

当我们运行torch-lightning集成和并行训练任务时,也会出现这种情况。

9nvpjoqh

9nvpjoqh8#

深入挖掘。实际上,我不再认为这是grpc的问题,而是软锁定。出于某种原因,它使用了软锁定,但当在仓库位置调用此功能时,返回False

In [3]: FileSystemInspector.needs_soft_lock("/aim/repo/locks")
Out[3]: False

In [4]: FileSystemInspector.needs_soft_lock("/aim/")
Out[4]: False

In [5]: FileSystemInspector.needs_soft_lock("/aim")
The lock file /aim is on a filesystem of type `overlay` (device id: 207). Using soft file locks to avoid potential data corruption.
Out[5]: True

In [6]: FileSystemInspector.needs_soft_lock("/aim/repo")
Out[6]: False

In [7]:
Do you really want to exit ([y]/n)? y
root@bishop-aim-7dd75f756f-vtqnp:/aim/repo/.aim/locks# ls
0b988510edc143148283748b.softlock  6390468e64c24d68b30e9198.softlock  73f944123d904a048019f255.softlock  index
root@bishop-aim-7dd75f756f-vtqnp:/aim/repo/.aim/locks#

软锁定机制本身或检测正确的锁类型可能存在错误。请注意,/aim是覆盖层 - 此服务器运行在Kubernetes之上,因此它将使用根上的容器文件系统,已挂载到/aim的卷是ext4,因此/aim下的目录应该能够使用锁。

相关问题