aim TypeError: 'NoneType'对象不可调用

jjjwad0x  于 2个月前  发布在  其他
关注(0)|答案(7)|浏览(50)

🐛 Bug

(compiler_gym) zeyi@server121:~/scripts$ python main.py 
Exception in thread Thread-1:
Traceback (most recent call last):
  File ".../lib/python3.8/threading.py", line 932, in _bootstrap_inner
    self.run()
  File ".../lib/python3.8/threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File ".../lib/python3.8/site-packages/aim/ext/resource/tracker.py", line 102, in _stat_collector
    self._track(stat)
  File ".../lib/python3.8/site-packages/aim/ext/resource/tracker.py", line 78, in _track
    self._track_func()(
TypeError: 'NoneType' object is not callable

重现问题

最小示例:

from aim import Run

def main():
    run = Run()
    for i in range(1000):
        run.track(i, name="loss")

if __name__ == "__main__":
    main()

这个问题偶尔会发生。在我的情况下,它每四次发生一次。然而,如果我稍微修改一下脚本,上面的问题就永远不会出现。

from aim import Run

run = Run()

def main():
    for i in range(1000):
        run.track(i, name="loss")

if __name__ == "__main__":
    main()

请注意,我将变量 run 移动到了全局作用域。我认为问题是由于某些对象被过早地解引用(例如,用于跟踪的线程?我不确定)。

预期行为

脚本应该可以正常运行。

环境

aim==3.4.1
aimrecords==0.0.7
aimrocks==0.0.10

Python 3.8.12

Linux server121 5.4.0-26-generic #30-Ubuntu SMP Mon Apr 20 16:58:30 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
gev0vcfq

gev0vcfq1#

你好@uduse!
我无法在aim v3.5.1上复现这种行为。在这个版本中,我们进行了一些修复和改进,它可能间接地解决了问题。
请问您是否可以切换到最新版本并检查它是否解决了您这边的问题?

raogr8fs

raogr8fs2#

嘿,@uduse。我只是想问一下,你有没有机会尝试(并可能重现这个问题)在aim v3.5.1+上?
提前感谢。

evrscar2

evrscar23#

@alberttorosyan 是的,我无法在新版本的 aim 中复现这个问题。👍 很好的修复。

jutyujz0

jutyujz04#

我正在经历同样的问题。虽然我无法在上面展示的小演示中重现相同的问题,但这发生在我的复杂项目中,我不知道发生了什么...

bq3bfh9z

bq3bfh9z5#

请允许我分享一下这里正在发生的事情。这可能会给你一些关于更复杂场景如何影响事物的想法。

资源跟踪(启用时)收集系统资源使用信息,并将其作为Run对象上的常规指标进行跟踪。这是在单独的线程中完成的,当Run完成时,该线程会被关闭。似乎在系统跟踪线程关闭之前,Run对象就被关闭了。是否有可能显式调用Run.close/finalize方法?

qaxu7uf2

qaxu7uf26#

不,我没有显式地调用这些函数。这可能是一个并发问题吗?我正在运行多个async函数,每个函数都有自己的aim.Run对象。

htrmnn0y

htrmnn0y7#

几天前,我和3.19.3遇到了这个问题,当使用多个线程进行数据加载时,跟踪起来有些困难。奇怪的是,它只发生在使用较小的开发数据集(而不是整个数据集)的情况下,并且仅在足够长的运行时间后发生(例如,当运行5个实验时,前两个完成,第三个随机挂起)。

Exception ignored in: <finalize object at 0x7f34d1c1ce60; dead>
Traceback (most recent call last):
  File "/usr/lib/python3.10/weakref.py", line 591, in __call__
    return info.func(*info.args, **(info.kwargs or {}))
  File ".venv/sw/lib/python3.10/site-packages/aim/sdk/run.py", line 107, in _close
    res.close()
  File ".venv/sw/lib/python3.10/site-packages/aim/ext/resource/tracker.py", line 143, in close
    self.stop()
  File ".venv/sw/lib/python3.10/site-packages/aim/ext/resource/tracker.py", line 131, in stop
    self._th_collector.join()
  File "/usr/lib/python3.10/threading.py", line 1093, in join
    raise RuntimeError("cannot join current thread")
RuntimeError: cannot join current thread
2024-07-23 10:17:00,571 | INFO | BaseClassifier.py:182 | Star working on batch 0 for TEST
2024-07-23 10:17:00,576 | INFO | BaseClassifier.py:201 | Forward on batch 0 for TEST
Exception in thread Thread-721 (_stat_collector):
Traceback (most recent call last):
  File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.10/threading.py", line 953, in run
    self._target(*self._args, **self._kwargs)
  File ".venv/sw/lib/python3.10/site-packages/aim/ext/resource/tracker.py", line 189, in _stat_collector
    self._store_buffered_logs()
  File ".venv/sw/lib/python3.10/site-packages/aim/ext/resource/tracker.py", line 226, in _store_buffered_logs
    self._tracker()(LogLine(line.decode()), name='logs', step=self._line_counter)
TypeError: 'NoneType' object is not callable

我会更新aim(尽管更新日志没有建议任何可能相关的更改),并禁用资源跟踪。

相关问题