在一台机器上运行多个 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 驱动器上。
谢谢你的帮助。