多设备并行执行与模型训练策略
1. 多设备并行执行原理
使用 TF 函数的好处之一是并行性。当 TensorFlow 运行 TF 函数时,它会先分析图以确定需要评估的操作列表,并统计每个操作的依赖数量。然后,将无依赖的操作(即源操作)添加到其所在设备的评估队列中。操作评估完成后,依赖该操作的其他操作的依赖计数器会减 1。当某个操作的依赖计数器变为 0 时,它会被推送到其设备的评估队列。所有所需节点评估完成后,TensorFlow 会返回其输出。
CPU 评估队列中的操作会被分发到一个名为“操作间线程池”的线程池。若 CPU 有多个核心,这些操作就能并行评估。部分操作有支持多线程的 CPU 内核,这些内核会将任务拆分为多个子操作,子操作会被放入另一个评估队列,并分发到名为“操作内线程池”的第二个线程池(所有支持多线程的 CPU 内核共享该线程池)。简而言之,多个操作和子操作可在不同 CPU 核心上并行评估。
GPU 的情况相对简单。GPU 评估队列中的操作会按顺序评估。不过,大多数操作都有支持多线程的 GPU 内核,通常由 TensorFlow 依赖的库(如 CUDA 和 cuDNN)实现。这些实现有自己的线程池,通常会尽可能利用更多的 GPU 线程(这就是 GPU 不需要操作间线程池的原因,因为每个操作已经占用了大部分 GPU 线程)。
例如,在图中操作 A、B 和 C 是源操作,可立即评估。操作 A 和 B 位于 CPU 上,会被发送到 CPU 评估队列,然后分发到操作间线程池并立即并行评估。操作 A 有支持多线程的内核,其计算会被拆分为三部分,由操作内线程池并行执行。操作 C 进入 GPU 0 的评估队列,在本例中其 GPU 内核使用了 cuDNN,cuD
超级会员免费看
订阅专栏 解锁全文
6096

被折叠的 条评论
为什么被折叠?



