aim 在远程服务器上跟踪简单指标真的很慢,

ktecyv1j  于 5个月前  发布在  其他
关注(0)|答案(3)|浏览(63)

🐛 Bug

我一直在使用AIM来跟踪项目检测实验。我们在一个远程服务器上运行一个后端,用于跟踪我们的训练和评估数据。数据可以是float或图像数据(主要是numpy.NDARRAY[numpy.uint8])。我发现在将跟踪数据推送到远程AIM服务器和本地AIM服务器(运行在我笔记本电脑上的)之间存在巨大的性能差异。
例如,使用3000行的json文件(见To reproduce部分的附件)将数据推送到远程服务器需要超过15分钟,而在本地执行相同的任务只需要不到10秒(!)。
我尝试通过分批推送数据而不是每次调用一个指标来调试这个问题,但似乎没有什么区别。为了给情况增加更多的意外信息,将95张图片(每张4MB)推送到同一个服务器只花了1分钟。我认为这意味着延迟与被跟踪的数据的大小无关(图像几乎有400Mbs,而原始json数据只有4.6Mb)🤷‍♂️
如果有人能对此进行解释,这种性能差异是否是可以预料的,或者我们是否可以针对跟踪/硬件进行优化以加快速度,因为现在的工作方式真的无法使用。

To reproduce

  • 启动远程AIM服务器
  • 加载metrics.json并跟踪每个指标
  • 用于重现的代码片段:
import os
import json
import numpy
from aim import Run

repo="aim://my_aim_server"
path_to_metrics_json="abs_path_metrics.json"

# Start run
logger = Run(experiment="back-end-test", repo=repo)

# Format metrics to proper json
new_metrics_path = "/tmp/new_metrics.json"
if os.path.exists(new_metrics_path):
    os.remove(new_metrics_path)
os.system(f"cat {path_to_metrics_json} | jq -s '.[0:]' >> {new_metrics_path}")

with open(new_metrics_path) as json_data:
    metrics_data = json.load(json_data)

# Log train metrics
for metrics_dict in metrics_data:
    for k, v in metrics_dict.items():
        if not v:
            v = numpy.nan

        logger.track(float(v), k, step=metrics_dict["iteration"])

预期行为

推送指标不应该超过15分钟

环境

  • Aim版本3.20.1
  • Python版本3.9.18
  • OS Ubuntu 22 LTS
c0vxltue

c0vxltue1#

感谢你提出这个问题。团队的首要任务是提高性能和跟踪服务器的性能。
@mihran113,你能看一下吗?你能分享一下重新实现跟踪服务器后得到的结果吗?

dwthyt8l

dwthyt8l2#

感谢您的拾起!期待您的回复!

t98cgbkg

t98cgbkg3#

与PR #3203略有关联。复制几兆字节的1M步跟踪序列确实很慢。PR更新旨在能够分块更新远程树。
我不确定这是否容易集成到直接跟踪到远程存储库中。但是我们现在跟踪到本地存储库,并使用自定义同步代码在近乎实时的情况下将运行同步到远程存储库,一旦aim后端支持分块更新,我们将乐意为此贡献。

相关问题