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