Closed myalos closed 5 months ago
num_workers
改成1或者0看下能否有报错信息
感谢回复,我又进行了debug,初步发现reduct_dict用的是logger.py的代码而不是dist.py中的,torchrun卡死的原因是一个gpu里面算出的output的key中带有dn,另一个gpu算出的output的key中不带dn,导致两个gpu进行reduce_all的values shape不一样。
之前休息了两天,我这个case可以复现,今天开始继续找原因
2024-03-28 17:32:19.679 | INFO | src.zoo.rtdetr.denoising:get_contrastive_denoising_training_group:27 - rank : 1, num_gts : [0, 0, 0, 0, 0, 0, 0, 0], max_gt_num : 0, 导致返回的是4个None,dn_meta返回的是None
改成这样试一下?@myalos
max_gt_num = max(num_gts)
if max_gt_num == 0:
num_group = 1
else:
num_group = num_denoising // max_gt_num
num_group = 1 if num_group == 0 else num_group
https://github.com/lyuwenyu/RT-DETR/blob/main/rtdetr_pytorch/src/zoo/rtdetr/denoising.py#L25-L30
loss变成nan了
看下当为nan
时候 这个函数里的几个变量 打印看下有啥异常 ious
target
pred_score
weight
https://github.com/lyuwenyu/RT-DETR/blob/main/rtdetr_pytorch/src/zoo/rtdetr/rtdetr_criterion.py#L272 https://github.com/lyuwenyu/RT-DETR/blob/main/rtdetr_pytorch/src/zoo/rtdetr/rtdetr_criterion.py#L111
收到,我去找找原因。由于周末要出门,下周一或者周二的时候进行回复
感谢回复,我又进行了debug,初步发现reduct_dict用的是logger.py的代码而不是dist.py中的,torchrun卡死的原因是一个gpu里面算出的output的key中带有dn,另一个gpu算出的output的key中不带dn,导致两个gpu进行reduce_all的values shape不一样。
同样的问题,我把reduce_dict去掉了直接
感谢回复,我又进行了debug,初步发现reduct_dict用的是logger.py的代码而不是dist.py中的,torchrun卡死的原因是一个gpu里面算出的output的key中带有dn,另一个gpu算出的output的key中不带dn,导致两个gpu进行reduce_all的values shape不一样。
同样的问题,我把reduce_dict去掉了直接
收到 谢谢,我也把这个方法试一下
当有一个batch里面全是no object且输出的box全空,src_boxes和target_boxes都是tensor([]),到了后面的计算loss部分
loss = F.binary_cross_entropy_with_logits(src_logits, target_score, weight=weight, reduction='none')
这个loss得到的是shape为(batchsize, 0, num_classes + 1)的[],mean(1).sum()就会变成nan 我在后面添加了一行代码
if torch.isnan(loss): return {'loss_vfl' : torch.tensor(0., device = loss.device, requires_grad = False)}
训练了一个epoch,同样的数据,没有出现卡死的现象,而且该epoch中loss是下降的。但是对这个改发不太自信(1、存在一个GPU和其他GPU不一样 不更新部分网络,而这和分布式训练不太匹配,在我的数据库中,所有GPU的网络权重应该是一样的,也就是说网络更新的时候梯度应该是一样的;2、语义上0和nan差的有点远)
跑了之前的数据,和单卡训的结果差的不大(没有出现异常),再次感谢帮助
您好,请问您是如何解决的,我看了这个issus的解决方法没有太看懂,就是把logger.py中的中的reduce_dict函数注释掉就好了吗?被这个问题困扰很久了,期待您的答复。
您好,请问您是如何解决的,我看了这个issus的解决方法没有太看懂,就是把logger.py中的中的reduce_dict函数注释掉就好了吗?被这个问题困扰很久了,期待您的答复。
感谢回复,我又进行了debug,初步发现reduct_dict用的是logger.py的代码而不是dist.py中的,torchrun卡死的原因是一个gpu里面算出的output的key中带有dn,另一个gpu算出的output的key中不带dn,导致两个gpu进行reduce_all的values shape不一样。
同样的问题,我把reduce_dict去掉了直接
收到 谢谢,我也把这个方法试一下
您好
感谢回复,我又进行了debug,初步发现reduct_dict用的是logger.py的代码而不是dist.py中的,torchrun卡死的原因是一个gpu里面算出的output的key中带有dn,另一个gpu算出的output的key中不带dn,导致两个gpu进行reduce_all的values shape不一样。
同样的问题,我把reduce_dict去掉了直接
您好,请问您是如何解决的呢?请问能稍微详细一点分享您的解决办法吗?
感谢分享代码和论文,我用自己的数据进行训练,torchrun --nproc_per_node=2,训练coco的话是没有问题,改成自己的数据集就会卡死,我给训练的过程加了log,其内容如下,到最后一行的时候就不在有输出就卡死了,不知道是为什么。还有一点比较神奇的是,我在misc的dist.py的reduct_dict里面加了打印的代码,结果一条都没有被打印出来。我自己debug了半天,没有找到原因,想请求一下帮助,非常感谢