我正在使用spark/face-alignment生成几乎相同的面部。
我正在使用一台有4个线程的机器,它们都尝试访问GPU。因此,我制定了一种策略,每4个请求就使用一次GPU。这似乎适合内存。
我的问题是,当我清理cuda时,它从未完全清理干净。我会看到负载在线程之间移动并释放一些空间,但CUDA从未释放最后的624MiB。有没有一种方法可以完全清理它?
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的评论中得出的结果。