1

在一台机器上运行多个 python3.7 作业时出现问题(每个 GPU 一个作业)。这些是涉及大型数据集(>1000GB)的 PyTorch 数据加载的机器学习作业。

只有一份工作,如果我使用 Dataloader 的选项,训练很顺利pin_memory=True,批次按时提供,gpu 利用率很高。我使用 8 名工人。如果pin_memory=False是,主进程会等待一些批次的数据加载,但还不错。

但是,如果我开始第二份工作,每 8 批(我有 8 个工人)的数据加载“冻结”长达一分钟,大大减慢了训练速度。我对 and 函数进行了计时,__getitem__并且collate这些函数的计时保持简短且恒定。因此,这不是磁盘吞吐量或 i/o 问题,也不是处理问题。我在“冻结”期间发现所有数据加载工作进程都由内核线程控制(所有 cpu 在 htop 上都以红色显示)。转身pin_memory=False并不能解决问题。

因此,如果它不是来自__getitem__norcollate函数,那么所有这些时间都花在了哪里?在工人处理完一批之后,在它可以在主流程中消耗之前发生了什么?您能否推荐一些监控工具来找出问题所在?

我正在使用 GCP linux 虚拟机,我的数据存储在 SSD 驱动器上。

谢谢你的帮助。

4

0 回答 0