pysyft框架中WebsocketClientWorker与WebsocketServerWorker的消息传输

本文主要是介绍pysyft框架中WebsocketClientWorker与WebsocketServerWorker的消息传输,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言

pysyft是基于pytorch的一个联邦学习框架(虽然用起来很难受),通过内存管理实现联邦学习的模拟。
在pysyft中,WebsocketServerWorker充当数据的提供方(数据存储方),而WebsocketClientWorker作为数据的使用方(指令提供方),通过WebsocketClientWorker以TCP连接的方式向WebsocketServerWorker请求服务,从而实现分布式训练。

端口通信

笔者的pysyft版本为0.2.0(较为经典的版本),在编写代码时,想要使用WebsocketServerWorker向WebsocketClientWorker发送数据,但是网上没有相关文档描述,且GPT胡言乱语,所以在阅读pysyft的源码后,记录一下心得。

启发

在实例化client类后,发现remote相关的函数非常多,但是不知道从哪里下手处理。对于WebsocketServerWorker与WebsocketClientWorker的通信模型,有一个通用的代码框架。
WebsocketServerWorker:

# 建立server
worker = WebsocketServerWorker(**kwargs)
# 建立数据集
dataset = sy.BaseDataset(data, target)
# 将数据集添加到server中
worker.add_dataset(dataset, key="xor")

WebsocketClientWorker:

# 初始化模型
traced_model = th.jit.trace(model, mock_data)
# 配置训练采纳数
train_config = sy.TrainConfig(model=traced_model,loss_fn=loss_fn,optimizer=optimizer,batch_size=batch_size,optimizer_args=optimizer_args,epochs=epochs,shuffle=shuffle)
# 将配置通信参数
kwargs_websocket = {"host": "172.16.5.45", "hook": hook, "verbose": False}
alice = workers.websocket_client.WebsocketClientWorker(id="alice", port=8777, **kwargs_websocket)
train_config.send(alice)
# 开始远程训练
for epoch in range(10):loss = alice.fit(dataset_key="xor")

这里我发现在alice.fit时,需要将dataset_key发送到server,打算从fit函数这里入手,来阅读源码。

WebsocketClientWorker的fit函数

在这里插入图片描述
有fit函数可以知道,这里最关键的函数是_send_msg_and_deserialize,所以继续阅读_send_msg_and_deserialize函数。
在这里插入图片描述
这里的代码还是有点复杂,于是笔者尝试将message类进行打印。发现message并没有包含通讯相关的内容。但是发现了_send_msg函数。(这里的serialize与deserialize函数使用来通信的序列化与反序列化)读到这里后,基本上可以肯定,这个函数使用来做端口通信的。因为只需要实现消息传输,所以不需要过度深入源码。
在_send_msg_and_deserialize的下方,我又发现了几个简单的函数,打算从这个函数入手进行分析。
在这里插入图片描述

WebsocketServerWorker的list_objects函数

果然,我猜测这里用到了python的函数反射,将字符串映射到了函数的名称。在WebsocketServerWorker中发现了list_objects函数。
在这里插入图片描述
到这里,基本上就可以猜想到如何实现通信了。

具体通信方式

1、在WebsocketServerWorker或其子类中实现get_id()方法:

class CustomWebsocketServerWorker(WebsocketServerWorker):def get_colonyId(self, *args):return self.colony

2、在WebsocketClientWorker中请求RPC调用

class CustomWebsocketClientWorker(WebsocketClientWorker):colony_id = -1def get_colonyId(self, **kwargs):return self._send_msg_and_deserialize("get_colonyId")

然后就可以实现任意参数的消息传输。

这篇关于pysyft框架中WebsocketClientWorker与WebsocketServerWorker的消息传输的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/666742

相关文章

Python Web框架Flask、Streamlit、FastAPI示例详解

《PythonWeb框架Flask、Streamlit、FastAPI示例详解》本文对比分析了Flask、Streamlit和FastAPI三大PythonWeb框架:Flask轻量灵活适合传统应用... 目录概述Flask详解Flask简介安装和基础配置核心概念路由和视图模板系统数据库集成实际示例Stre

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

RabbitMQ消息总线方式刷新配置服务全过程

《RabbitMQ消息总线方式刷新配置服务全过程》SpringCloudBus通过消息总线与MQ实现微服务配置统一刷新,结合GitWebhooks自动触发更新,避免手动重启,提升效率与可靠性,适用于配... 目录前言介绍环境准备代码示例测试验证总结前言介绍在微服务架构中,为了更方便的向微服务实例广播消息,

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

C++ RabbitMq消息队列组件详解

《C++RabbitMq消息队列组件详解》:本文主要介绍C++RabbitMq消息队列组件的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. RabbitMq介绍2. 安装RabbitMQ3. 安装 RabbitMQ 的 C++客户端库4. A

C++ HTTP框架推荐(特点及优势)

《C++HTTP框架推荐(特点及优势)》:本文主要介绍C++HTTP框架推荐的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Crow2. Drogon3. Pistache4. cpp-httplib5. Beast (Boos

SpringCloud整合MQ实现消息总线服务方式

《SpringCloud整合MQ实现消息总线服务方式》:本文主要介绍SpringCloud整合MQ实现消息总线服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、背景介绍二、方案实践三、升级版总结一、背景介绍每当修改配置文件内容,如果需要客户端也同步更新,