安装pysyft联邦框架和pysyft代码案例

2023-05-16

pysyft联邦框架

    • 1、新建虚拟环境
    • 2、安装pysyft
    • 3、安装jaxlib
    • 4、安装完成
    • 5、安装结果测试
    • 6、注意事项
    • 7、pysyft框架联邦案例
    • 8、一些优秀教程
    • 9、报错解决办法

1、新建虚拟环境

由于pysyftpytorch之间有版本制约,在已有pytorch环境直接安装pysyft,可能会导致原有的pytorch异常,所以建议新建虚拟环境。

conda create -n pysyft python=3.9

激活环境

conda activate pysyft

在这里插入图片描述

2、安装pysyft

在安装pysyft时,会自动将依赖的环境安装好,所以直接安装pysyft就行,不需要提前安装 pytorch!!!

目前pysyft的版本有:

versions: 0.1.0a1, 0.1.1a2, 0.1.2a1, 0.1.3a1, 0.1.4a1, 0.1.4a2, 
0.1.5a1, 0.1.6a1, 0.1.7a1, 0.1.8a1, 0.1.9a1, 0.1.10a1, 
0.1.10a2, 0.1.10a4, 0.1.11a1, 0.1.12a1, 0.1.13a1, 0.1.14a1, 
0.1.15a1, 0.1.16a1, 0.1.19a1, 0.1.20a1, 0.1.21a1, 0.1.22a1, 
0.1.23a1, 0.1.24a1, 0.1.25a1, 0.1.26a1, 0.1.27a1, 0.1.28a1, 
0.1.29a1, 0.2.0a1, 0.2.0a2, 0.2.1a1, 0.2.2a1, 0.2.3a1, 
0.2.3a2, 0.2.3a3, 0.2.3, 0.2.4, 0.2.5, 0.2.6, 0.2.7, 0.2.8, 
0.2.9, 0.3.0, 0.5.0rc1, 0.5.0rc2, 0.5.0rc3, 0.5.0, 0.5.1, 
0.6.0a0, 0.6.0a1, 0.6.0a2, 0.6.0a3, 0.6.0a4, 0.6.0a5, 0.6.0, 
0.7.0b1, 0.7.0b2, 0.7.0b3, 0.7.0b4, 0.7.0b5, 0.7.0b6, 
0.7.0b7, 0.7.0b8, 0.7.0b9, 0.7.0b10, 0.7.0b11, 0.7.0b12, 
0.7.0b13, 0.7.0b14, 0.7.0b15, 0.7.0b16, 0.7.0b17, 0.7.0b18, 
0.7.0b19, 0.7.0b20, 0.7.0b21, 0.7.0b22, 0.7.0b23, 0.7.0b24, 
0.7.0b25, 0.7.0b26, 0.7.0b27, 0.7.0b28, 0.7.0b29, 0.7.0b30, 
0.7.0b31, 0.7.0b32, 0.7.0b33, 0.7.0b34, 0.7.0b35, 0.7.0b36, 
0.7.0b37, 0.7.0b38, 0.7.0b39, 0.7.0b40, 0.7.0b41, 0.7.0b42, 
0.7.0b44, 0.7.0b45, 0.7.0b46, 0.7.0b47, 0.7.0b48, 0.7.0b49, 
0.7.0b50, 0.7.0b51, 0.7.0b52, 0.7.0b53, 0.7.0b54, 0.7.0b55, 
0.7.0b56, 0.7.0b57, 0.7.0b58, 0.7.0b59, 0.7.0b60, 0.7.0b61, 
0.7.0b62, 0.7.0, 0.8.0b1, 0.8.0b2, 0.8.0b3, 0.8.0b4, 0.8.0b5, 
0.8.0b6, 0.8.0b7, 0.8.0b8, 0.8.0b9, 0.8.0b10

在这里插入图片描述

本文以安装syft 0.7.0版本为例

pip install syft==0.7.0 -f https://download.pytorch.org/whl/torch_stable.html

3、安装jaxlib

在上面的安装的过程中出现报错:

ERROR: Could not find a version that satisfies the requirement jaxlib==0.3.14 (from syft) (from versions: none)
ERROR: No matching distribution found for jaxlib==0.3.14

在这里插入图片描述

这表明,没有jaxlib==0.3.14文件,需要我们手动安装

通过安装whl文件解决:

点击:下载地址,或者访问 https://whls.blob.core.windows.net/unstable/index.html

在这里插入图片描述

在网页中找到jaxlib==0.3.14文件:

在这里插入图片描述

下载到桌面

在这里插入图片描述
继续在虚拟环境中输入(假设你的文件放在D:\desktop下):

pip install D:\desktop\jaxlib-0.3.14-cp39-none-win_amd64.whl

在这里插入图片描述

4、安装完成

此时jaxlib==0.3.14已经安装好,同理,倘若在你安装的过程中出现类似问题,也可以通过这种思路解决,本文只出现这个问题。

那么继续在虚拟环境输入:

pip install syft==0.7.0 -f https://download.pytorch.org/whl/torch_stable.html

对于上一次输入上面代码执行的内容,即已经安装的库,不需要重新安装,上面的代码会接着之前的步骤继续执行。

在这里插入图片描述
出现这样的界面,则安装成功

5、安装结果测试

在虚拟环境中输入:

python -c "import syft,torch"

在这里插入图片描述
没有出现报错,这表示pysyft, pytorch两个框架都安装好。

6、注意事项

在上面的安装中,安装的torch2255.6 MB1.13.1+cu117

# Downloading https://download.pytorch.org/whl/cu117/torch-1.13.1%2Bcu117-cp39-cp39-win_amd64.whl (2255.6 MB)

也就是说,自动安装了适配的torch-1.13

在这里插入图片描述

除了上述方法,也可以直接通过安装pysyftwhl文件进行安装。

接下来,我们检查一下安装到本地的各种包的版本

pip list

显示:

Package             Version
------------------- ------------
absl-py             1.4.0
ascii-magic         1.6
async-timeout       4.0.2
bcrypt              4.0.1
boto3               1.26.51
botocore            1.29.122
cachetools          5.3.0
certifi             2022.12.7
cffi                1.15.1
charset-normalizer  3.1.0
chex                0.1.6
colorama            0.4.6
commonmark          0.9.1
contourpy           1.0.7
cycler              0.11.0
dm-tree             0.1.8
dnspython           2.3.0
email-validator     2.0.0.post2
etils               1.2.0
flatbuffers         2.0.7
flax                0.5.3
fonttools           4.39.3
forbiddenfruit      0.1.4
gevent              22.10.2
greenlet            2.0.2
idna                3.4
importlib-resources 5.12.0
jax                 0.3.14
jaxlib              0.3.14
jmespath            1.0.1
kiwisolver          1.4.4
loguru              0.6.0
matplotlib          3.6.3
msgpack             1.0.5
names               0.3.0
numpy               1.24.3
opt-einsum          3.3.0
optax               0.1.5
packaging           23.1
pandas              1.5.2
Pillow              9.5.0
pip                 23.0.1
protobuf            3.19.5
pyarrow             10.0.1
pycapnp             1.2.2
pycparser           2.21
pydantic            1.10.4
Pygments            2.15.1
PyJWT               2.6.0
Pympler             1.0.1
PyNaCl              1.5.0
pyparsing           3.0.9
python-dateutil     2.8.2
pytz                2023.3
PyYAML              6.0
redis               4.4.2
requests            2.28.2
requests-toolbelt   0.10.1
rich                11.2.0
s3transfer          0.6.0
scipy               1.10.1
setuptools          66.0.0
six                 1.16.0
SQLAlchemy          1.4.46
syft                0.7.0
tensorstore         0.1.36
toolz               0.12.0
torch               1.13.1+cu117
tqdm                4.64.0
typing_extensions   4.4.0
urllib3             1.26.15
wheel               0.38.4
win32-setctime      1.1.0
zipp                3.15.0
zope.event          4.6
zope.interface      6.0

7、pysyft框架联邦案例

下面是一个使用 PySyftPyTorch 框架实现的联邦学习案例,数据集使用了随机生成的数据。

导入必要的库

import torch
import syft as sy
from torch import nn, optim
import random

接下来,我们设置一些参数,比如随机种子、数据大小、批量大小和训练轮数等:

# 随机种子
random_seed = 42
# 数据大小
data_size = 1000
# 批量大小
batch_size = 32
# 训练轮数
num_epochs = 10

然后我们定义一个函数来生成随机数据。这个函数生成两个随机数作为特征,然后将它们相加并返回和作为标签。

def generate_data(n):
    X = torch.randn(n, 2)
    y = X.sum(dim=1).unsqueeze(1)
    return X, y

接下来,我们定义一个 PySyft 钩子来使 PyTorch 支持联邦学习。

# 定义本地工作节点
hook = sy.TorchHook(torch)

# 定义两个远程工作节点
bob = sy.VirtualWorker(hook, id="bob")
alice = sy.VirtualWorker(hook, id="alice")

# 把数据发送给工作节点
bob_data = generate_data(data_size).send(bob)
alice_data = generate_data(data_size).send(alice)

我们接着定义一个模型,这里我们使用一个简单的线性模型:

class LinearRegression(nn.Module):
    def __init__(self):
        super().__init__()
        self.linear = nn.Linear(2, 1)
        
    def forward(self, x):
        return self.linear(x)

接着我们在每个工作节点上定义一个本地模型:

# 在 bob 和 alice 上定义本地模型
bob_model = LinearRegression().send(bob)
alice_model = LinearRegression().send(alice)

然后我们定义一个优化器和损失函数:

# 定义优化器和损失函数
optimizer = optim.SGD(params=[bob_model.parameters(), alice_model.parameters()], lr=0.1)
criterion = nn.MSELoss()

接下来我们开始训练模型。我们将模型在每个工作节点上训练一定的轮数,然后将模型参数合并在一起并更新全局模型。我们在每个轮次之后计算一下在测试集上的损失。

# 开始训练模型
for epoch in range(num_epochs):
    # 将模型参数从全局模型分发到本地模型
    bob_model_params = bob_model.parameters()
    alice_model_params = alice_model.parameters()
    model_params = [bob_model_params, alice_model_params]
    
    for i, data in enumerate([bob_data, alice_data]):
        # 获取数据和标签
        X, y = data.get()
        
        # 在本地模型上训练
        model = model_params[i]
        for j in range(num_epochs):
            optimizer.zero_grad()
            output = model(X)
            loss = criterion(output, y)
            loss.backward()
            optimizer.step()
        
        # 将本地模型的参数更新到全局模型
        model_params[i] = model_params[i].get()
    
    # 合并模型参数并更新全局模型
    bob_model_params, alice_model_params = model_params
    with torch.no_grad():
        global_model_params = [(x + y) / 2 for x, y in zip(bob_model_params, alice_model_params)]
        bob_model.load_state_dict(global_model_params)
        alice_model.load_state_dict(global_model_params)
    
    # 计算在测试集上的损失
    test_X, test_y = generate_data(100).get()
    with torch.no_grad():
        output = bob_model(test_X).get()
        loss = criterion(output, test_y)
        print(f"Epoch {epoch+1}, Test Loss: {loss.item():.4f}")


在每个轮次中,我们将模型参数从全局模型分发到本地模型,然后在每个工作节点上训练模型。我们在本地模型上训练模型的方式和在单个机器上训练模型的方式是相同的。然后我们将本地模型的参数更新到全局模型,合并模型参数并更新全局模型。最后我们计算在测试集上的损失。

8、一些优秀教程

(1)pysyft安装过程
https://blog.csdn.net/qq_41185868/article/details/126983353
https://blog.csdn.net/weixin_42436776/article/details/116699765

(2)官网地址
https://github.com/OpenMined/PySyft/tree/syft_0.2.x
https://gitcode.net/mirrors/OpenMined/PySyft?utm_source=csdn_github_accelerator
https://whls.blob.core.windows.net/unstable/index.html

9、报错解决办法

在上面成功安装后,安装jupyter notebook导致出现问题,这里给出解决办法。

安装jupyter notebook(此步骤非必要,自行决定。安装后会导致syft出错,这里给出解决办法)

conda install jupyter notebook

执行脚本代码:

import torch
import syft as sy

或者虚拟环境执行:

python -c "import syft,torch"

出现错误提示:
在这里插入图片描述

安装jupyter notebook后, 出现版本不适配问题

报错:AttributeError: partially initialized module ‘charset_normalizer’ has no attribute ‘md__mypyc’ (most likely due to a circular import)

为解决这个问题,再次安装一便,不会重新下载没有影响的包,神之一码:

pip install syft==0.7.0 -f https://download.pytorch.org/whl/torch_stable.html

继续执行代码,报错 ‘COMMON_SAFE_ASCII_CHARACTERS‘

报错:cannot import name ‘COMMON_SAFE_ASCII_CHARACTERS‘ from ‘charset_normalizer.constant‘
解决:https://blog.csdn.net/weixin_47037450/article/details/129616415

解决:直接安装chardet,问题解决!

pip install chardet

再次执行

import torch
import syft as sy

就没有出现报错了!


在安装过程中出现问题,欢迎评论、私信等,相互学习!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安装pysyft联邦框架和pysyft代码案例 的相关文章

  • 函数一

    文章目录 函数目标一 函数的作用二 函数的使用步骤2 1 定义函数2 2 调用函数2 3 快速体验 三 函数的参数作用四 函数的返回值作用4 1 应用 五 函数的说明文档5 1 语法5 2 快速体验 六 函数嵌套调用七 函数应用7 1 打印
  • 概率论的基本概念

    概率论的起源与发展 概率论产生于十六世纪十六世纪中叶 xff0c 卡当在赌博时研究不输的方法1654年 xff0c 德 美黑 合理分配赌注问题 1657年 xff0c 惠更斯 论机会游戏的计算 1933年 xff0c 柯尔莫哥洛夫 概率论的
  • java中的常量与变量

    常量 常量 xff1a 在程序运行期间 xff0c 固定不变的量 常量的分类 xff1a 1 字符串常量 xff1a 凡是用双引号引起来的部分 xff0c 叫做字符串常量 例如 xff1a abc Hello 123 2 整数常量 xff1
  • OA多级审批流程表设计方案以及开发思路(非常细节)

    OA office automation 想必大家都已不陌生 xff0c 甚至还非常熟悉 xff0c 是的没错 xff0c 本文就来讲解一下OA中的核心业务 xff0c 审批流程是如何一步步实现的 本文干货满满 建议静下心来细细品 被审核流
  • 异或交换两个数

    异或交换两个数 a和b是两个整数 xff0c 经过以下三次异或操作 xff0c 可以达到交换目的 xff1a a 61 a b b 61 a b a 61 a b 首先要理解 xff0c 什么是 异或 操作 二进制两数运算结果 xff1a
  • 二叉树算法框架思想

    二叉树算法设计的总路线 xff1a 明确一个节点要做的事情 xff0c 然后剩下的事抛给框架 span class token keyword void span span class token function traverse spa
  • Python3爬取淘宝网商品数据!

    分析淘宝网 这次选择的是淘宝网热卖而不是淘宝网 xff0c 二者虽然名字有不同 xff0c 但是数据还是一样的 xff0c 区别就在于前者把后者的所有店铺和商品的海量数据按照销售量 好评度 信誉度综合测评 重新计算 重新排序展现给买家的一个
  • 利用 Python 一键下载网易云音乐 10W+ 乐库

    如果你常听音乐的话 xff0c 肯定绕不开网易云 xff0c 作为一款有情怀的音乐 App xff0c 我对网易云也是喜爱有加 虽然说现在都已经是 5G 时代了 xff0c 大家的手机流量都绰绰有余 xff0c 但在线播放还是不如本地存着音
  • Python实现淘宝准点抢单!双十一秒杀神器啊!还不来学?

    一 ChromeDriver的安装 若想使用Selenium成功调用Chrome浏览器完成相应的操作 xff0c 需要通过ChromeDriver来驱动 我们在下载之前先来确认下我们使用的Chrome浏览器版本 只需要红框内几位相同即可 根
  • Python 爬虫:获取 JS 动态内容——应用宝搜索应用!

    1 1 Ajax 异步加载生成网页内容 现在越来越多的网页使用 Ajax 异步加载方式 xff0c 即网页中的一些内容由前端的 JS 动态生成 由于呈现在网页上的内容是由 JS 生成而来 xff0c 我们能够在浏览器上看到 xff0c 但是
  • Es的核心概念

    索引 xff08 Index xff09 一个索引就是一个拥有几分相似特征的文档的集合 比如说 xff0c 你可以有一个客户数据的 索引 xff0c 另一个产品目录的索引 xff0c 还有一个订单数据的索引 一个索引由一个名字来标识 xff
  • spark的结构化API

    1 结构化API概述 Apache Spark是一个用于大规模数据处理的快速 xff0c 可靠 xff0c 容错的分布式计算框架 Spark有两套基本的API xff08 Application Programming Interface
  • Linux的开机启动流程详解

    Linux系统的启动过程要比Windows系统启动过程复杂 xff0c 其过程可以分为5个阶段 xff1a 内核的引导 运行 init 系统初始化 建立终端 用户登录系统 1 内核引导 xff1a 在Windows系统中 xff0c 当计算
  • Warning: Stopping docker.service, but it can still be activated by: docker.socket

    目录 问题描述Warning Stopping docker service but it can still be activated by docker socket 原因解释 解决方案一解决方案二总结 问题描述 使用docker时 x
  • 最受推荐的10本C/C ++书籍

    链接 xff1a https hackr io blog 10 best c cpp books C和C 43 43 是世界上最流行的编程语言之二 C 43 43 是C语言的扩展 xff0c 这两门语言的潜力都是不可估量的 xff0c 这就
  • Centos安装Gnome Desktop

    Centos安装Gnome Desktop 目录 Centos安装Gnome Desktop1 安装 X Window System2 查看桌面3 安装GNOME Desktop4 运行桌面环境5 开机启动桌面环境6 重启系统 xff0c
  • zookeeper选举机制详解

    目录 1 什么是ZAB协议2 ZAB协议定义的四种节点状态3 集群上线时的Leader选举过程4 崩溃恢复时的Leader选举5 主从服务器之间的数据同步6 CAP 定理7 CAP 权衡8 BASE 理论9 集群节点数量最好奇数10 Zoo
  • Python -- 网络编程

    目录 1 网络通信的概念 2 IP地址 3 网络通信方式 3 1 直接通信 3 2 使用集线通信 3 3 通用交换机通信 3 4 使用路由器连接多个网络 3 5 复杂的通信过程 4 端口 4 1 端口号 4 2 知名端口号 4 3 动态端口

随机推荐

  • 一篇文章,详细教你怎么在Linux上编译安装MariaDB(10.6.4)

    快捷目录 MariaDBMariaDB简介MariaDB VS MySQL 教程说明编译说明安装依赖下载MariaDB源码Cmake编译初始化和配置1 设置用户2 初始化脚本3 设置参数4 注册服务和环境变量5 设置root用户注意 测试连
  • 【C++】面向对象高级编程(3):类与类之间的关系

    本文来自侯捷老师的课程和自己的理解形成的笔记 若有错误 xff0c 欢迎指出 C 43 43 类和类之间 xff0c 在侯捷老师的课程中 xff0c 一般被分为三种关系 复合关系 委托关系和继承关系 复合关系 xff1a 指类中包含另一些类
  • Linux远程图形化界面出错:MoTTY X11 proxy: Unsupported authorisation protocol

    远程使用图形化界面时出错 xff1a MoTTY X11 proxy Unsupported authorisation protocol 解决 xff1a cp root Xauthority home xxx Xauthority xx
  • (超详细)零基础如何学习操作系统---操作系统书籍推荐

    直接先给出路线书籍 编码 隐匿在计算机软硬件背后的语言 汇编语言 x86从实模式到保护模式 操作系统导论 操作系统真象还原 查漏补缺 1 编码 隐匿在计算机软硬件背后的语言 对于完全不懂计算机的朋友 xff0c 这本书可以让你对计算机有一个
  • 【LeetCode】《LeetCode 101》第七章:动态规划

    文章目录 7 1 算法解释7 2 基本动态规划 xff1a 一维70 爬楼梯 xff08 简单 xff09 198 打家劫舍 xff08 中等 xff09 413 等差数列划分 xff08 中等 xff09 7 3 基本动态规划 xff1a
  • CentOS使用Nginx反向代理Tomcat部署Java Web项目

    CentOS使用Nginx反向代理Tomcat部署Java Web项目 今天我舍友问我 xff1a CSDN是什么意思 xff1f 床上等你吗 文章目录 CentOS使用Nginx反向代理Tomcat部署Java Web项目一 安装Tomc
  • yield函数在Python中的使用方式探究

    Python之yield学习 Python之yield1 问题描述2 yield版解决方案3 yield与generator4 总结 Python之yield 1 问题描述 在之前的学习中 xff0c 对于返回需要进行迭代序列的函数 xff
  • eslint报错解决

    Unexpected control character s in regular expression x00 no control regex eslint disable next line no control regex 用这个
  • Mac中brew的安装和常用命令

    brew是MAC中的一个包管理工具 类似于Linux中的那些自动下载yum包 通过brew可以自动下载安装很多软件包在 https brew sh 中有它的具体内容 在页面里可以找到所有安装步骤和可安装的包 安装brew 终端输入以下命令行
  • 华为2288v5服务器安装Centos7系统

    1 安装准备 1 1 硬件 以虚拟光驱 虚拟软驱为例介绍操作系统的安装过程 xff0c 如果使用物理光驱 物理软驱则以实际的光盘 软盘代替 1 2 软件 xff08 1 xff09 准备好操作系统的 ISO 镜像包 xff08 2 xff0
  • 设置docker自启动

    1 设置docker自启动 sudo systemctl enable docker 2 查看docker中的镜像 sudo docker images 3 配置默认的镜像加速 sudo mkdir p etc docker sudo te
  • ESLint 报错:error Unreachable code no-unreachable

    大多出错的原因都与 return 有关 xff0c 可能是带有返回值的方法之中调用另一个方法的时候 把方法写在了 return 后面 代码的意思就是没有执行到这个方法 xff1b 还有可能就是在遍历判断中使用了 return xff0c 符
  • 程序员:每一份不忘初心的情怀, 都是对技术的追求

    1 真正的情怀 xff0c 是从不矫情 这几年 情怀 大约快成了贬义 创业讲情怀 xff0c 产品讲情怀 xff0c 好像没点情怀都不好意思出门见人 我们曾经充满热情 xff0c 是一位开源软件倡导者 xff0c 我们崇尚全栈工程师才有未来
  • ubuntu 如何用root身份进行登录

    公司有个小项目 需要用python调用 sh脚本来执行一些东西 执行脚本的时候需要输入密码 类似 sudo S paaswd 43 脚本 但是给客户部署的话 再让客户客户 保存密码到配置文件 就显得麻烦 就想到用root方式去登陆系统 结果
  • 创建Maven项目时候弹出setup maven plugin connection解决方案

    今天创建一个maven项目的时候弹出了setup maven plugin connection xff0c 然后有两个选择 xff0c 我们直接选择auto select继续下一步 xff0c 然后等待一下 xff0c 把此页面关掉 然后
  • 基于BERT的知识库问答系统(KBQA)

    基于BERT的知识库问答系统 xff08 KBQA xff09 简介 知识库问答系统主要要做的两点分别是识别问题中的实体和提取问题中我们需要从知识库中查找的属性 xff0c 针对这两个方面我采用了NLP预训练模型BERT分别训练了基于BER
  • libc6-dev : 依赖: libc6 (= 2.23-0ubuntu3) 但是 2.23-0ubuntu10 正要被安装

    无法安装libc6 dev 如果出现下面错误 xff1a 在装libc6 dev时下列的软件包有不能满足的依赖关系 xff1a libc6 dev 依赖 libc6 61 2 23 0ubuntu3 但是 2 23 0ubuntu10 正要
  • VScode使用sftp远程修改文件

    一 下载插件 二 创建任意一个文件夹 sftp插件是在文件夹下生效的 因为你要在文件夹下进行sftp的配置 以及打开远程文件 三 配置远程连接配置 快捷键 Ctrl 43 Shift 43 P 打开config span class tok
  • iOS 上接入Lottie动画 接入Json动画

    iOS设备上的动画借助官方SDK xff1a CoreAnimation那一套已经比较强大了 xff0c 基本上的动效都能实现 xff0c 就是1 开发这边比较累 xff1b 2 安卓那边也比较累况且 俩平台最后展示的可能有些细节还不一样
  • 安装pysyft联邦框架和pysyft代码案例

    pysyft联邦框架 1 新建虚拟环境2 安装pysyft3 安装jaxlib4 安装完成5 安装结果测试6 注意事项7 pysyft框架联邦案例8 一些优秀教程9 报错解决办法 1 新建虚拟环境 由于pysyft和pytorch之间有版本