Perform data science on data that remains in someone else's server
翻译准备中
正在加载完整 README。
查看完整 README ↗
syft0.10+ is the successor ofsyft-client.syftis the sync engine (import syft as sy); datasets and jobs live insyft-rds(from syft_rds import login_do, login_ds). If you depend on the legacy PySyft ≤0.9 API, pinsyft<0.10.
PySyft allows data scientists run computations which are reviewed and run by data owners on private data. Users securely communicate through cloud storage their organizations already use (Google Drive, Microsoft 365, etc.) or serverless p2p chnannels like webRTC. No new infrastructure required and all communication between be peers can be signed and encrypted.
Before you start: this quick start assumes Google Colab, where login is a browser pop-up and works out of the box. On a local machine or in Jupyter you first need a Google Cloud OAuth token: follow docs/auth.md (about 15 minutes the first time), then pass it as token_path to login_do / login_ds. Each role needs its own Google account.
We assume two parties here, a Data Owner (DO) and a Data Scientist (DS), the DS wants to do an analysis on private data of the DO. For brevity we use code blocks, but in practice these would be distributed: each party executes their code on their own machine.
# Data scientist
uv pip install "syft>=0.10.0" "syft-rds>=0.6.0"
# Data owner (adds the background services)
uv pip install "syft>=0.10.0" "syft-rds>=0.6.0" "syft-bg>=0.3.12"
import syft as sy # sync engine + helpers (resolve_dataset_file_path, bug_report, ...)
from syft_rds import login_do, login_ds # datasets + jobs (the Remote Data Science client)
# Colab: login is a browser pop-up, nothing to set up
# Local / Jupyter: create a token first, see docs/auth.md
do = login_do(email="[email protected]") # local: add token_path="token_do.json"
ds = login_ds(email="[email protected]") # second account; local: token_path="token_ds.json"
# Peer request & approve
ds.add_peer("[email protected]")
do.approve_peer_request("[email protected]")
# Create & sync dataset
do.create_dataset(
name="census",
mock_path="mock.txt", # create this and add some text
private_path="private.txt", # create this and add some text
users=["[email protected]"],
)
do.sync(); ds.sync()
datasets = ds.datasets.get_all()
Write an analysis.py that reads the dataset and produces a result in our case this is just the length of the data. Inside a job, resolve_dataset_file_path automatically resolves to the private data:
# analysis.py
import json
import syft as sy
data_path = sy.resolve_dataset_file_path("census")
with open(data_path, "r") as f:
data = f.read()
with open("outputs/result.json", "w") as f:
json.dump({"length": len(data)}, f)
Submit the job and retrieve results:
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗