簡易教學:Pysyft入門(1)

Yuan Ko
Mess up
Published in
4 min readSep 23, 2020

(2020/11/24)目前pysyft出現重大改版,所以很多東西不一樣,tutorial也已經不同,所以直接看官方文件會好於看這篇mediums,如果之後有時間我會再去寫pysyft的教學,現在可能要先將就看英文官方tutorial

這個是簡易介紹pysyft的tutorial,目的在於快速讓之前沒接觸過syft的人花短時間大致了解他的應用,個人覺得syft給的教程非常完整,利用virtual worker也幾乎都可以直接執行,讓人迅速了解,所以覺得這篇太過簡單也可以直接前往閱讀syft 的tutorial。

這篇主要內容都是來自pysyft的part01

簡單給張圖讓大家回想一下Federated learning(FL)的架構為何,主要這邊都是講horizontal FL。

https://arxiv.org/abs/1902.04885

Local 更新之後回傳model parameter或是gradient給中心server去做下一輪的model,不斷進行訓練直到達到要求的accuracy為止。

syft是一個支援多種AI framework的FL framework,所以在一開始你需要去定義你要用那一種AI framework,這邊都是使用pytorch。

# Run this cell to see if things work
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)

確定我們要用那一種framework之後我們需要一些client去做local的訓練,syft提供我們虛擬的worker, virtual worker,若是真的使用多台機器去進行訓練,syft也提供websocket可以與其他台機器連線訓練。

這邊創建一個bob的worker

bob = sy.VirtualWorker(hook, id="bob")

我們先把資料傳給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)
z = x_ptr + x_ptr

若是單純看z,並沒有資料在手上的我們(server)看不到z,只會看到

z
(Wrapper)>[PointerTensor | me:40011669099 -> bob:25071307517]

這點在x_ptr, y_ptr上面也都是類似的,只會回給你一個pointer

可以從bob._objects來看到,傳過去的x,y跟計算出來的z

bob._objects{83726831337: tensor([1, 2, 3, 4, 5]),
68183927990: tensor([1, 1, 1, 1, 1]),
25071307517: tensor([ 2, 4, 6, 8, 10])}

現在我們把z拿回來,方法也很簡單.get即可

z.get()

這樣bob那邊就沒東西了

bob._objects{}

大概就是這樣,簡單易用,下篇來訓練model吧

簡易教學:Pysyft FL training(2)[Working on it…]

差點忘了説,syft教學也有中文版的喔

Reference

--

--