tensorflow [xrt]添加“释放所有内存”操作

3vpjnl9f  于 2022-10-29  发布在  其他
关注(0)|答案(5)|浏览(350)

系统信息

  • TensorFlow版本(您正在使用的):每夜
  • 您是否愿意提供(是/否):不适用
    描述功能和当前行为/状态。

当客户端丢失xrt托管状态的跟踪信息时(例如,因为在开始跟踪之前发生错误)或因为崩溃或因为其他错误,分配停留在设备端,无法释放如果有一个xrt操作可以删除xrt知道的所有内存,这将非常有用(可能可选地使用一个保留列表,这样客户端可以说“我知道这些,所以不要释放它们”)。

这是否会更改当前API?如何更改?

这可能是一个新的xrt操作。

谁将受益于此功能?

xrt API的用户。

任何其他信息

@michaelisard要求被分配。

6rqinv9w

6rqinv9w1#

只是澄清一下:如果你运行ConfigureDistributedTPU操作,所有的内存都被释放了吗?我假设你正在寻找一个比configure更轻量级的操作来释放内存。如果configure没有释放内存,那就是另一个bug了。

h6my8fg2

h6my8fg22#

据我所知,配置没有释放内存(它当然不会从XRT中注销它,所以我可以将它传递给另一个执行,它会做一些事情--我还没有验证底层内存是否仍然存在)。我确实还希望有一个更轻量级的操作。当我们这样做时,我还希望使用一个更轻量级的操作来中断正在运行的XRTExecute(我们的模型看起来像是设备上while循环中的状态机,所以如果它处于坏状态,就很难杀死它)。

0dxa2lsx

0dxa2lsx3#

好,我们将把“配置时未释放内存”和“支持在不配置的情况下释放所有内存”作为单独的问题处理。
我认为如果不重置所有的芯片,很难中断一个正在运行的程序。如果你需要能够从代码生成错误中恢复,那么你可能需要做一个重置。如果你希望用户能够从他们自己的错误中恢复,我担心你需要在你生成的代码中添加支持,以经常产生。

o4hqfura

o4hqfura4#

我认为如果不重置所有的芯片,很难中断一个正在运行的程序。如果你需要能够从代码生成错误中恢复,那么你可能需要做一个重置。如果你希望用户能够从他们自己的错误中恢复,我担心你需要在你生成的代码中添加支持,以经常产生。
好的,在这种情况下,只要确保使用configure重置芯片清除所有相关状态就可以了。我认为现在如果有一个计算正在运行,它有时会挂起。

rm5edbpk

rm5edbpk5#

OOM上的内存概述也有一些问题:

Tensorflow error: Status: Attempting to allocate 235.02M. That was not possible. There are 446.86M free. Due to fragmentation, the largest contiguous region of free memory is 234.77M.;
HBM capacity 8.00G:
       Top-of-Memory reserved:  528.00M (     553,648,128 bytes)
          Currently allocated:  212.71M (     223,038,464 bytes)
         Requested allocation:  235.02M (     246,431,744 bytes)
                               ------------
      Available after request:    7.05G (   7,566,816,256 bytes)

	 [[{{node XRTExecute}}]]
Hint: If you want to see a list of allocated tensors when OOM happens, add report_tensor_allocations_upon_oom to RunOptions for current allocation info.

看起来这些7G实际上是分配的,但在概述中缺失。

相关问题