diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 5c66408e810..a24f170b683 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.9.0-beta.5 +current_version = 0.9.0 tag = False tag_name = {new_version} commit = True diff --git a/.bumpversion_stable.cfg b/.bumpversion_stable.cfg index 4af9bb78db5..d529a21d6f2 100644 --- a/.bumpversion_stable.cfg +++ b/.bumpversion_stable.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.8.8 +current_version = 0.9.0 tag = False tag_name = {new_version} commit = True diff --git a/.github/workflows/pr-tests-stack.yml b/.github/workflows/pr-tests-stack.yml index 44111145e99..789c1a28721 100644 --- a/.github/workflows/pr-tests-stack.yml +++ b/.github/workflows/pr-tests-stack.yml @@ -59,10 +59,10 @@ jobs: - name: Run syft backend base image building test if: steps.changes.outputs.stack == 'true' timeout-minutes: 60 - # run: | - # echo "Skipping pr image test" run: | - tox -e backend.test.basecpu + echo "Skipping pr image test" + # run: | + # tox -e backend.test.basecpu pr-tests-syft-integration: strategy: diff --git a/README.md b/README.md index 78d48b156f4..cb52188f19a 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,30 @@ -
+


- - Syft Logo + + Syft Logo -Perform data science on `data` that remains in `someone else's` server +

Data Science on data you are not allowed to see

+ +PySyft enables a new way to do data science, where you can use non-public information, without seeing nor obtaining a copy of the data itself. All you need is to connect to a Datasite! + +Datasites are like websites, but for data. Designed with the principles of structured transparency, they enable data owners to control how their data is protected and data scientists to use data without obtaining a copy. + +PySyft supports any statistical analysis or machine learning, offering support for directly running Python code - even using third-party Python libraries. + +

Supported on:

+ +✅ Linux +✅ macOS +✅ Windows +✅ Docker +✅ Kubernetes # Quickstart -✅ `Linux` ✅ `macOS` ✅ `Windows` ✅ `Docker` ✅ `Kubernetes` +Try out your first query against a live demo Datasite! ## Install Client @@ -18,34 +32,46 @@ Perform data science on `data` that remains in `someone else's` server $ pip install -U syft[data_science] ``` +More instructions are available here. + ## Launch Server +Launch a development server directly in your Jupyter Notebook: + ```python -# from Jupyter / Python import syft as sy -sy.requires(">=0.8.8,<0.8.9") + +sy.requires(">=0.9,<0.9.1") + server = sy.orchestra.launch( name="my-datasite", port=8080, create_producer=True, n_consumers=1, - dev_mode=True, + dev_mode=False, reset=True, # resets database ) ``` +or from the command line: + ```bash -# or from the command line $ syft launch --name=my-datasite --port=8080 --reset=True Starting syft-datasite server on 0.0.0.0:8080 ``` +Datasite servers can be deployed as a single container using Docker or directly in Kubernetes. Check out our deployment guide. + ## Launch Client +Main way to use a Datasite is via our Syft client, in a Jupyter Notebook. Check out our PySyft client guide: + ```python import syft as sy -sy.requires(">=0.8.8,<0.8.9") + +sy.requires(">=0.9,<0.9.1") + datasite_client = sy.login( port=8080, email="info@openmined.org", @@ -53,321 +79,98 @@ datasite_client = sy.login( ) ``` -## PySyft in 10 minutes +## PySyft - Getting started 📝 -📝 API Example Notebooks +Learn about PySyft via our getting started guide: -- 00-load-data.ipynb -- 01-submit-code.ipynb -- 02-review-code-and-approve.ipynb -- 03-data-scientist-download-result.ipynb -- 04-pytorch-example.ipynb -- 05-custom-policy.ipynb -- 06-multiple-code-requests.ipynb -- 07-datasite-register-control-flow.ipynb -- 08-code-version.ipynb -- 09-blob-storage.ipynb -- 10-container-images.ipynb -- 11-container-images-k8s.ipynb -- 12-custom-api-endpoint.ipynb +- PySyft from the ground up +- Part 1: Datasets & Assets +- Part 2: Client and Datasite Access +- Part 3: Propose the research study +- Part 4: Review Code Requests +- Part 5: Retrieving Results -## Deploy Kubernetes Helm Chart +# PySyft In-depth -#### 0. Deploy Kubernetes +📚 Check out our docs website. -Required resources: 1 CPU and 4GB RAM. However, you will need some special instructions to deploy, please consult [these instructions](https://github.com/OpenMined/PySyft/blob/dev/notebooks/tutorials/deployments/03-deploy-k8s-k3d.ipynb) or look at the resource constraint testing [here](https://github.com/OpenMined/PySyft/pull/8828#issue-2300774645). -Recommended resources: 8+ Cores and 16GB RAM +Quick PySyft components links: -If you're using Docker Desktop to deploy your Kubernetes, you may need to go into Settings > Resources and increase CPUs and Memory. +- DataSite Server -**Note**: Assuming we have a Kubernetes cluster already setup. +- Syft Client -#### 1. Add and update Helm repo for Syft +- Datasets API (`.datasets`) -```sh -helm repo add openmined https://openmined.github.io/PySyft/helm -helm repo update openmined -``` +- Users API (`.users`) -#### 2. Search for available Syft versions +- Projects API (`.projects`) -```sh -helm search repo openmined/syft --versions --devel -``` - -#### 3. Set your preferred Syft Chart version - -```sh -SYFT_VERSION="" -``` - -#### 4. Provisioning Helm Charts - -```sh -helm install my-datasite openmined/syft --version $SYFT_VERSION --namespace syft --create-namespace --set ingress.className="traefik" -``` +- Request API (`.requests`) -### Ingress Controllers +- Code API (`.code`) -For Azure AKS +- Syft Policies API (`.policy`) -```sh -helm install ... --set ingress.className="azure-application-gateway" -``` - -For AWS EKS +- Settings API (`.settings`) -```sh -helm install ... --set ingress.className="alb" -``` +- Notifications API (`.notifications`) -For Google GKE we need the [`gce` annotation](https://cloud.google.com/kubernetes-engine/docs/how-to/load-balance-ingress#create-ingress). +- Sync API (`.sync`) -```sh -helm install ... --set ingress.class="gce" -``` +## Why use PySyft? -## Note: +In a variety of domains across society, data owners have **valid concerns about the risks associated with sharing their data**, such as legal risks, privacy invasion (_misuing the data_), or intellectual property (_copying and redistributing it_). -🚨 Our old deployment tool `HAGrid` has been `deprecated`. For the updated deployment options kindly refer to: +Datasites enable data scientists to **answer questions** without even seeing or acquiring a copy of the data, **within the data owners's definition of acceptable use**. We call this process Remote Data Science. -- 📚 Deployments +This means that the **current risks** of sharing information with someone will **no longer prevent** the vast benefits such as innovation, insights and scientific discovery. With each Datasite, data owners are able to enable `1000x more accesible data` in each scientific field and lead, together with data scientists, breakthrough innovation. -## Docs and Support +Learn more about our work on our website. -- 📚 Docs -- `#support` on Slack +## Support -# Install Notes +For questions about PySyft, reach out via `#support` on Slack. -- PySyft 0.8.6 Requires: 🐍 `python 3.10 - 3.12` - Run: `pip install -U syft` -- Syft Server Requires: 🐳 `docker` or ☸️ `kubernetes` +## Syft Versions -# Versions +:exclamation: PySyft and Syft Server must use the same `version`. -`0.9.0` (Beta) - `dev` branch 👈🏽 API - Coming soon... -`0.8.8` (Stable) - API +**Latest Stable** -Deprecated: +- `0.8.8` (Stable) - Docs +- Install PySyft (Stable): `pip install -U syft` -- `0.8.7` - API -- `0.8.6` - API -- `0.8.5-post.2` - API -- `0.8.4` - API -- `0.8.3` - API -- `0.8.2` - API -- `0.8.1` - API -- `0.8.0` - API -- `0.7.0` - Course 3 Updated -- `0.6.0` - Course 3 -- `0.5.1` - Course 2 + M1 Hotfix -- `0.2.0` - `0.5.0` +**Latest Beta** -PySyft and Syft Server use the same `version` and its best to match them up where possible. We release weekly betas which can be used in each context: +- `0.9.0` (Beta) - `dev` branch 👈🏽 +- Install PySyft (Beta): `pip install -U syft --pre` -PySyft (Stable): `pip install -U syft` - -PySyft (Beta): `pip install -U syft --pre` - -# What is Syft? - - - - Syft - - -`Syft` is OpenMined's `open source` stack that provides `secure` and `private` Data Science in Python. Syft decouples `private data` from model training, using techniques like [Federated Learning](https://ai.googleblog.com/2017/04/federated-learning-collaborative.html), [Differential Privacy](https://en.wikipedia.org/wiki/Differential_privacy), and [Encrypted Computation](https://en.wikipedia.org/wiki/Homomorphic_encryption). This is done with a `numpy`-like interface and integration with `Deep Learning` frameworks, so that you as a `Data Scientist` can maintain your current workflow while using these new `privacy-enhancing techniques`. - -### Why should I use Syft? - -`Syft` allows a `Data Scientist` to ask `questions` about a `dataset` and, within `privacy limits` set by the `data owner`, get `answers` to those `questions`, all without obtaining a `copy` of the data itself. We call this process `Remote Data Science`. It means in a wide variety of `datasites` across society, the current `risks` of sharing information (`copying` data) with someone such as, privacy invasion, IP theft and blackmail will no longer prevent the vast `benefits` such as innovation, insights and scientific discovery which secure access will provide. - -No more cold calls to get `access` to a dataset. No more weeks of `wait times` to get a `result` on your `query`. It also means `1000x more data` in every datasite. PySyft opens the doors to a streamlined Data Scientist `workflow`, all with the individual's `privacy` at its heart. - - - -# Terminology - - - - - - - - - - - - - - - - - - - - -
- -

👨🏻‍💼 Data Owners

-
- -

👩🏽‍🔬 Data Scientists

-
- - -Provide `datasets` which they would like to make available for `study` by an `outside party` they may or may not `fully trust` has good intentions. - - - - -Are end `users` who desire to perform `computations` or `answer` a specific `question` using one or more data owners' `datasets`. - -
- -

🏰 Datasite Server

-
- -

🔗 Gateway Server

-
- - -Manages the `remote study` of the data by a `Data Scientist` and allows the `Data Owner` to manage the `data` and control the `privacy guarantees` of the subjects under study. It also acts as a `gatekeeper` for the `Data Scientist's` access to the data to compute and experiment with the results. - - - - -Provides services to a group of `Data Owners` and `Data Scientists`, such as dataset `search` and bulk `project approval` (legal / technical) to participate in a project. A gateway server acts as a bridge between it's members (`Datasites`) and their subscribers (`Data Scientists`) and can provide access to a collection of `datasites` at once.
+Find more about previous releases here. # Community - - - - - - -
- -
- - - - - - - - -
-
- - - - -
- - - - - +Supported by the OpenMined Foundation, the OpenMined Community is an online network of over 17,000 technologists, researchers, and industry professionals keen to _unlock 1000x more data in every scientific field and industry_. - - -
-
+ # Courses
- +
- +
- +
@@ -377,13 +180,20 @@ Provides services to a group of `Data Owners` and `Data Scientists`, such as dat # Contributors -OpenMined and Syft appreciates all contributors, if you would like to fix a bug or suggest a new feature, please see our [guidelines](https://openmined.github.io/PySyft/developer_guide/index.html).
+OpenMined and Syft appreciates all contributors, if you would like to fix a bug or suggest a new feature, please reach out via Github or Slack! Contributors +# About OpenMined + +OpenMined is a non-profit foundation creating technology infrastructure that helps researchers get answers from data without needing a copy or direct access. Our community of technologists is building Syft. + + + # Supporters @@ -441,10 +251,6 @@ OpenMined and Syft appreciates all contributors, if you would like to fix a bug
-# Disclaimer - -Syft is under active development and is not yet ready for pilots on private data without our assistance. As early access participants, please contact us via [Slack](https://slack.openmined.org/) or email if you would like to ask a question or have a use case that you would like to discuss. - # License [Apache License 2.0](LICENSE)
diff --git a/VERSION b/VERSION index 0d9ec17e955..af7389a50e7 100644 --- a/VERSION +++ b/VERSION @@ -1,5 +1,5 @@ # Mono Repo Global Version -__version__ = "0.9.0-beta.5" +__version__ = "0.9.0" # elsewhere we can call this file: `python VERSION` and simply take the stdout # stdlib diff --git a/docs/img/Syft-Logo-Light.svg b/docs/img/Syft-Logo-Light.svg new file mode 100644 index 00000000000..8d1bff88f21 --- /dev/null +++ b/docs/img/Syft-Logo-Light.svg @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/img/Syft-Logo.svg b/docs/img/Syft-Logo.svg new file mode 100644 index 00000000000..24adb15bbf7 --- /dev/null +++ b/docs/img/Syft-Logo.svg @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/notebooks/api/0.8/10-container-images.ipynb b/notebooks/api/0.8/10-container-images.ipynb index 91a6dc34918..089f47bbc3c 100644 --- a/notebooks/api/0.8/10-container-images.ipynb +++ b/notebooks/api/0.8/10-container-images.ipynb @@ -149,7 +149,8 @@ " \"local-dev\"\n", " if (bool(os.environ[\"DEV_MODE\"]) and running_as_container)\n", " else sy.__version__\n", - ")" + ")\n", + "syft_base_worker_tag = \"0.9.0-beta.5\"" ] }, { diff --git a/packages/grid/VERSION b/packages/grid/VERSION index 0d9ec17e955..af7389a50e7 100644 --- a/packages/grid/VERSION +++ b/packages/grid/VERSION @@ -1,5 +1,5 @@ # Mono Repo Global Version -__version__ = "0.9.0-beta.5" +__version__ = "0.9.0" # elsewhere we can call this file: `python VERSION` and simply take the stdout # stdlib diff --git a/packages/grid/backend/grid/images/worker_cpu.dockerfile b/packages/grid/backend/grid/images/worker_cpu.dockerfile index ecc357c807d..a876b09e7d8 100644 --- a/packages/grid/backend/grid/images/worker_cpu.dockerfile +++ b/packages/grid/backend/grid/images/worker_cpu.dockerfile @@ -5,7 +5,7 @@ # NOTE: This dockerfile will be built inside a syft-backend container in PROD # Hence COPY will not work the same way in DEV vs. PROD -ARG SYFT_VERSION_TAG="0.9.0-beta.5" +ARG SYFT_VERSION_TAG="0.9.0" FROM openmined/syft-backend:${SYFT_VERSION_TAG} # should match base image python version diff --git a/packages/grid/devspace.yaml b/packages/grid/devspace.yaml index 7c478773f94..a2ab9348881 100644 --- a/packages/grid/devspace.yaml +++ b/packages/grid/devspace.yaml @@ -28,7 +28,7 @@ vars: DOCKER_IMAGE_RATHOLE: openmined/syft-rathole DOCKER_IMAGE_ENCLAVE_ATTESTATION: openmined/syft-enclave-attestation CONTAINER_REGISTRY: "docker.io" - VERSION: "0.9.0-beta.5" + VERSION: "0.9.0" PLATFORM: $(uname -m | grep -q 'arm64' && echo "arm64" || echo "amd64") # This is a list of `images` that DevSpace can build for this project diff --git a/packages/grid/frontend/package.json b/packages/grid/frontend/package.json index c3cdc58e7f3..2d7bc3655ab 100644 --- a/packages/grid/frontend/package.json +++ b/packages/grid/frontend/package.json @@ -1,6 +1,6 @@ { "name": "syft-ui", - "version": "0.9.0-beta.5", + "version": "0.9.0", "private": true, "scripts": { "dev": "pnpm i && vite dev --host --port 80", diff --git a/packages/grid/helm/syft/Chart.yaml b/packages/grid/helm/syft/Chart.yaml index 49dec1b3a9e..90181b88d88 100644 --- a/packages/grid/helm/syft/Chart.yaml +++ b/packages/grid/helm/syft/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: syft description: Perform numpy-like analysis on data that remains in someone elses server type: application -version: "0.9.0-beta.5" -appVersion: "0.9.0-beta.5" +version: "0.9.0" +appVersion: "0.9.0" home: https://github.com/OpenMined/PySyft/ icon: https://raw.githubusercontent.com/OpenMined/PySyft/dev/docs/img/title_syft_light.png diff --git a/packages/grid/helm/syft/values.yaml b/packages/grid/helm/syft/values.yaml index 6772cc8cefa..a48ae0bae02 100644 --- a/packages/grid/helm/syft/values.yaml +++ b/packages/grid/helm/syft/values.yaml @@ -1,7 +1,7 @@ global: # Affects only backend, frontend, and seaweedfs containers registry: docker.io - version: 0.9.0-beta.5 + version: 0.9.0 # Force default secret values for development. DO NOT SET THIS TO FALSE IN PRODUCTION randomizedSecrets: true diff --git a/packages/syft/setup.cfg b/packages/syft/setup.cfg index 3305d354b1b..8959d1b3804 100644 --- a/packages/syft/setup.cfg +++ b/packages/syft/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = syft -version = attr: "0.9.0-beta.5" +version = attr: "0.9.0" description = Perform numpy-like analysis on data that remains in someone elses server author = OpenMined author_email = info@openmined.org diff --git a/packages/syft/src/syft/VERSION b/packages/syft/src/syft/VERSION index 0d9ec17e955..af7389a50e7 100644 --- a/packages/syft/src/syft/VERSION +++ b/packages/syft/src/syft/VERSION @@ -1,5 +1,5 @@ # Mono Repo Global Version -__version__ = "0.9.0-beta.5" +__version__ = "0.9.0" # elsewhere we can call this file: `python VERSION` and simply take the stdout # stdlib diff --git a/packages/syft/src/syft/__init__.py b/packages/syft/src/syft/__init__.py index ac0ddbfde31..4a1ac0cfe06 100644 --- a/packages/syft/src/syft/__init__.py +++ b/packages/syft/src/syft/__init__.py @@ -1,4 +1,4 @@ -__version__ = "0.9.0-beta.5" +__version__ = "0.9.0" # stdlib from collections.abc import Callable diff --git a/packages/syft/src/syft/stable_version.py b/packages/syft/src/syft/stable_version.py index c0f11e1478b..85f41d02b4a 100644 --- a/packages/syft/src/syft/stable_version.py +++ b/packages/syft/src/syft/stable_version.py @@ -1 +1 @@ -LATEST_STABLE_SYFT = "0.8.8" +LATEST_STABLE_SYFT = "0.9.0" diff --git a/packages/syftcli/manifest.yml b/packages/syftcli/manifest.yml index 4568ffbc19d..457ad934134 100644 --- a/packages/syftcli/manifest.yml +++ b/packages/syftcli/manifest.yml @@ -1,11 +1,11 @@ manifestVersion: 1.0 -syftVersion: 0.9.0-beta.5 -dockerTag: 0.9.0-beta.5 +syftVersion: 0.9.0 +dockerTag: 0.9.0 images: - - docker.io/openmined/syft-frontend:0.9.0-beta.5 - - docker.io/openmined/syft-backend:0.9.0-beta.5 + - docker.io/openmined/syft-frontend:0.9.0 + - docker.io/openmined/syft-backend:0.9.0 - docker.io/library/mongo:7.0.4 - docker.io/traefik:v2.11.0 diff --git a/releases.md b/releases.md new file mode 100644 index 00000000000..1f9ec045d23 --- /dev/null +++ b/releases.md @@ -0,0 +1,28 @@ +# Releases + +:exclamation: PySyft and Syft Server must use the same `version`. + +### Latest Stable + +- `0.8.8` (Stable) - Docs +- Install PySyft (Stable): `pip install -U syft` + +### Latest Beta + +- `0.9.0` (Beta) - `dev` branch 👈🏽 +- Install PySyft (Beta): `pip install -U syft --pre` + +**Deprecated**: + +- `0.8.7` - API +- `0.8.6` - API +- `0.8.5-post.2` - API +- `0.8.4` - API +- `0.8.3` - API +- `0.8.2` - API +- `0.8.1` - API +- `0.8.0` - API +- `0.7.0` - Course 3 Updated +- `0.6.0` - Course 3 +- `0.5.1` - Course 2 + M1 Hotfix +- `0.2.0` - `0.5.0`