From 622b2ad41c119e301634b36d5b95a1110e13820d Mon Sep 17 00:00:00 2001 From: Salman Toor Date: Fri, 30 Aug 2024 12:18:45 +0200 Subject: [PATCH] Docs/SK-957 | Update example notebooks with fedn studio endpoints (#687) * Update example notebooks On branch SK-957 Changes to be committed: modified: examples/notebooks/API_Example.ipynb modified: examples/notebooks/Aggregators.ipynb Update example notebooks with FEDn Studio endpoints and settings. * Update example notebooks with FEDn Studio Changes to be committed: modified: examples/notebooks/API_Example.ipynb modified: examples/notebooks/Aggregators.ipynb Update example notebooks with FEDn Studio endpoints and settings. * Update example notebooks with FEDn Studio Changes to be committed: modified: examples/notebooks/API_Example.ipynb Update example notebooks with FEDn Studio endpoints and settings. * Update example notebooks with FEDn Studio Changes to be committed: modified: examples/notebooks/Aggregators.ipynb Update example notebooks with FEDn Studio endpoints and settings. * Docs/SK-957 | Update example notebooks with fedn Changes to be committed: modified: examples/notebooks/API_Example.ipynb modified: examples/notebooks/Aggregators.ipynb Update example notebooks with fedn studio endpoints --- examples/notebooks/API_Example.ipynb | 20 ++++++----- examples/notebooks/Aggregators.ipynb | 51 ++++++++-------------------- 2 files changed, 26 insertions(+), 45 deletions(-) diff --git a/examples/notebooks/API_Example.ipynb b/examples/notebooks/API_Example.ipynb index d5d0e616d..79e3501c6 100644 --- a/examples/notebooks/API_Example.ipynb +++ b/examples/notebooks/API_Example.ipynb @@ -7,9 +7,9 @@ "source": [ "## API Example\n", "\n", - "This notebook provides an example of how to use the FEDn API to organize experiments and to analyze validation results. We will here run one training session (a collection of global rounds) using FedAvg, then retrive and visualize the results.\n", + "This notebook provides an example of how to use the FEDn API to organize experiments and to analyze validation results. We will here run one training session (a collection of global rounds) using FedAvg, then retrive and visualize the results. For a complete list of implemented interfaces, please refer to the [FEDn APIs](https://fedn.readthedocs.io/en/latest/fedn.network.api.html#module-fedn.network.api.client).\n", "\n", - "When you start this tutorial you should have a deployed FEDn Network up and running, and you should have created the compute package and the initial model, see the example README for instructions." + "Before starting this tutorial, make sure you have a project running in FEDn Studio and have created the compute package and the initial model. If you're not sure how to do this, please follow the instructions in sections 1, 2, and 3 of the [quickstart guide](https://fedn.readthedocs.io/en/latest/quickstart.html)." ] }, { @@ -33,7 +33,11 @@ "id": "1046a4e5", "metadata": {}, "source": [ - "We make a client connection to the FEDn API service. Here we assume that FEDn is deployed locally in pseudo-distributed mode with default ports." + "We connect to the FEDn API service. In this example, we assume the project is hosted on the public FEDn Studio. You can find the CONTROLLER_HOST address in the project dashboard. \n", + "\n", + "NOTE: If you're using a local sandbox, the CONTROLLER_HOST will be \"localhost or 127.0.0.1 or your local node's IP address\" and the CONTROLLER_PORT will be 8092. \n", + "\n", + "Next, you'll need to generate an access token. To do this, go to the project page in FEDn Studio, click on \"Settings,\" then \"Generate token.\" Copy the access token from the Studio and paste it into the notebook. In case you need further details, have a look at the [Fedn ClientAPIs](https://fedn.readthedocs.io/en/latest/apiclient.html#). " ] }, { @@ -43,9 +47,9 @@ "metadata": {}, "outputs": [], "source": [ - "DISCOVER_HOST = '127.0.0.1'\n", - "DISCOVER_PORT = 8092\n", - "client = APIClient(DISCOVER_HOST, DISCOVER_PORT)" + "CONTROLLER_HOST = 'fedn.scaleoutsystems.com/my-project...' \n", + "ACCESS_TOKEN = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzI3MzQ3NDA4LCJpYXQiOjE3MjQ3NTU0MDgsImp0aSI6ImQxMTY4OTJkODJlMjRhZjJiYzQzZTllZjVlNGVlZDhmIiwidXNlcl9pZCI6NTUsImNyZWF0b3IiOiJzYWxtYW4iLCJyb2xlIjoiYWRtaW4iLCJwcm9qZWN0X3NsdWciOiJldXJvcGFyMjQtd29ya3Nob3AtZWJ4In0.k9pXUh6Ldb-jEzl77FjsxvAAjcbPoB'\n", + "client = APIClient(CONTROLLER_HOST,token=ACCESS_TOKEN, secure=True,verify=True)" ] }, { @@ -53,7 +57,7 @@ "id": "07f69f5f", "metadata": {}, "source": [ - "Initialize FEDn with the compute package and seed model. Note that these files needs to be created separately by follwing instructions in the README." + "Initialize FEDn with the compute package and seed model. Note that these files needs to be created separately. If you're not sure how to do this, please follow the instructions only in section 3 of the [quickstart guide](https://fedn.readthedocs.io/en/latest/quickstart.html#create-the-compute-package-and-seed-model)." ] }, { @@ -160,7 +164,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] diff --git a/examples/notebooks/Aggregators.ipynb b/examples/notebooks/Aggregators.ipynb index 27b0a22f7..265e2cdf7 100644 --- a/examples/notebooks/Aggregators.ipynb +++ b/examples/notebooks/Aggregators.ipynb @@ -9,10 +9,13 @@ "\n", "This notebook shows how to use different Aggregators (FedAvg, FedAdam, FedYogi, FedAdaGrad). \n", "\n", - "When you start this tutorial you should either have an account and project in FEDn Studio, or have deployed a FEDn in pseudo-distributed mode. You should also have created the compute package and the initial model, see README.md for instructions.\n", + "For a complete list of implemented interfaces, please refer to the [FEDn APIs](https://fedn.readthedocs.io/en/latest/fedn.network.api.html#module-fedn.network.api.client). \n", "\n", + "For implementation details related to how aggregators are implemented, we recommend to read [FEDn Framework Extensions](https://www.scaleoutsystems.com/post/fedn-framework-extensions).\n", + "\n", + "Before starting this tutorial, make sure you have a project running in FEDn Studio and have created the compute package and the initial model. If you're not sure how to do this, please follow the instructions in sections 1, 2, and 3 of the [quickstart guide](https://fedn.readthedocs.io/en/latest/quickstart.html).\n", " \n", - "Note that this notebook is intended to showcase the aggregator API. Fine-tuning of the server-side hyperparameters would be necessary for optimal performance and will need to be done a use-case basis." + "Note: This notebook is intended to showcase the aggregator API. Fine-tuning of the server-side hyperparameters would be necessary for optimal performance and will need to be done a use-case basis." ] }, { @@ -36,15 +39,11 @@ "id": "1046a4e5", "metadata": {}, "source": [ - "We make a client connection to the FEDn API service. Here we assume that FEDn is deployed locally in pseudo-distributed mode with default ports. To connect to Studio, generate an API token from the UI, and retrive the controller host URI from the Dashboard. " - ] - }, - { - "cell_type": "markdown", - "id": "8a5e4583-a6f4-456c-96e5-22f38c2c0ba8", - "metadata": {}, - "source": [ - "#### If using a local development deployment" + "In this example, we assume the project is hosted on the public FEDn Studio. You can find the CONTROLLER_HOST address in the project dashboard.\n", + "\n", + "NOTE: If you're using a local sandbox, the CONTROLLER_HOST will be \"localhost,\" and the CONTROLLER_PORT will be 8092.\n", + "\n", + "Next, you'll need to generate an access token. To do this, go to the project page in FEDn Studio, click on \"Settings,\" then \"Generate token.\" Copy the access token from the Studio and paste it into the notebook. In case you need further details, have a look at the [Fedn ClientAPIs](https://fedn.readthedocs.io/en/latest/apiclient.html#)." ] }, { @@ -54,31 +53,9 @@ "metadata": {}, "outputs": [], "source": [ - "CONTROLLER_HOST = \"127.0.0.1\"\n", - "CONTROLLER_PORT = 8092\n", - "client = APIClient(CONTROLLER_HOST, CONTROLLER_PORT)" - ] - }, - { - "cell_type": "markdown", - "id": "da10cf9e-a4fd-41b5-98ef-80fbbfa7b56d", - "metadata": {}, - "source": [ - "#### If using a FEDn Studio project" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "2e5948f2-178c-4b66-93f1-ccb72b897133", - "metadata": {}, - "outputs": [], - "source": [ - "# Get the controller host for your project from the Dashboard page in Studio\n", - "#CONTROLLER_HOST = \"fedn.scaleoutsystems.com/aggtestproject-etq-fedn-reducer\"\n", - "# Generate an API token from Settings->Generate token (the one below is just an example, it will not work)\n", - "#TOKEN = \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.bl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzE3MDE5MjIwLCJpYXQiOjE3MTQ0MIjQ0OWYyODQwMDQ3NzQxMzll9pZCI6MzcsImNyZWF0b3IiOiJhbmRyZWFzaCIsInJvbGUiOiJhZG1pbiIsInByb2plY3Rfc2x1ZyI6ImFnZ3Rlc3Rwcm9qZWN0LWV0cSJ9.P1RwQElLy3kx3h2o9uE-TUICT4CLlgrrM9YuRasCrBM\"\n", - "#client = APIClient(CONTROLLER_HOST, token=TOKEN, secure=True,verify=True)" + "CONTROLLER_HOST = 'fedn.scaleoutsystems.com/my-project...' \n", + "ACCESS_TOKEN = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzI3MzQ3NDA4LCJpYXQiOjE3MjQ3NTU0MDgsImp0aSI6ImQxMTY4OTJkODJlMjRhZjJiYzQzZTllZjVlNGVlZDhmIiwidXNlcl9pZCI6NTUsImNyZWF0b3IiOiJzYWxtYW4iLCJyb2xlIjoiYWRtaW4iLCJwcm9qZWN0X3NsdWciOiJldXJvcGFyMjQtd29ya3Nob3AtZWJ4In0.k9pXUh6Ldb-jEzl77FjsxvAAjcbPoB'\n", + "client = APIClient(CONTROLLER_HOST,token=ACCESS_TOKEN, secure=True,verify=True)" ] }, { @@ -86,7 +63,7 @@ "id": "07f69f5f", "metadata": {}, "source": [ - "Initialize FEDn with the compute package and seed model. Note that these files needs to be created separately by follwing instructions in the README." + "Initialize FEDn with the compute package and seed model. Note that these files needs to be created separately. If you're not sure how to do this, please follow the instructions only in section 3 of the [quickstart guide](https://fedn.readthedocs.io/en/latest/quickstart.html#create-the-compute-package-and-seed-model)." ] }, {