IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Pysyft 3.0版本的安装教程及入门(一) -> 正文阅读

[开发测试]Pysyft 3.0版本的安装教程及入门(一)

Pysyft 3.0版本的安装教程及入门(一)

之前按照网上的教程安装了好几次syft 2.4,然后发现以目前电脑的cuda版本,没办法在syft2.4上实现卷积。于是更改syft版本至3.0以上。3.0前后的版本发生了很大的改变,之前的很多函数都变了。而3.0之后的教程实在是太少了,于是决定自己边学边写。

安装

版本安装syft3.0,参考知乎链接: https://zhuanlan.zhihu.com/p/374115982.

(一)

api文档参考github链接: https://github.com/OpenMined/PySyft/blob/dev/packages/syft/examples/api/start.ipynb
先写上:

assert True is True

import sys
import pytest
import syft as sy

from syft.core.node.common.service.auth import AuthorizationException
from syft.util import key_emoji

sy.LOG_FILE = "syft_do.log"
sy.logger.remove()
_ = sy.logger.add(sys.stdout, level="DEBUG")

1、首先得创建一个节点。sy.Device创建device(或叫Node)

bob_device = sy.Device(name="Bob's iPhone")
assert bob_device.name == "Bob's iPhone"

2、.get_client()创建client。Client和device有一样的UID和Address。PySyft 中跟 Node 交互的方式是跟 client 通信, client 能够 send message,Node 能 receive message.

bob_device_client = bob_device.get_client()
assert bob_device_client.name == "Bob's iPhone Client"

assert bob_device.id == bob_device_client.device.id
assert bob_device.address == bob_device_client.address

3、所以现在从client向node发一个信息。发送的消息叫SyftMessage,它有许多类型。
这里,先制作一个ReprMessage,它必须有一个address位,不然永远发不出去(这个address是client的地址),该消息通常用一个msg_id来标识。

msg = sy.ReprMessage(address=bob_device_client.address)
print(msg.pprint)
print(bob_device_client.address.pprint)
assert msg.address == bob_device_client.address

print(sy.ReprMessage.mro())   #查看此条message的type

在这里插入图片描述
建议发消息之前先print(sy.ReprMessage.mro())一下,看看该消息的类型。可以看到,它是一个"Immediate" “WithoutReply” 类型的,因此下面在发送的时候就可以这么写了“.send_immediate_msg_without_reply”。

4、然后发送这条message,注意是client发送,而不是Node。消息类型一定要写对。

with pytest.raises(AuthorizationException):
    bob_device_client.send_immediate_msg_without_reply(
        msg=sy.ReprMessage(address=bob_device_client.address)
    )

可以看到结果:
在这里插入图片描述发现有error…“You are not Authorized to access this service”发送方没有权限。

5、查看keys,发现二者不等。那么就要找一个有权限的client来当发送方。

print(bob_device_client.keys)
print(bob_device.keys)

assert bob_device_client.verify_key != bob_device.root_verify_key

6、用root_client来创建client,使client拥有一些root权限,然后再查看keys,这时就可以和device的key匹配上了。

bob_device_client = bob_device.get_root_client()
print(bob_device_client.keys)
print(bob_device.keys)

assert bob_device_client.verify_key == bob_device.root_verify_key

7、再次发送信息。

bob_device_client.send_immediate_msg_without_reply(
    msg=sy.ReprMessage(address=bob_device_client.address)
)

在这里插入图片描述
可以看到发送成功了。

总结一下,ReprMessage 是由 client 创建的,然后用 Client 的 SigningKey 进行签名。SigningKey 和 VerifyKey 是一对,VerifyKey 是公钥并且通过 SigningKey 获得。当我们用root_client 来生成 client 时,我们用 client 最新生成的 SigningKey 来更新了 Node 上的 VerifyKey。 因此,client 就有了一些 root 权限的操作。

所以,在每一类消息的背后,都有一个 service 在 Node 上为它处理消息。但不是所有的发送、接收都需要 root 权限。

以上,Bob 就有了 root 权限到自己的 Node。但是,如果他想和其他人分享数据、计算资源咋办呢?比如另一个 Node 叫“ Sub Node ” ,他就需要创建一个虚拟的机器,VirtualMachine,来进行通信。具体的内容下周学习并分享。

附本节完整代码:

assert True is True

import sys
import pytest
import syft as sy

from syft.core.node.common.service.auth import AuthorizationException
from syft.util import key_emoji

sy.LOG_FILE = "syft_do.log"
sy.logger.remove()
_ = sy.logger.add(sys.stdout, level="DEBUG")

bob_device = sy.Device(name="Bob's iPhone")
assert bob_device.name == "Bob's iPhone"

bob_device_client = bob_device.get_client()
assert bob_device_client.name == "Bob's iPhone Client"

assert bob_device.id == bob_device_client.device.id
assert bob_device.address == bob_device_client.address

msg = sy.ReprMessage(address=bob_device_client.address)
print(msg.pprint)
print(bob_device_client.address.pprint)
assert msg.address == bob_device_client.address

print(sy.ReprMessage.mro())

with pytest.raises(AuthorizationException):
    bob_device_client.send_immediate_msg_without_reply(
        msg=sy.ReprMessage(address=bob_device_client.address)
    )

print(bob_device_client.keys)
print(bob_device.keys)

assert bob_device_client.verify_key != bob_device.root_verify_key

bob_device_client = bob_device.get_root_client()
print(bob_device_client.keys)
print(bob_device.keys)

assert bob_device_client.verify_key == bob_device.root_verify_key

bob_device_client.send_immediate_msg_without_reply(
    msg=sy.ReprMessage(address=bob_device_client.address)
)

参考:
[1]: https://zhuanlan.zhihu.com/p/385358980

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-07-05 20:28:17  更:2021-07-05 20:28:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 19:01:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码