【发布时间】:2020-03-02 13:18:53
【问题描述】:
当我在没有 TFF 的情况下运行我的代码(使用 model.fit() 训练我的模型)时,我注意到 CPU 的使用率为 5%,而我的代码运行 GPU。但是如果我引入 TFF:除了 GPU,训练需要大量 CPU(90% 的顺序)和大量内存,知道我使用的是: Tensorflow 联合 v 0.12.0 TensorFlow v 2.1.0
【问题讨论】:
当我在没有 TFF 的情况下运行我的代码(使用 model.fit() 训练我的模型)时,我注意到 CPU 的使用率为 5%,而我的代码运行 GPU。但是如果我引入 TFF:除了 GPU,训练需要大量 CPU(90% 的顺序)和大量内存,知道我使用的是: Tensorflow 联合 v 0.12.0 TensorFlow v 2.1.0
【问题讨论】:
如果没有更多训练设置的详细信息,很难准确诊断发生了什么,但有几点需要注意:
TFF 通过将其函数规范(存储为 tf.compat.v1.GraphDefs)包装为 tf.functions 来使用 Eager TensorFlow 运行时,因此
默认情况下委派给 Eager TensorFlow 运行时以查找和使用 GPU。这是 TFF 团队正在调查的 TFF 运行时的一个方面,但到目前为止还没有花太多时间进行优化。 TFF 在这一点上认为加速器的使用是很好的,但不能完全保证或支持,尤其是在可能的异构硬件/操作系统设置中。您应该会看到使用可用 GPU 的速度比没有可用 GPU 的速度有所提高(您可以通过 disabling GPU at the beginning of your training 进行测试),但我们目前没有强制保证什么运行在哪里。
TFF 支持每个 FL 客户端并行;实际上,这可能意味着您可以在内存中拥有与客户端一样多的客户端模型副本/一次执行。在真实的 FL 设置中,这些模型都将位于不同的物理设备上;在模拟中,它们可能都共享您的 CPU。 TFF 通常提供一个分布式运行时,它正在成为自助服务的过程中。关于 can be found here 的早期教程,但这对于您的用例来说可能有点过头了。
综上所述,TFF 使用的 CPU 比 Keras 中模型训练的单个副本更多也就不足为奇了。这是在联邦环境中学习的一个基本事实——顺序计算和并行计算之间存在权衡——在某种意义上,它的最早前因(至少我知道)是Parallelized SGD。
【讨论】: