tensorflow-federated - 有没有办法模拟 tensorflow-federated 中的通信成本?
问题描述
我正在努力优化联邦学习中的通信成本。因此,我需要模拟真实的网络延迟并测量通信开销(客户端和服务器之间的通信)。可以用 TFF 做到这一点吗?在联邦学习环境中是否存在用于通信的现实网络模型?
解决方案
在执行堆栈中引入网络延迟或延迟并不是 TFF 目前开箱即用的支持。
然而,在架构上这是绝对可能的。解决类似请求的最近贡献的一个示例是SizingExecutor
,它测量在执行层次结构中向下和向上通过它的位。SizingExecutor
立即在代表客户端的每个执行器顶部放置一个,然后测量通过该执行堆栈运行的每个联合计算中广播和聚合的位;这个实现可以在这里找到,实际上是在公共 API 中公开的。
您的愿望与 sizing executor 并没有完全不同,并且 sizing executor 可以直接服务于您的目的,如果您将 total bits ber round 作为您尝试优化的指标。但是,如果您更愿意检查分布式计算的其他方面(例如随机数据损坏),您可以想象通过实现与大小调整执行器类似的功能来实现这一点,尽管您也可以想象在计算级别执行此操作(客户端随机选择是否返回其真实结果或其结果的损坏版本)。
我认为从设计的角度来看,TFF 更愿意任何新的执行者保持他们正在执行的计算的语义不变,并且会转向简单地测量每轮比特等属性,或者直接在计算或算法中引入任何损坏,而不是然后在执行这些计算。客户可以选择引入的腐败或延迟类型实际上是任意的;这是一个最近的研究项目的一个例子,它试图通过在某些客户端上插入恶意更新来攻击全局模型。我想,可以使用相同的方法来模拟任何所需的网络属性(例如,一些客户端休眠,一些发送回损坏的更新等)。
希望这可以帮助!
推荐阅读
- database - 如何在角度的单独组件之间存储和交换大型 Firestore 数据?
- reactjs - 带有 redux 连接的 Typescript 约束
- java - 具有不同对象类型的重复代码
- python - 使用 python + Selenium + Beautiful Soup 查找具有固定字符串的 URL
- php - 从两个表中获取唯一结果或如何通过 ID 减去 laravel 中的两个表
- node.js - Mocha 未显示失败测试的任何详细信息
- android - Xam.Plugin.Media 错误 Xamarin 表单
- perl - Elastic Search 批量需要添加标头
- mysql - Docker:$'\r':在 Windows 上找不到命令
- c# - 我如何(在 Windows 10 上)设置要在 C# 中开发的 Godot 项目并导出到 web/html5?