Tensorflow Federated中测量执行时间的推荐方法



我想知道是否有一种推荐的方法来测量Tensorflow Federated中的执行时间。更具体地说,如果希望提取某一轮中每个客户端的执行时间,例如,对于参与FedAvg轮的每个客户端,在本地训练开始之前保存时间戳,在发送回更新之前保存时间标记,那么这样做的最佳(或正确(策略是什么?此外,由于客户端的代码是并行运行的,这样的时间戳是否不真实(特别是考虑到不同客户端可能使用不同大小的模型进行本地训练的假设(?

为了非常实用,在@tf.functionclient_update(model, dataset, server_message, client_optimizer)的开头和结尾使用tf.timestamp()——这可能是一个简化的签名——然后减去这样的时间戳是否合适?

我觉得这不是正确的方法,因为客户端在同一台机器上并行运行。

感谢任何能在这方面帮助我的人。

有多个潜在的测量执行时间的地方,首先可能是非常具体地定义什么是预期的测量。

  1. 按照建议测量每个客户的培训时间是了解客户之间可变性的好方法。这可能有助于确定子弹是否经常有掉队者。在client_update函数的开头和结尾使用tf.timestamp()似乎是合理的。问题正确地指出,这是并行发生的,所有这些时间的总和将类似于CPU时间。

  2. 衡量一轮中完成所有客户培训所需的时间通常是上述值中的最大值。在TFF中模拟FL时,这可能不是真的,因为TFF可能由于系统资源限制而决定按顺序运行一些客户端。在实践中,所有这些客户端都将并行运行。

  3. 可以通过将tf.timestamp调用移动到外部训练循环来测量完成一轮所需的时间(运行客户端所需的最长时间,加上服务器更新所需时间(。这将在上的代码段中包装对trainer.next()的调用https://www.tensorflow.org/federated.这将与经过的实时时间(挂钟时间(最相似。

最新更新