由于最近看的一个FL示例代码使用的PySyft,按照网上教程草草地安装了一个,但是版本太高了,一些支持的方法都没有了,所以只好指定版本安装。
步骤:
进入Anaconda Powershell Prompt (anaconda3),输入指令
conda create -n syftpy python=3.7 --yes
在conda prompt 进入刚才创建的虚拟环境,安装适合你cuda版本的pytorch,我们安装1.4的版本(因为PySyft0.2.4要求Torch版本为1.4)
更新conda的下载源
# 添加清华源的pytorch
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
可进入 该网页 查看pytorch下载命令,我们需要下载1.4的版本,可参考使用以下命令。
conda activate syftpy # 进入虚拟环境
conda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit=10.1 -c pytorch
# 下载cuda(10.1)版本pytorch
# conda install pytorch==1.4.0 torchvision==0.5.0 -c pytorch #下载CPU版本pytorch
pip3 install syft==0.2.4 --no-dependencies
# 安装以下依赖
pip install lz4~=3.0.2 msgpack~=1.0.0 phe~=1.4.0 scipy~=1.4.1 syft-proto~=0.2.5.a1 tblib~=1.6.0 websocket-client~=0.57.0 pip install websockets~=8.1.0 zstd~=1.4.4.0 Flask~=1.1.1 tornado==4.5.3 flask-socketio~=4.2.1 lz4~=3.0.2 Pillow~=6.2.2 pip install requests~=2.22.0 numpy~=1.18.1
如果会报错:
安装下面的依赖
pip install xxx
错误说明:Syft需要安装的没安装,需要的低版本咱安装成了高版本(这个不能赖我,这是torch在安装的时候自动安装的高版本依赖)。
所以,按照红色说明,把没安装的安装:pip install xxx,这个xxx就和报错需要安装的一模一样,直接粘贴就行。
高版本的卸载(pip uninstall xxx)再重新安装指定版本,直到你安装结束没有红色错误提示。
执行下面的代码,测试你的PySyft是否可用:
import syft as sy
import torch
import sys
from torch.nn import Parameter
import torch.nn as nn
import torch.nn.functional as F
hook = sy.TorchHook(torch)
print(hook)
print(torch.tensor([1,2,3,4,5]))
x = torch.tensor([1,2,3,4,5])
print('x = ', x)
y = x+x
print('y = ', y)
bob = sy.VirtualWorker(hook, id='bob')
print('bob = ', bob)
x = torch.tensor([1,2,3,4,5])
y = torch.tensor([1,1,1,1,1])
#先展示下bob的objs
print('bob._objects = ', bob._objects)
x_ptr = x.send(bob)
y_ptr = y.send(bob)
print('bob._objects = ', bob._objects, 'after send')
print('x_ptr = ', x_ptr)
print('y_ptr = ', y_ptr)
print('x_ptr.location = ', x_ptr.location)
print('x_ptr.owner = ', x_ptr.owner)
z = x_ptr + y_ptr
print('z = ', z)
print('bob._objects = ', bob._objects, 'after add')
运行结果:
tensor([1, 2, 3, 4, 5])
x = tensor([1, 2, 3, 4, 5])
y = tensor([ 2, 4, 6, 8, 10])
bob =
bob._objects = {}
bob._objects = {89132956278: tensor([1, 2, 3, 4, 5]), 51410851129: tensor([1, 1, 1, 1, 1])} after send
x_ptr = (Wrapper)>[PointerTensor | me:27571073662 -> bob:89132956278]
y_ptr = (Wrapper)>[PointerTensor | me:15432631516 -> bob:51410851129]
x_ptr.location =
x_ptr.owner =
z = (Wrapper)>[PointerTensor | me:32165463037 -> bob:15843673785]
bob._objects = {89132956278: tensor([1, 2, 3, 4, 5]), 51410851129: tensor([1, 1, 1, 1, 1]), 15843673785: tensor([2, 3, 4, 5, 6])} after add