1.1安装
- Install Python 3.6 or higher
- Install PyTorch 1.4
- pip install syft[udacity]
1.2安装检查
# 运行这个cell看看是否工作正常
import sys
import torch
from torch.nn import Parameter
import torch.nn as nn
import torch.nn.functional as F
import syft as sy
hook = sy.TorchHook(torch)
torch.tensor([1,2,3,4,5])
2.1开始
hook = sy.TorchHook(torch)
虚拟工人
bob = sy.VirtualWorker(hook, id="bob")
张量
x = torch.tensor([1,2,3,4,5])
y = torch.tensor([1,1,1,1,1])
张量的发送
x_ptr = x.send(bob)
y_ptr = y.send(bob)
注意一下。当我们调用 x.send(bob)
时,它返回了一个称为x_ptr
的新对象。这是我们第一个指向张量的指针。张量的指针本身实际上并不保存数据。相反,它们仅包含有关存储在另一台机器上的张量(带有数据)的元数据。这些张量的目的是为我们提供一个直观的API,以告诉其他机器使用该张量来计算函数。
指针可以直接加
z = x_ptr + x_ptr
指针有两个主要属性:
x_ptr.location : bob
, location(位置),对指针指向的位置的引用x_ptr.id_at_location : <random integer>
, 张量存储在位置的id
它们以以下格式打印: <id_at_location>@<location>
还有其他更通用的属性:
x_ptr.id : <random integer>
, 指针张量的ID,它是随机分配的x_ptr.owner : "me"
, 拥有指针张量的工作机,这里是本地机器,名为“me”(我)
设置本地
me = sy.local_worker
设置指针归属
me == x_ptr.owner
最后,就像我们可以在张量上调用 .send()一样,我们可以在指向张量的指针上调用.get()来恢复它!
x_ptr.get()
y_ptr.get()
此时的bob._objects
如您所见,Bob不再具有张量!他们已经搬回我们的机器了!
远程操作