如何在使用Pytorch时释放CUDA的GPU资源?

3
我正在使用spark/face-alignment生成几乎相同的面部。
 fa = face_alignment.FaceAlignment(face_alignment.LandmarksType._2D, flip_input=False) # try to use GPU with Pytorch depenencies.
 imageVector.append( convertImagefa(image, fa))
 del fa
 gc.collect()
 torch.cuda.empty_cache() # trying to clean up cuda.
 return imageVector

我正在使用一台有4个线程的机器,它们都尝试访问GPU。因此,我制定了一种策略,每4个请求就使用一次GPU。这似乎适合内存。
我的问题是,当我清理cuda时,它从未完全清理干净。我会看到负载在线程之间移动并释放一些空间,但CUDA从未释放最后的624MiB。有没有一种方法可以完全清理它?
nvidia-smi                                                                                                                                                              
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A     17132  C   .../face-the-same/bin/python      624MiB |
|    0   N/A  N/A     17260  C   .../face-the-same/bin/python     1028MiB |
|    0   N/A  N/A     17263  C   .../face-the-same/bin/python      624MiB |
|    0   N/A  N/A     17264  C   .../face-the-same/bin/python      624MiB |

提供信息:最终我使用了分布式锁将GPU计算固定在一个执行器/进程ID上。这是从@Jan的评论中得出的结果。

1个回答

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接