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")

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/659783.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

专业的韩语导游翻译需要具备哪些能力

近年来,随着中韩关系的友好发展,两国之间的旅游交流呈现出爆发式的增长。这一趋势不仅深化了中韩民众之间的交流与理解,也对韩语导游翻译人才的需求产生了显著的影响。那么,为了做好韩语翻译工作,我们需要具备哪些专业…

页面通过Vue进行整体页面不同语言切换 i18n库

目录 引入 如何做到 下载i18n库 构建整体翻译文件结构 语言包文件 i18n配置文件 把i18n挂载到vue实例上 添加按钮点击事件切换语言 引入 我们现在有这样一个要求,我们想要对我们开发的网页进行国际化操作,也就是我们不仅要有中文,还要有英文等。用户可以随时进行不同语言…

代码随想录day16--二叉树的应用4

LeetCode513.找树左下角的值 题目描述: 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7 解题思…

C++ //练习 3.21 请使用迭代器重做3.3.3节(第94页)的第一个练习。

C Primer(第5版) 练习 3.21 练习 3.21 请使用迭代器重做3.3.3节(第94页)的第一个练习。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 /*************************************…

【重磅】中国隐私计算平台市场,摩斯第一

摩斯市场份额遥遥领先 10月11日,全球领先的IT市场研究和咨询公司IDC发布了《中国隐私计算平台厂商市场份额,2022》报告。蚂蚁集团凭借商用隐私计算平台摩斯(MORSE),以 36.9%的市场份额排名第一。…

Git系列---远程操作

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 引用 1.理解分布式版本控制…

java+springboot校园体育场地预约预订使用系统vue+ssm

研究内容和研究方法 1.研究内容 网站主要包括管理员和用户两个部分,用户可以登录与注册自己的基本信息、查询哪些场地可以使用、提前预约场地、取消预约的场地、使用完场地后进行缴费。管理员可以审批用户的注册信息、对用户信息进行增删改查、查询场地的使用情况、…

JUnit

前言:自动化就是selenium脚本来实现的,JUnit是java的单元测试工具,只不过我们在实现自动化的时候需要借助一下JUnit库里面提供的一些方法。 1、Test Test :表示方法是测试方法,执行当前这个类的时候,会自动…

微服务知识

1、概念 大型单体应用拆分成多个独立部署运行的微服务(解决并发问题)​​​​​​​ 2、特点 3、技术栈 4、微服务带来的问题 ​​​​​​​ 5、微服务的注册中心 服务注册与发现:微服务实例在启动时会向注册中心注册自己的信息&#xf…

Centos慢慢长大(一)

1、写在前面 这将是一个系列性的文章。可能更多的是记录我在学习的过程中的一些感悟吧。我想强调的是在这一系列文章里我会从最小化的安装开始,然后逐渐的增加需要安装的软件。就象一个婴儿的诞生,慢慢的学走路、学说话、学使用筷子。。。。。。 这将是一…

nginx反向代理-负载均衡

nginx环境搭建 wget https://nginx.org/download/nginx-1.21.6.tar.gz(下载nginx安装包) tar -xvzf nginx-1.21.6.tar.gz(解压缩) yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel(下载依赖库和…

Wireshark网络协议分析 - UDP协议

在我的博客阅读本文 文章目录 1. 基础2. 实战2.1. 用Go写一个简单的UDP服务器与客户端2.2. Wireshark抓包分析 3. UDP与TCP的区别4. 参考资料 1. 基础 UDP包的数据结构: 2. 实战 2.1. 用Go写一个简单的UDP服务器与客户端 我们这里使用Golang写了一个简单的9830端…

强化学习原理python篇07——策略梯度法

强化学习原理python篇07——策略梯度法 Average state valueAverage rewardMonte Carlo policy gradient (REINFORCE)REINFORCE示例在torch里面编写这段代码1、用随机权重初始化策略网络2、运行N个完整的片段,保存其(s,a,r,s)状态转移3、对于每个片段k的每一步t&…

RocketMQ—RocketMQ安装

RocketMQ—RocketMQ安装 在安装RocketMQ之前需要先安装Jdk,并配置JAVA_HOME环境变量。 在安装之前我们要先下载RocketMQ的安装包。 下载 到RocketMQ的官网https://rocketmq.apache.org/ 选择Download。 本文使用4.9.2版本。 将下载页面拉到最后面,有…

外星人入侵(python)

前言 代码来源《python编程从入门到实践》Eric Matthes 署 袁国忠 译 使用软件:PyCharm Community Editor 2022 目的:记录一下按照书上敲的代码 alien_invasion.py 游戏的一些初始化设置,界面的大小,标题 import sys import …

【Tomcat与网络10】Tomcat I/O和线程池的并发调优

前面我们看了提高Tomcat启动速度的措施,这里我们看一下如何提高Tomcat的性能。 Tomcat 的调优涉及 I/O 模型和线程池调优、JVM 内存调优以及网络优化等,今天我们来聊聊 I/O 模型和线程池调优,由于 Web 应用程序跑在 Tomcat 的工作线程中&…

075:vue+mapbox 利用高德地址逆转换,点击地图,弹出地址信息

第075个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中利用高德逆地理编码,点击地图,弹出某点坐标和地址信息。这里要仔细阅读高德地图的逆编码API,同时要注意的是,这种转换在中国很好用,到了欧美国家就不好使了。同时这个底图是天地图的图像和标记。 直接…

Elasticsearch:构建自定义分析器指南

在本博客中,我们将介绍不同的内置字符过滤器、分词器和分词过滤器,以及如何创建适合我们需求的自定义分析器。更多关于分析器的知识,请详细阅读文章: 开始使用 Elasticsearch (3) Elasticsearch: analyzer…

MYSQL的配置和安装

下载安装 打开官网 MYSQL官网 点击DOWNLOADS 滑到最低下点击:MYSQL Community(GPL) Downlads 点击Download Archives 点击MySQL Community Server进入网站 选择相应版本下载,这里选择的是5.7.24版本,x86 64位【按需选择】 下载解压 配置文件…

Node.js Express 框架 2024版 笔记

1.0 操作命令 Node.js express 框架 https://www.expressjs.com.cn/ npm install -g express-generator expressexpress --pug --git // --pug 添加对 pug 模板引擎的支持 // --git 添加 .gitignore 代码仓库排除 //无法直接安装新版pug模板 npm i npm …