pysyft学习笔记一:dome思路(代码片段)

一只特立独行的猫 一只特立独行的猫     2022-12-03     754

关键词:

Pysyft是一个比较适合学习FL学习小白的开源框架,相比与FATE的高封装性,Pysyft提供了更高的自由度。虽然FATE确实加密算法等等的效果做的非常的好,但是我在Ubuntu下面捣鼓了两天,下载了Mysql,Redis等等的一堆东西,采用docker的方式来部署FATE,发现环境配置的难度实在太高了,像我这种小白,FL本来就不是很熟悉,还是Pysyft友好一些。

记录一下Pysyft学习的心得

因为Pysyft主要是用于分布式学习,所以我首先打算搞明白它是如何实现分布式的。先用syft模拟一下,syft底层使用命令链实现的。

导入必要的包

import syft as sy

import torch

扩展pytorch
熟悉pytorch的同学都知道,torch的训练核心是tensor的改变,传统集中式的训练在本地就可以处理torch,不需要考虑分发与回收。所以Pysyft提供了TorchHook()类,扩展了torch(主要是tensor),为分布式训练提供了一种思路。

hook = sy.TorchHook(torch)

这里有一个单词叫Hook,直译为钩子。在CS中指代一种技术,在系统没有调用该函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递。简单来说,就是把系统的程序拉出来变成我们自己执行代码片段。
定义传输模型

x = torch.tensor([1,2,3,4,5])
y = torch.tensor([5,4,3,2,1])

tensor是传给客户端的数据,在这里为了方便演示,采用tensor的方式传给客户端,实际情况下应该传递的是XNN model。
创建客户端
可以创建多个,但是由于是dome,所以采用1客户端的方式。hook是一定要传入的参数(暂时不懂为什么),id是客户端的名称。

#创建一个客户端one
one = sy.VirtualWorker(hook, id='one')

分发模型
在tensor创建好以后,就可以下发给客户端了,但是下发的是副本。

x_ptr = x.send(one)
y_ptr = y.send(one)

但是因为要指导客户机操作,所以会保留副本的指针。但是接下来对指针的所有操作都会转化为对数据的操作。
训练模型
并没有训练实际的模型,因为只是实现一种dome的思路。这里采用dome相加的方式来实验一下。

print("1:",x_ptr)
print("2:",y_ptr)   
x_ptr = x_ptr + y_ptr
print("3:",x_ptr)

这两个指针的相加按照常理本应该出错,但是可以把这个理解为一种指导,所以实际上在客户端进行了相加的操作。

运行效果如下:
me代表的是服务器的id(默认),one代表的是客户端的id,冒号后面的数字代表的是在客户端中的tensor的地址。这里可能会疑惑,为什么x_ptr的地址会改变,实际上,在执行x_ptr + y_ptr时,并不是在本地执行的加法,一个命令序列化后发送给了one,one执行了这个计算操作,创建了一个tensor,然后返回了一个指针到本地机器。

收回模型

x_value = x_ptr.get() 
print(x_value)

get方法收回模型,并且销毁x_ptr指针。

以上就是dome的思路,应该就是这个架构,以后再慢慢完善后续的章节,争取寒假学会Pysyft。

pysyft学习笔记二:伪分布式模型训练的实现(代码片段)

...悉send和get机制的小伙伴可以看一下我的上一篇博客:Pysyft学习笔记一:dome思路,然后再看这篇博客,效果会更好哦。导入基本库importtorch#分布式训练importsyftassy#用于搭建神经网络fromtorchimportnn#用于构造优化器fromt... 查看详情

pysyft学习笔记四:minist数据集下的联邦学习(并行训练与非并行训练)(代码片段)

目录手写数字识别模型(非并行训练)概述图导入基本包创建客户机设置训练参数初始化数据集搭建神经网络模型定义训练与测试函数定义主函数训练效果手写数字识别模型(并行训练)概述图导入必要的包建立... 查看详情

pysyft学习笔记三:分布式模型实现(fed_avg算法整合模型)(代码片段)

导入包导入包,并初始化Hookimporttorchimportsyftassyfromtorchimportnnfromtorchimportoptimhook=sy.TorchHook(torch)构建客户机Bob=sy.VirtualWorker(hook,id='Bob')Alice=sy.VirtualWorker(hook,id='Alice')构建数据集自己随便想了一些数据... 查看详情

学习笔记——ssm整合(思路步骤)(代码片段)

2023-01-22一、SSM整合1、Spring+SpringMVC(1)容器管理对象,由DispatcherServlet管理(2)Spring容器对象,由ContextLoaderListener管理2、解决组件扫描的冲突问题(1)SpringMVC只扫描Controller层(2)Spring扫描排除Controller层2、Spring+Mybatis(1)关... 查看详情

代码审计系列:审计思路学习笔记(代码片段)

目录前言一、基础代码审计1、代码审计思路(1)按照具体功能审计(2)按照漏洞类型审计2、快速审计(1)补丁对比(2)逻辑漏洞业务型漏洞(3)Fuzzing二、高级代码审计1、变量本身的key2... 查看详情

pysyft学习笔记四:minist数据集下的联邦学习(并行训练与非并行训练)(代码片段)

目录手写数字识别模型(非并行训练)概述图导入基本包创建客户机设置训练参数初始化数据集搭建神经网络模型定义训练与测试函数定义主函数训练效果手写数字识别模型(并行训练)概述图导入必要的包建立... 查看详情

stm32学习笔记①:环境配置及室内温湿度检测(代码片段)

文章目录前言一、项目简介1.项目名称2.项目设计思路3.项目准备软硬件二、项目实施1.BSP工程项目创建2.BSP工程开发3.硬件接线三、项目效果总结前言这是初次接触STM32单片机,作为第一个项目,在此做下笔记一、项目简介... 查看详情

linux学习笔记一(代码片段)

linux学习笔记一文章目录linux学习笔记一Linuxpackageoperationoflookingfilesoperationhelpcommandsowncommandsechotunnelechoagainuserorrootprocessingaliasagainfinding这个是我在学习linux系统的时候的一点的小小的总结,希望对大家有一定的在帮助啦。Linux 查看详情

leetcode笔记:weeklycontest257(代码片段)

LeetCode笔记:WeeklyContest2571.题目一1.解题思路2.代码实现2.题目二1.解题思路2.代码实现3.题目三1.解题思路2.代码实现4.题目四1.解题思路2.代码实现1.题目一给出题目一的试题链接如下:1995.CountSpecialQuadruplets1.解题思路这一题... 查看详情

leetcode笔记:weeklycontest266(代码片段)

LeetCode笔记:WeeklyContest2661.题目一1.解题思路2.代码实现2.题目二1.解题思路2.代码实现3.题目三1.解题思路2.代码实现4.题目四1.解题思路2.代码实现1.题目一给出题目一的试题链接如下:2062.CountVowelSubstringsofaString1.解题思路这... 查看详情

leetcode笔记:biweeklycontest60(代码片段)

LeetCode笔记:BiweeklyContest601.题目一1.解题思路2.代码实现2.题目二1.解题思路2.代码实现3.题目三1.解题思路2.代码实现4.题目四1.解题思路2.代码实现1.题目一给出题目一的试题链接如下:1991.FindtheMiddleIndexinArray1.解题思路这一... 查看详情

leetcode笔记:biweeklycontest61(代码片段)

LeetCode笔记:BiweeklyContest611.题目一1.解题思路2.代码实现2.题目二1.解题思路2.代码实现3.题目三1.解题思路2.代码实现4.题目四1.解题思路2.代码实现1.题目一给出题目一的试题链接如下:2006.CountNumberofPairsWithAbsoluteDifferenceK1.... 查看详情

sql注入学习笔记(代码片段)

文章目录前言SQL注入是什么?SQL注入具体内容一.攻击思路二.万能密码三.注入分类1、参数类型分类2.注入位置分类3.结果反馈分类SQL注入相关例题总结前言SQL注入漏洞(SQLinjection)是Web层面最高危的漏洞之一。但凡使... 查看详情

leetcode笔记:weeklycontest260(代码片段)

LeetCode笔记:WeeklyContest2601.题目一1.解题思路2.代码实现2.题目二1.解题思路2.代码实现3.题目三1.解题思路2.代码实现4.题目四1.解题思路2.代码实现1.题目一给出题目一的试题链接如下:2016.MaximumDifferenceBetweenIncreasingElements1.... 查看详情

tenseal学习笔记一(代码片段)

...nSEALContextEncryptionandEvaluation引言发现网上没有什么TenSEAL的学习笔记,只能看官方文档,所以打算根据官方文档和自己的一些理解写一下TenSEAL的学习笔记。TenSEAL简介Tutorial0:GettingStartedWelcometoTenSEA 查看详情

leetcode笔记:biweeklycontest57(补发)(代码片段)

LeetCode笔记:BiweeklyContest571.题目一1.解题思路2.代码实现2.题目二1.解题思路2.代码实现3.题目三1.解题思路2.代码实现4.题目四1.解题思路2.代码实现1.题目一给出题目一的试题链接如下:1941.CheckifAllCharactersHaveEqualNumberofOccurren... 查看详情

veriloghdl学习笔记一(代码片段)

VerilogHDL学习笔记一文章目录VerilogHDL学习笔记一一、简介二、第一个案例三、环境的配置四、其他知识一、简介VerilogHDL是一种硬件描述语言二、第一个案例这个只是一个展示了modulecounter10(//端口定义inputrstn,//复位端,低有效i... 查看详情

veriloghdl学习笔记一(代码片段)

VerilogHDL学习笔记一文章目录VerilogHDL学习笔记一一、简介二、第一个案例三、环境的配置四、其他知识一、简介VerilogHDL是一种硬件描述语言二、第一个案例这个只是一个展示了modulecounter10(//端口定义inputrstn,//复位端,低有效i... 查看详情