可以看到,我们的平台的FGSM算法,实际上是参考了DEEPSEC平台完成的。
问题出现在evaluation_base.py中
147行执行白盒测试的函数中。(我们分别对主要功能使用了GPUtil实时查看了占用显存。)
GPUtil:可查看当前GPU利用率、GPU占用比
在刚进入147行的函数时,由于已经将model传入显存,因此此时显示的占用结果为
ID | GPU | MEM |
---|---|---|
0 | 0% | 10% |
直到outputs = model(xs)
一句执行后,显存上升为19%
接着到adv_xs = arr.generate(xs, ys)
一句,程序进入FGSM算法内部,开始生成对抗样本。我们平台目前的FGSM算法
在64行,outputs = self.model(var_xs)
执行后,显存上升为36%
在70行,loss.backward()
求完loss之后,显存达到巅峰值56%
一直到FGSM算法执行结束,return adv_xs
,此时显示的MEM始终为56%
问题出现,当回到evaluation_base中的156行后,显存仍然为56%。但事实上,generate函数执行完了,临时变量应该会被回收才对,除非他仍然被某些在cuda上的数据所引用。
事实上,MEM值再也没有回落过。随着for循环不断进行,新的一轮迭代中MEM又继续累计,变成了69%。想请问一下这是为什么?
网友评论