zechao-li / SVF-few-shot-segmentation

23 stars 1 forks source link

【显存异常增长】关于设置vector_S的param.requires_grad前后的显存奇怪变化现象 #2

Closed jiaosiyu1999 closed 1 year ago

jiaosiyu1999 commented 1 year ago

您好! 我想关于vector_S的param.requires_grad向您请教一个问题 (例如这里)

我发现在batchsize为2时,

  1. 设置layer2,3,4的param.requires_grad=False时,大约需要3300M显存。
  2. 若进一步设置vector_S的梯度为True,显存涨到7200M
  3. 若设置layer2,34的梯度全为true,显存为7300M

也就是说,解冻vector_S的参数会增加大约4000M显存,而进一步解冻conv_U和conv_V仅增加100M的显存,我不清楚这一现象的原因,希望能够得到您的解答,谢谢!

jiaosiyu1999 commented 1 year ago

上述三种设定对应的svf_modules函数分别为:

  1. image

  2. 您代码的默认设置 image

  3. image

zechao-li commented 1 year ago

你答复下

  -----------

Zechao Li Professor https://zechao-li.github.io/ Intelligent Media Analysis Group

 School of Computer Science and Engineering
 Nanjing University of Science and Technology

      ------------------ Original ------------------ From: @.>; Date:  Thu, Dec 22, 2022 11:35 PM To: @.>; Cc: @.***>; Subject:  [zechao-li/SVF-few-shot-segmentation] 【显存异常增长】关于设置vector_S的param.requires_grad前后的显存奇怪变化现象 (Issue #2)

 

您好! 我想关于vector_S的param.requires_grad向您请教一个问题 (例如这里)

我发现在batchsize为2时,

设置layer2,3,4的param.requires_grad=False时,大约需要3300M显存。

若进一步设置vector_S的梯度为True,显存涨到7200M。

若设置layer2,34的梯度全为true,显存为7300M

也就是说,解冻vector_S的参数会增加大约4000M显存,而进一步解冻conv_U和conv_V仅增加100M的显存,我不清楚这一现象的原因,希望能够得到您的解答,谢谢!

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>

syp2ysy commented 1 year ago

@jiaosiyu1999 你好,这是很正常的现象。显存的增长的多少主要是由于梯度反传的路径长短决定的。只要将vector_S解冻后,梯度就要传播到layer2中,相比较于freeze backbone肯定会增长很大的显存。这也是后续我们要优化的部分。进一步解冻conv_U和conv_V后梯度同样也是只传播到layer2,因此显存并不会有很大的变化。

jiaosiyu1999 commented 1 year ago

好的,谢谢解答