TensorFlow 设备上下文、流和上下文切换

2024-04-18

In the GPU设备 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/common_runtime/gpu/gpu_device.cc#L264代码,我注意到一个GPU设备上下文 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/common_runtime/gpu/gpu_device.cc#L308是按流制作的。

这样做的目的是让每个上下文都可以控制一个 OpKernelContext,然后当需要执行各种流时,只需切换上下文即可将不同的数据/代码推送到 GPU 上然后执行。

各种流是否注册为不同的设备(即“/gpu:0”和“/gpu:1”)?

Per this https://stackoverflow.com/questions/39399890/tensorflow-device-contexts,ThreadPoolDevice 没有上下文,但是如果我将上下文添加到 ThreadPoolDevice 中,它们是否最适合作为 ThreadContext 的一种?


对于 GPU,我们维护一些用于执行的流:计算流(大多数计算内核在其上运行)和一些内存复制流(用于在主机和设备之间执行内存副本,反之亦然)。这样做是为了重叠 GPU 设备上的通信和计算,但对于我们使用 GPU 的方式来说是特定的。人们还可以轻松地为所有计算和通信创建一个 GPU 流,这将是正确的,尽管速度较慢。

我们希望将计算流提供给进行计算的内核,并将内存复制流提供给进行复制的内核。我们为每个流创建一个 GPUDeviceContext 对象,然后将正确的设备上下文对象传递给 OpKernelContext。

因此,这里的特定实现反映了异步硬件设备(GPU)的属性,这就是 ThreadPoolDevice 没有此类机制的原因。在 CPU 上,所有计算都是同步的,因此不需要诸如流之类的抽象。

定制硬件的执行模型可能会决定定制设备支持在 TensorFlow 中需要什么样的状态和管理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TensorFlow 设备上下文、流和上下文切换 的相关文章

随机推荐