From d59f49bde5d12290e89749a7e253cec4eaca05e3 Mon Sep 17 00:00:00 2001 From: Francesco Farina Date: Wed, 29 Jan 2025 10:58:20 +0000 Subject: [PATCH 01/15] p2p distributed optimization examples --- .../distributed_optimization/.gitignore | 3 + .../distributed_optimization/README.md | 464 +++++++++ .../examples/1-consensus/README.md | 2 + .../1-consensus/consensus_notebook.ipynb | 980 ++++++++++++++++++ .../examples/1-consensus/launcher.py | 51 + .../examples/2-two_moons/README.md | 28 + .../examples/2-two_moons/config.py | 3 + .../examples/2-two_moons/dgd_results.png | Bin 0 -> 81201 bytes .../examples/2-two_moons/gt_results.png | Bin 0 -> 74175 bytes .../examples/2-two_moons/gtadam_results.png | Bin 0 -> 46487 bytes .../examples/2-two_moons/launcher_dgd.py | 50 + .../examples/2-two_moons/launcher_gt.py | 48 + .../examples/2-two_moons/launcher_gtadam.py | 54 + .../examples/2-two_moons/utils.py | 90 ++ .../examples/3-mnist/README.md | 32 + .../examples/3-mnist/config.py | 3 + .../examples/3-mnist/dgd_results.png | Bin 0 -> 63555 bytes .../examples/3-mnist/gt_results.png | Bin 0 -> 61631 bytes .../examples/3-mnist/gtadam_results.png | Bin 0 -> 89217 bytes .../examples/3-mnist/launcher_dgd.py | 49 + .../examples/3-mnist/launcher_gt.py | 45 + .../examples/3-mnist/launcher_gtadam.py | 54 + .../examples/3-mnist/utils.py | 92 ++ .../distributed_optimization/nvdo/__init__.py | 0 .../nvdo/controllers/__init__.py | 1 + .../nvdo/controllers/base.py | 52 + .../nvdo/executors/__init__.py | 5 + .../nvdo/executors/base.py | 142 +++ .../nvdo/executors/consensus.py | 48 + .../executors/distributed_gradient_descent.py | 119 +++ .../nvdo/executors/gradient_tracking.py | 161 +++ .../nvdo/executors/gtadam.py | 33 + .../nvdo/types/__init__.py | 92 ++ .../nvdo/utils/__init__.py | 0 .../nvdo/utils/config_generator.py | 53 + .../nvdo/utils/metrics.py | 41 + .../nvdo/utils/topology.py | 28 + .../distributed_optimization/pyproject.toml | 24 + 38 files changed, 2847 insertions(+) create mode 100644 examples/advanced/distributed_optimization/.gitignore create mode 100644 examples/advanced/distributed_optimization/README.md create mode 100644 examples/advanced/distributed_optimization/examples/1-consensus/README.md create mode 100644 examples/advanced/distributed_optimization/examples/1-consensus/consensus_notebook.ipynb create mode 100644 examples/advanced/distributed_optimization/examples/1-consensus/launcher.py create mode 100644 examples/advanced/distributed_optimization/examples/2-two_moons/README.md create mode 100644 examples/advanced/distributed_optimization/examples/2-two_moons/config.py create mode 100644 examples/advanced/distributed_optimization/examples/2-two_moons/dgd_results.png create mode 100644 examples/advanced/distributed_optimization/examples/2-two_moons/gt_results.png create mode 100644 examples/advanced/distributed_optimization/examples/2-two_moons/gtadam_results.png create mode 100644 examples/advanced/distributed_optimization/examples/2-two_moons/launcher_dgd.py create mode 100644 examples/advanced/distributed_optimization/examples/2-two_moons/launcher_gt.py create mode 100644 examples/advanced/distributed_optimization/examples/2-two_moons/launcher_gtadam.py create mode 100644 examples/advanced/distributed_optimization/examples/2-two_moons/utils.py create mode 100644 examples/advanced/distributed_optimization/examples/3-mnist/README.md create mode 100644 examples/advanced/distributed_optimization/examples/3-mnist/config.py create mode 100644 examples/advanced/distributed_optimization/examples/3-mnist/dgd_results.png create mode 100644 examples/advanced/distributed_optimization/examples/3-mnist/gt_results.png create mode 100644 examples/advanced/distributed_optimization/examples/3-mnist/gtadam_results.png create mode 100644 examples/advanced/distributed_optimization/examples/3-mnist/launcher_dgd.py create mode 100644 examples/advanced/distributed_optimization/examples/3-mnist/launcher_gt.py create mode 100644 examples/advanced/distributed_optimization/examples/3-mnist/launcher_gtadam.py create mode 100644 examples/advanced/distributed_optimization/examples/3-mnist/utils.py create mode 100644 examples/advanced/distributed_optimization/nvdo/__init__.py create mode 100644 examples/advanced/distributed_optimization/nvdo/controllers/__init__.py create mode 100644 examples/advanced/distributed_optimization/nvdo/controllers/base.py create mode 100644 examples/advanced/distributed_optimization/nvdo/executors/__init__.py create mode 100644 examples/advanced/distributed_optimization/nvdo/executors/base.py create mode 100644 examples/advanced/distributed_optimization/nvdo/executors/consensus.py create mode 100644 examples/advanced/distributed_optimization/nvdo/executors/distributed_gradient_descent.py create mode 100644 examples/advanced/distributed_optimization/nvdo/executors/gradient_tracking.py create mode 100644 examples/advanced/distributed_optimization/nvdo/executors/gtadam.py create mode 100644 examples/advanced/distributed_optimization/nvdo/types/__init__.py create mode 100644 examples/advanced/distributed_optimization/nvdo/utils/__init__.py create mode 100644 examples/advanced/distributed_optimization/nvdo/utils/config_generator.py create mode 100644 examples/advanced/distributed_optimization/nvdo/utils/metrics.py create mode 100644 examples/advanced/distributed_optimization/nvdo/utils/topology.py create mode 100644 examples/advanced/distributed_optimization/pyproject.toml diff --git a/examples/advanced/distributed_optimization/.gitignore b/examples/advanced/distributed_optimization/.gitignore new file mode 100644 index 0000000000..3fde4c99f7 --- /dev/null +++ b/examples/advanced/distributed_optimization/.gitignore @@ -0,0 +1,3 @@ +.mise.toml +tmp +data \ No newline at end of file diff --git a/examples/advanced/distributed_optimization/README.md b/examples/advanced/distributed_optimization/README.md new file mode 100644 index 0000000000..2c942e999c --- /dev/null +++ b/examples/advanced/distributed_optimization/README.md @@ -0,0 +1,464 @@ +# P2P Distributed Optimization algorithms with NVFlare + +Here we show how to exploit the lower-level NVFlare APIs to implement P2P distributed optimization algorithms. We built a collection of distributed optimization algorithms built on top of NVFlare with examples. Below you can find a walkthrough of the implementation. + +The following algorithms are currently implemented: +- Consensus algorithm - initially published in [DeGroot, M. H. (1974). Reaching a Consensus. Journal of the American Statistical Association, 69(345), 118–121.](https://www.jstor.org/stable/2285509) +- Distributed (stochastic) gradient descent [Tsitsiklis, J., Bertsekas, D., & Athans, M. (1986). Distributed asynchronous deterministic and stochastic gradient optimization algorithms. IEEE transactions on automatic control, 31(9), 803-812.](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=1104412) and [Sundhar Ram, S., Nedić, A., & Veeravalli, V. V. (2010). Distributed stochastic subgradient projection algorithms for convex optimization. Journal of optimization theory and applications, 147, 516-545.](https://arxiv.org/pdf/0811.2595) +- (Stochastic) gradient tracking [Pu, S., & Nedić, A. (2021). Distributed stochastic gradient tracking methods. Mathematical Programming, 187(1), 409-457.](https://arxiv.org/pdf/1805.11454) +- GTAdam [Carnevale, G., Farina, F., Notarnicola, I., & Notarstefano, G. (2022). GTAdam: Gradient tracking with adaptive momentum for distributed online optimization. IEEE Transactions on Control of Network Systems, 10(3), 1436-1448.](https://ieeexplore.ieee.org/abstract/document/9999485) + +## Installation +We packaged the implementation of the algorithms under the `nvdo` namespace. To install it, you can use the following command: + +```shell +pip install -e . +``` + +## Examples +Examples for the different algorithms on different problems can be found in the `examples` folder with with instructions and results. + + +## Implementation walkthrough +Let's now walk through how to use NVFlare to implement custom peer-to-peer (P2P) algorithms, opening the road to easily implement custom distributed optimization and swarm learning workflows. +Specifically, we'll delve into using some lower-level NVFlare APIs to create a controllers and executors, which serve as the backbone for orchestrating communication and computation across different nodes (clients) in a distributed setup. +As an example, we'll demonstrate how to implement a consensus algorithm using these components and we'll show it in action in the next notebook. + +As said, the final implementation is packaged under the `nvdo` namespace (see the [Installation](#installation) section above) - we'll refer to the specific files along the notebook. + +### Introduction + +In peer-to-peer (P2P) algorithms, being distributed optimization or decentralized federated learning algorithms, clients communicate directly with each other without relying on a central server to aggregate updates. Implementing P2P algorithms usually requires careful orchestration to handle communication, synchronization, and data exchange among clients. + +Thankfully, NVFlare natively provides the primitives to easily build such a system. + +#### Exploiting NVFlare low-level APIs +NVFlare natively supports various communication and orchestration patterns, including peer-to-peer interactions, which are crucial for decentralized algorithms. + +To implement custom P2P/distributed optimization algorithms, we'll delve into its lower level APIs to build a framework facilitate building P2P algorithms. In particular, we'll use + +- [Controllers](https://nvflare.readthedocs.io/en/2.5/apidocs/nvflare.apis.impl.controller.html#module-nvflare.apis.impl.controller): Server-side components that manage job execution and orchestrate tasks. +- [Executors](https://nvflare.readthedocs.io/en/2.5/apidocs/nvflare.apis.executor.html#module-nvflare.apis.executor): Client-side components that perform computations and handle tasks received from the controller. +- [Messages via aux channes](https://nvflare.readthedocs.io/en/2.5/apidocs/nvflare.private.aux_runner.html#nvflare.private.aux_runner.AuxRunner.send_aux_request): Custom messages that enable direct communication between clients. + +#### What to expect +We'll start by defining a way to easily define and share configurations across the network. Then we'll implement a base controller and executor, serving as the backbone to implement arbitrary p2p algorithms. Finally we'll build upon the base executor to implement a specific algorithm, the Consensus algorithm. + +### Pythonic configs + +Before we dive into the controller and executor, let's start by creating a Pythonic way to define the configuration of our network. We'll start by simply defining a `Node` (i.e. a client in the network), its `Neighbors` (i.e. other clients with which a client communicates, each with a weight) and combine them to define a `Network` (i.e. a network of clients with neighbors). + +```python +from dataclasses import dataclass, field + +@dataclass +class Neighbor: + id: int | str + weight: float | None = None + +@dataclass +class Node: + id: int | str + neighbors: list[Neighbor] = field(default_factory=list) + +@dataclass +class Network: + nodes: list[Node] = field(default_factory=list) +``` + +Then we'll define a global and a local config objects to be passed to the controller and executors respectively. + +```python +@dataclass +class Config: + network: Network + extra: dict = field(default_factory=dict) + +@dataclass +class LocalConfig: + neighbors: list[Neighbor] + extra: dict = field(default_factory=dict) +``` + +The `extra` parameter can be used to pass additional parameters, usually specific for the various algorithms. + +To actual implementation of the objects above can be found in `nvdo/types/__init__.py` (you'll see they'll have the `__dict__` and `__post_init__` methods defined facilitate serializing and deserializing them, which is needed for NVFlare). + +Here's an example of a ring network with 3 clients, running an algorithm for 100 iterations: +```shell +Config( + extra={"iterations":100}, + network=Network( + nodes=[ + Node( + id='site-1', + neighbors=[ + Neighbor(id='site-2', weight=0.1), + ] + ), + Node( + id='site-2', + neighbors=[ + Neighbor(id='site-3', weight=0.1), + ] + ), + Node( + id='site-3', + neighbors=[ + Neighbor(id='site-1', weight=0.1), + ] + ), + ] + ) +) +``` + +### The controller + +In NVFlare, a `Controller` is a server-side component that manages the job execution and orchestration of tasks. Here, since we're running a P2P algorithm, we'll implement a custom controller whose main job is to load and broadcast the network configuration, and initiate/terminate the execution of a P2P algorithm. Let's call it `AlgorithmController`. As a subclass of `Controller`, it must implement 3 methods: + +- `start_controller` which is called at the beginning of the run +- `control_flow` defining the main control flow of the controller (in this case, broadcasting the configuration and asking clients to run the algorithm) +- `stop_controller`, called at the end of the run + +```python +from nvflare.apis.impl.controller import Controller + +class AlgorithmController(Controller): + + def control_flow(self, abort_signal: Signal, fl_ctx: FLContext): + # Broadcast configuration to clients + ... + + # Run the algorithm + ... + + def start_controller(self, fl_ctx: FLContext): + pass + + def stop_controller(self, fl_ctx: FLContext): + pass +``` + +We won't do anything fancy during the start and stop phase, so let's focus on the `control_flow` and implement the two steps. To do so, we first need to override the `__init__` method to take a `Config` object as an argument. + +```python +from nvdo.types import Config + +class AlgorithmController(Controller): + def __init__( + self, + config: Config, + *args, + **kwargs, + ): + super().__init__(*args, **kwargs) + self.config = config + + ... +``` + +Now, in the `control_flow` method we can send the local configurations to each client and, once they receive them, ask them to run the algorithm. We'll do so by sending `Task`s to each client. In NVFlare, a `Task` is a piece of work that is assigned by the Controller to client workers. Depending on how the task is assigned (broadcast, send, or relay), the task will be performed by one or more clients. + +In fact, one one hand, we'll use the `send_and_wait` method to send the `"config"` task to each client, since each client will potentially have a different config (because of different neighbors); on the other hand, to run the algorith, we'll use the `broadcast_and_wait`, which broadcasts the same `"run_algorithm"` task to all clients and waits for all clients to respond/complete the task. As you see, each task specifies a `name` - in this case, `"config"` and `"run_algorithm"` - let's remember those as they'll need to be the same in the control flow of each client. + + +```python +from nvflare.apis.controller_spec import Task +from nvflare.apis.dxo import DXO, DataKind +from nvflare.apis.fl_context import FLContext +from nvflare.apis.signal import Signal + +class AlgorithmController(Controller): + + ... + + def control_flow(self, abort_signal: Signal, fl_ctx: FLContext): + # Send network config (aka neighors info) to each client + for node in self.config.network.nodes: + task = Task( + name="config", + data=DXO( + data_kind=DataKind.METRICS, + data={"neighbors": [n.__dict__ for n in node.neighbors]}, + ).to_shareable(), + ) + self.send_and_wait(task=task, targets=[node.id], fl_ctx=fl_ctx) + + # Run algorithm (with extra params if any passed as data) + targets = [node.id for node in self.config.network.nodes] + self.broadcast_and_wait( + task=Task( + name="run_algorithm", + data=DXO( + data_kind=DataKind.METRICS, + data={key: value for key, value in self.config.extra.items()}, + ).to_shareable(), + ), + targets=targets, + min_responses=0, + fl_ctx=fl_ctx, + ) + + ... +``` + +And that's it, our `AlgorithmController` is ready. The complete implementation of the `AlgorithmController` can be found in `nvdo/controllers/base.py`. + +### The executor + +Now that we have our `AlgorithmController`, it's time to take care of the actual execution of the algorithm at the client level - we'll build on top of the NVFlare `Executor` to do to that. + +In NVFlare, an `Executor` is a client-side component that handles tasks received from the controller and executes them. For our purposes we'll need our executor to be able to do a few things: +- receive the config from the server/controller +- communicate with its neighbors and send/receive messages to/from them +- run the algorithm + +For the moment, we'll focus on synchronous algorithms only, meaning that the clients will need to run the iterations of an algorithm in a synchronous way. Let' call our executor `SynchronousAlgorithmExecutor`. +The only method that must be implemented in this case is the `execute` method, which takes the `task_name` and `shareable` sent from the controller as inputs. + +```python +from nvflare.apis.executor import Executor +from nvflare.apis.fl_constant import ReturnCode +from nvflare.apis.fl_context import FLContext +from nvflare.apis.shareable import Shareable, make_reply + + +class SynchronousAlgorithmExecutor(Executor): + + def execute( + self, + task_name: str, + shareable: Shareable, + fl_ctx: FLContext, + abort_signal: Signal, + ): + if task_name == "config": + # TODO: receive and store config + ... + return make_reply(ReturnCode.OK) + + elif task_name == "run_algorithm": + # TODO: run the algorithm + return make_reply(ReturnCode.OK) + else: + self.log_warning(fl_ctx, f"Unknown task name: {task_name}") + return make_reply(ReturnCode.TASK_UNKNOWN) +``` + +Let's focus on the execution of the `"config"` task - for this we can just create some attributes to store the config and the neighbors (and the local weight computed from them). + +```python +from nvflare.apis.dxo import from_shareable +from nvdo.types import LocalConfig, Neighbor + + +class SynchronousAlgorithmExecutor(Executor): + def __init__(self): + super().__init__() + + self.config = None + self._weight = None + self.neighbors: list[Neighbor] = [] + + + def execute( + self, + task_name: str, + shareable: Shareable, + fl_ctx: FLContext, + abort_signal: Signal, + ): + if task_name == "config": + # Receive and store config + self.config = LocalConfig(**from_shareable(shareable).data) + self.neighbors = self.config.neighbors + self._weight = 1.0 - sum([n.weight for n in self.neighbors]) + return make_reply(ReturnCode.OK) + + elif task_name == "run_algorithm": + # TODO: run the algorithm + return make_reply(ReturnCode.OK) + else: + self.log_warning(fl_ctx, f"Unknown task name: {task_name}") + return make_reply(ReturnCode.TASK_UNKNOWN) +``` + +That was relatively easy - so, now to the slightly more challenging part of letting clients communicate with each other. +To do that we'll do a few things: +- we'll use the `send_aux_request` method to let a client send a message to its neighbors +- we'll need to register a callback to handle received messages (via the `register_aux_message_handler` function) and add an attribute `neighbors_values` to store received values. We'll call the callback `_handle_neighbor_value` and the registration will be done in the `handle_event` method at start time (i.e., when receiving the `EventType.START_RUN` event). Other events can be handled in the same way if needed. +- we'll use threading events and locks to synchronize the execution of the algorithm (making each client, when sending a message, wait to have received the messages of all its neighbors before sending the next message) +- we'll add two methods, `_from_message` and `_to_message` to convert between the message exchange formats (which will need to be overridden in subclasses, based on the algorithm) + +The main message exchange will be done in the `_exchange_values` function. + +```python +import threading +from abc import abstractmethod +from collections import defaultdict + +from nvflare.apis.dxo import DXO, DataKind +from nvflare.apis.event_type import EventType +from nvflare.apis.signal import Signal + + +class SynchronousAlgorithmExecutor(Executor): + def __init__(self): + super().__init__() + ... # other attributes + + self.neighbors_values = defaultdict(dict) + + self.sync_waiter = threading.Event() + self.lock = threading.Lock() + + + def _exchange_values(self, fl_ctx: FLContext, value: any, iteration: int): + engine = fl_ctx.get_engine() + + # Clear the event before starting the exchange + self.sync_waiter.clear() + + # Send message to neighbors + _ = engine.send_aux_request( + targets=[neighbor.id for neighbor in self.neighbors], + topic="send_value", + request=DXO( + data_kind=DataKind.METRICS, + data={ + "value": self._to_message(value), + "iteration": iteration, + }, + ).to_shareable(), + timeout=10, + fl_ctx=fl_ctx, + ) + + # check if all neighbors sent their values + if len(self.neighbors_values[iteration]) < len(self.neighbors): + # if not, wait for them, max 10 seconds + if not self.sync_waiter.wait(timeout=10): + self.system_panic("failed to receive values from all neighbors", fl_ctx) + return + + def _handle_neighbor_value( + self, topic: str, request: Shareable, fl_ctx: FLContext + ) -> Shareable: + sender = request.get_peer_props()["__identity_name__"] + data = from_shareable(request).data + iteration = data["iteration"] + + with self.lock: + self.neighbors_values[iteration][sender] = self._from_message(data["value"]) + # Check if all neighbor values have been received + if len(self.neighbors_values[iteration]) >= len(self.neighbors): + self.sync_waiter.set() # Signal that we have all neighbor values + return make_reply(ReturnCode.OK) + + def handle_event(self, event_type: str, fl_ctx: FLContext): + if event_type == EventType.START_RUN: + engine = fl_ctx.get_engine() + + engine.register_aux_message_handler( + topic="send_value", message_handle_func=self._handle_neighbor_value + ) + + def _to_message(self, x): + return x + + def _from_message(self, x): + return x + +``` + +That's it for the synchronous message exchange. Notice that `neighbors_values` needs to maintain a dictionary of received values per iteration. +This is because, different parts of a network may be at different iterations of the algorithm (plus or minus 1 at most) - this means that I could receive a message from a neighbor valid for iteration `t+1` when I'm still at iteration `t`. Since that message won't be sent again, I need to store it. To avoid the `neighbors_values` to grow indefinitely, we'll delete its content at iteration `t` after having consumed its values and moving to the next iteration in the algorithm. We'll see that in the next section. + +Moving forward, now that we have a way to store the config and exchange messages with the neighbors, we can move on to implementing the algorithmic part. For this base `SynchronousAlgorithmExecutor`, we'll just implement the main logic in the `execute` method, based on an abstract `run_algorithm` to be overridden by each specific algorithm. + +```python +class SynchronousAlgorithmExecutor(Executor): + + ... + + def execute( + self, + task_name: str, + shareable: Shareable, + fl_ctx: FLContext, + abort_signal: Signal, + ): + if task_name == "config": + # Receive topology from the server + self._load_config(shareable, fl_ctx) + return make_reply(ReturnCode.OK) + + elif task_name == "run_algorithm": + self.run_algorithm(fl_ctx, shareable, abort_signal) + return make_reply(ReturnCode.OK) + else: + self.log_warning(fl_ctx, f"Unknown task name: {task_name}") + return make_reply(ReturnCode.TASK_UNKNOWN) + + @abstractmethod + def run_algorithm( + self, fl_ctx: FLContext, shareable: Shareable, abort_signal: Signal + ): + """Executes the algorithm""" + pass + + ... +``` + +And that's all. The full implementation is in `nvdo/executors/base.py` - note that the implementation in `nvdo` is split between a `BaseAlgorithmExecutor` and the `SynchronousAlgorithmExecutor`. It contains a few additional attributes (namely `self.id` and `self.client_name`) to identify the client, which are potentially useful in algorithms, and two additional methods `_pre_algorithm_run` and `_post_algorithm_run` to be overridden by each specific algorithm to execute some code before and after the algorithm execution, respectively. + +### An example: the `ConsensusExecutor` + +Now that we have built all the main foundations, we can easily implement any custom P2P algorithm. For example, let's implement a slightly simplified version of the `ConsensusExecutor` that will be used in the next section and whose full implementation is in `nvdo/executors/consensus.py`. + +```python +import torch + +class ConsensusExecutor(SynchronousAlgorithmExecutor): + + def __init__( + self, + initial_value: float | None = None, + ): + super().__init__() + if initial_value is None: + initial_value = random.random() + self.current_value = initial_value + self.value_history = [self.current_value] + + def run_algorithm(self, fl_ctx, shareable, abort_signal): + iterations = from_shareable(shareable).data["iterations"] + + for iteration in range(iterations): + # 1. exchange values + self._exchange_values( + fl_ctx, value=self.current_value, iteration=iteration + ) + + # 2. compute new value + current_value = self.current_value * self._weight + for neighbor in self.neighbors: + current_value += ( + self.neighbors_values[iteration][neighbor.id] * neighbor.weight + ) + + # 3. store current value + self.current_value = current_value + + # free memory that's no longer needed + del self.neighbors_values[iteration] + +``` + +It's basically just a matter of implementing the algorithm logic in the `run_algorithm` method. + +### Summary +We have shown how to use NVFlare to implement custom peer-to-peer (P2P) algorithms. We have packaged the implementation in the main repository under the `nvdo` namespace. + +You can find usage examples in the `examples` folder, from a simple consensus algorithm, to training classifiers on the MNIST dataset. \ No newline at end of file diff --git a/examples/advanced/distributed_optimization/examples/1-consensus/README.md b/examples/advanced/distributed_optimization/examples/1-consensus/README.md new file mode 100644 index 0000000000..4de2902583 --- /dev/null +++ b/examples/advanced/distributed_optimization/examples/1-consensus/README.md @@ -0,0 +1,2 @@ +# Consensus algorithm +In this example we show how to run the consensus algorithm. You can find a detailed walkthrough in the [notebook](consensus_notebook.ipynb) or you can just run the provided [script](launcher.py) via `python launcher.py`. \ No newline at end of file diff --git a/examples/advanced/distributed_optimization/examples/1-consensus/consensus_notebook.ipynb b/examples/advanced/distributed_optimization/examples/1-consensus/consensus_notebook.ipynb new file mode 100644 index 0000000000..f7f02ae45d --- /dev/null +++ b/examples/advanced/distributed_optimization/examples/1-consensus/consensus_notebook.ipynb @@ -0,0 +1,980 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Consensus algorithm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this example we'll show how to run a simple consensus algorithm.\n", + "\n", + "## Background\n", + "\n", + "We consider a network of `num_clients` peer clients. Each client $i$ maintains some local value $x_i^t$ and is connected to a subset of the other clients in the network, defined as the set of its neighbors $\\mathcal{N}_i$.\n", + "\n", + "The goal of all the clients is to reach consensus on their local values by communicating with their peers for a certain number of iterations $T$. \n", + "In other terms, they want to cooperatively compute a weighted average of their initial values $x_i^0$.\n", + "\n", + "The consensus algorithm works by having each client updating its local value as\n", + "\n", + "$$x_i^{t+1} = \\sum_{j\\in\\mathcal{N}_i}a_{ji}x_j^t$$\n", + "\n", + "where $a_{ji}$ is the weight associated by client $i$ to client $j$ and $\\sum_{j=1}^N a_{ji}=1$ for all $i$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setup\n", + "Let's assume we have $N=5$ clients and generate a random configuration." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "from nvdo.utils.config_generator import generate_random_network\n", + "from nvdo.types import Config\n", + "\n", + "# generate random config\n", + "num_clients=5\n", + "network, adjacency_matrix = generate_random_network(num_clients=num_clients)\n", + "config = Config(network=network, extra={\"iterations\": 50})" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By inspecting the config we can see the initial values of each client as well as the network topology." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Config(\n",
+       "    network=Network(\n",
+       "        nodes=[\n",
+       "            Node(id='site-1', neighbors=[Neighbor(id='site-3', weight=0.3333333333333333)]),\n",
+       "            Node(\n",
+       "                id='site-2',\n",
+       "                neighbors=[\n",
+       "                    Neighbor(id='site-3', weight=0.3333333333333333),\n",
+       "                    Neighbor(id='site-4', weight=0.3333333333333333)\n",
+       "                ]\n",
+       "            ),\n",
+       "            Node(\n",
+       "                id='site-3',\n",
+       "                neighbors=[\n",
+       "                    Neighbor(id='site-1', weight=0.3333333333333333),\n",
+       "                    Neighbor(id='site-2', weight=0.3333333333333333)\n",
+       "                ]\n",
+       "            ),\n",
+       "            Node(\n",
+       "                id='site-4',\n",
+       "                neighbors=[\n",
+       "                    Neighbor(id='site-2', weight=0.3333333333333333),\n",
+       "                    Neighbor(id='site-5', weight=0.3333333333333333)\n",
+       "                ]\n",
+       "            ),\n",
+       "            Node(id='site-5', neighbors=[Neighbor(id='site-4', weight=0.3333333333333333)])\n",
+       "        ]\n",
+       "    ),\n",
+       "    extra={'iterations': 50}\n",
+       ")\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1;35mConfig\u001b[0m\u001b[1m(\u001b[0m\n", + " \u001b[33mnetwork\u001b[0m=\u001b[1;35mNetwork\u001b[0m\u001b[1m(\u001b[0m\n", + " \u001b[33mnodes\u001b[0m=\u001b[1m[\u001b[0m\n", + " \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-1'\u001b[0m, \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-3'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333333333333\u001b[0m\u001b[1m)\u001b[0m\u001b[1m]\u001b[0m\u001b[1m)\u001b[0m,\n", + " \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\n", + " \u001b[33mid\u001b[0m=\u001b[32m'site-2'\u001b[0m,\n", + " \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\n", + " \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-3'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333333333333\u001b[0m\u001b[1m)\u001b[0m,\n", + " \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-4'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333333333333\u001b[0m\u001b[1m)\u001b[0m\n", + " \u001b[1m]\u001b[0m\n", + " \u001b[1m)\u001b[0m,\n", + " \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\n", + " \u001b[33mid\u001b[0m=\u001b[32m'site-3'\u001b[0m,\n", + " \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\n", + " \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-1'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333333333333\u001b[0m\u001b[1m)\u001b[0m,\n", + " \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-2'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333333333333\u001b[0m\u001b[1m)\u001b[0m\n", + " \u001b[1m]\u001b[0m\n", + " \u001b[1m)\u001b[0m,\n", + " \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\n", + " \u001b[33mid\u001b[0m=\u001b[32m'site-4'\u001b[0m,\n", + " \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\n", + " \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-2'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333333333333\u001b[0m\u001b[1m)\u001b[0m,\n", + " \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-5'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333333333333\u001b[0m\u001b[1m)\u001b[0m\n", + " \u001b[1m]\u001b[0m\n", + " \u001b[1m)\u001b[0m,\n", + " \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-5'\u001b[0m, \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-4'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333333333333\u001b[0m\u001b[1m)\u001b[0m\u001b[1m]\u001b[0m\u001b[1m)\u001b[0m\n", + " \u001b[1m]\u001b[0m\n", + " \u001b[1m)\u001b[0m,\n", + " \u001b[33mextra\u001b[0m=\u001b[1m{\u001b[0m\u001b[32m'iterations'\u001b[0m: \u001b[1;36m50\u001b[0m\u001b[1m}\u001b[0m\n", + "\u001b[1m)\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from rich import print\n", + "\n", + "print(config)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Instantiating and running the distributed algorithm\n", + "\n", + "Now that we have all the configurations, we can instantiate the clients and a controller." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "from nvflare.job_config.api import FedJob\n", + "from nvdo.executors import ConsensusExecutor\n", + "from nvdo.controllers import AlgorithmController\n", + "\n", + "# Create job\n", + "job = FedJob(name=\"consensus\")\n", + "\n", + "# send controller to server\n", + "controller = AlgorithmController(config=config)\n", + "job.to_server(controller)\n", + "\n", + "# Add clients\n", + "for i in range(num_clients):\n", + " executor = ConsensusExecutor() # the executor will be initialized with a random value\n", + " job.to(executor, f\"site-{i+1}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we can run the algorithm" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2025-01-29 09:52:48,639 - SimulatorRunner - INFO - Create the Simulator Server.\n", + "2025-01-29 09:52:48,642 - CoreCell - INFO - server: creating listener on tcp://0:52347\n", + "2025-01-29 09:52:48,681 - CoreCell - INFO - server: created backbone external listener for tcp://0:52347\n", + "2025-01-29 09:52:48,681 - ConnectorManager - INFO - 40803: Try start_listener Listener resources: {'secure': False, 'host': 'localhost'}\n", + "2025-01-29 09:52:48,682 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connector [CH00002 PASSIVE tcp://0:12575] is starting\n", + "2025-01-29 09:52:49,183 - CoreCell - INFO - server: created backbone internal listener for tcp://localhost:12575\n", + "2025-01-29 09:52:49,183 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connector [CH00001 PASSIVE tcp://0:52347] is starting\n", + "2025-01-29 09:52:49,184 - SimulatorServer - INFO - max_reg_duration=60.0\n", + "2025-01-29 09:52:49,214 - nvflare.fuel.hci.server.hci - INFO - Starting Admin Server localhost on Port 52348\n", + "2025-01-29 09:52:49,214 - SimulatorRunner - INFO - Deploy the Apps.\n", + "2025-01-29 09:52:49,271 - SimulatorRunner - INFO - Create the simulate clients.\n", + "2025-01-29 09:52:49,273 - Communicator - INFO - Trying to register with server ...\n", + "2025-01-29 09:52:49,274 - ClientManager - INFO - authenticated client site-1\n", + "2025-01-29 09:52:49,274 - ClientManager - INFO - Client: New client site-1@10.2.185.164 joined. Sent token: 52a5b8f8-7212-4b8d-9030-ac9f114421fa. Total clients: 1\n", + "2025-01-29 09:52:49,274 - Communicator - INFO - register RC: ok\n", + "2025-01-29 09:52:49,274 - FederatedClient - INFO - Successfully registered client:site-1 for project simulator_server. Token:52a5b8f8-7212-4b8d-9030-ac9f114421fa SSID:\n", + "2025-01-29 09:52:49,274 - Communicator - INFO - Trying to register with server ...\n", + "2025-01-29 09:52:49,275 - ClientManager - INFO - authenticated client site-2\n", + "2025-01-29 09:52:49,275 - ClientManager - INFO - Client: New client site-2@10.2.185.164 joined. Sent token: 7f091ff0-d372-4f6a-ab12-7abea650e0ed. Total clients: 2\n", + "2025-01-29 09:52:49,275 - Communicator - INFO - register RC: ok\n", + "2025-01-29 09:52:49,275 - FederatedClient - INFO - Successfully registered client:site-2 for project simulator_server. Token:7f091ff0-d372-4f6a-ab12-7abea650e0ed SSID:\n", + "2025-01-29 09:52:49,275 - Communicator - INFO - Trying to register with server ...\n", + "2025-01-29 09:52:49,275 - ClientManager - INFO - authenticated client site-3\n", + "2025-01-29 09:52:49,275 - ClientManager - INFO - Client: New client site-3@10.2.185.164 joined. Sent token: 17b50b63-378d-402c-9537-1d09edf1d9b5. Total clients: 3\n", + "2025-01-29 09:52:49,275 - Communicator - INFO - register RC: ok\n", + "2025-01-29 09:52:49,276 - FederatedClient - INFO - Successfully registered client:site-3 for project simulator_server. Token:17b50b63-378d-402c-9537-1d09edf1d9b5 SSID:\n", + "2025-01-29 09:52:49,276 - Communicator - INFO - Trying to register with server ...\n", + "2025-01-29 09:52:49,276 - ClientManager - INFO - authenticated client site-4\n", + "2025-01-29 09:52:49,276 - ClientManager - INFO - Client: New client site-4@10.2.185.164 joined. Sent token: 8cd02ee9-686e-4f58-9e18-10b48a4f0239. Total clients: 4\n", + "2025-01-29 09:52:49,276 - Communicator - INFO - register RC: ok\n", + "2025-01-29 09:52:49,276 - FederatedClient - INFO - Successfully registered client:site-4 for project simulator_server. Token:8cd02ee9-686e-4f58-9e18-10b48a4f0239 SSID:\n", + "2025-01-29 09:52:49,277 - Communicator - INFO - Trying to register with server ...\n", + "2025-01-29 09:52:49,277 - ClientManager - INFO - authenticated client site-5\n", + "2025-01-29 09:52:49,277 - ClientManager - INFO - Client: New client site-5@10.2.185.164 joined. Sent token: d757d2ec-68a5-40a4-808f-9f5dc141903d. Total clients: 5\n", + "2025-01-29 09:52:49,277 - Communicator - INFO - register RC: ok\n", + "2025-01-29 09:52:49,277 - FederatedClient - INFO - Successfully registered client:site-5 for project simulator_server. Token:d757d2ec-68a5-40a4-808f-9f5dc141903d SSID:\n", + "2025-01-29 09:52:49,277 - SimulatorRunner - INFO - Set the client status ready.\n", + "2025-01-29 09:52:49,277 - SimulatorRunner - INFO - Deploy and start the Server App.\n", + "2025-01-29 09:52:49,278 - Cell - INFO - Register blob CB for channel='server_command', topic='*'\n", + "2025-01-29 09:52:49,278 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\n", + "2025-01-29 09:52:49,278 - ServerCommandAgent - INFO - ServerCommandAgent cell register_request_cb: server.simulate_job\n", + "2025-01-29 09:52:49,287 - AuxRunner - INFO - registered aux handler for topic __sync_runner__\n", + "2025-01-29 09:52:49,287 - AuxRunner - INFO - registered aux handler for topic __job_heartbeat__\n", + "2025-01-29 09:52:49,287 - AuxRunner - INFO - registered aux handler for topic __task_check__\n", + "2025-01-29 09:52:49,287 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\n", + "2025-01-29 09:52:49,287 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\n", + "2025-01-29 09:52:49,287 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\n", + "2025-01-29 09:52:49,287 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job]: Server runner starting ...\n", + "2025-01-29 09:52:49,287 - AuxRunner - INFO - registered aux handler for topic fed.event\n", + "2025-01-29 09:52:49,287 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job]: starting workflow controller () ...\n", + "2025-01-29 09:52:49,287 - AlgorithmController - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: BaseController started\n", + "2025-01-29 09:52:49,287 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: Workflow controller () started\n", + "2025-01-29 09:52:49,287 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: scheduled task config\n", + "2025-01-29 09:52:50,281 - SimulatorClientRunner - INFO - Start the clients run simulation.\n", + "2025-01-29 09:52:51,282 - SimulatorClientRunner - INFO - Simulate Run client: site-1 on GPU group: None\n", + "2025-01-29 09:52:51,282 - SimulatorClientRunner - INFO - Simulate Run client: site-2 on GPU group: None\n", + "2025-01-29 09:52:51,282 - SimulatorClientRunner - INFO - Simulate Run client: site-3 on GPU group: None\n", + "2025-01-29 09:52:51,282 - SimulatorClientRunner - INFO - Simulate Run client: site-4 on GPU group: None\n", + "2025-01-29 09:52:51,288 - SimulatorClientRunner - INFO - Simulate Run client: site-5 on GPU group: None\n", + "2025-01-29 09:52:52,300 - ClientTaskWorker - INFO - ClientTaskWorker started to run\n", + "2025-01-29 09:52:52,300 - ClientTaskWorker - INFO - ClientTaskWorker started to run\n", + "2025-01-29 09:52:52,300 - ClientTaskWorker - INFO - ClientTaskWorker started to run\n", + "2025-01-29 09:52:52,300 - ClientTaskWorker - INFO - ClientTaskWorker started to run\n", + "2025-01-29 09:52:52,300 - ClientTaskWorker - INFO - ClientTaskWorker started to run\n", + "2025-01-29 09:52:52,341 - CoreCell - INFO - site-5.simulate_job: created backbone external connector to tcp://localhost:52347\n", + "2025-01-29 09:52:52,341 - CoreCell - INFO - site-2.simulate_job: created backbone external connector to tcp://localhost:52347\n", + "2025-01-29 09:52:52,341 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:52347] is starting\n", + "2025-01-29 09:52:52,341 - CoreCell - INFO - site-3.simulate_job: created backbone external connector to tcp://localhost:52347\n", + "2025-01-29 09:52:52,341 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:52347] is starting\n", + "2025-01-29 09:52:52,341 - CoreCell - INFO - site-4.simulate_job: created backbone external connector to tcp://localhost:52347\n", + "2025-01-29 09:52:52,341 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:52347] is starting\n", + "2025-01-29 09:52:52,341 - CoreCell - INFO - site-1.simulate_job: created backbone external connector to tcp://localhost:52347\n", + "2025-01-29 09:52:52,341 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:52347] is starting\n", + "2025-01-29 09:52:52,341 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:52347] is starting\n", + "2025-01-29 09:52:52,342 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00002 127.0.0.1:52432 => 127.0.0.1:52347] is created: PID: 40816\n", + "2025-01-29 09:52:52,342 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00002 127.0.0.1:52433 => 127.0.0.1:52347] is created: PID: 40817\n", + "2025-01-29 09:52:52,342 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00002 127.0.0.1:52434 => 127.0.0.1:52347] is created: PID: 40818\n", + "2025-01-29 09:52:52,342 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00002 127.0.0.1:52431 => 127.0.0.1:52347] is created: PID: 40814\n", + "2025-01-29 09:52:52,342 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00002 127.0.0.1:52435 => 127.0.0.1:52347] is created: PID: 40815\n", + "2025-01-29 09:52:52,342 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00008 127.0.0.1:52347 <= 127.0.0.1:52432] is created: PID: 40803\n", + "2025-01-29 09:52:52,343 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00009 127.0.0.1:52347 <= 127.0.0.1:52433] is created: PID: 40803\n", + "2025-01-29 09:52:52,343 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00010 127.0.0.1:52347 <= 127.0.0.1:52434] is created: PID: 40803\n", + "2025-01-29 09:52:52,343 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00011 127.0.0.1:52347 <= 127.0.0.1:52431] is created: PID: 40803\n", + "2025-01-29 09:52:52,343 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00012 127.0.0.1:52347 <= 127.0.0.1:52435] is created: PID: 40803\n", + "2025-01-29 09:52:52,465 - AuxRunner - INFO - registered aux handler for topic __end_run__\n", + "2025-01-29 09:52:52,465 - AuxRunner - INFO - registered aux handler for topic __end_run__\n", + "2025-01-29 09:52:52,465 - AuxRunner - INFO - registered aux handler for topic __do_task__\n", + "2025-01-29 09:52:52,465 - AuxRunner - INFO - registered aux handler for topic __do_task__\n", + "2025-01-29 09:52:52,465 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\n", + "2025-01-29 09:52:52,465 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\n", + "2025-01-29 09:52:52,465 - AuxRunner - INFO - registered aux handler for topic __end_run__\n", + "2025-01-29 09:52:52,465 - AuxRunner - INFO - registered aux handler for topic __do_task__\n", + "2025-01-29 09:52:52,465 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\n", + "2025-01-29 09:52:52,466 - AuxRunner - INFO - registered aux handler for topic __end_run__\n", + "2025-01-29 09:52:52,466 - AuxRunner - INFO - registered aux handler for topic __do_task__\n", + "2025-01-29 09:52:52,467 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\n", + "2025-01-29 09:52:52,467 - AuxRunner - INFO - registered aux handler for topic __end_run__\n", + "2025-01-29 09:52:52,467 - AuxRunner - INFO - registered aux handler for topic __do_task__\n", + "2025-01-29 09:52:52,467 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\n", + "2025-01-29 09:52:52,972 - Cell - INFO - broadcast: channel='aux_communication', topic='__sync_runner__', targets=['server.simulate_job'], timeout=2.0\n", + "2025-01-29 09:52:52,972 - Cell - INFO - broadcast: channel='aux_communication', topic='__sync_runner__', targets=['server.simulate_job'], timeout=2.0\n", + "2025-01-29 09:52:52,972 - Cell - INFO - broadcast: channel='aux_communication', topic='__sync_runner__', targets=['server.simulate_job'], timeout=2.0\n", + "2025-01-29 09:52:52,972 - Cell - INFO - broadcast: channel='aux_communication', topic='__sync_runner__', targets=['server.simulate_job'], timeout=2.0\n", + "2025-01-29 09:52:52,974 - Cell - INFO - broadcast: channel='aux_communication', topic='__sync_runner__', targets=['server.simulate_job'], timeout=2.0\n", + "2025-01-29 09:52:52,982 - ClientRunner - INFO - [identity=site-4, run=simulate_job]: synced to Server Runner in 0.5146529674530029 seconds\n", + "2025-01-29 09:52:52,982 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\n", + "2025-01-29 09:52:52,982 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\n", + "2025-01-29 09:52:52,983 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\n", + "2025-01-29 09:52:52,983 - AuxRunner - INFO - registered aux handler for topic send_value\n", + "2025-01-29 09:52:52,983 - AuxRunner - INFO - registered aux handler for topic fed.event\n", + "2025-01-29 09:52:52,983 - ClientRunner - INFO - [identity=site-4, run=simulate_job]: client runner started\n", + "2025-01-29 09:52:52,984 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-4\n", + "2025-01-29 09:52:52,984 - ClientRunner - INFO - [identity=site-5, run=simulate_job]: synced to Server Runner in 0.5164279937744141 seconds\n", + "2025-01-29 09:52:52,985 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\n", + "2025-01-29 09:52:52,985 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\n", + "2025-01-29 09:52:52,985 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\n", + "2025-01-29 09:52:52,985 - AuxRunner - INFO - registered aux handler for topic send_value\n", + "2025-01-29 09:52:52,985 - ClientRunner - INFO - [identity=site-2, run=simulate_job]: synced to Server Runner in 0.5183467864990234 seconds\n", + "2025-01-29 09:52:52,985 - AuxRunner - INFO - registered aux handler for topic fed.event\n", + "2025-01-29 09:52:52,985 - ClientRunner - INFO - [identity=site-5, run=simulate_job]: client runner started\n", + "2025-01-29 09:52:52,985 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-5\n", + "2025-01-29 09:52:52,985 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\n", + "2025-01-29 09:52:52,986 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\n", + "2025-01-29 09:52:52,986 - ClientRunner - INFO - [identity=site-1, run=simulate_job]: synced to Server Runner in 0.5172262191772461 seconds\n", + "2025-01-29 09:52:52,986 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\n", + "2025-01-29 09:52:52,986 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\n", + "2025-01-29 09:52:52,986 - ClientRunner - INFO - [identity=site-3, run=simulate_job]: synced to Server Runner in 0.5189590454101562 seconds\n", + "2025-01-29 09:52:52,986 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\n", + "2025-01-29 09:52:52,986 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\n", + "2025-01-29 09:52:52,986 - AuxRunner - INFO - registered aux handler for topic send_value\n", + "2025-01-29 09:52:52,986 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\n", + "2025-01-29 09:52:52,986 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\n", + "2025-01-29 09:52:52,986 - AuxRunner - INFO - registered aux handler for topic fed.event\n", + "2025-01-29 09:52:52,986 - ClientRunner - INFO - [identity=site-2, run=simulate_job]: client runner started\n", + "2025-01-29 09:52:52,986 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-2\n", + "2025-01-29 09:52:52,986 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\n", + "2025-01-29 09:52:52,986 - AuxRunner - INFO - registered aux handler for topic send_value\n", + "2025-01-29 09:52:52,987 - AuxRunner - INFO - registered aux handler for topic fed.event\n", + "2025-01-29 09:52:52,987 - ClientRunner - INFO - [identity=site-1, run=simulate_job]: client runner started\n", + "2025-01-29 09:52:52,987 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-1\n", + "2025-01-29 09:52:52,987 - AuxRunner - INFO - registered aux handler for topic send_value\n", + "2025-01-29 09:52:52,987 - AuxRunner - INFO - registered aux handler for topic fed.event\n", + "2025-01-29 09:52:52,987 - ClientRunner - INFO - [identity=site-3, run=simulate_job]: client runner started\n", + "2025-01-29 09:52:52,987 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-3\n", + "2025-01-29 09:52:52,991 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=config, task_id=eff69353-3cd2-4d7f-8605-865b815810e6]: assigned task to client site-1: name=config, id=eff69353-3cd2-4d7f-8605-865b815810e6\n", + "2025-01-29 09:52:52,991 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=config, task_id=eff69353-3cd2-4d7f-8605-865b815810e6]: sent task assignment to client. client_name:site-1 task_id:eff69353-3cd2-4d7f-8605-865b815810e6\n", + "2025-01-29 09:52:52,991 - GetTaskCommand - INFO - return task to client. client_name: site-1 task_name: config task_id: eff69353-3cd2-4d7f-8605-865b815810e6 sharable_header_task_id: eff69353-3cd2-4d7f-8605-865b815810e6\n", + "2025-01-29 09:52:52,992 - Communicator - INFO - Received from simulator_server server. getTask: config size: 697B (697 Bytes) time: 0.004989 seconds\n", + "2025-01-29 09:52:52,992 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \n", + "2025-01-29 09:52:52,992 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: got task assignment: name=config, id=eff69353-3cd2-4d7f-8605-865b815810e6\n", + "2025-01-29 09:52:52,992 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=eff69353-3cd2-4d7f-8605-865b815810e6]: invoking task executor ConsensusExecutor\n", + "2025-01-29 09:52:52,993 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=eff69353-3cd2-4d7f-8605-865b815810e6]: finished processing task\n", + "2025-01-29 09:52:52,993 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=eff69353-3cd2-4d7f-8605-865b815810e6]: try #1: sending task result to server\n", + "2025-01-29 09:52:52,993 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=eff69353-3cd2-4d7f-8605-865b815810e6]: checking task ...\n", + "2025-01-29 09:52:52,993 - Cell - INFO - broadcast: channel='aux_communication', topic='__task_check__', targets=['server.simulate_job'], timeout=5.0\n", + "2025-01-29 09:52:52,994 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=eff69353-3cd2-4d7f-8605-865b815810e6]: start to send task result to server\n", + "2025-01-29 09:52:52,994 - FederatedClient - INFO - Starting to push execute result.\n", + "2025-01-29 09:52:52,995 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job]: got result from client site-1 for task: name=config, id=eff69353-3cd2-4d7f-8605-865b815810e6\n", + "2025-01-29 09:52:52,996 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=eff69353-3cd2-4d7f-8605-865b815810e6]: finished processing client result by controller\n", + "2025-01-29 09:52:52,996 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-1 task_id:eff69353-3cd2-4d7f-8605-865b815810e6\n", + "2025-01-29 09:52:52,996 - Communicator - INFO - SubmitUpdate size: 606B (606 Bytes). time: 0.001696 seconds\n", + "2025-01-29 09:52:52,996 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=eff69353-3cd2-4d7f-8605-865b815810e6]: task result sent to server\n", + "2025-01-29 09:52:52,996 - ClientTaskWorker - INFO - Finished one task run for client: site-1 interval: 2 task_processed: True\n", + "2025-01-29 09:52:53,156 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: task config exit with status TaskCompletionStatus.OK\n", + "2025-01-29 09:52:53,157 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: scheduled task config\n", + "2025-01-29 09:52:53,501 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=config, task_id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc]: assigned task to client site-2: name=config, id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc\n", + "2025-01-29 09:52:53,501 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=config, task_id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc]: sent task assignment to client. client_name:site-2 task_id:6762b9e4-f062-4de8-80b3-c2ee6f0713fc\n", + "2025-01-29 09:52:53,502 - GetTaskCommand - INFO - return task to client. client_name: site-2 task_name: config task_id: 6762b9e4-f062-4de8-80b3-c2ee6f0713fc sharable_header_task_id: 6762b9e4-f062-4de8-80b3-c2ee6f0713fc\n", + "2025-01-29 09:52:53,504 - Communicator - INFO - Received from simulator_server server. getTask: config size: 724B (724 Bytes) time: 0.008325 seconds\n", + "2025-01-29 09:52:53,505 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \n", + "2025-01-29 09:52:53,505 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: got task assignment: name=config, id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc\n", + "2025-01-29 09:52:53,506 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc]: invoking task executor ConsensusExecutor\n", + "2025-01-29 09:52:53,506 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc]: finished processing task\n", + "2025-01-29 09:52:53,506 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc]: try #1: sending task result to server\n", + "2025-01-29 09:52:53,506 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc]: checking task ...\n", + "2025-01-29 09:52:53,507 - Cell - INFO - broadcast: channel='aux_communication', topic='__task_check__', targets=['server.simulate_job'], timeout=5.0\n", + "2025-01-29 09:52:53,510 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc]: start to send task result to server\n", + "2025-01-29 09:52:53,510 - FederatedClient - INFO - Starting to push execute result.\n", + "2025-01-29 09:52:53,511 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job]: got result from client site-2 for task: name=config, id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc\n", + "2025-01-29 09:52:53,512 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc]: finished processing client result by controller\n", + "2025-01-29 09:52:53,512 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-2 task_id:6762b9e4-f062-4de8-80b3-c2ee6f0713fc\n", + "2025-01-29 09:52:53,513 - Communicator - INFO - SubmitUpdate size: 606B (606 Bytes). time: 0.002503 seconds\n", + "2025-01-29 09:52:53,513 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc]: task result sent to server\n", + "2025-01-29 09:52:53,513 - ClientTaskWorker - INFO - Finished one task run for client: site-2 interval: 2 task_processed: True\n", + "2025-01-29 09:52:53,566 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: task config exit with status TaskCompletionStatus.OK\n", + "2025-01-29 09:52:53,764 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: scheduled task config\n", + "2025-01-29 09:52:54,012 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=config, task_id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6]: assigned task to client site-3: name=config, id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6\n", + "2025-01-29 09:52:54,013 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=config, task_id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6]: sent task assignment to client. client_name:site-3 task_id:cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6\n", + "2025-01-29 09:52:54,013 - GetTaskCommand - INFO - return task to client. client_name: site-3 task_name: config task_id: cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6 sharable_header_task_id: cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6\n", + "2025-01-29 09:52:54,015 - Communicator - INFO - Received from simulator_server server. getTask: config size: 724B (724 Bytes) time: 0.008097 seconds\n", + "2025-01-29 09:52:54,016 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \n", + "2025-01-29 09:52:54,016 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: got task assignment: name=config, id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6\n", + "2025-01-29 09:52:54,016 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6]: invoking task executor ConsensusExecutor\n", + "2025-01-29 09:52:54,017 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6]: finished processing task\n", + "2025-01-29 09:52:54,017 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6]: try #1: sending task result to server\n", + "2025-01-29 09:52:54,017 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6]: checking task ...\n", + "2025-01-29 09:52:54,017 - Cell - INFO - broadcast: channel='aux_communication', topic='__task_check__', targets=['server.simulate_job'], timeout=5.0\n", + "2025-01-29 09:52:54,021 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6]: start to send task result to server\n", + "2025-01-29 09:52:54,021 - FederatedClient - INFO - Starting to push execute result.\n", + "2025-01-29 09:52:54,022 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job]: got result from client site-3 for task: name=config, id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6\n", + "2025-01-29 09:52:54,023 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6]: finished processing client result by controller\n", + "2025-01-29 09:52:54,023 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-3 task_id:cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6\n", + "2025-01-29 09:52:54,024 - Communicator - INFO - SubmitUpdate size: 606B (606 Bytes). time: 0.002916 seconds\n", + "2025-01-29 09:52:54,024 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6]: task result sent to server\n", + "2025-01-29 09:52:54,024 - ClientTaskWorker - INFO - Finished one task run for client: site-3 interval: 2 task_processed: True\n", + "2025-01-29 09:52:54,182 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: task config exit with status TaskCompletionStatus.OK\n", + "2025-01-29 09:52:54,375 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: scheduled task config\n", + "2025-01-29 09:52:56,016 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=config, task_id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768]: assigned task to client site-4: name=config, id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768\n", + "2025-01-29 09:52:56,016 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=config, task_id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768]: sent task assignment to client. client_name:site-4 task_id:c4a9e9bb-4477-42d9-9cbc-6e83679ca768\n", + "2025-01-29 09:52:56,016 - GetTaskCommand - INFO - return task to client. client_name: site-4 task_name: config task_id: c4a9e9bb-4477-42d9-9cbc-6e83679ca768 sharable_header_task_id: c4a9e9bb-4477-42d9-9cbc-6e83679ca768\n", + "2025-01-29 09:52:56,017 - Communicator - INFO - Received from simulator_server server. getTask: config size: 724B (724 Bytes) time: 0.001911 seconds\n", + "2025-01-29 09:52:56,017 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \n", + "2025-01-29 09:52:56,017 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: got task assignment: name=config, id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768\n", + "2025-01-29 09:52:56,017 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768]: invoking task executor ConsensusExecutor\n", + "2025-01-29 09:52:56,018 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768]: finished processing task\n", + "2025-01-29 09:52:56,018 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768]: try #1: sending task result to server\n", + "2025-01-29 09:52:56,018 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768]: checking task ...\n", + "2025-01-29 09:52:56,018 - Cell - INFO - broadcast: channel='aux_communication', topic='__task_check__', targets=['server.simulate_job'], timeout=5.0\n", + "2025-01-29 09:52:56,019 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768]: start to send task result to server\n", + "2025-01-29 09:52:56,019 - FederatedClient - INFO - Starting to push execute result.\n", + "2025-01-29 09:52:56,020 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job]: got result from client site-4 for task: name=config, id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768\n", + "2025-01-29 09:52:56,020 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768]: finished processing client result by controller\n", + "2025-01-29 09:52:56,020 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-4 task_id:c4a9e9bb-4477-42d9-9cbc-6e83679ca768\n", + "2025-01-29 09:52:56,020 - Communicator - INFO - SubmitUpdate size: 606B (606 Bytes). time: 0.001337 seconds\n", + "2025-01-29 09:52:56,021 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768]: task result sent to server\n", + "2025-01-29 09:52:56,021 - ClientTaskWorker - INFO - Finished one task run for client: site-4 interval: 2 task_processed: True\n", + "2025-01-29 09:52:56,023 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: task config exit with status TaskCompletionStatus.OK\n", + "2025-01-29 09:52:56,217 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: scheduled task config\n", + "2025-01-29 09:52:56,522 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=config, task_id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652]: assigned task to client site-5: name=config, id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652\n", + "2025-01-29 09:52:56,522 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=config, task_id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652]: sent task assignment to client. client_name:site-5 task_id:7f3c2f75-5a3d-4dde-b7da-bb787d2bc652\n", + "2025-01-29 09:52:56,522 - GetTaskCommand - INFO - return task to client. client_name: site-5 task_name: config task_id: 7f3c2f75-5a3d-4dde-b7da-bb787d2bc652 sharable_header_task_id: 7f3c2f75-5a3d-4dde-b7da-bb787d2bc652\n", + "2025-01-29 09:52:56,523 - Communicator - INFO - Received from simulator_server server. getTask: config size: 697B (697 Bytes) time: 0.002758 seconds\n", + "2025-01-29 09:52:56,523 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \n", + "2025-01-29 09:52:56,523 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: got task assignment: name=config, id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652\n", + "2025-01-29 09:52:56,524 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652]: invoking task executor ConsensusExecutor\n", + "2025-01-29 09:52:56,524 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652]: finished processing task\n", + "2025-01-29 09:52:56,524 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652]: try #1: sending task result to server\n", + "2025-01-29 09:52:56,524 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652]: checking task ...\n", + "2025-01-29 09:52:56,524 - Cell - INFO - broadcast: channel='aux_communication', topic='__task_check__', targets=['server.simulate_job'], timeout=5.0\n", + "2025-01-29 09:52:56,526 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652]: start to send task result to server\n", + "2025-01-29 09:52:56,526 - FederatedClient - INFO - Starting to push execute result.\n", + "2025-01-29 09:52:56,527 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job]: got result from client site-5 for task: name=config, id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652\n", + "2025-01-29 09:52:56,527 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652]: finished processing client result by controller\n", + "2025-01-29 09:52:56,527 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-5 task_id:7f3c2f75-5a3d-4dde-b7da-bb787d2bc652\n", + "2025-01-29 09:52:56,528 - Communicator - INFO - SubmitUpdate size: 606B (606 Bytes). time: 0.001539 seconds\n", + "2025-01-29 09:52:56,528 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652]: task result sent to server\n", + "2025-01-29 09:52:56,528 - ClientTaskWorker - INFO - Finished one task run for client: site-5 interval: 2 task_processed: True\n", + "2025-01-29 09:52:56,637 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: task config exit with status TaskCompletionStatus.OK\n", + "2025-01-29 09:52:56,832 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: scheduled task run_algorithm\n", + "2025-01-29 09:52:57,043 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=run_algorithm, task_id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb]: assigned task to client site-3: name=run_algorithm, id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb\n", + "2025-01-29 09:52:57,044 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=run_algorithm, task_id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb]: sent task assignment to client. client_name:site-3 task_id:6b6da7a8-398f-41bc-859c-7fc227cb0ddb\n", + "2025-01-29 09:52:57,044 - GetTaskCommand - INFO - return task to client. client_name: site-3 task_name: run_algorithm task_id: 6b6da7a8-398f-41bc-859c-7fc227cb0ddb sharable_header_task_id: 6b6da7a8-398f-41bc-859c-7fc227cb0ddb\n", + "2025-01-29 09:52:57,045 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 685B (685 Bytes) time: 0.004508 seconds\n", + "2025-01-29 09:52:57,046 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \n", + "2025-01-29 09:52:57,046 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: got task assignment: name=run_algorithm, id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb\n", + "2025-01-29 09:52:57,046 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb]: invoking task executor ConsensusExecutor\n", + "2025-01-29 09:52:57,046 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,024 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=run_algorithm, task_id=effc72b6-cc30-4c3d-af4c-37906a2c853f]: assigned task to client site-1: name=run_algorithm, id=effc72b6-cc30-4c3d-af4c-37906a2c853f\n", + "2025-01-29 09:52:58,024 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=run_algorithm, task_id=effc72b6-cc30-4c3d-af4c-37906a2c853f]: sent task assignment to client. client_name:site-1 task_id:effc72b6-cc30-4c3d-af4c-37906a2c853f\n", + "2025-01-29 09:52:58,024 - GetTaskCommand - INFO - return task to client. client_name: site-1 task_name: run_algorithm task_id: effc72b6-cc30-4c3d-af4c-37906a2c853f sharable_header_task_id: effc72b6-cc30-4c3d-af4c-37906a2c853f\n", + "2025-01-29 09:52:58,026 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 685B (685 Bytes) time: 0.004612 seconds\n", + "2025-01-29 09:52:58,026 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \n", + "2025-01-29 09:52:58,026 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: got task assignment: name=run_algorithm, id=effc72b6-cc30-4c3d-af4c-37906a2c853f\n", + "2025-01-29 09:52:58,026 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=effc72b6-cc30-4c3d-af4c-37906a2c853f]: invoking task executor ConsensusExecutor\n", + "2025-01-29 09:52:58,027 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,028 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=run_algorithm, task_id=29e31196-da1c-494c-8185-ae62822065f0]: assigned task to client site-4: name=run_algorithm, id=29e31196-da1c-494c-8185-ae62822065f0\n", + "2025-01-29 09:52:58,028 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=run_algorithm, task_id=29e31196-da1c-494c-8185-ae62822065f0]: sent task assignment to client. client_name:site-4 task_id:29e31196-da1c-494c-8185-ae62822065f0\n", + "2025-01-29 09:52:58,028 - GetTaskCommand - INFO - return task to client. client_name: site-4 task_name: run_algorithm task_id: 29e31196-da1c-494c-8185-ae62822065f0 sharable_header_task_id: 29e31196-da1c-494c-8185-ae62822065f0\n", + "2025-01-29 09:52:58,029 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 685B (685 Bytes) time: 0.003091 seconds\n", + "2025-01-29 09:52:58,029 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \n", + "2025-01-29 09:52:58,029 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: got task assignment: name=run_algorithm, id=29e31196-da1c-494c-8185-ae62822065f0\n", + "2025-01-29 09:52:58,030 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29e31196-da1c-494c-8185-ae62822065f0]: invoking task executor ConsensusExecutor\n", + "2025-01-29 09:52:58,030 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,030 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,531 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=run_algorithm, task_id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd]: assigned task to client site-5: name=run_algorithm, id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd\n", + "2025-01-29 09:52:58,532 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=run_algorithm, task_id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd]: sent task assignment to client. client_name:site-5 task_id:4c21ac3e-5360-4056-b30b-0ec27ea0aacd\n", + "2025-01-29 09:52:58,532 - GetTaskCommand - INFO - return task to client. client_name: site-5 task_name: run_algorithm task_id: 4c21ac3e-5360-4056-b30b-0ec27ea0aacd sharable_header_task_id: 4c21ac3e-5360-4056-b30b-0ec27ea0aacd\n", + "2025-01-29 09:52:58,533 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=run_algorithm, task_id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc]: assigned task to client site-2: name=run_algorithm, id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc\n", + "2025-01-29 09:52:58,533 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=run_algorithm, task_id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc]: sent task assignment to client. client_name:site-2 task_id:7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc\n", + "2025-01-29 09:52:58,533 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 685B (685 Bytes) time: 0.002873 seconds\n", + "2025-01-29 09:52:58,533 - GetTaskCommand - INFO - return task to client. client_name: site-2 task_name: run_algorithm task_id: 7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc sharable_header_task_id: 7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc\n", + "2025-01-29 09:52:58,533 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \n", + "2025-01-29 09:52:58,533 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: got task assignment: name=run_algorithm, id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd\n", + "2025-01-29 09:52:58,533 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd]: invoking task executor ConsensusExecutor\n", + "2025-01-29 09:52:58,534 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,534 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 685B (685 Bytes) time: 0.003075 seconds\n", + "2025-01-29 09:52:58,534 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \n", + "2025-01-29 09:52:58,534 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: got task assignment: name=run_algorithm, id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc\n", + "2025-01-29 09:52:58,534 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc]: invoking task executor ConsensusExecutor\n", + "2025-01-29 09:52:58,534 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,536 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,537 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,537 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,538 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,538 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,539 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,541 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,541 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,541 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,542 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,543 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,544 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,544 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,544 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,545 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,546 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,547 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,547 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,547 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,548 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,549 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,549 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,549 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,550 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,551 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,552 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,552 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,552 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,552 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,553 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,554 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,554 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,554 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,554 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,556 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,556 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,557 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,557 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,557 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,558 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,558 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,559 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,559 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,559 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,560 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,560 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,561 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,561 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,561 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,562 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,562 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,563 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,563 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,563 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,564 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,565 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,565 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,565 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,566 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,566 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,567 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,567 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,567 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,568 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,568 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,569 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,569 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,570 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,570 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,571 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,571 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,571 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,572 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,572 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,573 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,573 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,573 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,574 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,574 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,575 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,576 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,576 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,576 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,576 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,577 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,578 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,578 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,578 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,578 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,579 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,580 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,580 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,580 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,580 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,581 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,581 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,582 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,582 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,582 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,583 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,584 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,584 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,584 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,584 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,585 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,586 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,586 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,586 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,586 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,587 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,588 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,588 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,588 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,589 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,589 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,589 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,590 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,590 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,591 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,591 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,591 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,592 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,592 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,593 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,593 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,594 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,594 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,594 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,594 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,595 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,596 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,596 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,596 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,597 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,597 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,598 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,598 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,599 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,599 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,599 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,600 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,601 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,601 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,601 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,601 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,602 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,603 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,603 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,603 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,604 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,604 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,605 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,605 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,605 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,605 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,607 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,607 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,608 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,608 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,608 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,609 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,609 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,609 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,609 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,610 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,611 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,611 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,611 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,611 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,612 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,613 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,613 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,613 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,613 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,614 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,615 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,615 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,615 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,615 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,616 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,617 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,617 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,617 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,617 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,617 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,618 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,619 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,619 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,619 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,619 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,620 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,621 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,621 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,621 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,621 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,622 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,622 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,623 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,623 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,623 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,624 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,624 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,624 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,625 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,625 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,626 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,626 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,626 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,627 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,627 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,628 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,629 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,629 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,629 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,629 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,630 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,630 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,630 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,631 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,632 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,632 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,633 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,633 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,633 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,634 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,634 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,635 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,635 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,635 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,635 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,637 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,637 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,637 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,637 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,637 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,638 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,639 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,639 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,639 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,640 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,640 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,640 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,641 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,641 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", + "2025-01-29 09:52:58,642 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=effc72b6-cc30-4c3d-af4c-37906a2c853f]: finished processing task\n", + "2025-01-29 09:52:58,642 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=effc72b6-cc30-4c3d-af4c-37906a2c853f]: try #1: sending task result to server\n", + "2025-01-29 09:52:58,642 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=effc72b6-cc30-4c3d-af4c-37906a2c853f]: checking task ...\n", + "2025-01-29 09:52:58,642 - Cell - INFO - broadcast: channel='aux_communication', topic='__task_check__', targets=['server.simulate_job'], timeout=5.0\n", + "2025-01-29 09:52:58,643 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb]: finished processing task\n", + "2025-01-29 09:52:58,643 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb]: try #1: sending task result to server\n", + "2025-01-29 09:52:58,643 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb]: checking task ...\n", + "2025-01-29 09:52:58,643 - Cell - INFO - broadcast: channel='aux_communication', topic='__task_check__', targets=['server.simulate_job'], timeout=5.0\n", + "2025-01-29 09:52:58,643 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd]: finished processing task\n", + "2025-01-29 09:52:58,643 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc]: finished processing task\n", + "2025-01-29 09:52:58,643 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd]: try #1: sending task result to server\n", + "2025-01-29 09:52:58,643 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd]: checking task ...\n", + "2025-01-29 09:52:58,643 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc]: try #1: sending task result to server\n", + "2025-01-29 09:52:58,643 - Cell - INFO - broadcast: channel='aux_communication', topic='__task_check__', targets=['server.simulate_job'], timeout=5.0\n", + "2025-01-29 09:52:58,643 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc]: checking task ...\n", + "2025-01-29 09:52:58,643 - Cell - INFO - broadcast: channel='aux_communication', topic='__task_check__', targets=['server.simulate_job'], timeout=5.0\n", + "2025-01-29 09:52:58,643 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29e31196-da1c-494c-8185-ae62822065f0]: finished processing task\n", + "2025-01-29 09:52:58,643 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=effc72b6-cc30-4c3d-af4c-37906a2c853f]: start to send task result to server\n", + "2025-01-29 09:52:58,643 - FederatedClient - INFO - Starting to push execute result.\n", + "2025-01-29 09:52:58,644 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29e31196-da1c-494c-8185-ae62822065f0]: try #1: sending task result to server\n", + "2025-01-29 09:52:58,644 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29e31196-da1c-494c-8185-ae62822065f0]: checking task ...\n", + "2025-01-29 09:52:58,644 - Cell - INFO - broadcast: channel='aux_communication', topic='__task_check__', targets=['server.simulate_job'], timeout=5.0\n", + "2025-01-29 09:52:58,644 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb]: start to send task result to server\n", + "2025-01-29 09:52:58,644 - FederatedClient - INFO - Starting to push execute result.\n", + "2025-01-29 09:52:58,645 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd]: start to send task result to server\n", + "2025-01-29 09:52:58,645 - FederatedClient - INFO - Starting to push execute result.\n", + "2025-01-29 09:52:58,645 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job]: got result from client site-1 for task: name=run_algorithm, id=effc72b6-cc30-4c3d-af4c-37906a2c853f\n", + "2025-01-29 09:52:58,645 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=effc72b6-cc30-4c3d-af4c-37906a2c853f]: finished processing client result by controller\n", + "2025-01-29 09:52:58,645 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-1 task_id:effc72b6-cc30-4c3d-af4c-37906a2c853f\n", + "2025-01-29 09:52:58,645 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc]: start to send task result to server\n", + "2025-01-29 09:52:58,645 - FederatedClient - INFO - Starting to push execute result.\n", + "2025-01-29 09:52:58,646 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job]: got result from client site-3 for task: name=run_algorithm, id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb\n", + "2025-01-29 09:52:58,646 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb]: finished processing client result by controller\n", + "2025-01-29 09:52:58,646 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-3 task_id:6b6da7a8-398f-41bc-859c-7fc227cb0ddb\n", + "2025-01-29 09:52:58,646 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29e31196-da1c-494c-8185-ae62822065f0]: start to send task result to server\n", + "2025-01-29 09:52:58,646 - FederatedClient - INFO - Starting to push execute result.\n", + "2025-01-29 09:52:58,647 - Communicator - INFO - SubmitUpdate size: 613B (613 Bytes). time: 0.003040 seconds\n", + "2025-01-29 09:52:58,647 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=effc72b6-cc30-4c3d-af4c-37906a2c853f]: task result sent to server\n", + "2025-01-29 09:52:58,647 - ClientTaskWorker - INFO - Finished one task run for client: site-1 interval: 2 task_processed: True\n", + "2025-01-29 09:52:58,647 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job]: got result from client site-5 for task: name=run_algorithm, id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd\n", + "2025-01-29 09:52:58,647 - Communicator - INFO - SubmitUpdate size: 613B (613 Bytes). time: 0.002851 seconds\n", + "2025-01-29 09:52:58,647 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb]: task result sent to server\n", + "2025-01-29 09:52:58,647 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job]: got result from client site-2 for task: name=run_algorithm, id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc\n", + "2025-01-29 09:52:58,647 - ClientTaskWorker - INFO - Finished one task run for client: site-3 interval: 2 task_processed: True\n", + "2025-01-29 09:52:58,647 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd]: finished processing client result by controller\n", + "2025-01-29 09:52:58,647 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job]: got result from client site-4 for task: name=run_algorithm, id=29e31196-da1c-494c-8185-ae62822065f0\n", + "2025-01-29 09:52:58,647 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-5 task_id:4c21ac3e-5360-4056-b30b-0ec27ea0aacd\n", + "2025-01-29 09:52:58,647 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc]: finished processing client result by controller\n", + "2025-01-29 09:52:58,647 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-2 task_id:7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc\n", + "2025-01-29 09:52:58,648 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=29e31196-da1c-494c-8185-ae62822065f0]: finished processing client result by controller\n", + "2025-01-29 09:52:58,648 - Communicator - INFO - SubmitUpdate size: 613B (613 Bytes). time: 0.003004 seconds\n", + "2025-01-29 09:52:58,648 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd]: task result sent to server\n", + "2025-01-29 09:52:58,648 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-4 task_id:29e31196-da1c-494c-8185-ae62822065f0\n", + "2025-01-29 09:52:58,648 - ClientTaskWorker - INFO - Finished one task run for client: site-5 interval: 2 task_processed: True\n", + "2025-01-29 09:52:58,648 - Communicator - INFO - SubmitUpdate size: 613B (613 Bytes). time: 0.002399 seconds\n", + "2025-01-29 09:52:58,648 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc]: task result sent to server\n", + "2025-01-29 09:52:58,648 - ClientTaskWorker - INFO - Finished one task run for client: site-2 interval: 2 task_processed: True\n", + "2025-01-29 09:52:58,648 - Communicator - INFO - SubmitUpdate size: 613B (613 Bytes). time: 0.001776 seconds\n", + "2025-01-29 09:52:58,648 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29e31196-da1c-494c-8185-ae62822065f0]: task result sent to server\n", + "2025-01-29 09:52:58,648 - ClientTaskWorker - INFO - Finished one task run for client: site-4 interval: 2 task_processed: True\n", + "2025-01-29 09:52:58,673 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: task run_algorithm exit with status TaskCompletionStatus.OK\n", + "2025-01-29 09:52:58,870 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: Workflow: controller finalizing ...\n", + "2025-01-29 09:52:58,870 - AlgorithmController - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: BaseController stopped\n", + "2025-01-29 09:52:58,871 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: ABOUT_TO_END_RUN fired\n", + "2025-01-29 09:52:58,873 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: received request from Server to end current RUN\n", + "2025-01-29 09:52:58,874 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: received request from Server to end current RUN\n", + "2025-01-29 09:52:58,874 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: received request from Server to end current RUN\n", + "2025-01-29 09:52:58,874 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: Firing CHECK_END_RUN_READINESS ...\n", + "2025-01-29 09:52:58,875 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: END_RUN fired\n", + "2025-01-29 09:52:58,875 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: received request from Server to end current RUN\n", + "2025-01-29 09:52:58,875 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: received request from Server to end current RUN\n", + "2025-01-29 09:52:58,875 - ReliableMessage - INFO - ReliableMessage is shutdown\n", + "2025-01-29 09:52:58,875 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: Server runner finished.\n", + "2025-01-29 09:52:59,311 - ReliableMessage - INFO - shutdown reliable message monitor\n", + "2025-01-29 09:53:00,650 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job]: server runner is finalizing - asked client to end the run\n", + "2025-01-29 09:53:00,651 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job]: server runner is finalizing - asked client to end the run\n", + "2025-01-29 09:53:00,651 - GetTaskCommand - INFO - return task to client. client_name: site-4 task_name: __end_run__ task_id: sharable_header_task_id: \n", + "2025-01-29 09:53:00,651 - GetTaskCommand - INFO - return task to client. client_name: site-5 task_name: __end_run__ task_id: sharable_header_task_id: \n", + "2025-01-29 09:53:00,652 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \n", + "2025-01-29 09:53:00,652 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: server asked to end the run\n", + "2025-01-29 09:53:00,652 - ClientRunner - INFO - [identity=site-4, run=simulate_job]: started end-run events sequence\n", + "2025-01-29 09:53:00,652 - ClientRunner - INFO - [identity=site-4, run=simulate_job]: ABOUT_TO_END_RUN fired\n", + "2025-01-29 09:53:00,652 - ClientRunner - INFO - [identity=site-4, run=simulate_job]: Firing CHECK_END_RUN_READINESS ...\n", + "2025-01-29 09:53:00,652 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \n", + "2025-01-29 09:53:00,652 - ClientRunner - INFO - [identity=site-4, run=simulate_job]: END_RUN fired\n", + "2025-01-29 09:53:00,652 - ClientTaskWorker - INFO - End the Simulator run.\n", + "2025-01-29 09:53:00,652 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: server asked to end the run\n", + "2025-01-29 09:53:00,652 - ClientRunner - INFO - [identity=site-5, run=simulate_job]: started end-run events sequence\n", + "2025-01-29 09:53:00,652 - ClientRunner - INFO - [identity=site-5, run=simulate_job]: ABOUT_TO_END_RUN fired\n", + "2025-01-29 09:53:00,652 - ClientRunner - INFO - [identity=site-5, run=simulate_job]: Firing CHECK_END_RUN_READINESS ...\n", + "2025-01-29 09:53:00,652 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job]: server runner is finalizing - asked client to end the run\n", + "2025-01-29 09:53:00,652 - ClientRunner - INFO - [identity=site-5, run=simulate_job]: END_RUN fired\n", + "2025-01-29 09:53:00,652 - ClientTaskWorker - INFO - End the Simulator run.\n", + "2025-01-29 09:53:00,652 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job]: server runner is finalizing - asked client to end the run\n", + "2025-01-29 09:53:00,653 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-4 \n", + "2025-01-29 09:53:00,653 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job]: server runner is finalizing - asked client to end the run\n", + "2025-01-29 09:53:00,653 - GetTaskCommand - INFO - return task to client. client_name: site-1 task_name: __end_run__ task_id: sharable_header_task_id: \n", + "2025-01-29 09:53:00,653 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-5 \n", + "2025-01-29 09:53:00,653 - GetTaskCommand - INFO - return task to client. client_name: site-3 task_name: __end_run__ task_id: sharable_header_task_id: \n", + "2025-01-29 09:53:00,653 - GetTaskCommand - INFO - return task to client. client_name: site-2 task_name: __end_run__ task_id: sharable_header_task_id: \n", + "2025-01-29 09:53:00,653 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 40816\n", + "2025-01-29 09:53:00,653 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00008 Not Connected] is closed PID: 40803\n", + "2025-01-29 09:53:00,654 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \n", + "2025-01-29 09:53:00,654 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: server asked to end the run\n", + "2025-01-29 09:53:00,654 - ClientRunner - INFO - [identity=site-1, run=simulate_job]: started end-run events sequence\n", + "2025-01-29 09:53:00,654 - ClientRunner - INFO - [identity=site-1, run=simulate_job]: ABOUT_TO_END_RUN fired\n", + "2025-01-29 09:53:00,654 - ClientRunner - INFO - [identity=site-1, run=simulate_job]: Firing CHECK_END_RUN_READINESS ...\n", + "2025-01-29 09:53:00,654 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 40818\n", + "2025-01-29 09:53:00,654 - ClientRunner - INFO - [identity=site-1, run=simulate_job]: END_RUN fired\n", + "2025-01-29 09:53:00,654 - ClientTaskWorker - INFO - End the Simulator run.\n", + "2025-01-29 09:53:00,654 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00010 Not Connected] is closed PID: 40803\n", + "2025-01-29 09:53:00,654 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \n", + "2025-01-29 09:53:00,654 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: server asked to end the run\n", + "2025-01-29 09:53:00,654 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-1 \n", + "2025-01-29 09:53:00,654 - ClientRunner - INFO - [identity=site-3, run=simulate_job]: started end-run events sequence\n", + "2025-01-29 09:53:00,654 - ClientRunner - INFO - [identity=site-3, run=simulate_job]: ABOUT_TO_END_RUN fired\n", + "2025-01-29 09:53:00,654 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \n", + "2025-01-29 09:53:00,654 - ClientRunner - INFO - [identity=site-3, run=simulate_job]: Firing CHECK_END_RUN_READINESS ...\n", + "2025-01-29 09:53:00,654 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: server asked to end the run\n", + "2025-01-29 09:53:00,655 - ClientRunner - INFO - [identity=site-3, run=simulate_job]: END_RUN fired\n", + "2025-01-29 09:53:00,655 - ClientRunner - INFO - [identity=site-2, run=simulate_job]: started end-run events sequence\n", + "2025-01-29 09:53:00,655 - ClientTaskWorker - INFO - End the Simulator run.\n", + "2025-01-29 09:53:00,655 - ClientRunner - INFO - [identity=site-2, run=simulate_job]: ABOUT_TO_END_RUN fired\n", + "2025-01-29 09:53:00,655 - ClientRunner - INFO - [identity=site-2, run=simulate_job]: Firing CHECK_END_RUN_READINESS ...\n", + "2025-01-29 09:53:00,655 - ClientRunner - INFO - [identity=site-2, run=simulate_job]: END_RUN fired\n", + "2025-01-29 09:53:00,655 - ClientTaskWorker - INFO - End the Simulator run.\n", + "2025-01-29 09:53:00,655 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-3 \n", + "2025-01-29 09:53:00,655 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00011 Not Connected] is closed PID: 40803\n", + "2025-01-29 09:53:00,655 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 40814\n", + "2025-01-29 09:53:00,655 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-2 \n", + "2025-01-29 09:53:00,655 - FederatedClient - INFO - Shutting down client run: site-1\n", + "2025-01-29 09:53:00,655 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 40817\n", + "2025-01-29 09:53:00,655 - FederatedClient - INFO - Shutting down client run: site-2\n", + "2025-01-29 09:53:00,656 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00009 Not Connected] is closed PID: 40803\n", + "2025-01-29 09:53:00,656 - FederatedClient - INFO - Shutting down client run: site-3\n", + "2025-01-29 09:53:00,656 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 40815\n", + "2025-01-29 09:53:00,656 - FederatedClient - INFO - Shutting down client run: site-4\n", + "2025-01-29 09:53:00,656 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00012 Not Connected] is closed PID: 40803\n", + "2025-01-29 09:53:00,656 - FederatedClient - INFO - Shutting down client run: site-5\n", + "2025-01-29 09:53:00,656 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: asked to abort - triggered abort_signal to stop the RUN\n", + "2025-01-29 09:53:01,307 - SimulatorServer - INFO - Server app stopped.\n", + "\n", + "\n", + "2025-01-29 09:53:01,738 - nvflare.fuel.hci.server.hci - INFO - Admin Server localhost on Port 52348 shutdown!\n", + "2025-01-29 09:53:01,738 - SimulatorServer - INFO - shutting down server\n", + "2025-01-29 09:53:01,738 - SimulatorServer - INFO - canceling sync locks\n", + "2025-01-29 09:53:01,738 - SimulatorServer - INFO - server off\n", + "2025-01-29 09:53:05,222 - MPM - INFO - MPM: Good Bye!\n" + ] + } + ], + "source": [ + "# run\n", + "job.export_job(\"./tmp/job_configs\")\n", + "job.simulator_run(\"./tmp/runs/consensus\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, since in this toy example we have access to both the intial values and the adjacency matrix, we can compute the consensus value at which the clients will converge." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Consensus value: 0.5351105719804765\n",
+       "
\n" + ], + "text/plain": [ + "Consensus value: \u001b[1;36m0.5351105719804765\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import pickle\n", + "import torch\n", + "\n", + "from nvdo.utils.topology import get_matrix_steady_state\n", + "\n", + "history = {\n", + " f\"site-{i+1}\": pickle.load(open(f\"tmp/runs/consensus/site-{i+1}/results.pkl\", \"rb\")) for i in range(num_clients)\n", + "}\n", + "x0=torch.tensor([h[0] for name, h in history.items()]).t()\n", + "consensus_value = x0 @ get_matrix_steady_state(adjacency_matrix)\n", + "print(f\"Consensus value: {consensus_value}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By inspecting the history/results, we can easily see that all the clients successfully converged to the expected consensus value. " + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGzCAYAAAD9pBdvAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAZBFJREFUeJzt3Ql8E2X6B/Bf7jZt6U0LiBzKDYKAIiqCgqC4qCCi6F8Qb8VdFfFAEARdFFw8VlC80D10RVFcb2E5FZFTFERBbkSOFujd5pz/53lzkLRJaaFNWvL7fhwzM3mTTKYh8+R5L52maRqIiIiIokQfrRcmIiIiEgxGiIiIKKoYjBAREVFUMRghIiKiqGIwQkRERFHFYISIiIiiisEIERERRRWDESIiIooqBiNEREQUVQxGiCJMp9PhiSeeqNHnfPvtt9Xz7tq1C3XZs88+i5YtW8JgMKBLly5hy918881o3rx5RI+tLh1Hnz591EIUKxiMUEzyXbzDLd9//z3qoqlTp+Ljjz9GfbRgwQI8/PDDuOCCC/DWW2+p90JEJIw8DRTLpkyZghYtWlTYf+aZZ6Iukgv40KFDcfXVVwftv+mmm3D99dfDYrGgrlq8eDH0ej3efPNNmM3maB8OEdUhDEYopl1++eXo3r076jup9pClLjt06BDi4+MZiBBRBaymIQrD4XAgLS0No0aNqnBfQUEB4uLiMHbs2KCL7a233oqsrCx1X+fOnfGPf/zjhNslSLsSqTLykfXi4mL1nL7qJHlsZW1GXn75ZXTo0EFlTBo3bozRo0cjLy8vqIy0TejYsSM2b96Miy++GFarFU2aNMH06dOrdJ6cTieefPJJnHHGGep15L089thjsNlsQccuVTNy/L5jl2OuDnnsgw8+iKZNm6rXadOmDf72t78h1MTj//73v3Huueeq95KamoqLLrpIVRP5/Pe//8UVV1yhzok8lxy7vAeXy4Xq+tOf/qTawYTSs2fPoGBXzsEll1yChg0bqtdt3749XnnlleO+Rri/79KlS9V+uQ20atUqXHbZZUhOTlbnoHfv3lixYkVQmcLCQtx///3q7yXHIsd06aWXYv369dU8A0Qnj8EIxbT8/Hzk5uYGLYcPH1b3mUwmDB48WLXRsNvtQY+TfXKxlaoRUVpaqi7q//rXv3DjjTeqhppyIZBg4cUXX6yRY5XnlotGr1691Losd955Z9jyEsxI8CEX3BkzZuCaa67Bq6++iv79+6tAK9DRo0fVxUsCKCnbtm1bPPLII/jyyy+Pe1y33XYbJk6ciK5du+L5559XF76nn37af258xy7HLcfvO3YJEKpKAo4rr7xSPb8c53PPPaeCkYceeghjxowJKjt58mRVbSV/P6mGk20JYKSaKPDinpiYqB4rf59u3bqp9/Doo4+iuq677jrs3LkTa9asCdq/e/du1fYo8DxI4NGsWTMVrMl5luO65557MGvWLNQUeZ9ybiVgnjRpkqrakwBUgqDVq1f7y911113qeORzIUGrBNaSufrll19q7FiIqkwjikFvvfWW/JwOuVgsFn+5r7/+Wu379NNPgx4/cOBArWXLlv7tF154QZX797//7d9nt9u1nj17aomJiVpBQYF/v5SbNGmSf3vkyJFas2bNKhyjlCn/TzQhIUGVD/d+du7cqbYPHTqkmc1mrX///prL5fKXmzlzpio3Z84c/77evXurff/85z/9+2w2m5adna1dc801lZ7HDRs2qMfedtttQfvHjh2r9i9evDjofcrxV0X5c/Lxxx+r53vqqaeCyg0dOlTT6XTatm3b1PZvv/2m6fV6bfDgwUHvW7jdbv96SUlJhde88847NavVqpWVlYU9jlDy8/PVZ+bBBx8M2j99+nR1bLt37670dQcMGBD0WfL9TWQJ9/f1WbJkidovt7732KpVK/Wc5d9vixYttEsvvdS/Lzk5WRs9enSl740oUpgZoZgmv0gXLlwYtARmA+TXZEZGBubOnRuURZBy8ovY54svvkB2djaGDx/u3ye/zP/yl7+gqKgIy5Yti+C7Av73v/+pbI6k4aXRqM/tt9+OBg0a4PPPPw8qL1mC//u///NvS7sOqebYsWNHpa8j71uUz05IdYoo/zonSl5H2sTI+Sz/OhLf+f5mkrFyu90qyxH4vkVglZdkAAKrKyQjJpmbkpIS/Prrr9U6Njmf0vbo/fffD6oyks/Meeedh9NPPz3k6/qycpJJkvMs2ydrw4YN+O2333DDDTeoDJ8v2ydVXH379sXy5cvV+REpKSmqOuePP/446dclOllswEoxTS64lTVgNRqNKo397rvvqmoZqWb46KOPVDVHYDAiKflWrVpVuAC2a9fOf38k+V5PqjICSZAh7RvKH89pp50WdLEW0tbip59+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aYiITtiBAwfw5z//GS1btlRzwzRt2hSDBg1SE9gRCc5NU8nMvWzASkR08r/OL7jgAjWx3bPPPqsmunM4HGruGJmR99dff432IVIdwMxIFWbuZddeIqrLiouLwy5lZWVVLltaWnrcstV1zz33qKqC1atX45prrlGT4XXo0AFjxozB999/7y8nM/ReddVVSExMVDP9Dhs2DAcPHvTf/8QTT6BLly7417/+hebNmyM5ORnXX389CgsL/WXmzZungh2ZKC89PR39+vULOuY33nhDTdwXFxeHtm3b4uWXX65QpSET8l188cWwWq3o3Llz0MR9u3fvVhmd1NRUJCQkqPfxxRdf+Cf9k4Ar0Mcff6ye0+fHH39Uz52UlKTeo8wkvHbt2pDn7YYbbsB1110XtE+CuIyMDPzzn/9U2zIB4YUXXqheV97vn/70J2zfvj3s36Iqxyj++9//omvXruo8STZr8uTJcDqdqE0MRiqppkn1BiNHGYwQUR0mF/BwiwQAgRo2bBi27OWXXx5UVi765ctUx5EjR9QFUzIgcvEuz3dhdLvdKhCR8suWLcPChQuxY8eOChdjudDKxfOzzz5Ti5R95pln1H379+/H8OHDccstt+CXX37B0qVLMWTIEP90Hu+88w4mTpyIv/71r+r+qVOn4vHHH8c//vGPoNcYP348xo4dq9pZSOAkz+m7EMv7sNlsWL58OTZu3Ihp06ZV65zceOONOO2007BmzRqsW7cOjz76KEwmz6Ssocp++umnKCoq8u+TbFJJSQkGDx6stiXQkqBOAhqp8tLr9eo+OZ8n6ptvvsGIESNw3333YfPmzXj11VdVECPnrVZp9UB+fr58mtRtbXIVF2ub27RVi7OwSNt6oEBr9shn2llPfF2rr0tEdDylpaXa5s2b1W158v0Ybhk4cGBQWavVGrZs7969g8pmZGRUKFMdq1atUo/56KOPKi23YMECzWAwaHv27PHv+/nnn9VjV69erbYnTZqkjr2goMBf5qGHHtJ69Oih1tetW6fK79q1K+RrnHHGGdq7774btO/JJ5/UevbsqdZ37typHv/GG29UOIZffvlFbXfq1El74oknQj7/W2+9pSUnJwftmz9/ftA5S0pK0t5++22tKhwOhzr///znP/37hg8frl133XVhH5OTk6Neb+PGjUHv6YcffqjyMfbt21ebOnVqUJl//etfWqNGjU7os1nV6zfbjATQW63QJyTAXVwMZ84hpGY2VvvzSx1wuNwwGZhIIqK6J/DXc3kGgyFo+9ChQ2HLyi/rQFJ1cTKqOsmoZCqkUassPu3bt1eZE7nvnHPO8WdqpIrDp1GjRv73I1Uqffv2VdU0AwYMQP/+/TF06FBVpSIZBMmq3Hrrrbj99tv9j5eMh1T3BDrrrLOCnl/Ia0i1zl/+8hfcfffdWLBggaoCkqxTYPnjkSzGbbfdpqqa5PHXXnstzjjjjJBljUajqqqSjM5NN92k3oNUn7z33nv+Mr/99pvK9qxatQq5ubn+jIhUeXXs2BEnQqqSVqxYEZQJcblcqrpPsjJSfVUbeHUNU1Xjys1V44z4qtLyShzRPTAiojCkCiTcIvX+VS0rbS2OV7Y6WrVqpdoj1FQj1fJVGvLcvguwBF1SvfPll1+qQOall15CmzZtsHPnTn+w9vrrr6vqF9+yadOmoHYr5V/D15bC9xoSSEj1kQQHUk3TvXt39Tq+QK588CVtPAJJu5eff/4ZV1xxBRYvXqyOc/78+WHfr1TVSPWLBENSPSV/n8suu8x/v7RfkaoteV8SkMgi7PbQTQuqcoxyrqSNSOB5kvcqgU/5z1JNYjBSSSNWg16HlHjPB5ONWImIqictLU1lKWbNmhWy8WteXp66lUale/fuVYuPtFeQ++WCXVUSPEjPHbmY/vDDDzCbzepin5WVhcaNG6tA4swzzwxaWrRoUa33JNmbu+66SzV0ffDBB1UgIDIzM1Vj2sD3GWp8D2mH8sADD6jsirRpeeutt8K+1vnnn69eb+7cuSpDIpkUX7B0+PBhbNmyBRMmTFAZITmHR48erfTYq3KM0nBVnrf8eZKlfOasJrGaJlz33oBGrEdLHAxGiIhOgAQiEiCce+65mDJliqrWkOoRyWK88sorqhpGqiykekUyAS+88IK6X3rh9O7dW2UfqkKyApJFkOoZaaQr2zk5OeoiLSRAkWoWqZaR7II0RJWGn3IBl+qTqrj//vtVI18JKORxS5Ys8T9/jx49VBXGY489pl5HXl8afvpIT6WHHnpIVR1JAPT777+rhqzlGxiH6lUze/ZsbN26Vb2ej1Q/SQ+a1157TVUnSdWMNIitzPGOUUi1j/TKOf3009WxSgAiVTeSRXrqqadQW5gZKcdQbkj4rCRPWuqHvZVHnEREVJF0DV2/fr3q0iqZBGnLcOmll6rAQYIRX0ZD2kPIBfaiiy5SwYk8TjICVSVdZaWXy8CBA1WwIBmDGTNm+HsISRWLdO2VTIQEPhLoyIW4OpkRaTshPWokAJGARl7H1z1YskD//ve/VVdfef7//Oc/qlrGR6qRJJshPVXkcdIeRI5NgqTKSIAmWaImTZqooM5HggRpPyK9cuScSrZFxnGpzPGOUUgmS3oqSeZG2uqcd955eP7559GsWTPUJp20YkUdV1BQoKLZ/Px89YGrTbmvv46cGc8h+aqr0HjaM/hg7V48NO8nNebIN49cDKuZySQiijxpQCjtH+TiWZt190Q1+dms6vWbmZFyjBnB1TSDz26C09Osan6af3+/O8pHR0REdOphMHKcUViNBj3uvfhMtf7a8h0otbuienxERESnGgYjxwlGxOCuTdA0LR65RXa8s4rZESIioprEYKQcY6Z3nJGjR6F5+1/LYGej+3iyI7OXMTtCRERUkxiMlGOQuRKMnkaqzsOH/fuHdD0NTVIkO2LDu6v3RPEIiSiWncy8I0R19TPJriHl6PR6NQqr88ABVVVjys5W+81GPe695EyM+2gjZi/bjht7nI44U/Awy0REtUUG8JLunH/88YcavEq2y8+2ShRJ0hlXRnuV8VzksymfyRPFYCSEY8GIp0eNzzVdT8PMxduwL68U/1m9B6MuqN7IfUREJ0q+7KXrpMxOKwEJUV0hA6nJIGknM0Irg5EqNmL1ZUfuufgMjJ+/SWVHhp/L7AgRRY788pQvfRmhVAbgIoo2GcxNJvU72Swdg5FqBCPi2m5NMWvxNvyRX4a5a/Zi5PnNo3CERBSr5Etf5icpP2kcUX3GBqyVzNzrzK0YjEh25G7vuCOvLN0Om5O/ToiIiE4Gg5HKJssr12bEZ1j309AoOQ4HCsrw/ppjs0wSERFR9TEYqWY1jbAYDbi7zxlq/WVmR4iIiE4Kg5FqVtP4DOveFFkNLNifX4YP1v4ewaMjIiI6tTAYqSQz4srJVf2oQ5FeNHf3PsPfdsTu5EBEREREJ4LBSAgGb2ZEhoN35+eHLXf9uaejYZJFjTsybx2zI0RERCeCwUgIerMZhuTkStuN+LMj3rYjs5ZsY3aEiIjoBDAYOW6PmvDBiJCBzzK92ZEH5m5gY1YiIqJqYjBynKoaZ27o7r2B2ZGpgzvBZNDh8437MeqtNSgs88z2S0RERLUUjMyaNQvNmzdHXFwcevTogdWrV1daPi8vD6NHj0ajRo1gsVjQunVrfPHFF6jP3XsDXdo+C2/dfC4SzAZ8t/0wrn/te+QU2iJwlERERDEYjMydOxdjxozBpEmTsH79enTu3BkDBgzAoUOHQpaXGf0uvfRS7Nq1C/PmzcOWLVvw+uuvo0mTJqgXwcih4wcj4sJWGXjvjp5ITzDj5z8KMHT2d9hzuKSWj5KIiCgGg5HnnnsOt99+O0aNGoX27dtj9uzZasa+OXPmhCwv+48cOYKPP/4YF1xwgcqo9O7dWwUx4dhsNhQUFAQtkWbMyKxSNU2gTqclY97d5+O01HjsPlyCIa98h5//CN8bh4iIiKoZjEiWY926dejXr9+xJ9Dr1fbKlStDPuaTTz5Bz549VTVNVlYWOnbsiKlTp1Y64+TTTz+N5ORk/9K0aVPU5WqaQC0yEvDR3eejbXYScotsuP7V77Fy++FaOkoiIqIYC0Zyc3NVECFBRSDZPnDgQMjH7NixQ1XPyOOkncjjjz+OGTNm4Kmnngr7OuPGjUN+fr5/2bt3b70JRkTDBnF4/66eOLdFGgptToycsxpfbtxfC0dJRERU/9V6bxq3242GDRvitddeQ7du3XDddddh/PjxqnonHGnk2qBBg6Al0oyZVetNE06DOBP+ecu5GNAhC3aXG/e8ux7//n53DR8lERFRjAUjGRkZMBgMOHjwYNB+2c7Ozg75GOlBI71n5HE+7dq1U5kUqfapq3yZEXdhIdxlZSf0HNLt9+Ubu6mxSGRU+Qkfb8Kw2Sux+NeDYYeZJyIiijXVCkbMZrPKbixatCgo8yHb0i4kFGm0um3bNlXOZ+vWrSpIkeerq/SJidDFxZ1wVY2PQa/D1MEdMebS1mosktW7juCWt9fishe+wUfrf4fDxVFbiYgotlW7mka69UrX3H/84x/45ZdfcPfdd6O4uFj1rhEjRoxQbT585H7pTXPfffepIOTzzz9XDVilQWtdptPpjs3em5N70s/1l76t8M3Dl+COi1oi0WLEloOFGPP+j+jz7FLM+XYnSuzOGjpyIiKi+sVY3QdIm4+cnBxMnDhRVbV06dIFX331lb9R6549e1QPGx/pCfP111/jgQcewFlnnaXGF5HA5JFHHkFdJ1U1jt9/P6nMSKDs5Dg8NrAdRl98pmo/8taKXWoY+SmfbcbfF/+GkT2bY+T5zZGWUHczRkRERDVNp9WDxgsyzoh08ZWeNZFszPr7n/+CwoULkfX4BKTdeGONP3+Zw4UP1/+O15bvUOOSCItRj96tM3F5p2xc0jYLyfGmGn9dIiKiunT9rnZmJJacTPfeqjZwvbFHM1x/zun4atMBzF62HRv35WPB5oNqMep1OP/MDFzeMVsNOZ+RaKmV4yAiIoomBiM1MHPvyZJGrlec1QgDO2Vj8/4CfP3zQXy1aT+2HizC8q05ahk/fyO6N0/DZR2y0b9DFk5LtdbqMREREUUKg5FK+BuwnuBYIyfS0LVD42S1SO+b7TlFKmPy9c8H8NPv+Vi984hapI2JDDnfvVkqujVPU7ets5JUUENERFTfMBiJYjXN8ZyRmagau8ry+9ESLFAZkwNYu/sIfj9aqpaPN/yhyibFGdH19FRvgJKKLk1TYDXzz0tERHUfr1Z1OBgJJNUyt1zYQi2FZQ78sCcPa3cfxbrdR9R6YZkTy7bmqEVIkkTmyWmb3UDNk9MmOwntGjVAk5R46JlBISKiOoTBSCUM3moa1+Ej0Fwu6AJGkY2mpDgTLmqdqRbhdLnx64FCrN11RAUoa3cdxYGCMmzPKVbL5wHz4iSYDSowaeMNUiRgaZ6egMYpcTAaan12ACIiogrYtbcSEoD82uksGWYWrb5Z7s+U1HXyJz1UaFMByq/7C7BFbg8UYtuhIjVPTijSc6dpmhXN061oli4BihXNvIFKo+Q41fOHiIioOti1twZIJsSQngZXTq6qqjnRYMThcmDB7gVYd3AdjHoj4gxxMBvMiDPGwaz33sq2IQ4WgwVWkxUJpgTPrTHBv67X6avcEDarQZxaZMySY8fhxq7cYk+QcqBA9dbZfbhYjXFic7qxM7dYLUDFainpVizZk8bJ8WicIkucqvJpJOvJcUhPtLABLRERnRAGI8dhzMhUwYhj/37EtW9frcceLD6ID7Z+gHlb5+Fw2eGTPpZ4YzysRisSzYlINiejgaUBki3JSLGkBG3Lurr1rieZpaeNASaDHq2yktQyqHNj//O63Zqq1tnlDUwkYPGty1LqcCG3yKYW6dUTigQi6QlmNGxgQcMkCYQsyEyKQ8Mk2bagYYM4dX96opkNa4mIKAivCscR36kTbL/8gryP5iOpb98qVZFIBuQ/v/4Hi/Ysgktzqf0N4xtiYMuBKgNic9pgc4VeypxlKHGUoNhZjGJHsVr3PUeps1QtJxLYSEDiD1gCgpUG5gaexeK5bdk0CV3OkO1GalsyM/mlTjVs/f78MvyRV6qWwO2DBWVwuT1VQ7IABZUeS5xJj/QEiwpMZOj7wPVUqwnJ8WakWE1ItXpuZRRaVhMREZ262GbkOGw7dmDHFX+SKAMtP/0EllatQpaToOHznZ+rIOS3o7/593fL6oYb2t6Ai0+/GCZ99Yd2lz+PBCm+wESClCJ7EQrsBci35XsWe37QeoGtAHm2PFVGHncypGoo0ZSoghnfUn7bakiATouHw2GGzW5Cqc2E4lIjCkoMOFqkx+EiHXIL7MgttsPuPLFZiuNNBn9g0kCWOLk1em9l23hsf5wRibJYPLdJFglm9Kr6ioiIIodtRmqIpWVLJPXrp+aoOfzGm2g87ZkKZf677b+YtnoaCh2F/uqUK1pegevbXI82aW1O6vXlAiptSmRJj0+v9uMdbocKTnxBSvkgxrdPLeXW7W473Jrbv++EJQLxKfFoYkpAnCEeZn08TLo46BEHaGZoLgtcLjOcDhPsTiNsdgPK7EaU2vQoLtPD7TLDpplxsMyMAyVmQDNBc5sAWSAZk+MHGdKcRYIT6YkktwkWAxLk1myEVdYDb80GVZUkZSQIilfbBpWdkf1qn3e/yaBjkENEdJKYGamC0o0bsevaYYDRiDO//gqmJk38960/uB63fH2LqkppmtRUBSBXnXmVqgKpz+RjUeYqU0FJkaMIhfZCtQSu+7YlUJGsjaxLJkYyN3IriwQ0tUkHHfSwQA8TdJonUHG7ZTHC7TTC6TZ4AhfN6L8NXNc0Q8A+zy00AzTfPu/2sbKB60YYYEScUTIvRhWsSAbGc+tdN3rWZQJEi0kPi9G7rraPrZt9i8EQsC63uuB9Rr0KgOQ+k39hQEREdRMzIzXcbsTa8zyUrPweh996G9kTxqv9h0sP46FlD6lA5PIWl+OZXs9UucdLXScXN8nwyJKFrBN+HrvL7glQHEUqYClxlniqm6TaybseuM/XLkbazvjW5X7fuixSbSUZG6FBgwtlalEJEll8fwJz5D7gNk0Pm2ZAvgpkfEGLAbAboNkke6P379M07zoC1tW2rOs9j/euqwXefd51335N3qzaZ4BBp4dBZ4BeZ4BRL9sG6KXRss4Ag17uM8JoMMCotg1qTBnfuslbXu6XsrJtDFykrFo3wqj3rJu8t77yBgmKvK9jMsqtbMtr6qDX6VQDZxlsz+Bb997K0Db++4NuPfsDHyvZLd8+/3rAfimnK1eGQRpR/VCvgpHi4mIYQgw8Jvvi4uKCyoWj1+sRHx9f7bIZd9yBLSu+Q+ncuYgfOQK6lGSMWTwGB/IOoHmD5ni488NBgUhJSYnKLoQiX5BW67GJ7kpLS+F2h29LkZCQcEJly8rK4HK5Ki8rx+h2oaw4Hy5bCeByAC474LQDLhvgdqj7rRbJPLgAtxO2slI4HXa137M4ARUcaOr5rHEm6NS6G5rNBrPTiTTNjTR1PjxlfLfxZqNnRFjNDLtDB4cz3nO/XENMGmD0nUMN8RaTusjIeS1x2FFgt8GmuWDTnChzOVDmW9ec6pPt0Guway4U2W0odXrvd7vh0FyqjNzK491GHVx6typb6nDA5nCpdbnPobnhlFu41eIyaOp53RIGOTVoLt/xyft3Bv+djTroDJ6LoZST8mp/qM+EZDeMFcvieGXdGjTHsbJyFEG5KAOgN+qDy2oVDjV82XCqUVYFCCYDdOrPrkGSZSpudHtjR827uD1tlIxGvSeelI+uza3uk5IG78de5yuv08Fk9D6vvHdfWe/HR9blPk98qoPRZPDsgw6uMqfn76DpYZA9miewU+XkY2c0eY5B08HtcKv71DGr55RsnG9bB5N8hlWACDidLmhuuV9eRehVGfn3IPtMJqPK5cnzOB0uaOo+zzF5ynvXNB0sqqwcmwaH0+35Z+Mt4TkPxx5hNnrKCofT5f03Js/jKaH+85a3mEzHyjqc/uf1/DGPHYmIM5n96w6nE27v+fQfScBjLUaTP/iTYQSCv6cCn9V7vP6yLmgB4x8FlpTjMRmN6m8tnC4XXCG//zyP8pTVhywb9LxS1iABu5TVVfq8wWUBl9MFl/fHUCgqqNd5rlOe5w39HSzHYzQYVUAv5PWdrlD/MD08PyKM1SjrOQb5O8hxVKVsp2svQofzeoctazKZYDab/c8r16OqlD3lqmnCGThwID7//POgi6wEA6H07t0bS5cu9W9nZmYiN8xEeN27d8eaNWvUupympomJ2Bfmedu3b4+ff/7Zv92hQwds3rw5ZNlmzZph165d/u1zzjkHa9euDVk2IyMDOQHD0ffp0wfLli0LWdYaH4fi7/8BFB0EinNxxWP/whdrd4Ysq97Tk1mAs0x9e1/7QQnmbQ7/4S4al4QEs+cf5s0fl+IfPzrClj00NhGZCZ5/YKM/L8XLa8OX3XlfIpqneMo+tKAMf1sZvlpn090J6NDQ84/miaVlmLwsfNnVtyXgnCaess+usOHh/0kvn9CWjLSiT3PPP/JZq+2490s5J6F9NjweV7Q2qevknA0O3PHf8P8Ynx3aAJe0jYND02HhzzY8/nFe2LJ/uTQNl7RNUheGNTtKMfWLQ2HLjuqRgf5tktUX9eb9JXjyf575iUIZ3vE0DGp1mooeth8tweNLfwhb9prW7XFtm87qArq3sBAPLf0kbNlBZ3TD/3XoI5ERDpUU4M8LZ4ct27/Febjl7MHqeQtsxbjj8yfClr2weU/ccd4t0HR62Fx23PH+3WHLdmt2Hu7q86CKduRSf8fbQ8KW7dD0HNxz2VPesjqMmTMIdvXZr+jMRp1x/5XP+bcf/ccQFJWF7tJ+emYbPDzkZf/2xHduwBH59xdCdmozTBg2x7/91Pu34MDR3SHLpiVmYcqN7/q3p390D/bkbAlZNjEuGc+M/Mi//cInY7Bt/48hy5qNcXju1mPfla98+Rh+3rMK4cy8c5F//c2Fk/HDjuVhy8645TNYTJ4fb/9aMg2rti4IW/bpER8iKT5Frc/95kV8szn8Z23yDe8gPSlbrc9f+SoW/fR+2LLjr30TjdKaq/XP1/4DX677Z9iyDw2ehWYN26r1/22Yi49XvRa27F8GzUDrxl3U+rJNH+ODFS+FLXvXZX9Fx2bnqfXvt3yFfy99NmzZW/pNRNczPBf/9duXYc7/poQt+399HsJ5bS5T65t2f4/ZX3ky9KFce8Gf0bvj1Wp96x8b8PdPHwxb9uoed6Bfl+vUemnip3hoxgthy06aNAlPPOH59yvXu44dO4YtO3bsWDz77LOspqlpEsUbkpIk5RH5Fy88AMgXUe5W4Mj28OXky/Wj249t5x/nWJ3hL6QVpDYH4szycxiI3xFyYDS/ZhcCyfGA/EJJ2QCgkmM+81KgYZLn5/N6CciOBXQVtL4MOD3N82vlFym7PmxRW/pFKE1Pg+Zww2aWoDD0l7M4eqQDDhpToDndyM/ZA+BYb6jyDmxsgu17GqhfckcOSBD7e/hj+KElyvY2hVtvguvIAQDfhS2rHTwf7rju0HRGuI9sA/B22LJ2bRCKdAOh6Q0oMsl7mxC2bGnCQBxp6PmiKcCvEh6GLVuS1B25jUeq9bwjEiyHv0CUJJyBnEYD1foR+XwifDBSGt8QuZnd1XphafiATDjMSShIbqnWbY7KP59u6SYfJ5+HKtDpoclnt6ZpGnSSPfRUmnnSMuEOQXPD6PQ0clflK/l1rYMbZsdhb4ZDHhs+oJcMpMV+bMoHvTt84C25szjbXv9x6t2Vn+P4sh3HntdVdJyy22FxWdS6wVV5g/d42zbE6xLVutFV+WcizrYV8SbPcAZGV+UzqFtsvyG+1HOcJuehysvatyG+1PODxuTYf5yy2xFf5vkLm537Ki1rduxAfJlk6jWYHHuqUDbJv14Zk3034ks933lmeyXfqeoY9yK+bJ3/2Ct9XufviC/z/Bi2nHniVfInq15lRv7444+QkVUkqmlU2aIibL3qKrj3/o7/9NYj4YZhePjch0NWvZxQNY18Ue9d7Qk6Dm/zLLm/IUHzfYEBpQ5NpUorsKYB1kwkpDcCEhsC1gyU6eLgMloBc4JnMSUCZtmW2wQkpGQARgtgMKPMKW0vjIDe4AkMyj+91epPq9psNjid4bMo4cpqbjfcJaVwFxfDXVKibi2SPizz7CvLL4CtsBDu0hJoZWXQpIyULytT+yx2h9Q9qW1bcTHsUkbOnU2qk4K/2C0SPHqPwS5pbqke0JvUBcxpiIfLYIHLYFa3Bvk1Z/Tss8EAm86o1p0GiyrvMpjg0pvVut5ohc4kZc2wQ68Wd5iLnNFgVilQIalap1R/hWHUm2Dwp2CrXtbtdsFRaVlp/CpVYXJdk/SyzdPGQrXJ8DRB8bS9AMwmae9hVh8B1RbHbYPO215D3Xrbf8i6yexJwaoqNp2m2gbJvxepQtIbpBu1fJT0qqzRZEJcnAU6uV8H1R5IlVXPq1fPq1Nl9arKIy4u3lO9pdfBZivzlvOU8T9OBxiMRsTHx6nPmsS9JaUl/nWVkve2GZGyRpOnrLpHypZIWW+bEvlPnlNOmDyvwQCrNd5/X0lJ8bFy5f5tlP+OqM6/+3pTlVvFsjXxHRGKnF9fFYndbofD4aiRsnLN8FX7V6eslJPy4VgsFhiNxmqXdTqd6lyEI//epOqjumXlbyZ/u6pUp1SnbFWraaqaGalXwUi0etP4yBfuc5P/hKve34vCBkZ0XrYSlvjEk3zSEmDrV8DGecC2hZ72GuXJt2dqCyCjNZDZGkg/E0hqBCRkAolZQEIGYKj+GCYnMlePu7AQrvz8gKUArvw8uAuL4C4qhKug0HMr21K2qNBznwQZJ5hVkg+oBBIOUwKcRiucxnjPYvDeqiXOc58EClJOblUZC1x6C5w6s0r91za5sBpNehhMehjNBrUutwZp1Cnr3vtk27/u3fYsumPrsl8u7oHbxsB9ngv/sVvPhd136wsiiIiihdU0VSFx2KHNQFaHKhWfvmY65jX/A70a6JFW4ETJp1/AMmxY9V9XGoluXwJs/ADY8gVgD0h/prcCGnUGMtsAGa2AjDZA+hmeDEYNkhhUshGuI0fU4vTfHvXsO+pdP3rUH3i4C05irBEvl94IpzkJzgaZcCamwWlNhTM+GQ5LEpymRDgM8XDo4+DQmeHQTLC7jbC7DHB7G9/VBJPFAFOcwXPrX4wV98s4IhYDjGZPQCHb/vWA/YHBh8oUEBFRtcRuMCItkecMAPatBe76FsjuVGnxz3d8jrlb5qpUsfnGwcAr7+Pwm28i5Zpr1IR6xyVp0z3feTIgm/8LlB45dl/K6UDHoUCnoVUOjCp9qbIyOP7YD+ehQ2qCP3Wr1uU2Bw7vrVRxnAi91Qp9SjIMySnQJafAmZQJhzUFDksK7KZE2I0JsOviYdNMsLmMKLPrpXYFZWVuOO2VjMAarpeH73X1OlgSjDDHG2GJD7i1htgXZ1SBReCt2RtoMFtARFS3xG4wInXuKU09wcjat4A/HWs9X972vO2YvHKyWr/jrDvQrfUobHv3azh270HhggVocPnl4V8nby+w4R3gh3eA/IDGTAkNgQ6DpS8VcFr3kO00wpGMhuOPP9Ri37cPDllke58s++A6XPW5a3Tx8TCmpcGgllQYU9OgT02DlpwOe3wabJYGsOmsKNMsKHMaVVBRUuRESYFdLWVFDkCqWkN3NvB2Ng0OQCQYiEswIi7RjPhEE+ISTIjz3kqwEWf13Fqsss9za7F6MhccN4KI6NQTu8GI6DYK+Hk+8NNc4NLJgMXTqjmQDMT1wNIH1GBb5zU6D3d3vlsNJpV6003InTkTua+/jqTLLgu+SDptwK+fAz/8y1Md42thb2kAtLvSkwFp3ssTEFXCVVAA27btsG3fBvu2bZ71bdvgPBi662D57IUxKwvGhg29SyaMmQ3hTsmEzZoOuzkZZbp4lJRqKM63oyTfhuI8CTBsKP7dDtfOwABC2nqEb+8hwUV8kgnxSZ7gQm6tst7Au8+7XwIOuZXsBYMKIiLyie1gpMVFnsag0mtFqk+6j6pQ5O/r/46d+TvR0NoQ0y6a5u8dkXrjDTg8Zw5sm3/Bjo++wX53I1h1R5CcvwIN9s1HsnMrzHpvq2QJPLqOANoNArz98AM5jx6FfceOgMDDG3QcCt81TZ+cDFPjxjA2bgxD46ZwZTSBMyUbjoQ0OCzJKHLoUaKCDDuKJdA4akPJbjvcajAt6UF0/An0JBthTbYgIdkMawPfYoE1cDvZrDIZrPogIqITFdvBiPw6l+zIgvHA2jlAt5srVJdszN2obsd0G4O0gDENjKmpSL32WmxcsA1bF9ih6aTvvpCBcTyD48Rb7GjQMAnJ7hQ02BUP677dcB/OgeugtN84CNeB/XAePACtoECNK+Abd0C6kboMLeBq3BaadL/NyIKWnAE0SIE7Pkn1GikrdaO00IHSQjuce92A7+UhffaP028/waSCCAkyEpIluLAgIcUTaCSkeIOPZLMasZKIiKi2xXYwIrrcACyaAhz4Cdi3HjitW9DdMqeKkMxIIBkCe2uTy7Gljad9RlPdOsTFlaDA1Ab5jkyUlepQajOjdK8NB/eWr1ZJ9SxxbYFmVTxOGWpEDTcSuoGG9OiIb+CpErF6q0w8AYcEF95shmw3kHE1To35c4iI6NTAYEQGC5OGpD+9B6ybUyEYKbZ7qjMSTMcG/3HYXfjfW5ux4wdPINJi56foqH2FjImzULJ5O0rWLUHhhs0odsWhND4TpXEZKI3PgM2SAp01AYi3QidLXDwgAzyZLWr8RulpLF1uj3U11Qd3O/UtcQZvWwyTp21GklntJyIiqo8YjAhpKyLByMYPgf5/BbxzJohipycYSZTRS2U734YvXv4Jh3YXQm/U4aL4N6HfvRbF0KH4tmNDbUvuIdlqRXar0xHfvS2s3boj/qxO0AeM1khEREQMRjya9gAatvcMgCY9a3rcqXbLNPXSm8aXGTm8rwifzfoRRUdsqt3F5RdtR+MfPsUfrRsjfytU91hrt26wdu+G+G7dEde2DXTeoX6JiIgoNF4phTRa7X4L8MVYT0PWc+9Q+0ocx7qzHt3mwJI3N8Fe5kJyw3j86a42SHn3VnVfo/EPIrP5lar7LLusEhERVQ9bMvqcNQwwWYGcX4E9K9UuX1akw8ELseCVX1Qg0rhVCoY+3B0pu/8DyFThyadD120ETFkNGYgQERGdAAYjPnHJnsHIhIzI6g1GOu7vhV47rlW9Z1r3yMKVf+mCOLMD+PYFT9mLxgJGzyyGREREVH0MRgLJmCNi88dA8WEVjLQ7dL7adXb/09Hv5vaebrFr3wSKDwEpzTxdg4mIiOiEMRgJ1KQr0KgL4LKr+WQKbYVILs1Ud3Xo1cRTDSNdff1ZkYcAgym6x0xERFTPMRgpTxqyinVvIS+3CEbNBLfeiaT0OM/+1a8DJblAagug8/VRPVQiIqJTAYOR8jpe45nQ7sgOFPy2Q+2yJxap6ethKwK++7unXO+HmRUhIiKqAQxGyrMkenrWSAPWnb+rW1dyqee+1a8BJYeBtDOATp4yREREdHIYjFTSkNV+xNtVN8UOlBUEZEUeAQwcooWIiKgmMBgJJbujGpXVac9Wm8ZUF7D6VaD0KJDe6lgXYCIiIjppDEYqa8hqb6RWLSkO4LuZx7Iiek5KR0REVFMYjIRha3EF9E7PhHkJ+z4EyvKAjDZAxyHRPjQiIqJTCoORMPIOa+q22JSPxILNnp19mBUhIiKqaQxGwjh60DMvTV78ISS4NSCzHdB+cLQPi4iI6JTDYCSMvAOeGXvz4g8iwe0G+j4O6Hm6iIiIahqvrmEcPegLRg4h4cpZQNsron1IREREpyQGI2Hk+YKRuINIzOoU7cMhIiI6ZTEYCcHt1pB3KCAzYkqI9iERERGdshiMhFB4uBRupwanzo4iy1EGI0RERLWIwUgIR/2NV3Og6TQGI0RERLWIwUgl7UXy4w/BrDfDbDBH+5CIiIhOWQxGKsmMHI07yKwIERFRLWMwcpzMCIMRIiKi2sVgJISjBzyjrx6VAc8YjBAREdUqBiPllBU7UFroUOv58TkMRoiIiGoZg5EwVTT6RDccBhsSzYnRPiQiIqJTGoORMMGILsWubhOMzIwQERHVJgYjYXrSuJPL1G2CmcEIERFRbWIwEiYzYk8qUreJJlbTEBER1SYGI2F60pQkHlW3VpM1ykdERER0amMwEsDtciM/p1StFyYcVrfMjBAREdXBYGTWrFlo3rw54uLi0KNHD6xevbpKj3vvvfeg0+lw9dVXoy4qyC2D26XBaNKjwOQJRti1l4iIqI4FI3PnzsWYMWMwadIkrF+/Hp07d8aAAQNw6NChSh+3a9cujB07Fr169UJdby+SnGVFsdNTXcNghIiIqI4FI8899xxuv/12jBo1Cu3bt8fs2bNhtVoxZ86csI9xuVy48cYbMXnyZLRs2RJ1vSdNarYVxQ5PMMJqGiIiojoUjNjtdqxbtw79+vU79gR6vdpeuXJl2MdNmTIFDRs2xK233lql17HZbCgoKAhaIiHvoCcAScmyosju6U3DzAgREVEdCkZyc3NVliMrKytov2wfOHAg5GO+/fZbvPnmm3j99der/DpPP/00kpOT/UvTpk0RCUcPHsuMlDg96wxGiIiI6nFvmsLCQtx0000qEMnIyKjy48aNG4f8/Hz/snfvXkSyzUhqVgIzI0RERBFirE5hCSgMBgMOHjwYtF+2s7OzK5Tfvn27arg6aNAg/z632+15YaMRW7ZswRlnnFHhcRaLRS3RmiAvId0Eu9s7HDyDESIiorqTGTGbzejWrRsWLVoUFFzIds+ePSuUb9u2LTZu3IgNGzb4lyuvvBIXX3yxWo9U9Ut1siKJqRbYDZ6h4AWDESIiojqUGRHSrXfkyJHo3r07zj33XLzwwgsoLi5WvWvEiBEj0KRJE9XuQ8Yh6dixY9DjU1JS1G35/XVl5FXVeNXhqaKJM8TBqK/2KSIiIqJqqPaV9rrrrkNOTg4mTpyoGq126dIFX331lb9R6549e1QPm/rmWHuRY916mRUhIiKqfSf0s//ee+9VSyhLly6t9LFvv/026vIYIynZCSh2eAZwSzRzjBEiIqLaVv9SGBHIjPiqaaxGTpJHRERU2xiMqBFi3cg/5JkgL0XGGHF4G7MyM0JERFTrGIzIBHk5pXC7NRjNeiSmWPyZkQQj24wQERHVNgYjAVU00pNGp9cda8BqZjBCRERU2xiMBE2Q5wk+OEkeERFR5DAYKZcZEf4GrCY2YCUiIqptDEaCMiOe4MPfgJWZESIiolrHYKSSzAgHPSMiIqp9MR+MlBbZ1SR5gsEIERFR5MV8MJLnraJJTLPAZDaodVbTEBERRU7MByNHDwb3pBFswEpERBQ5MR+M+DIjvioaUWxn114iIqJIiflgxJ8ZCQxGnAxGiIiIIiXmgxF/Txpvt15N0/yZEVbTEBER1b6YDkZcTjfyczwT5KVmedqM2N12ODWnWmdmhIiIqPbFdDBSkFsKza3BZDEgIcWs9hXZPY1XBTMjREREtS+mgxHfyKtqgjydLmheGqvRCr0upk8PERFRRMT01bb8yKuCk+QRERFFVkwHI0cPFAfNSSM4xggREVFkxXQwEiozwtFXiYiIIsuIGNasYzriEs3IOO1Y4OGfl8bMeWmIiIgiIaaDke4DW1TY52szkmBkMEJERBQJMV1NE4q/AauZ1TRERESRwGCkHH8DViMbsBIREUUCg5FymBkhIiKKLAYj4dqMmNhmhIiIKBIYjJTDYISIiCiyGIyUwxFYiYiIIovBSDn+cUaYGSEiIooIBiPlFNtZTUNERBRJDEbKKXaymoaIiCiSGIyEyYxwojwiIqLIYDASQNM0ZkaIiIgijMFIgFJnKdyaW62zzQgREVFkMBgJ0a1Xr9Mj3hgf7cMhIiKKCQxGwszYq9Ppon04REREMYHBSIhghI1XiYiIIofBSIgBz9h4lYiIKHIYjISqpjGz8SoREVGkMBgJ02aEiIiIIoPBSKhqGjOraYiIiCKFwUiozAjHGCEiIooYBiMBGIwQERFFHoORAAxGiIiIIo/BSAAGI0RERJHHYCRAkZ3jjBAREUUag5EAvhl7mRkhIiKKHAYjAYrtDEaIiIgijcFIiHFGGIwQERFFDoORACWOEnXLNiNERESRw2AkADMjREREkcdgxMutuVHi9GRGGIwQERFFDoORclU0gsEIERFR5DAYKVdFY9QZYTFYon04REREMYPBSLnMSII5ATqdLtqHQ0REFDMYjJRvvGpkFQ0REVEkMRgpH4yYGYwQERFFEoOR8tU0zIwQERFFFIMRL2ZGiIiIooPBiFexwzMvDUdfJSIiiiwGI+WCEY4xQkREVA+CkVmzZqF58+aIi4tDjx49sHr16rBlX3/9dfTq1Qupqalq6devX6Xlo4VDwRMREdWTYGTu3LkYM2YMJk2ahPXr16Nz584YMGAADh06FLL80qVLMXz4cCxZsgQrV65E06ZN0b9/f+zbtw91CSfJIyIiqifByHPPPYfbb78do0aNQvv27TF79mxYrVbMmTMnZPl33nkH99xzD7p06YK2bdvijTfegNvtxqJFi8K+hs1mQ0FBQdBS25gZISIiqgfBiN1ux7p161RVi/8J9Hq1LVmPqigpKYHD4UBaWlrYMk8//TSSk5P9i2RTahvbjBAREdWDYCQ3NxculwtZWVlB+2X7wIEDVXqORx55BI0bNw4KaMobN24c8vPz/cvevXtR2xiMEBERRYcxki/2zDPP4L333lPtSKTxazgWi0UtkVRkZzUNERFRnQ9GMjIyYDAYcPDgwaD9sp2dnV3pY//2t7+pYOR///sfzjrrLNQ1JU42YCUiIqrz1TRmsxndunULanzqa4zas2fPsI+bPn06nnzySXz11Vfo3r076iJmRoiIiOpJNY106x05cqQKKs4991y88MILKC4uVr1rxIgRI9CkSRPVCFVMmzYNEydOxLvvvqvGJvG1LUlMTFRLXcE2I0RERPUkGLnuuuuQk5OjAgwJLKTLrmQ8fI1a9+zZo3rY+LzyyiuqF87QoUODnkfGKXniiSdQFzjdTpS5ytQ6q2mIiIgiS6dpmoY6TsYZkS6+0rOmQYMGNf78+bZ8XPjehWp9/f+th8lgqvHXICIiijUFVbx+c26agNFXzXozAxEiIqIIYzDC0VeJiIiiisEIG68SERFFFYORgGAk0czGq0RERJHGYCSgmsZqtEb7UIiIiGIOgxFmRoiIiKKKwUhgmxEj24wQERFFGoORwN40ZgYjREREkcZgJGCcEY6+SkREFHkMRgIbsJrYgJWIiCjSGIxImxG7twErMyNEREQRx2BEghEngxEiIqJoYTAi1TR2VtMQERFFC4ORwHFGmBkhIiKKOAYjnJuGiIgoqhiMMBghIiKKKgYjrKYhIiKKqpgPRuwuO+xuu1pnA1YiIqLIi/lgxJcVEaymISIiijwGI95gJM4QB6PeGO3DISIiijkMRth4lYiIKKpiPhjxzUuTaGbjVSIiomiI+WDElxmxGtl4lYiIKBoYjPi69TIzQkREFBUMRthmhIiIKKoYjDAYISIiiqqYD0b8DVg5+ioREVFUxHww4m/AytFXiYiIooLBCOelISIiiqqYD0aK7J5qGrYZISIiio6YD0aKnWzASkREFE0MRuyspiEiIoomBiPMjBAREUUVgxFvZoTBCBERUXTEfDDCcUaIiIiiK6aDEU3TUOIoUescZ4SIiCg6YjoYsblscGpOtc7MCBERUXTEdDDiq6IRzIwQERFFR0wHI/4qGqMVel1MnwoiIqKoiekrMBuvEhERRV9MByOcJI+IiCj6GIwwM0JERBRVMR2M+KppEswc8IyIiChaYjoY8TVgTTAyGCEiIoqWmA5G/A1YzaymISIiipaYDkZ8bUY4Lw0REVH0MBhhMEJERBRVMR2MFNm9DVgZjBAREUVNTAcjJU5vA1YGI0RERFET08GILzPCcUaIiIiiJ6aDEbYZISIiij4jYtjgVoPRPbs7WiS3iPahEBERxayYDkaGth4a7UMgIiKKeTFdTUNERETRx2CEiIiIoorBCBEREUUVgxEiIiKKKgYjREREFFUMRoiIiCiqGIwQERFR/QtGZs2ahebNmyMuLg49evTA6tWrKy3/wQcfoG3btqp8p06d8MUXX5zo8RIREVGsByNz587FmDFjMGnSJKxfvx6dO3fGgAEDcOjQoZDlv/vuOwwfPhy33norfvjhB1x99dVq2bRpU00cPxEREdVzOk3TtOo8QDIh55xzDmbOnKm23W43mjZtij//+c949NFHK5S/7rrrUFxcjM8++8y/77zzzkOXLl0we/bsKr1mQUEBkpOTkZ+fjwYNGlTncImIiChKqnr9rlZmxG63Y926dejXr9+xJ9Dr1fbKlStDPkb2B5YXkkkJV17YbDb1BgIXIiIiOjVVKxjJzc2Fy+VCVlZW0H7ZPnDgQMjHyP7qlBdPP/20iqR8i2ReiIiI6NRUJ3vTjBs3TqV0fMvevXujfUhERERUF2btzcjIgMFgwMGDB4P2y3Z2dnbIx8j+6pQXFotFLT6+Zi2sriEiIqo/fNft4zVPrVYwYjab0a1bNyxatEj1iPE1YJXte++9N+Rjevbsqe6///77/fsWLlyo9ldVYWGhumV1DRERUf0j13FpdlEjwYiQbr0jR45E9+7dce655+KFF15QvWVGjRql7h8xYgSaNGmi2n2I++67D71798aMGTNwxRVX4L333sPatWvx2muvVfk1GzdurKpqkpKSoNPpUJMRmwQ48tzspVN7eJ4jh+c6MnieI4Pnuf6fZ8mISCAi1/HKVDsYka66OTk5mDhxomqEKl10v/rqK38j1T179qgeNj7nn38+3n33XUyYMAGPPfYYWrVqhY8//hgdO3as8mvK85122mmoLXLy+UGvfTzPkcNzHRk8z5HB81y/z3NlGZETHmfkVMLxSyKD5zlyeK4jg+c5MnieY+c818neNERERBQ7YjoYkR47Mqx9YM8dqnk8z5HDcx0ZPM+RwfMcO+c5pqtpiIiIKPpiOjNCRERE0cdghIiIiKKKwQgRERFFFYMRIiIiiioGI0RERBRVMR2MzJo1C82bN0dcXBx69OiB1atXR/uQ6rXly5dj0KBBathfGbZfRtoNJB23ZOTeRo0aIT4+Hv369cNvv/0WteOtr2SqhXPOOUdNj9CwYUM1T9SWLVuCypSVlWH06NFIT09HYmIirrnmmgoTVlLlXnnlFZx11ln+USllPq0vv/zSfz/Pce145pln1PdH4HxmPNcn74knnlDnNXBp27ZtnTnHMRuMzJ07V82zI32r169fj86dO2PAgAE4dOhQtA+t3pI5iuQ8SpAXyvTp0/H3v/8ds2fPxqpVq5CQkKDOufwjoKpbtmyZ+tL4/vvv1aSTDocD/fv3V+ff54EHHsCnn36KDz74QJX/448/MGTIkKged30jU1DIhXHdunVqPq1LLrkEV111FX7++Wd1P89xzVuzZg1effVVFQQG4rmuGR06dMD+/fv9y7ffflt3zrEWo84991xt9OjR/m2Xy6U1btxYe/rpp6N6XKcK+WjNnz/fv+12u7Xs7Gzt2Wef9e/Ly8vTLBaL9p///CdKR3lqOHTokDrfy5Yt859Xk8mkffDBB/4yv/zyiyqzcuXKKB5p/Zeamqq98cYbPMe1oLCwUGvVqpW2cOFCrXfv3tp9992n9vNc14xJkyZpnTt3DnlfXTjHMZkZsdvt6teOVBMETsYn2ytXrozqsZ2qdu7cqSZWDDznMheCVI/xnJ8cmU9CpKWlqVv5bEu2JPBcSzr29NNP57k+QS6XS804Ltknqa7hOa55ku2Tmd0Dz6ngua45Ui0u1egtW7bEjTfeqCa2rSvnuNqz9p4KcnNz1ZeLb6ZhH9n+9ddfo3ZcpzIJRESoc+67j6rP7XaruvULLrjAPxO2nE+z2YyUlJSgsjzX1bdx40YVfEhVotSjz58/H+3bt8eGDRt4jmuQBHpSXS7VNOXx81wz5Iff22+/jTZt2qgqmsmTJ6NXr17YtGlTnTjHMRmMEJ1KvyblyySw7pdqjnxxS+Ah2ad58+Zh5MiRqj6das7evXtx3333qfZP0pmAasfll1/uX5c2ORKcNGvWDO+//77qUBBtMVlNk5GRAYPBUKGlsGxnZ2dH7bhOZb7zynNec+6991589tlnWLJkiWps6SPnU6oi8/LygsrzXFef/Fo888wz0a1bN9WLSRpov/jiizzHNUiqCKTjQNeuXWE0GtUiAZ80dpd1+XXOc13zJAvSunVrbNu2rU58nvWx+gUjXy6LFi0KSnfLtqRkqea1aNFCfagDz3lBQYHqVcNzXj3SPlgCEakyWLx4sTq3geSzbTKZgs61dP2V+mGe65Mj3xM2m43nuAb17dtXVYdJBsq3dO/eXbVp8K3zXNe8oqIibN++XQ21UCc+z1qMeu+991RPjrffflvbvHmzdscdd2gpKSnagQMHon1o9bo1/A8//KAW+Wg999xzan337t3q/meeeUad4//+97/aTz/9pF111VVaixYttNLS0mgfer1y9913a8nJydrSpUu1/fv3+5eSkhJ/mbvuuks7/fTTtcWLF2tr167VevbsqRaqukcffVT1UNq5c6f6vMq2TqfTFixYoO7nOa49gb1pBM/1yXvwwQfVd4Z8nlesWKH169dPy8jIUL3x6sI5jtlgRLz00kvq5JvNZtXV9/vvv4/2IdVrS5YsUUFI+WXkyJH+7r2PP/64lpWVpQLBvn37alu2bIn2Ydc7oc6xLG+99Za/jAR499xzj+qKarVatcGDB6uAharulltu0Zo1a6a+HzIzM9Xn1ReICJ7jyAUjPNcn77rrrtMaNWqkPs9NmjRR29u2basz51gn/4tMDoaIiIioophsM0JERER1B4MRIiIiiioGI0RERBRVDEaIiIgoqhiMEBERUVQxGCEiIqKoYjBCREREUcVghIiIiKKKwQgRERFFFYMRIiIiiioGI0RERIRo+n8ki5ISqBf3swAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# plot results\n", + "plt.figure()\n", + "for i in range(num_clients):\n", + " plt.plot(history[f\"site-{i+1}\"], label=f\"site-{i+1}\")\n", + "plt.axhline(y=consensus_value, color='k', linestyle=\"--\", label=\"Consensus value\")\n", + "plt.legend()\n", + "plt.title(\"Evolution of local values\")\n", + "plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/advanced/distributed_optimization/examples/1-consensus/launcher.py b/examples/advanced/distributed_optimization/examples/1-consensus/launcher.py new file mode 100644 index 0000000000..86689d6076 --- /dev/null +++ b/examples/advanced/distributed_optimization/examples/1-consensus/launcher.py @@ -0,0 +1,51 @@ +import pickle +import random +import matplotlib.pyplot as plt +from nvflare.job_config.api import FedJob + +from nvdo.controllers import AlgorithmController +from nvdo.executors import ConsensusExecutor +from nvdo.types import Config +from nvdo.utils.config_generator import generate_random_network + +class CustomConsensusExecutor(ConsensusExecutor): + def __init__(self): + super().__init__(initial_value=random.randint(0,10)) + + +if __name__ == "__main__": + # Create job + job = FedJob(name="consensus") + + # generate random config + num_clients = 6 + network, _ = generate_random_network(num_clients=num_clients) + config = Config(network=network, extra={"iterations": 20}) + + + # send controller to server + controller = AlgorithmController(config=config) + job.to_server(controller) + + # Add clients + for i in range(num_clients): + executor = CustomConsensusExecutor() + job.to(executor, f"site-{i + 1}") + + # run + job.export_job("./tmp/job_configs") + job.simulator_run("./tmp/runs/consensus") + + + history = { + f"site-{i + 1}": pickle.load( + open(f"tmp/runs/consensus/site-{i + 1}/results.pkl", "rb") + ) + for i in range(num_clients) + } + plt.figure() + for i in range(num_clients): + plt.plot(history[f"site-{i + 1}"], label=f"site-{i + 1}") + plt.legend() + plt.title("Evolution of local values") + plt.show() diff --git a/examples/advanced/distributed_optimization/examples/2-two_moons/README.md b/examples/advanced/distributed_optimization/examples/2-two_moons/README.md new file mode 100644 index 0000000000..8d26022b39 --- /dev/null +++ b/examples/advanced/distributed_optimization/examples/2-two_moons/README.md @@ -0,0 +1,28 @@ +# Distributed classification - two moons dataset + +In this example we consider the simple [two moons](https://scikit-learn.org/dev/modules/generated/sklearn.datasets.make_moons.html) classification problem and compare different distributed optimization algorithms: +- Distributed gradient descent +- Gradient tracking +- GTAdam + +We run all the algorithms with 6 clients, for 1000 iterations and with a stepsize of 0.01. These common parameters can be changed in the `config.py` file. + +The models and datasets are stored in `utils.py` and are the same for all algorithms. + +## Distributed gradient descent +``` +python launcher_dgd.py +``` +![dgd](dgd_results.png) + +## Gradient tracking +``` +python launcher_gt.py +``` +![gt](gt_results.png) + +## GTAdam +``` +python launcher_gtadam.py +``` +![gtadam](gtadam_results.png) \ No newline at end of file diff --git a/examples/advanced/distributed_optimization/examples/2-two_moons/config.py b/examples/advanced/distributed_optimization/examples/2-two_moons/config.py new file mode 100644 index 0000000000..250083010a --- /dev/null +++ b/examples/advanced/distributed_optimization/examples/2-two_moons/config.py @@ -0,0 +1,3 @@ +NUM_CLIENTS = 6 +ITERATIONS = 1000 +STEPSIZE = 0.01 \ No newline at end of file diff --git a/examples/advanced/distributed_optimization/examples/2-two_moons/dgd_results.png b/examples/advanced/distributed_optimization/examples/2-two_moons/dgd_results.png new file mode 100644 index 0000000000000000000000000000000000000000..d75cf0fd3cca2c5266e280b65592a7cc6e797576 GIT binary patch literal 81201 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

e8=^_%Sf; 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≺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

8b=ngDAS` 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 literal 0 HcmV?d00001 diff --git a/examples/advanced/distributed_optimization/examples/2-two_moons/gtadam_results.png b/examples/advanced/distributed_optimization/examples/2-two_moons/gtadam_results.png new file mode 100644 index 0000000000000000000000000000000000000000..317eeadb8c1a68439c2684cbb75cba7784ce0a8c GIT binary patch literal 46487 zcmc$`cT`i~q6QcdQB*`gEC_-~kuJRx6s0$%ccdfIL8JswQHlc6dz0RKuPV}emEJ*W z=phLqvyZ=f-+gc9&8(TfhP7NqOipsn-uv5MI|)=(mLa)Jbr}YOk;utDeF1|JmcU>H z+LwsHZ=6++I4F!<1gSIJ~xZd2MY%_r~1G+1lQYmy`Pu=OcDH zD;F0BXAv$g+y8n7r@fOUSEQ4+6F3U7gRG7-3`Y7A`g1M^o^1_-Ri2l7`dIyK;?@jt zqP}_5F5cOmV-8U0nq;by6Hm?WM3Ftd8FfqM`CEqa$3M`tufE2lRwh`H+Q<2qFC z#&7?F#5J+#&AKA+k)WS*=HnQ`e;)dler+N6`%p49?Ek+<8`D0xai2hQoz=4Ndx*p5 z&WQ?Kjp`dSqgqBBo;$VK6%`e++y<_r8stwgI-BTqOE_7?di{AAT|huPlf4)bosg{Y zxo1Q0k|mrX--7BDHmxGQHSg6p%PzAw-5k{&<4wo>)^>K$2YsR{oVCm3?sM2#K?{Q1 zfs|jLZ)qXKjF?#+AKeaJ$42kZo}pDfWjs)|S

^sTLoSZd);# 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 literal 0 HcmV?d00001 diff --git a/examples/advanced/distributed_optimization/examples/3-mnist/gt_results.png b/examples/advanced/distributed_optimization/examples/3-mnist/gt_results.png new file mode 100644 index 0000000000000000000000000000000000000000..4d5c6d84bfa87165be1f3955161a33016ae29ab9 GIT binary patch literal 61631 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 literal 0 HcmV?d00001 diff --git a/examples/advanced/distributed_optimization/examples/3-mnist/launcher_dgd.py b/examples/advanced/distributed_optimization/examples/3-mnist/launcher_dgd.py new file mode 100644 index 0000000000..01e71d6e44 --- /dev/null +++ b/examples/advanced/distributed_optimization/examples/3-mnist/launcher_dgd.py @@ -0,0 +1,49 @@ +import torch +from config import ITERATIONS, NUM_CLIENTS, STEPSIZE +from nvflare.job_config.api import FedJob +from utils import NeuralNetwork, get_dataloaders, plot_results + +from nvdo.controllers import AlgorithmController +from nvdo.executors import DGDExecutor +from nvdo.types import Config +from nvdo.utils.config_generator import generate_random_network + + +class CustomDGDExecutor(DGDExecutor): + def __init__(self, data_chunk: int | None = None): + self._data_chunk = data_chunk + train_dataloader, test_dataloader = get_dataloaders(data_chunk) + super().__init__( + model=NeuralNetwork(), + loss=torch.nn.CrossEntropyLoss(), + train_dataloader=train_dataloader, + test_dataloader=test_dataloader, + ) + + +if __name__ == "__main__": + # Create job + job_name = "dgd" + job = FedJob(name=job_name) + + # generate random config + network, _ = generate_random_network(num_clients=NUM_CLIENTS) + config = Config( + network=network, extra={"iterations": ITERATIONS, "stepsize": STEPSIZE} + ) + + # send controller to server + controller = AlgorithmController(config=config) + job.to_server(controller) + + # Add clients + for i in range(NUM_CLIENTS): + executor = CustomDGDExecutor(data_chunk=i) + job.to(executor, f"site-{i + 1}") + + # run + job.export_job("./tmp/job_configs") + job.simulator_run(f"./tmp/runs/{job_name}") + + # plot and save results + plot_results(job_name, NUM_CLIENTS) diff --git a/examples/advanced/distributed_optimization/examples/3-mnist/launcher_gt.py b/examples/advanced/distributed_optimization/examples/3-mnist/launcher_gt.py new file mode 100644 index 0000000000..c66454fbc1 --- /dev/null +++ b/examples/advanced/distributed_optimization/examples/3-mnist/launcher_gt.py @@ -0,0 +1,45 @@ +import torch +from nvflare.job_config.api import FedJob +from utils import NeuralNetwork, get_dataloaders, plot_results + +from nvdo.controllers import AlgorithmController +from nvdo.executors import GTExecutor +from nvdo.types import Config +from nvdo.utils.config_generator import generate_random_network +from config import NUM_CLIENTS, ITERATIONS, STEPSIZE + + +class CustomGTExecutor(GTExecutor): + def __init__(self, data_chunk: int | None = None): + self._data_chunk = data_chunk + train_dataloader, test_dataloader = get_dataloaders(data_chunk) + super().__init__( + model=NeuralNetwork(), + loss=torch.nn.CrossEntropyLoss(), + train_dataloader=train_dataloader, + test_dataloader=test_dataloader, + ) + +if __name__ == "__main__": + # Create job + job_name = "gt" + job = FedJob(name=job_name) + + # generate random config + network, _ = generate_random_network(num_clients=NUM_CLIENTS) + config = Config(network=network, extra={"iterations": ITERATIONS, "stepsize": STEPSIZE}) + + # send controller to server + controller = AlgorithmController(config=config) + job.to_server(controller) + + # Add clients + for i in range(NUM_CLIENTS): + executor = CustomGTExecutor(data_chunk=i) + job.to(executor, f"site-{i + 1}") + + # run + job.export_job("./tmp/job_configs") + job.simulator_run(f"./tmp/runs/{job_name}") + + plot_results(job_name, NUM_CLIENTS) diff --git a/examples/advanced/distributed_optimization/examples/3-mnist/launcher_gtadam.py b/examples/advanced/distributed_optimization/examples/3-mnist/launcher_gtadam.py new file mode 100644 index 0000000000..d7b4d1556a --- /dev/null +++ b/examples/advanced/distributed_optimization/examples/3-mnist/launcher_gtadam.py @@ -0,0 +1,54 @@ +import torch +from nvflare.job_config.api import FedJob +from utils import NeuralNetwork, get_dataloaders, plot_results + +from nvdo.controllers import AlgorithmController +from nvdo.executors import GTADAMExecutor +from nvdo.types import Config +from nvdo.utils.config_generator import generate_random_network +from config import NUM_CLIENTS, ITERATIONS, STEPSIZE + + +class CustomGTADAMExecutor(GTADAMExecutor): + def __init__(self, data_chunk: int | None = None): + self._data_chunk = data_chunk + train_dataloader, test_dataloader = get_dataloaders(data_chunk) + super().__init__( + model=NeuralNetwork(), + loss=torch.nn.CrossEntropyLoss(), + train_dataloader=train_dataloader, + test_dataloader=test_dataloader, + ) + +if __name__ == "__main__": + # Create job + job_name = "gtadam" + job = FedJob(name=job_name) + + # generate random config + network, _ = generate_random_network(num_clients=NUM_CLIENTS) + config = Config( + network=network, + extra={ + "iterations": ITERATIONS, + "stepsize": STEPSIZE, + "beta1": 0.9, + "beta2": 0.999, + "epsilon": 1e-8, + }, + ) + + # send controller to server + controller = AlgorithmController(config=config) + job.to_server(controller) + + # Add clients + for i in range(NUM_CLIENTS): + executor = CustomGTADAMExecutor(data_chunk=i) + job.to(executor, f"site-{i + 1}") + + # run + job.export_job("./tmp/job_configs") + job.simulator_run(f"./tmp/runs/{job_name}") + + plot_results(job_name, NUM_CLIENTS) diff --git a/examples/advanced/distributed_optimization/examples/3-mnist/utils.py b/examples/advanced/distributed_optimization/examples/3-mnist/utils.py new file mode 100644 index 0000000000..fa5d252f7c --- /dev/null +++ b/examples/advanced/distributed_optimization/examples/3-mnist/utils.py @@ -0,0 +1,92 @@ +import matplotlib.pyplot as plt +import torch +from torch import nn +from torchvision import datasets +from torchvision.transforms import ToTensor +from config import NUM_CLIENTS + + +def get_dataloaders(data_chunk): + training_data = datasets.MNIST( + root="data", train=True, download=True, transform=ToTensor() + ) + test_data = datasets.MNIST( + root="data", train=False, download=True, transform=ToTensor() + ) + + # split dataset so that each agent has a subset with (distinct) labels + labels = [ + (training_data.targets == i).nonzero(as_tuple=True)[0].tolist() + for i in range(10) + ] + indices = torch.tensor_split(torch.arange(10), NUM_CLIENTS)[data_chunk] + local_labels = [] + for i in indices: + local_labels += labels[i] + + train_dataloader = torch.utils.data.DataLoader( + torch.utils.data.Subset(training_data, local_labels), + batch_size=128, + ) + + test_dataloader = torch.utils.data.DataLoader(test_data, batch_size=128) + return train_dataloader, test_dataloader + + +class NeuralNetwork(nn.Module): + def __init__(self): + super().__init__() + self.flatten = nn.Flatten() + self.linear_relu_stack = nn.Sequential( + nn.Linear(28 * 28, 256), + nn.ReLU(), + nn.Linear(256, 256), + nn.ReLU(), + nn.Linear(256, 10), + ) + + def forward(self, x): + x = self.flatten(x) + logits = self.linear_relu_stack(x) + return logits + + +def plot_results(job, num_clients): + plt.style.use('ggplot') + train_loss = {} + test_loss = {} + for i in range(num_clients): + train_loss[f"site-{i + 1}"] = torch.load( + f"./tmp/runs/{job}/site-{i + 1}/train_loss_sequence.pt" + ) + test_loss[f"site-{i + 1}"] = torch.load( + f"./tmp/runs/{job}/site-{i + 1}/test_loss_sequence.pt" + ) + + fig, axs = plt.subplots(1, 2, figsize=(12, 6)) + + # First subplot: Evolution of training loss + for i in range(num_clients): + time = train_loss[f"site-{i + 1}"][:, 0] + loss = train_loss[f"site-{i + 1}"][:, 1] + axs[0].plot(time, loss, label=f"site-{i + 1}") + axs[0].legend() + axs[0].set_ylim(-0.1, 3) + axs[0].set_ylabel("Loss") + axs[0].set_xlabel("Time (s)") + axs[0].set_title("Evolution of Training Loss") + + # Second subplot: Evolution of test loss + for i in range(num_clients): + time = test_loss[f"site-{i + 1}"][:, 0] + loss = test_loss[f"site-{i + 1}"][:, 1] + axs[1].plot(time, loss, label=f"site-{i + 1}") + axs[1].legend() + axs[1].set_ylim(-0.1, 3) + axs[1].set_ylabel("Loss") + axs[1].set_xlabel("Time (s)") + axs[1].set_title("Evolution of Test Loss") + + plt.tight_layout() + plt.savefig(f"{job}_results.png") + # plt.show() \ No newline at end of file diff --git a/examples/advanced/distributed_optimization/nvdo/__init__.py b/examples/advanced/distributed_optimization/nvdo/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/examples/advanced/distributed_optimization/nvdo/controllers/__init__.py b/examples/advanced/distributed_optimization/nvdo/controllers/__init__.py new file mode 100644 index 0000000000..d500b9249c --- /dev/null +++ b/examples/advanced/distributed_optimization/nvdo/controllers/__init__.py @@ -0,0 +1 @@ +from .base import AlgorithmController # noqa \ No newline at end of file diff --git a/examples/advanced/distributed_optimization/nvdo/controllers/base.py b/examples/advanced/distributed_optimization/nvdo/controllers/base.py new file mode 100644 index 0000000000..7ff3e28d79 --- /dev/null +++ b/examples/advanced/distributed_optimization/nvdo/controllers/base.py @@ -0,0 +1,52 @@ +from nvflare.apis.controller_spec import Task +from nvflare.apis.dxo import DXO, DataKind +from nvflare.apis.fl_context import FLContext +from nvflare.apis.impl.controller import Controller +from nvflare.apis.signal import Signal + +from nvdo.types import Config + + +class AlgorithmController(Controller): + """Controller for running a p2p algorithm on a network.""" + def __init__( + self, + config: Config, + *args, + **kwargs, + ): + super().__init__(*args, **kwargs) + self.config = config + + def control_flow(self, abort_signal: Signal, fl_ctx: FLContext): + # Send network config (aka neighors info) to each client + for node in self.config.network.nodes: + task = Task( + name="config", + data=DXO( + data_kind=DataKind.METRICS, + data={"neighbors": [n.__dict__ for n in node.neighbors]}, + ).to_shareable(), + ) + self.send_and_wait(task=task, targets=[node.id], fl_ctx=fl_ctx) + + # Run algorithm (with extra params if any passed as data) + targets = [node.id for node in self.config.network.nodes] + self.broadcast_and_wait( + task=Task( + name="run_algorithm", + data=DXO( + data_kind=DataKind.METRICS, + data={key: value for key, value in self.config.extra.items()}, + ).to_shareable(), + ), + targets=targets, + min_responses=0, + fl_ctx=fl_ctx, + ) + + def start_controller(self, fl_ctx: FLContext): + self.log_info(fl_ctx, "BaseController started") + + def stop_controller(self, fl_ctx: FLContext): + self.log_info(fl_ctx, "BaseController stopped") diff --git a/examples/advanced/distributed_optimization/nvdo/executors/__init__.py b/examples/advanced/distributed_optimization/nvdo/executors/__init__.py new file mode 100644 index 0000000000..c5da51cfd6 --- /dev/null +++ b/examples/advanced/distributed_optimization/nvdo/executors/__init__.py @@ -0,0 +1,5 @@ +from .base import SynchronousAlgorithmExecutor # noqa +from .consensus import ConsensusExecutor # noqa +from .distributed_gradient_descent import DGDExecutor # noqa +from .gradient_tracking import GTExecutor # noqa +from .gtadam import GTADAMExecutor # noqa \ No newline at end of file diff --git a/examples/advanced/distributed_optimization/nvdo/executors/base.py b/examples/advanced/distributed_optimization/nvdo/executors/base.py new file mode 100644 index 0000000000..74a8ac78c0 --- /dev/null +++ b/examples/advanced/distributed_optimization/nvdo/executors/base.py @@ -0,0 +1,142 @@ +import threading +from abc import abstractmethod +from collections import defaultdict + +from nvflare.apis.dxo import DXO, DataKind, from_shareable +from nvflare.apis.event_type import EventType +from nvflare.apis.executor import Executor +from nvflare.apis.fl_constant import ReturnCode +from nvflare.apis.fl_context import FLContext +from nvflare.apis.shareable import Shareable, make_reply +from nvflare.apis.signal import Signal + +from nvdo.types import LocalConfig, Neighbor + + +class BaseAlgorithmExecutor(Executor): + """Base class for algorithm executors.""" + def __init__(self): + super().__init__() + + self.id = None + self.client_name = None + self.config = None + self._weight = None + + self.neighbors: list[Neighbor] = [] + + def execute( + self, + task_name: str, + shareable: Shareable, + fl_ctx: FLContext, + abort_signal: Signal, + ): + if task_name == "config": + # Load local network config + self.config = LocalConfig(**from_shareable(shareable).data) + self.neighbors = self.config.neighbors + self._weight = 1.0 - sum([n.weight for n in self.neighbors]) + return make_reply(ReturnCode.OK) + + elif task_name == "run_algorithm": + # Run the algorithm + self._pre_algorithm_run(fl_ctx, shareable, abort_signal) + self.run_algorithm(fl_ctx, shareable, abort_signal) + self._post_algorithm_run(fl_ctx, shareable, abort_signal) + return make_reply(ReturnCode.OK) + else: + self.log_warning(fl_ctx, f"Unknown task name: {task_name}") + return make_reply(ReturnCode.TASK_UNKNOWN) + + @abstractmethod + def run_algorithm( + self, fl_ctx: FLContext, shareable: Shareable, abort_signal: Signal + ): + """Executes the algorithm""" + pass + + def _pre_algorithm_run( + self, fl_ctx: FLContext, shareable: Shareable, abort_signal: Signal + ): + """Executes before algorithm run.""" + pass + + def _post_algorithm_run( + self, fl_ctx: FLContext, shareable: Shareable, abort_signal: Signal + ): + """Executes after algorithm run. Could be used, for example, to save results""" + pass + + def _to_message(self, x): + return x + + def _from_message(self, x): + return x + + def handle_event(self, event_type: str, fl_ctx: FLContext): + if event_type == EventType.START_RUN: + self.client_name = fl_ctx.get_identity_name() + self.id = int(self.client_name.split("-")[1]) + + +class SynchronousAlgorithmExecutor(BaseAlgorithmExecutor): + """An executor to implement synchronous algorithms.""" + def __init__(self): + super().__init__() + + self.neighbors_values = defaultdict(dict) + + self.sync_waiter = threading.Event() + self.lock = threading.Lock() + + def _exchange_values(self, fl_ctx: FLContext, value: any, iteration: int): + engine = fl_ctx.get_engine() + + # Clear the event before starting the exchange + self.sync_waiter.clear() + + _ = engine.send_aux_request( + targets=[neighbor.id for neighbor in self.neighbors], + topic="send_value", + request=DXO( + data_kind=DataKind.METRICS, + data={ + "value": self._to_message(value), + "iteration": iteration, + }, + ).to_shareable(), + timeout=10, + fl_ctx=fl_ctx, + ) + + # check if neighbors already sent their values + if len(self.neighbors_values[iteration]) < len(self.neighbors): + # wait for all neighbors to send their values for the current iteration + # if not received after timeout, abort the job + if not self.sync_waiter.wait(timeout=10): + self.system_panic("failed to receive values from all neighbors", fl_ctx) + return + + def _handle_neighbor_value( + self, topic: str, request: Shareable, fl_ctx: FLContext + ) -> Shareable: + sender = request.get_peer_props()["__identity_name__"] + data = from_shareable(request).data + iteration = data["iteration"] + + with self.lock: + self.neighbors_values[iteration][sender] = self._from_message(data["value"]) + # Check if all neighbor values have been received + if len(self.neighbors_values[iteration]) >= len(self.neighbors): + self.sync_waiter.set() # Signal that we have all neighbor values + return make_reply(ReturnCode.OK) + + def handle_event(self, event_type: str, fl_ctx: FLContext): + super().handle_event(event_type, fl_ctx) + if event_type == EventType.START_RUN: + engine = fl_ctx.get_engine() + + engine.register_aux_message_handler( + topic="send_value", message_handle_func=self._handle_neighbor_value + ) diff --git a/examples/advanced/distributed_optimization/nvdo/executors/consensus.py b/examples/advanced/distributed_optimization/nvdo/executors/consensus.py new file mode 100644 index 0000000000..34506a389a --- /dev/null +++ b/examples/advanced/distributed_optimization/nvdo/executors/consensus.py @@ -0,0 +1,48 @@ +import pickle +import random + +from nvflare.apis.dxo import from_shareable + +from .base import SynchronousAlgorithmExecutor + + +class ConsensusExecutor(SynchronousAlgorithmExecutor): + """An executor that implements the consensus algorithm""" + + def __init__( + self, + initial_value: float | None = None, + ): + super().__init__() + if initial_value is None: + initial_value = random.random() + self.current_value = initial_value + self.value_history = [self.current_value] + + def run_algorithm(self, fl_ctx, shareable, abort_signal): + iterations = from_shareable(shareable).data["iterations"] + + for iteration in range(iterations): + if abort_signal.triggered: + break + + # run algorithm step + # 1. exchange values + self._exchange_values(fl_ctx, value=self.current_value, iteration=iteration) + + # 2. compute new value + current_value = self.current_value * self._weight + for neighbor in self.neighbors: + current_value += ( + self.neighbors_values[iteration][neighbor.id] * neighbor.weight + ) + + # 3. store current value + self.current_value = current_value + self.value_history.append(current_value) + + # free memory that's no longer needed + del self.neighbors_values[iteration] + + def _post_algorithm_run(self, *args, **kwargs): + pickle.dump(self.value_history, open("results.pkl", "wb")) diff --git a/examples/advanced/distributed_optimization/nvdo/executors/distributed_gradient_descent.py b/examples/advanced/distributed_optimization/nvdo/executors/distributed_gradient_descent.py new file mode 100644 index 0000000000..52e63ba37b --- /dev/null +++ b/examples/advanced/distributed_optimization/nvdo/executors/distributed_gradient_descent.py @@ -0,0 +1,119 @@ +import torch +from nvflare.apis.dxo import from_shareable +from nvdo.utils.metrics import compute_loss_over_dataset +import time + +from .base import SynchronousAlgorithmExecutor +from abc import abstractmethod + + +class DGDExecutor(SynchronousAlgorithmExecutor): + @abstractmethod + def __init__( + self, + model: torch.nn.Module | None = None, + loss: torch.nn.modules.loss._Loss | None = None, + train_dataloader: torch.utils.data.DataLoader | None = None, + test_dataloader: torch.utils.data.DataLoader | None = None, + val_dataloader: torch.utils.data.DataLoader | None = None, + ): + super().__init__() + self.model = model + self.loss = loss + self.train_dataloader = train_dataloader + self.test_dataloader = test_dataloader + self.val_dataloader = val_dataloader + + # metrics + self.train_loss_sequence = [] + self.test_loss_sequence = [] + + def run_algorithm(self, fl_ctx, shareable, abort_signal): + start_time = time.time() + iter_dataloader = iter(self.train_dataloader) + + for iteration in range(self._iterations): + self.log_info(fl_ctx, f"iteration: {iteration}/{self._iterations}") + if abort_signal.triggered: + break + + try: + data, label = next(iter_dataloader) + except StopIteration: + # 3. store metrics + current_time = time.time() - start_time + self.train_loss_sequence.append( + ( + current_time, + compute_loss_over_dataset( + self.model, self.loss, self.train_dataloader + ), + ) + ) + self.test_loss_sequence.append( + ( + current_time, + compute_loss_over_dataset( + self.model, self.loss, self.test_dataloader + ), + ) + ) + # restart after an epoch + iter_dataloader = iter(self.train_dataloader) + data, label = next(iter_dataloader) + + # run algorithm step + # 1. exchange values + with torch.no_grad(): + self._exchange_values( + fl_ctx, value=self.model.parameters(), iteration=iteration + ) + + # compute consensus value + for idx, param in enumerate(self.model.parameters()): + if param.requires_grad: + param.mul_(self._weight) + for neighbor in self.neighbors: + param.add_( + self.neighbors_values[iteration][neighbor.id][idx], + alpha=neighbor.weight, + ) + # 2. update current value + self.model.zero_grad() + pred = self.model(data) + loss = self.loss(pred, label) + loss.backward() + + with torch.no_grad(): + for param in self.model.parameters(): + if param.grad is not None: + param.add_(param.grad, alpha=-self._stepsize) + + # free memory that's no longer needed + del self.neighbors_values[iteration] + + def _to_message(self, x): + return [ + param.cpu().numpy() for param in iter(x) if param.requires_grad + ] + + def _from_message(self, x): + return [torch.from_numpy(param) for param in x] + + def _pre_algorithm_run(self, fl_ctx, shareable, abort_signal): + self._iterations = from_shareable(shareable).data["iterations"] + self._stepsize = from_shareable(shareable).data["stepsize"] + + init_train_loss = compute_loss_over_dataset( + self.model, self.loss, self.train_dataloader + ) + init_test_loss = compute_loss_over_dataset( + self.model, self.loss, self.test_dataloader + ) + + self.train_loss_sequence.append((0, init_train_loss)) + self.test_loss_sequence.append((0, init_test_loss)) + + def _post_algorithm_run(self, *args, **kwargs): + torch.save(torch.tensor(self.train_loss_sequence), "train_loss_sequence.pt") + torch.save(torch.tensor(self.test_loss_sequence), "test_loss_sequence.pt") diff --git a/examples/advanced/distributed_optimization/nvdo/executors/gradient_tracking.py b/examples/advanced/distributed_optimization/nvdo/executors/gradient_tracking.py new file mode 100644 index 0000000000..686cc8557b --- /dev/null +++ b/examples/advanced/distributed_optimization/nvdo/executors/gradient_tracking.py @@ -0,0 +1,161 @@ +import torch +from nvflare.apis.dxo import from_shareable +from nvdo.utils.metrics import compute_loss_over_dataset +import time + +from .base import SynchronousAlgorithmExecutor +from abc import abstractmethod + + +class GTExecutor(SynchronousAlgorithmExecutor): + @abstractmethod + def __init__( + self, + model: torch.nn.Module | None = None, + loss: torch.nn.modules.loss._Loss | None = None, + train_dataloader: torch.utils.data.DataLoader | None = None, + test_dataloader: torch.utils.data.DataLoader | None = None, + val_dataloader: torch.utils.data.DataLoader | None = None, + ): + super().__init__() + self.model = model + self.loss = loss + self.train_dataloader = train_dataloader + self.test_dataloader = test_dataloader + self.val_dataloader = val_dataloader + + # metrics + self.train_loss_sequence = [] + self.test_loss_sequence = [] + + def run_algorithm(self, fl_ctx, shareable, abort_signal): + start_time = time.time() + iter_dataloader = iter(self.train_dataloader) + + for iteration in range(self._iterations): + self.log_info(fl_ctx, f"iteration: {iteration}/{self._iterations}") + if abort_signal.triggered: + break + + try: + data, label = next(iter_dataloader) + except StopIteration: + # 3. store metrics + current_time = time.time() - start_time + self.train_loss_sequence.append( + ( + current_time, + compute_loss_over_dataset( + self.model, self.loss, self.train_dataloader + ), + ) + ) + self.test_loss_sequence.append( + ( + current_time, + compute_loss_over_dataset( + self.model, self.loss, self.test_dataloader + ), + ) + ) + # restart after an epoch + iter_dataloader = iter(self.train_dataloader) + data, label = next(iter_dataloader) + + # run algorithm step + with torch.no_grad(): + # 1. exchange trainable parameters and tracker + value_to_exchange = { + "parameters": self.model.parameters(), + "tracker": self.tracker, + } + self._exchange_values( + fl_ctx, value=value_to_exchange, iteration=iteration + ) + + # 2. Update trainable parameters + # - a. compute consensus value + for idx, param in enumerate(self.model.parameters()): + if param.requires_grad: + param.mul_(self._weight) + for neighbor in self.neighbors: + param.add_( + self.neighbors_values[iteration][neighbor.id][ + "parameters" + ][idx], + alpha=neighbor.weight, + ) + + # - b. update local parameters + self._update_local_state(self._stepsize) + + # 3. Update tracker + # - a. consensus on tracker + for idx, tracker in enumerate(iter(self.tracker)): + tracker.mul_(self._weight) + for neighbor in self.neighbors: + tracker.add_( + self.neighbors_values[iteration][neighbor.id]["tracker"][ + idx + ], + alpha=neighbor.weight, + ) + + # -b. compute new gradients + self.model.zero_grad() + pred = self.model(data) + loss = self.loss(pred, label) + loss.backward() + + gradient = [param.grad for param in self.model.parameters()] + + # - c. update tracker + for i in range(len(self.tracker)): + self.tracker[i] += gradient[i] - self.old_gradient[i] + + self.old_gradient = gradient + + # 4. free memory that's no longer needed + del self.neighbors_values[iteration] + + def _update_local_state(self, stepsize): + for idx, param in enumerate(self.model.parameters()): + if param.requires_grad: + param.add_(self.tracker[idx], alpha=-stepsize) + + def _to_message(self, x): + return { + "parameters": [param.cpu().numpy() for param in iter(x["parameters"])], + "tracker": [z.cpu().numpy() for z in iter(x["tracker"])], + } + + def _from_message(self, x): + return { + "parameters": [torch.from_numpy(param) for param in x["parameters"]], + "tracker": [torch.from_numpy(z) for z in x["tracker"]], + } + + def _pre_algorithm_run(self, fl_ctx, shareable, abort_signal): + data = from_shareable(shareable).data + self._iterations = data["iterations"] + self._stepsize = data["stepsize"] + + init_train_loss = compute_loss_over_dataset( + self.model, self.loss, self.train_dataloader + ) + init_test_loss = compute_loss_over_dataset( + self.model, self.loss, self.test_dataloader + ) + + self.train_loss_sequence.append((0, init_train_loss)) + self.test_loss_sequence.append((0, init_test_loss)) + + # initialize tracker + self.old_gradient = [ + torch.zeros_like(param) for param in self.model.parameters() + ] + self.tracker = [torch.zeros_like(param) for param in self.model.parameters()] + + def _post_algorithm_run(self, *args, **kwargs): + torch.save(torch.tensor(self.train_loss_sequence), "train_loss_sequence.pt") + torch.save(torch.tensor(self.test_loss_sequence), "test_loss_sequence.pt") diff --git a/examples/advanced/distributed_optimization/nvdo/executors/gtadam.py b/examples/advanced/distributed_optimization/nvdo/executors/gtadam.py new file mode 100644 index 0000000000..c221bc8c31 --- /dev/null +++ b/examples/advanced/distributed_optimization/nvdo/executors/gtadam.py @@ -0,0 +1,33 @@ +import torch +from nvflare.apis.dxo import from_shareable + +from .gradient_tracking import GTExecutor + + +class GTADAMExecutor(GTExecutor): + def _pre_algorithm_run(self, fl_ctx, shareable, abort_signal): + super()._pre_algorithm_run(fl_ctx, shareable, abort_signal) + + data = from_shareable(shareable).data + self.beta1 = data["beta1"] + self.beta2 = data["beta2"] + self.epsilon = data["epsilon"] + self.G = torch.tensor(1e6) + self.m = [torch.zeros_like(param) for param in self.model.parameters()] + self.v = [torch.zeros_like(param) for param in self.model.parameters()] + + + def _update_local_state(self, stepsize): + for i in range(len(self.tracker)): + self.m[i] = self.beta1 * self.m[i] + (1 - self.beta1) * self.tracker[i] + self.v[i] = torch.minimum( + self.beta2 * self.v[i] + (1 - self.beta2) * self.tracker[i] ** 2, self.G + ) + + with torch.no_grad(): + for idx, param in enumerate(self.model.parameters()): + if param.requires_grad: + descent = torch.divide( + self.m[idx], torch.sqrt(self.v[idx] + self.epsilon) + ) + param.add_(descent, alpha=-stepsize) diff --git a/examples/advanced/distributed_optimization/nvdo/types/__init__.py b/examples/advanced/distributed_optimization/nvdo/types/__init__.py new file mode 100644 index 0000000000..4be2d9af0e --- /dev/null +++ b/examples/advanced/distributed_optimization/nvdo/types/__init__.py @@ -0,0 +1,92 @@ +from dataclasses import dataclass, field + + +@dataclass +class Neighbor: + """Represents a neighbor in the network.""" + + id: int | str + weight: float | None = None + + @property + def __dict__(self): + return {"id": self.id, "weight": self.weight} + + +@dataclass +class Node: + """Represents a node in the network.""" + + id: int | str | None = None + neighbors: list[Neighbor] = field(default_factory=list) + + @property + def __dict__(self): + return { + "id": self.id, + "neighbors": [neighbor.__dict__ for neighbor in self.neighbors], + } + + def __post_init__(self): + new_neighbors = [] + for neighbor in self.neighbors: + if isinstance(neighbor, dict): + new_neighbors.append(Neighbor(**neighbor)) + else: + new_neighbors.append(neighbor) + self.neighbors = new_neighbors + + +@dataclass +class Network: + """Represents a network.""" + + nodes: list[Node] = field(default_factory=list) + + @property + def __dict__(self): + return {"nodes": [node.__dict__ for node in self.nodes]} + + def __post_init__(self): + new_nodes = [] + for node in self.nodes: + if isinstance(node, dict): + new_nodes.append(Node(**node)) + else: + new_nodes.append(node) + self.nodes = new_nodes + + +@dataclass +class Config: + network: Network + + extra: dict = field(default_factory=dict) + + @property + def __dict__(self): + return {"extra": self.extra, "network": self.network.__dict__} + + def __post_init__(self): + if isinstance(self.network, dict): + self.network = Network(**self.network) + + +@dataclass +class LocalConfig: + neighbors: list[Neighbor] + + extra: dict = field(default_factory=dict) + + @property + def __dict__(self): + return {"neighbors": self.neighbors__dict__, "extra": self.extra} + + def __post_init__(self): + new_neighbors = [] + for neighbor in self.neighbors: + if isinstance(neighbor, dict): + new_neighbors.append(Neighbor(**neighbor)) + else: + new_neighbors.append(neighbor) + self.neighbors = new_neighbors diff --git a/examples/advanced/distributed_optimization/nvdo/utils/__init__.py b/examples/advanced/distributed_optimization/nvdo/utils/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/examples/advanced/distributed_optimization/nvdo/utils/config_generator.py b/examples/advanced/distributed_optimization/nvdo/utils/config_generator.py new file mode 100644 index 0000000000..84fe324309 --- /dev/null +++ b/examples/advanced/distributed_optimization/nvdo/utils/config_generator.py @@ -0,0 +1,53 @@ +import networkx as nx +import numpy as np + +from nvdo.types import Neighbor, Node, Network + +from .topology import doubly_stochastic_adjacency + + +def generate_random_network( + num_clients: int, + seed: int = 42, + connection_probability: float = 0.3, +) -> Network: + """Generate a random configuration for the given number of clients. + The configuration includes the number of iterations, the network topology, + and the initial values for each node. + + Args: + num_clients (int): The number of clients in the network. + + Returns: + BaseConfig: The generated configuration. + np.ndarray: The weighted adjacency matrix of the network. + """ + np.random.seed(seed=seed) + + while True: + graph = nx.gnp_random_graph(num_clients, p=connection_probability) + if nx.is_connected(graph): + break + adjacency_matrix = nx.adjacency_matrix(graph) + np.eye(num_clients) + weighted_adjacency_matrix = doubly_stochastic_adjacency(graph) + + network = [] + for j in range(num_clients): + in_neighbors = np.nonzero(adjacency_matrix[:, j])[0].tolist() + in_weights = weighted_adjacency_matrix[:, j].tolist() + + neighbors = [ + Neighbor(id=f"site-{i + 1}", weight=in_weights[i]) + for i in in_neighbors + if i != j + ] + + network.append(Node( + id=f"site-{j + 1}", + neighbors=neighbors, + )) + + config = Network( + nodes=network, + ) + return config, weighted_adjacency_matrix diff --git a/examples/advanced/distributed_optimization/nvdo/utils/metrics.py b/examples/advanced/distributed_optimization/nvdo/utils/metrics.py new file mode 100644 index 0000000000..1494d18a97 --- /dev/null +++ b/examples/advanced/distributed_optimization/nvdo/utils/metrics.py @@ -0,0 +1,41 @@ +import torch + +def compute_loss_over_dataset( + model: torch.nn.Module | None = None, + loss: torch.nn.modules.loss._Loss | None = None, + dataloader: torch.utils.data.DataLoader | None = None, +) -> float: + """ + Compute the average loss over a dataset. + + Args: + model: The model to use for predictions. + loss: The loss function to use. + dataloader: The dataloader for the dataset. + + Returns: + The average loss over the dataset. + """ + # Check if all required arguments are provided + if model is None or loss is None or dataloader is None: + raise ValueError("All arguments (model, loss, dataloader) must be provided.") + + epoch_loss = 0 + total_samples = 0 + with torch.no_grad(): + # Iterate over the dataloader + for x, y in dataloader: + # Make predictions + pred = model(x) + # Compute the loss + ls = loss(pred, y) + # Accumulate the loss and total samples + epoch_loss += ls.item() # Get the scalar value of the loss + total_samples += 1 + + # Check if there are any samples in the dataset + if total_samples == 0: + raise ValueError("The dataset is empty.") + + # Return the average loss + return epoch_loss / total_samples diff --git a/examples/advanced/distributed_optimization/nvdo/utils/topology.py b/examples/advanced/distributed_optimization/nvdo/utils/topology.py new file mode 100644 index 0000000000..6732a69de6 --- /dev/null +++ b/examples/advanced/distributed_optimization/nvdo/utils/topology.py @@ -0,0 +1,28 @@ +import networkx as nx +import torch + + +def doubly_stochastic_adjacency(graph: nx.Graph) -> torch.Tensor: + """Using Metropolis-Hastings algorithm to compute a doubly stochastic adjacency matrix.""" + num_agents = len(graph.nodes()) + binary_adjacency_matrix = torch.from_numpy(nx.to_numpy_array(graph)).float() + degree = torch.sum(binary_adjacency_matrix, dim=0) + W = torch.zeros((num_agents, num_agents)) + for i in range(num_agents): + N_i = torch.nonzero(binary_adjacency_matrix[i, :]) + for j in N_i: + W[i, j] = 1 / (1 + max(degree[i], degree[j])) + W[i, i] = 1 - torch.sum(W[i, :]) + return W + + +def get_matrix_steady_state(A: torch.Tensor): + """Get the steady state of a matrix via eigendecomposition""" + eigenvalues, eigenvectors = torch.linalg.eig( + A + ) # unnormalized and unordered eigenvalues and eigenvectors + idx = eigenvalues.float().argsort(descending=True) + eigenvectors = eigenvectors.float()[:, idx] + + steady_state = eigenvectors[:, 0] / torch.sum(eigenvectors[:, 0]) + return steady_state diff --git a/examples/advanced/distributed_optimization/pyproject.toml b/examples/advanced/distributed_optimization/pyproject.toml new file mode 100644 index 0000000000..aae4ef0131 --- /dev/null +++ b/examples/advanced/distributed_optimization/pyproject.toml @@ -0,0 +1,24 @@ +[build-system] +requires = ["setuptools >= 61.0"] +build-backend = "setuptools.build_meta" + +[tool.setuptools] +packages = ["nvdo"] + +[project] +name = "nvdo" +version = "0.0.1" +description = "Distributed optimization with NVFlare" +readme = "README.md" +requires-python = ">=3.8" +dependencies = [ + "nvflare==2.5.2", + "omegaconf==2.3.0", + "rich==13.9.4", + "torch==2.5.1", + "torchvision==0.20.1", + "matplotlib==3.10.0", + "scipy==1.15.0", + "scikit-learn==1.6.1", +] + From 7406ac1f37e55fe3d8b7ae6563af0a6c19df8cd0 Mon Sep 17 00:00:00 2001 From: Francesco Farina Date: Wed, 29 Jan 2025 11:04:14 +0000 Subject: [PATCH 02/15] add distributed optimization to examples readme --- examples/advanced/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/examples/advanced/README.md b/examples/advanced/README.md index ebe97ab801..a29103dbdc 100644 --- a/examples/advanced/README.md +++ b/examples/advanced/README.md @@ -44,6 +44,10 @@ Please also install "./requirements.txt" in each example folder. * [Swarm Learning](./swarm_learning/README.md) * Example of swarm learning with NVIDIA FLARE using PyTorch with the CIFAR-10 dataset. +## Distributed Optimization / P2P algorithms +* [Distributed Optimization](./distributed_optimization/README.md) + * Example of using the low-level NVFlare APIs to implement and run P2P distributed optimization algorithms. + ## Vertical Federated Learning * [Vertical Federated Learning](./vertical_federated_learning/README.md) * Example of running split learning using the CIFAR-10 dataset. From 1409de905d9268448c9126e86c127acf2342ecd9 Mon Sep 17 00:00:00 2001 From: Francesco Farina Date: Wed, 29 Jan 2025 13:53:28 +0000 Subject: [PATCH 03/15] update data kind in messages --- .../distributed_optimization/nvdo/controllers/base.py | 4 ++-- .../advanced/distributed_optimization/nvdo/executors/base.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/advanced/distributed_optimization/nvdo/controllers/base.py b/examples/advanced/distributed_optimization/nvdo/controllers/base.py index 7ff3e28d79..a441460dfd 100644 --- a/examples/advanced/distributed_optimization/nvdo/controllers/base.py +++ b/examples/advanced/distributed_optimization/nvdo/controllers/base.py @@ -24,7 +24,7 @@ def control_flow(self, abort_signal: Signal, fl_ctx: FLContext): task = Task( name="config", data=DXO( - data_kind=DataKind.METRICS, + data_kind=DataKind.APP_DEFINED, data={"neighbors": [n.__dict__ for n in node.neighbors]}, ).to_shareable(), ) @@ -36,7 +36,7 @@ def control_flow(self, abort_signal: Signal, fl_ctx: FLContext): task=Task( name="run_algorithm", data=DXO( - data_kind=DataKind.METRICS, + data_kind=DataKind.APP_DEFINED, data={key: value for key, value in self.config.extra.items()}, ).to_shareable(), ), diff --git a/examples/advanced/distributed_optimization/nvdo/executors/base.py b/examples/advanced/distributed_optimization/nvdo/executors/base.py index 74a8ac78c0..fdc18ae7ba 100644 --- a/examples/advanced/distributed_optimization/nvdo/executors/base.py +++ b/examples/advanced/distributed_optimization/nvdo/executors/base.py @@ -100,7 +100,7 @@ def _exchange_values(self, fl_ctx: FLContext, value: any, iteration: int): targets=[neighbor.id for neighbor in self.neighbors], topic="send_value", request=DXO( - data_kind=DataKind.METRICS, + data_kind=DataKind.WEIGHTS, data={ "value": self._to_message(value), "iteration": iteration, From 3d1e710444c39653d495111191fc39dbb87a8abc Mon Sep 17 00:00:00 2001 From: Francesco Farina Date: Thu, 30 Jan 2025 16:31:51 +0000 Subject: [PATCH 04/15] add license text --- .../examples/1-consensus/launcher.py | 13 +++++++++++++ .../examples/2-two_moons/config.py | 13 +++++++++++++ .../examples/2-two_moons/launcher_dgd.py | 13 +++++++++++++ .../examples/2-two_moons/launcher_gt.py | 13 +++++++++++++ .../examples/2-two_moons/launcher_gtadam.py | 13 +++++++++++++ .../examples/2-two_moons/utils.py | 13 +++++++++++++ .../examples/3-mnist/config.py | 13 +++++++++++++ .../examples/3-mnist/launcher_dgd.py | 13 +++++++++++++ .../examples/3-mnist/launcher_gt.py | 13 +++++++++++++ .../examples/3-mnist/launcher_gtadam.py | 13 +++++++++++++ .../examples/3-mnist/utils.py | 13 +++++++++++++ .../distributed_optimization/nvdo/__init__.py | 13 +++++++++++++ .../nvdo/controllers/__init__.py | 13 +++++++++++++ .../nvdo/controllers/base.py | 13 +++++++++++++ .../nvdo/executors/__init__.py | 13 +++++++++++++ .../distributed_optimization/nvdo/executors/base.py | 13 +++++++++++++ .../nvdo/executors/consensus.py | 13 +++++++++++++ .../nvdo/executors/distributed_gradient_descent.py | 13 +++++++++++++ .../nvdo/executors/gradient_tracking.py | 13 +++++++++++++ .../nvdo/executors/gtadam.py | 13 +++++++++++++ .../distributed_optimization/nvdo/types/__init__.py | 13 +++++++++++++ .../distributed_optimization/nvdo/utils/__init__.py | 13 +++++++++++++ .../nvdo/utils/config_generator.py | 13 +++++++++++++ .../distributed_optimization/nvdo/utils/metrics.py | 13 +++++++++++++ .../distributed_optimization/nvdo/utils/topology.py | 13 +++++++++++++ 25 files changed, 325 insertions(+) diff --git a/examples/advanced/distributed_optimization/examples/1-consensus/launcher.py b/examples/advanced/distributed_optimization/examples/1-consensus/launcher.py index 86689d6076..e1482300bf 100644 --- a/examples/advanced/distributed_optimization/examples/1-consensus/launcher.py +++ b/examples/advanced/distributed_optimization/examples/1-consensus/launcher.py @@ -1,3 +1,16 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import pickle import random import matplotlib.pyplot as plt diff --git a/examples/advanced/distributed_optimization/examples/2-two_moons/config.py b/examples/advanced/distributed_optimization/examples/2-two_moons/config.py index 250083010a..fbd18354fb 100644 --- a/examples/advanced/distributed_optimization/examples/2-two_moons/config.py +++ b/examples/advanced/distributed_optimization/examples/2-two_moons/config.py @@ -1,3 +1,16 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. NUM_CLIENTS = 6 ITERATIONS = 1000 STEPSIZE = 0.01 \ No newline at end of file diff --git a/examples/advanced/distributed_optimization/examples/2-two_moons/launcher_dgd.py b/examples/advanced/distributed_optimization/examples/2-two_moons/launcher_dgd.py index e5397176df..985be0fc09 100644 --- a/examples/advanced/distributed_optimization/examples/2-two_moons/launcher_dgd.py +++ b/examples/advanced/distributed_optimization/examples/2-two_moons/launcher_dgd.py @@ -1,3 +1,16 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import torch from utils import NeuralNetwork, get_dataloaders, plot_results from config import NUM_CLIENTS, ITERATIONS, STEPSIZE diff --git a/examples/advanced/distributed_optimization/examples/2-two_moons/launcher_gt.py b/examples/advanced/distributed_optimization/examples/2-two_moons/launcher_gt.py index 5bc5563ad9..d050c966d7 100644 --- a/examples/advanced/distributed_optimization/examples/2-two_moons/launcher_gt.py +++ b/examples/advanced/distributed_optimization/examples/2-two_moons/launcher_gt.py @@ -1,3 +1,16 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import torch from nvflare.job_config.api import FedJob from utils import NeuralNetwork, get_dataloaders, plot_results diff --git a/examples/advanced/distributed_optimization/examples/2-two_moons/launcher_gtadam.py b/examples/advanced/distributed_optimization/examples/2-two_moons/launcher_gtadam.py index 1f11c4f043..32fa0ceaf2 100644 --- a/examples/advanced/distributed_optimization/examples/2-two_moons/launcher_gtadam.py +++ b/examples/advanced/distributed_optimization/examples/2-two_moons/launcher_gtadam.py @@ -1,3 +1,16 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import torch from nvflare.job_config.api import FedJob from utils import NeuralNetwork, get_dataloaders, plot_results diff --git a/examples/advanced/distributed_optimization/examples/2-two_moons/utils.py b/examples/advanced/distributed_optimization/examples/2-two_moons/utils.py index aacc5c9952..02eccf6cd3 100644 --- a/examples/advanced/distributed_optimization/examples/2-two_moons/utils.py +++ b/examples/advanced/distributed_optimization/examples/2-two_moons/utils.py @@ -1,3 +1,16 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. from torch import nn from sklearn.datasets import make_moons import torch diff --git a/examples/advanced/distributed_optimization/examples/3-mnist/config.py b/examples/advanced/distributed_optimization/examples/3-mnist/config.py index 434de3f011..8ce3abb37d 100644 --- a/examples/advanced/distributed_optimization/examples/3-mnist/config.py +++ b/examples/advanced/distributed_optimization/examples/3-mnist/config.py @@ -1,3 +1,16 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. NUM_CLIENTS = 4 ITERATIONS = 20000 STEPSIZE = 0.001 \ No newline at end of file diff --git a/examples/advanced/distributed_optimization/examples/3-mnist/launcher_dgd.py b/examples/advanced/distributed_optimization/examples/3-mnist/launcher_dgd.py index 01e71d6e44..7439d6a234 100644 --- a/examples/advanced/distributed_optimization/examples/3-mnist/launcher_dgd.py +++ b/examples/advanced/distributed_optimization/examples/3-mnist/launcher_dgd.py @@ -1,3 +1,16 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import torch from config import ITERATIONS, NUM_CLIENTS, STEPSIZE from nvflare.job_config.api import FedJob diff --git a/examples/advanced/distributed_optimization/examples/3-mnist/launcher_gt.py b/examples/advanced/distributed_optimization/examples/3-mnist/launcher_gt.py index c66454fbc1..e8c0f6629b 100644 --- a/examples/advanced/distributed_optimization/examples/3-mnist/launcher_gt.py +++ b/examples/advanced/distributed_optimization/examples/3-mnist/launcher_gt.py @@ -1,3 +1,16 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import torch from nvflare.job_config.api import FedJob from utils import NeuralNetwork, get_dataloaders, plot_results diff --git a/examples/advanced/distributed_optimization/examples/3-mnist/launcher_gtadam.py b/examples/advanced/distributed_optimization/examples/3-mnist/launcher_gtadam.py index d7b4d1556a..8ac71bc2a6 100644 --- a/examples/advanced/distributed_optimization/examples/3-mnist/launcher_gtadam.py +++ b/examples/advanced/distributed_optimization/examples/3-mnist/launcher_gtadam.py @@ -1,3 +1,16 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import torch from nvflare.job_config.api import FedJob from utils import NeuralNetwork, get_dataloaders, plot_results diff --git a/examples/advanced/distributed_optimization/examples/3-mnist/utils.py b/examples/advanced/distributed_optimization/examples/3-mnist/utils.py index fa5d252f7c..bb019d1b07 100644 --- a/examples/advanced/distributed_optimization/examples/3-mnist/utils.py +++ b/examples/advanced/distributed_optimization/examples/3-mnist/utils.py @@ -1,3 +1,16 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import matplotlib.pyplot as plt import torch from torch import nn diff --git a/examples/advanced/distributed_optimization/nvdo/__init__.py b/examples/advanced/distributed_optimization/nvdo/__init__.py index e69de29bb2..ecc3520aba 100644 --- a/examples/advanced/distributed_optimization/nvdo/__init__.py +++ b/examples/advanced/distributed_optimization/nvdo/__init__.py @@ -0,0 +1,13 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. \ No newline at end of file diff --git a/examples/advanced/distributed_optimization/nvdo/controllers/__init__.py b/examples/advanced/distributed_optimization/nvdo/controllers/__init__.py index d500b9249c..948de939ad 100644 --- a/examples/advanced/distributed_optimization/nvdo/controllers/__init__.py +++ b/examples/advanced/distributed_optimization/nvdo/controllers/__init__.py @@ -1 +1,14 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. from .base import AlgorithmController # noqa \ No newline at end of file diff --git a/examples/advanced/distributed_optimization/nvdo/controllers/base.py b/examples/advanced/distributed_optimization/nvdo/controllers/base.py index a441460dfd..0327aa0749 100644 --- a/examples/advanced/distributed_optimization/nvdo/controllers/base.py +++ b/examples/advanced/distributed_optimization/nvdo/controllers/base.py @@ -1,3 +1,16 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. from nvflare.apis.controller_spec import Task from nvflare.apis.dxo import DXO, DataKind from nvflare.apis.fl_context import FLContext diff --git a/examples/advanced/distributed_optimization/nvdo/executors/__init__.py b/examples/advanced/distributed_optimization/nvdo/executors/__init__.py index c5da51cfd6..b3093390bb 100644 --- a/examples/advanced/distributed_optimization/nvdo/executors/__init__.py +++ b/examples/advanced/distributed_optimization/nvdo/executors/__init__.py @@ -1,3 +1,16 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. from .base import SynchronousAlgorithmExecutor # noqa from .consensus import ConsensusExecutor # noqa from .distributed_gradient_descent import DGDExecutor # noqa diff --git a/examples/advanced/distributed_optimization/nvdo/executors/base.py b/examples/advanced/distributed_optimization/nvdo/executors/base.py index fdc18ae7ba..7c75121e16 100644 --- a/examples/advanced/distributed_optimization/nvdo/executors/base.py +++ b/examples/advanced/distributed_optimization/nvdo/executors/base.py @@ -1,3 +1,16 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import threading from abc import abstractmethod from collections import defaultdict diff --git a/examples/advanced/distributed_optimization/nvdo/executors/consensus.py b/examples/advanced/distributed_optimization/nvdo/executors/consensus.py index 34506a389a..7d6cc7f220 100644 --- a/examples/advanced/distributed_optimization/nvdo/executors/consensus.py +++ b/examples/advanced/distributed_optimization/nvdo/executors/consensus.py @@ -1,3 +1,16 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import pickle import random diff --git a/examples/advanced/distributed_optimization/nvdo/executors/distributed_gradient_descent.py b/examples/advanced/distributed_optimization/nvdo/executors/distributed_gradient_descent.py index 52e63ba37b..c56f3712ca 100644 --- a/examples/advanced/distributed_optimization/nvdo/executors/distributed_gradient_descent.py +++ b/examples/advanced/distributed_optimization/nvdo/executors/distributed_gradient_descent.py @@ -1,3 +1,16 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import torch from nvflare.apis.dxo import from_shareable from nvdo.utils.metrics import compute_loss_over_dataset diff --git a/examples/advanced/distributed_optimization/nvdo/executors/gradient_tracking.py b/examples/advanced/distributed_optimization/nvdo/executors/gradient_tracking.py index 686cc8557b..473a5495c5 100644 --- a/examples/advanced/distributed_optimization/nvdo/executors/gradient_tracking.py +++ b/examples/advanced/distributed_optimization/nvdo/executors/gradient_tracking.py @@ -1,3 +1,16 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import torch from nvflare.apis.dxo import from_shareable from nvdo.utils.metrics import compute_loss_over_dataset diff --git a/examples/advanced/distributed_optimization/nvdo/executors/gtadam.py b/examples/advanced/distributed_optimization/nvdo/executors/gtadam.py index c221bc8c31..3d8bdb63aa 100644 --- a/examples/advanced/distributed_optimization/nvdo/executors/gtadam.py +++ b/examples/advanced/distributed_optimization/nvdo/executors/gtadam.py @@ -1,3 +1,16 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import torch from nvflare.apis.dxo import from_shareable diff --git a/examples/advanced/distributed_optimization/nvdo/types/__init__.py b/examples/advanced/distributed_optimization/nvdo/types/__init__.py index 4be2d9af0e..bc26eecf8b 100644 --- a/examples/advanced/distributed_optimization/nvdo/types/__init__.py +++ b/examples/advanced/distributed_optimization/nvdo/types/__init__.py @@ -1,3 +1,16 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. from dataclasses import dataclass, field diff --git a/examples/advanced/distributed_optimization/nvdo/utils/__init__.py b/examples/advanced/distributed_optimization/nvdo/utils/__init__.py index e69de29bb2..ecc3520aba 100644 --- a/examples/advanced/distributed_optimization/nvdo/utils/__init__.py +++ b/examples/advanced/distributed_optimization/nvdo/utils/__init__.py @@ -0,0 +1,13 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. \ No newline at end of file diff --git a/examples/advanced/distributed_optimization/nvdo/utils/config_generator.py b/examples/advanced/distributed_optimization/nvdo/utils/config_generator.py index 84fe324309..b39bf140cf 100644 --- a/examples/advanced/distributed_optimization/nvdo/utils/config_generator.py +++ b/examples/advanced/distributed_optimization/nvdo/utils/config_generator.py @@ -1,3 +1,16 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import networkx as nx import numpy as np diff --git a/examples/advanced/distributed_optimization/nvdo/utils/metrics.py b/examples/advanced/distributed_optimization/nvdo/utils/metrics.py index 1494d18a97..7f9b1ee74c 100644 --- a/examples/advanced/distributed_optimization/nvdo/utils/metrics.py +++ b/examples/advanced/distributed_optimization/nvdo/utils/metrics.py @@ -1,3 +1,16 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import torch def compute_loss_over_dataset( diff --git a/examples/advanced/distributed_optimization/nvdo/utils/topology.py b/examples/advanced/distributed_optimization/nvdo/utils/topology.py index 6732a69de6..c69f37486f 100644 --- a/examples/advanced/distributed_optimization/nvdo/utils/topology.py +++ b/examples/advanced/distributed_optimization/nvdo/utils/topology.py @@ -1,3 +1,16 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import networkx as nx import torch From b597afe6c7abe7b865680179d93d209bea929e85 Mon Sep 17 00:00:00 2001 From: Francesco Farina Date: Thu, 30 Jan 2025 16:34:36 +0000 Subject: [PATCH 05/15] fix broken link --- examples/advanced/distributed_optimization/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/advanced/distributed_optimization/README.md b/examples/advanced/distributed_optimization/README.md index 2c942e999c..88cf51bda8 100644 --- a/examples/advanced/distributed_optimization/README.md +++ b/examples/advanced/distributed_optimization/README.md @@ -3,7 +3,7 @@ Here we show how to exploit the lower-level NVFlare APIs to implement P2P distributed optimization algorithms. We built a collection of distributed optimization algorithms built on top of NVFlare with examples. Below you can find a walkthrough of the implementation. The following algorithms are currently implemented: -- Consensus algorithm - initially published in [DeGroot, M. H. (1974). Reaching a Consensus. Journal of the American Statistical Association, 69(345), 118–121.](https://www.jstor.org/stable/2285509) +- Consensus algorithm - initially published in [DeGroot, M. H. (1974). Reaching a Consensus. Journal of the American Statistical Association, 69(345), 118–121.](https://doi.org/10.2307/2285509) - Distributed (stochastic) gradient descent [Tsitsiklis, J., Bertsekas, D., & Athans, M. (1986). Distributed asynchronous deterministic and stochastic gradient optimization algorithms. IEEE transactions on automatic control, 31(9), 803-812.](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=1104412) and [Sundhar Ram, S., Nedić, A., & Veeravalli, V. V. (2010). Distributed stochastic subgradient projection algorithms for convex optimization. Journal of optimization theory and applications, 147, 516-545.](https://arxiv.org/pdf/0811.2595) - (Stochastic) gradient tracking [Pu, S., & Nedić, A. (2021). Distributed stochastic gradient tracking methods. Mathematical Programming, 187(1), 409-457.](https://arxiv.org/pdf/1805.11454) - GTAdam [Carnevale, G., Farina, F., Notarnicola, I., & Notarstefano, G. (2022). GTAdam: Gradient tracking with adaptive momentum for distributed online optimization. IEEE Transactions on Control of Network Systems, 10(3), 1436-1448.](https://ieeexplore.ieee.org/abstract/document/9999485) From e1d394e24dbb6768010dc2bc72bed2665e1d9147 Mon Sep 17 00:00:00 2001 From: Francesco Farina Date: Fri, 31 Jan 2025 11:07:40 +0000 Subject: [PATCH 06/15] move nvdo to nvflare.app_opt.p2p + refactoring --- .gitignore | 1 + .../distributed_optimization/.gitignore | 1 - .../1-consensus/README.md | 2 + .../{examples => }/1-consensus/launcher.py | 23 +- .../1-consensus/tutorial.ipynb | 766 ++++++++++++++ .../{examples => }/2-two_moons/README.md | 0 .../{examples => }/2-two_moons/config.py | 0 .../2-two_moons/dgd_results.png | Bin 0 -> 76368 bytes .../2-two_moons/gt_results.png | Bin 0 -> 75513 bytes .../2-two_moons/gtadam_results.png | Bin 0 -> 45749 bytes .../2-two_moons/launcher_dgd.py | 14 +- .../{examples => }/2-two_moons/launcher_gt.py | 14 +- .../2-two_moons/launcher_gtadam.py | 14 +- .../{examples => }/2-two_moons/utils.py | 0 .../{examples => }/3-mnist/README.md | 0 .../{examples => }/3-mnist/config.py | 0 .../{examples => }/3-mnist/dgd_results.png | Bin .../{examples => }/3-mnist/gt_results.png | Bin .../{examples => }/3-mnist/gtadam_results.png | Bin .../{examples => }/3-mnist/launcher_dgd.py | 12 +- .../{examples => }/3-mnist/launcher_gt.py | 14 +- .../{examples => }/3-mnist/launcher_gtadam.py | 14 +- .../{examples => }/3-mnist/utils.py | 3 +- .../distributed_optimization/README.md | 65 +- .../examples/1-consensus/README.md | 2 - .../1-consensus/consensus_notebook.ipynb | 980 ------------------ .../examples/2-two_moons/dgd_results.png | Bin 81201 -> 0 bytes .../examples/2-two_moons/gt_results.png | Bin 74175 -> 0 bytes .../examples/2-two_moons/gtadam_results.png | Bin 46487 -> 0 bytes .../distributed_optimization/pyproject.toml | 24 - .../distributed_optimization/requirements.txt | 8 + .../nvdo => nvflare/app_opt/p2p}/__init__.py | 0 .../app_opt/p2p}/controllers/__init__.py | 2 +- .../app_opt/p2p/controllers/p2p_controller.py | 6 +- .../app_opt/p2p}/executors/__init__.py | 5 +- .../p2p/executors/base_p2p_executor.py | 102 ++ .../app_opt/p2p}/executors/consensus.py | 10 +- .../executors/distributed_gradient_descent.py | 19 +- .../p2p}/executors/gradient_tracking.py | 13 +- .../app_opt/p2p}/executors/gtadam.py | 7 +- .../app_opt/p2p/executors/sync_executor.py | 75 +- .../app_opt/p2p}/types/__init__.py | 0 .../app_opt/p2p}/utils/__init__.py | 0 .../app_opt/p2p}/utils/config_generator.py | 5 +- .../app_opt/p2p}/utils/metrics.py | 0 .../app_opt/p2p}/utils/topology.py | 0 46 files changed, 996 insertions(+), 1205 deletions(-) create mode 100644 examples/advanced/distributed_optimization/1-consensus/README.md rename examples/advanced/distributed_optimization/{examples => }/1-consensus/launcher.py (73%) create mode 100644 examples/advanced/distributed_optimization/1-consensus/tutorial.ipynb rename examples/advanced/distributed_optimization/{examples => }/2-two_moons/README.md (100%) rename examples/advanced/distributed_optimization/{examples => }/2-two_moons/config.py (100%) create mode 100644 examples/advanced/distributed_optimization/2-two_moons/dgd_results.png create mode 100644 examples/advanced/distributed_optimization/2-two_moons/gt_results.png create mode 100644 examples/advanced/distributed_optimization/2-two_moons/gtadam_results.png rename examples/advanced/distributed_optimization/{examples => }/2-two_moons/launcher_dgd.py (83%) rename examples/advanced/distributed_optimization/{examples => }/2-two_moons/launcher_gt.py (83%) rename examples/advanced/distributed_optimization/{examples => }/2-two_moons/launcher_gtadam.py (84%) rename examples/advanced/distributed_optimization/{examples => }/2-two_moons/utils.py (100%) rename examples/advanced/distributed_optimization/{examples => }/3-mnist/README.md (100%) rename examples/advanced/distributed_optimization/{examples => }/3-mnist/config.py (100%) rename examples/advanced/distributed_optimization/{examples => }/3-mnist/dgd_results.png (100%) rename examples/advanced/distributed_optimization/{examples => }/3-mnist/gt_results.png (100%) rename examples/advanced/distributed_optimization/{examples => }/3-mnist/gtadam_results.png (100%) rename examples/advanced/distributed_optimization/{examples => }/3-mnist/launcher_dgd.py (86%) rename examples/advanced/distributed_optimization/{examples => }/3-mnist/launcher_gt.py (83%) rename examples/advanced/distributed_optimization/{examples => }/3-mnist/launcher_gtadam.py (84%) rename examples/advanced/distributed_optimization/{examples => }/3-mnist/utils.py (98%) delete mode 100644 examples/advanced/distributed_optimization/examples/1-consensus/README.md delete mode 100644 examples/advanced/distributed_optimization/examples/1-consensus/consensus_notebook.ipynb delete mode 100644 examples/advanced/distributed_optimization/examples/2-two_moons/dgd_results.png delete mode 100644 examples/advanced/distributed_optimization/examples/2-two_moons/gt_results.png delete mode 100644 examples/advanced/distributed_optimization/examples/2-two_moons/gtadam_results.png delete mode 100644 examples/advanced/distributed_optimization/pyproject.toml create mode 100644 examples/advanced/distributed_optimization/requirements.txt rename {examples/advanced/distributed_optimization/nvdo => nvflare/app_opt/p2p}/__init__.py (100%) rename {examples/advanced/distributed_optimization/nvdo => nvflare/app_opt/p2p}/controllers/__init__.py (91%) rename examples/advanced/distributed_optimization/nvdo/controllers/base.py => nvflare/app_opt/p2p/controllers/p2p_controller.py (96%) rename {examples/advanced/distributed_optimization/nvdo => nvflare/app_opt/p2p}/executors/__init__.py (82%) create mode 100644 nvflare/app_opt/p2p/executors/base_p2p_executor.py rename {examples/advanced/distributed_optimization/nvdo => nvflare/app_opt/p2p}/executors/consensus.py (90%) rename {examples/advanced/distributed_optimization/nvdo => nvflare/app_opt/p2p}/executors/distributed_gradient_descent.py (94%) rename {examples/advanced/distributed_optimization/nvdo => nvflare/app_opt/p2p}/executors/gradient_tracking.py (97%) rename {examples/advanced/distributed_optimization/nvdo => nvflare/app_opt/p2p}/executors/gtadam.py (96%) rename examples/advanced/distributed_optimization/nvdo/executors/base.py => nvflare/app_opt/p2p/executors/sync_executor.py (58%) rename {examples/advanced/distributed_optimization/nvdo => nvflare/app_opt/p2p}/types/__init__.py (100%) rename {examples/advanced/distributed_optimization/nvdo => nvflare/app_opt/p2p}/utils/__init__.py (100%) rename {examples/advanced/distributed_optimization/nvdo => nvflare/app_opt/p2p}/utils/config_generator.py (93%) rename {examples/advanced/distributed_optimization/nvdo => nvflare/app_opt/p2p}/utils/metrics.py (100%) rename {examples/advanced/distributed_optimization/nvdo => nvflare/app_opt/p2p}/utils/topology.py (100%) diff --git a/.gitignore b/.gitignore index c80bad2c74..09d7e01de8 100644 --- a/.gitignore +++ b/.gitignore @@ -91,6 +91,7 @@ venv/ ENV/ env.bak/ venv.bak/ +.mise.toml # Spyder project settings .spyderproject diff --git a/examples/advanced/distributed_optimization/.gitignore b/examples/advanced/distributed_optimization/.gitignore index 3fde4c99f7..87c90aa325 100644 --- a/examples/advanced/distributed_optimization/.gitignore +++ b/examples/advanced/distributed_optimization/.gitignore @@ -1,3 +1,2 @@ -.mise.toml tmp data \ No newline at end of file diff --git a/examples/advanced/distributed_optimization/1-consensus/README.md b/examples/advanced/distributed_optimization/1-consensus/README.md new file mode 100644 index 0000000000..114105c67b --- /dev/null +++ b/examples/advanced/distributed_optimization/1-consensus/README.md @@ -0,0 +1,2 @@ +# Consensus algorithm +In this example we show how to run the consensus algorithm. You can find a detailed walkthrough in the [tutorial](tutorial.ipynb) or you can just run the provided [script](launcher.py) via `python launcher.py`. \ No newline at end of file diff --git a/examples/advanced/distributed_optimization/examples/1-consensus/launcher.py b/examples/advanced/distributed_optimization/1-consensus/launcher.py similarity index 73% rename from examples/advanced/distributed_optimization/examples/1-consensus/launcher.py rename to examples/advanced/distributed_optimization/1-consensus/launcher.py index e1482300bf..ffd2bd6a6d 100644 --- a/examples/advanced/distributed_optimization/examples/1-consensus/launcher.py +++ b/examples/advanced/distributed_optimization/1-consensus/launcher.py @@ -11,19 +11,20 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -import pickle +import torch import random import matplotlib.pyplot as plt from nvflare.job_config.api import FedJob -from nvdo.controllers import AlgorithmController -from nvdo.executors import ConsensusExecutor -from nvdo.types import Config -from nvdo.utils.config_generator import generate_random_network +from nvflare.app_opt.p2p.controllers import P2PAlgorithmController +from nvflare.app_opt.p2p.executors import ConsensusExecutor +from nvflare.app_opt.p2p.types import Config +from nvflare.app_opt.p2p.utils.config_generator import generate_random_network + class CustomConsensusExecutor(ConsensusExecutor): def __init__(self): - super().__init__(initial_value=random.randint(0,10)) + super().__init__(initial_value=random.randint(0, 10)) if __name__ == "__main__": @@ -33,11 +34,10 @@ def __init__(self): # generate random config num_clients = 6 network, _ = generate_random_network(num_clients=num_clients) - config = Config(network=network, extra={"iterations": 20}) - + config = Config(network=network, extra={"iterations": 50}) # send controller to server - controller = AlgorithmController(config=config) + controller = P2PAlgorithmController(config=config) job.to_server(controller) # Add clients @@ -49,10 +49,9 @@ def __init__(self): job.export_job("./tmp/job_configs") job.simulator_run("./tmp/runs/consensus") - history = { - f"site-{i + 1}": pickle.load( - open(f"tmp/runs/consensus/site-{i + 1}/results.pkl", "rb") + f"site-{i + 1}": torch.load( + f"tmp/runs/consensus/site-{i + 1}/value_sequence.pt" ) for i in range(num_clients) } diff --git a/examples/advanced/distributed_optimization/1-consensus/tutorial.ipynb b/examples/advanced/distributed_optimization/1-consensus/tutorial.ipynb new file mode 100644 index 0000000000..e981f9ebd6 --- /dev/null +++ b/examples/advanced/distributed_optimization/1-consensus/tutorial.ipynb @@ -0,0 +1,766 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Consensus algorithm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this example we'll show how to run a simple consensus algorithm.\n", + "\n", + "## Background\n", + "\n", + "We consider a network of `num_clients` peer clients. Each client $i$ maintains some local value $x_i^t$ and is connected to a subset of the other clients in the network, defined as the set of its neighbors $\\mathcal{N}_i$.\n", + "\n", + "The goal of all the clients is to reach consensus on their local values by communicating with their peers for a certain number of iterations $T$. \n", + "In other terms, they want to cooperatively compute a weighted average of their initial values $x_i^0$.\n", + "\n", + "The consensus algorithm works by having each client updating its local value as\n", + "\n", + "$$x_i^{t+1} = \\sum_{j\\in\\mathcal{N}_i}a_{ji}x_j^t$$\n", + "\n", + "where $a_{ji}$ is the weight associated by client $i$ to client $j$ and $\\sum_{j=1}^N a_{ji}=1$ for all $i$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setup\n", + "Let's assume we have $N=5$ clients and generate a random configuration." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from nvflare.app_opt.p2p.utils.config_generator import generate_random_network\n", + "from nvflare.app_opt.p2p.types import Config\n", + "\n", + "# generate random config\n", + "num_clients=5\n", + "network, adjacency_matrix = generate_random_network(num_clients=num_clients)\n", + "config = Config(network=network, extra={\"iterations\": 50})" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By inspecting the config we can see the initial values of each client as well as the network topology." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Config(\n",
+       "    network=Network(\n",
+       "        nodes=[\n",
+       "            Node(\n",
+       "                id='site-1',\n",
+       "                neighbors=[\n",
+       "                    Neighbor(id='site-2', weight=0.20000000298023224),\n",
+       "                    Neighbor(id='site-3', weight=0.20000000298023224),\n",
+       "                    Neighbor(id='site-4', weight=0.20000000298023224),\n",
+       "                    Neighbor(id='site-5', weight=0.20000000298023224)\n",
+       "                ]\n",
+       "            ),\n",
+       "            Node(id='site-2', neighbors=[Neighbor(id='site-1', weight=0.20000000298023224)]),\n",
+       "            Node(\n",
+       "                id='site-3',\n",
+       "                neighbors=[\n",
+       "                    Neighbor(id='site-1', weight=0.20000000298023224),\n",
+       "                    Neighbor(id='site-4', weight=0.3333333432674408)\n",
+       "                ]\n",
+       "            ),\n",
+       "            Node(\n",
+       "                id='site-4',\n",
+       "                neighbors=[\n",
+       "                    Neighbor(id='site-1', weight=0.20000000298023224),\n",
+       "                    Neighbor(id='site-3', weight=0.3333333432674408)\n",
+       "                ]\n",
+       "            ),\n",
+       "            Node(id='site-5', neighbors=[Neighbor(id='site-1', weight=0.20000000298023224)])\n",
+       "        ]\n",
+       "    ),\n",
+       "    extra={'iterations': 50}\n",
+       ")\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1;35mConfig\u001b[0m\u001b[1m(\u001b[0m\n", + " \u001b[33mnetwork\u001b[0m=\u001b[1;35mNetwork\u001b[0m\u001b[1m(\u001b[0m\n", + " \u001b[33mnodes\u001b[0m=\u001b[1m[\u001b[0m\n", + " \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\n", + " \u001b[33mid\u001b[0m=\u001b[32m'site-1'\u001b[0m,\n", + " \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\n", + " \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-2'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.20000000298023224\u001b[0m\u001b[1m)\u001b[0m,\n", + " \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-3'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.20000000298023224\u001b[0m\u001b[1m)\u001b[0m,\n", + " \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-4'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.20000000298023224\u001b[0m\u001b[1m)\u001b[0m,\n", + " \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-5'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.20000000298023224\u001b[0m\u001b[1m)\u001b[0m\n", + " \u001b[1m]\u001b[0m\n", + " \u001b[1m)\u001b[0m,\n", + " \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-2'\u001b[0m, \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-1'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.20000000298023224\u001b[0m\u001b[1m)\u001b[0m\u001b[1m]\u001b[0m\u001b[1m)\u001b[0m,\n", + " \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\n", + " \u001b[33mid\u001b[0m=\u001b[32m'site-3'\u001b[0m,\n", + " \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\n", + " \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-1'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.20000000298023224\u001b[0m\u001b[1m)\u001b[0m,\n", + " \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-4'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m\n", + " \u001b[1m]\u001b[0m\n", + " \u001b[1m)\u001b[0m,\n", + " \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\n", + " \u001b[33mid\u001b[0m=\u001b[32m'site-4'\u001b[0m,\n", + " \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\n", + " \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-1'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.20000000298023224\u001b[0m\u001b[1m)\u001b[0m,\n", + " \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-3'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m\n", + " \u001b[1m]\u001b[0m\n", + " \u001b[1m)\u001b[0m,\n", + " \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-5'\u001b[0m, \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-1'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.20000000298023224\u001b[0m\u001b[1m)\u001b[0m\u001b[1m]\u001b[0m\u001b[1m)\u001b[0m\n", + " \u001b[1m]\u001b[0m\n", + " \u001b[1m)\u001b[0m,\n", + " \u001b[33mextra\u001b[0m=\u001b[1m{\u001b[0m\u001b[32m'iterations'\u001b[0m: \u001b[1;36m50\u001b[0m\u001b[1m}\u001b[0m\n", + "\u001b[1m)\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from rich import print\n", + "\n", + "print(config)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Instantiating and running the distributed algorithm\n", + "\n", + "Now that we have all the configurations, we can instantiate the clients and a controller." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from nvflare.job_config.api import FedJob\n", + "from nvflare.app_opt.p2p.executors import ConsensusExecutor\n", + "from nvflare.app_opt.p2p.controllers import P2PAlgorithmController\n", + "\n", + "# Create job\n", + "job = FedJob(name=\"consensus\")\n", + "\n", + "# send controller to server\n", + "controller = P2PAlgorithmController(config=config)\n", + "job.to_server(controller)\n", + "\n", + "# Add clients\n", + "for i in range(num_clients):\n", + " executor = ConsensusExecutor() # the executor will be initialized with a random value\n", + " job.to(executor, f\"site-{i+1}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we can run the algorithm" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[38m2025-01-31 10:43:21,315 - SimulatorRunner - INFO - Create the Simulator Server.\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,316 - CoreCell - INFO - server: creating listener on tcp://0:57864\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,341 - CoreCell - INFO - server: created backbone external listener for tcp://0:57864\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,341 - ConnectorManager - INFO - 39829: Try start_listener Listener resources: {'secure': False, 'host': 'localhost'}\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,342 - conn_manager - INFO - Connector [CH00002 PASSIVE tcp://0:9312] is starting\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,843 - CoreCell - INFO - server: created backbone internal listener for tcp://localhost:9312\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,843 - conn_manager - INFO - Connector [CH00001 PASSIVE tcp://0:57864] is starting\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,844 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,844 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,844 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,844 - SimulatorServer - INFO - max_reg_duration=60.0\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,878 - hci - INFO - Starting Admin Server localhost on Port 57865\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,878 - SimulatorRunner - INFO - Deploy the Apps.\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,907 - SimulatorRunner - INFO - Create the simulate clients.\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,907 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,907 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,909 - Communicator - INFO - Trying to register with server ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,910 - ClientManager - INFO - authenticated client site-1: client_fqcn='site-1'\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,910 - ClientManager - INFO - Client: New client site-1@10.2.184.71 joined. Sent token: 44efd389-a1d6-4587-8d9f-e6ff608aefd2. Total clients: 1\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,910 - Communicator - INFO - register RC: ok\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,910 - FederatedClient - INFO - Successfully registered client:site-1 for project simulator_server. Token:44efd389-a1d6-4587-8d9f-e6ff608aefd2 SSID:\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,910 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,910 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,911 - Communicator - INFO - Trying to register with server ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,911 - ClientManager - INFO - authenticated client site-2: client_fqcn='site-2'\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,911 - ClientManager - INFO - Client: New client site-2@10.2.184.71 joined. Sent token: c1552959-386c-4025-9bb9-50232e032487. Total clients: 2\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,911 - Communicator - INFO - register RC: ok\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,911 - FederatedClient - INFO - Successfully registered client:site-2 for project simulator_server. Token:c1552959-386c-4025-9bb9-50232e032487 SSID:\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,911 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,912 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,912 - Communicator - INFO - Trying to register with server ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,912 - ClientManager - INFO - authenticated client site-3: client_fqcn='site-3'\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,912 - ClientManager - INFO - Client: New client site-3@10.2.184.71 joined. Sent token: f70b92dc-edc7-43e3-a330-7f711dd59bdc. Total clients: 3\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,912 - Communicator - INFO - register RC: ok\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,912 - FederatedClient - INFO - Successfully registered client:site-3 for project simulator_server. Token:f70b92dc-edc7-43e3-a330-7f711dd59bdc SSID:\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,912 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,912 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,913 - Communicator - INFO - Trying to register with server ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,913 - ClientManager - INFO - authenticated client site-4: client_fqcn='site-4'\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,913 - ClientManager - INFO - Client: New client site-4@10.2.184.71 joined. Sent token: e95e4133-deaa-40de-b3a7-ba37f0a2b361. Total clients: 4\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,913 - Communicator - INFO - register RC: ok\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,913 - FederatedClient - INFO - Successfully registered client:site-4 for project simulator_server. Token:e95e4133-deaa-40de-b3a7-ba37f0a2b361 SSID:\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,913 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,913 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,913 - Communicator - INFO - Trying to register with server ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,913 - ClientManager - INFO - authenticated client site-5: client_fqcn='site-5'\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,913 - ClientManager - INFO - Client: New client site-5@10.2.184.71 joined. Sent token: b6b4eb38-d385-47a8-8235-05210d2a1f77. Total clients: 5\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,913 - Communicator - INFO - register RC: ok\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,914 - FederatedClient - INFO - Successfully registered client:site-5 for project simulator_server. Token:b6b4eb38-d385-47a8-8235-05210d2a1f77 SSID:\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,914 - SimulatorRunner - INFO - Set the client status ready.\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,914 - SimulatorRunner - INFO - Deploy and start the Server App.\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,914 - Cell - INFO - Register blob CB for channel='server_command', topic='*'\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,914 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,914 - ServerCommandAgent - INFO - ServerCommandAgent cell register_request_cb: server.simulate_job\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,922 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,922 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,922 - AuxRunner - INFO - registered aux handler for topic __sync_runner__\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,922 - AuxRunner - INFO - registered aux handler for topic __job_heartbeat__\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,922 - AuxRunner - INFO - registered aux handler for topic __task_check__\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,922 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,922 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,923 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,923 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job] - Server runner starting ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,923 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,923 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job] - starting workflow controller () ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,923 - P2PAlgorithmController - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - BaseController started\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,923 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - Workflow controller () started\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:21,923 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:22,919 - SimulatorClientRunner - INFO - Start the clients run simulation.\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:23,920 - SimulatorClientRunner - INFO - Simulate Run client: site-1 on GPU group: None\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:23,922 - SimulatorClientRunner - INFO - Simulate Run client: site-2 on GPU group: None\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:23,924 - SimulatorClientRunner - INFO - Simulate Run client: site-3 on GPU group: None\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:23,924 - SimulatorClientRunner - INFO - Simulate Run client: site-4 on GPU group: None\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:23,925 - SimulatorClientRunner - INFO - Simulate Run client: site-5 on GPU group: None\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,932 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,932 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,935 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,936 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,937 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,971 - CoreCell - INFO - site-3.simulate_job: created backbone external connector to tcp://localhost:57864\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,971 - CoreCell - INFO - site-1.simulate_job: created backbone external connector to tcp://localhost:57864\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,971 - CoreCell - INFO - site-5.simulate_job: created backbone external connector to tcp://localhost:57864\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,971 - CoreCell - INFO - site-2.simulate_job: created backbone external connector to tcp://localhost:57864\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,971 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:57864] is starting\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,971 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:57864] is starting\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,971 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:57864] is starting\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,971 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:57864] is starting\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,971 - CoreCell - INFO - site-4.simulate_job: created backbone external connector to tcp://localhost:57864\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,971 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:57864] is starting\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,972 - conn_manager - INFO - Connection [CN00002 127.0.0.1:57940 => 127.0.0.1:57864] is created: PID: 39848\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,972 - conn_manager - INFO - Connection [CN00002 127.0.0.1:57941 => 127.0.0.1:57864] is created: PID: 39850\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,972 - conn_manager - INFO - Connection [CN00002 127.0.0.1:57942 => 127.0.0.1:57864] is created: PID: 39846\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,972 - conn_manager - INFO - Connection [CN00002 127.0.0.1:57943 => 127.0.0.1:57864] is created: PID: 39847\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,972 - conn_manager - INFO - Connection [CN00002 127.0.0.1:57944 => 127.0.0.1:57864] is created: PID: 39849\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,972 - conn_manager - INFO - Connection [CN00008 127.0.0.1:57864 <= 127.0.0.1:57940] is created: PID: 39829\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,973 - conn_manager - INFO - Connection [CN00009 127.0.0.1:57864 <= 127.0.0.1:57941] is created: PID: 39829\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,973 - conn_manager - INFO - Connection [CN00010 127.0.0.1:57864 <= 127.0.0.1:57942] is created: PID: 39829\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,973 - conn_manager - INFO - Connection [CN00011 127.0.0.1:57864 <= 127.0.0.1:57943] is created: PID: 39829\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:24,973 - conn_manager - INFO - Connection [CN00012 127.0.0.1:57864 <= 127.0.0.1:57944] is created: PID: 39829\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,072 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,072 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,072 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,072 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,072 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,072 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,072 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,072 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,076 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,076 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:25,792 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,308 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - synced to Server Runner in 0.5137271881103516 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,309 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,309 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,309 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,310 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,310 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,310 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - client runner started\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,310 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-3\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,311 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - synced to Server Runner in 0.5162680149078369 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,311 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - synced to Server Runner in 0.5165047645568848 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,311 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,311 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - synced to Server Runner in 0.5163741111755371 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,311 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,312 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,312 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,312 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,312 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,312 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - synced to Server Runner in 0.5167350769042969 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,312 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,312 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,312 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,312 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,312 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,312 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,312 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,312 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,312 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,312 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,312 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - client runner started\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,312 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,312 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - client runner started\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,313 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,313 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-5\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,313 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-1\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,313 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - client runner started\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,313 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,313 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-2\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,313 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,313 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - client runner started\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,313 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-4\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,315 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=config, task_id=7bf65655-f007-4ea7-bec9-6f4988ec7d25] - assigned task to client site-1: name=config, id=7bf65655-f007-4ea7-bec9-6f4988ec7d25\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,316 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=config, task_id=7bf65655-f007-4ea7-bec9-6f4988ec7d25] - sent task assignment to client. client_name:site-1 task_id:7bf65655-f007-4ea7-bec9-6f4988ec7d25\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,316 - GetTaskCommand - INFO - return task to client. client_name: site-1 task_name: config task_id: 7bf65655-f007-4ea7-bec9-6f4988ec7d25 sharable_header_task_id: 7bf65655-f007-4ea7-bec9-6f4988ec7d25\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,319 - Communicator - INFO - Received from simulator_server server. getTask: config size: 782B (782 Bytes) time: 0.005942 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,319 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,319 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=7bf65655-f007-4ea7-bec9-6f4988ec7d25\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,319 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7bf65655-f007-4ea7-bec9-6f4988ec7d25] - invoking task executor ConsensusExecutor\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,320 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7bf65655-f007-4ea7-bec9-6f4988ec7d25] - finished processing task\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,320 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7bf65655-f007-4ea7-bec9-6f4988ec7d25] - try #1: sending task result to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,320 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7bf65655-f007-4ea7-bec9-6f4988ec7d25] - checking task ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,322 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7bf65655-f007-4ea7-bec9-6f4988ec7d25] - start to send task result to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,322 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,323 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job] - got result from client site-1 for task: name=config, id=7bf65655-f007-4ea7-bec9-6f4988ec7d25\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,323 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=7bf65655-f007-4ea7-bec9-6f4988ec7d25] - finished processing client result by controller\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,324 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-1 task_id:7bf65655-f007-4ea7-bec9-6f4988ec7d25\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,324 - Communicator - INFO - SubmitUpdate size: 606B (606 Bytes). time: 0.001705 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,324 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7bf65655-f007-4ea7-bec9-6f4988ec7d25] - task result sent to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,325 - ClientTaskWorker - INFO - Finished one task run for client: site-1 interval: 2 task_processed: True\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,392 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,403 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,827 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=config, task_id=6c2ea1c7-7648-45ae-8a16-6c57016b9594] - assigned task to client site-2: name=config, id=6c2ea1c7-7648-45ae-8a16-6c57016b9594\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,827 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=config, task_id=6c2ea1c7-7648-45ae-8a16-6c57016b9594] - sent task assignment to client. client_name:site-2 task_id:6c2ea1c7-7648-45ae-8a16-6c57016b9594\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,828 - GetTaskCommand - INFO - return task to client. client_name: site-2 task_name: config task_id: 6c2ea1c7-7648-45ae-8a16-6c57016b9594 sharable_header_task_id: 6c2ea1c7-7648-45ae-8a16-6c57016b9594\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,830 - Communicator - INFO - Received from simulator_server server. getTask: config size: 701B (701 Bytes) time: 0.006084 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,830 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,830 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=6c2ea1c7-7648-45ae-8a16-6c57016b9594\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,831 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6c2ea1c7-7648-45ae-8a16-6c57016b9594] - invoking task executor ConsensusExecutor\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,831 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6c2ea1c7-7648-45ae-8a16-6c57016b9594] - finished processing task\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,831 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6c2ea1c7-7648-45ae-8a16-6c57016b9594] - try #1: sending task result to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,831 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6c2ea1c7-7648-45ae-8a16-6c57016b9594] - checking task ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,834 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6c2ea1c7-7648-45ae-8a16-6c57016b9594] - start to send task result to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,834 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,835 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job] - got result from client site-2 for task: name=config, id=6c2ea1c7-7648-45ae-8a16-6c57016b9594\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,835 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=6c2ea1c7-7648-45ae-8a16-6c57016b9594] - finished processing client result by controller\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,835 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-2 task_id:6c2ea1c7-7648-45ae-8a16-6c57016b9594\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,836 - Communicator - INFO - SubmitUpdate size: 606B (606 Bytes). time: 0.001925 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,836 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6c2ea1c7-7648-45ae-8a16-6c57016b9594] - task result sent to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:26,837 - ClientTaskWorker - INFO - Finished one task run for client: site-2 interval: 2 task_processed: True\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:27,007 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:27,017 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:27,329 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=config, task_id=de1ca509-7941-4c92-ad93-1df7279cf95c] - assigned task to client site-3: name=config, id=de1ca509-7941-4c92-ad93-1df7279cf95c\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:27,330 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=config, task_id=de1ca509-7941-4c92-ad93-1df7279cf95c] - sent task assignment to client. client_name:site-3 task_id:de1ca509-7941-4c92-ad93-1df7279cf95c\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:27,330 - GetTaskCommand - INFO - return task to client. client_name: site-3 task_name: config task_id: de1ca509-7941-4c92-ad93-1df7279cf95c sharable_header_task_id: de1ca509-7941-4c92-ad93-1df7279cf95c\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:27,331 - Communicator - INFO - Received from simulator_server server. getTask: config size: 728B (728 Bytes) time: 0.003929 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:27,331 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:27,332 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=de1ca509-7941-4c92-ad93-1df7279cf95c\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:27,332 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=de1ca509-7941-4c92-ad93-1df7279cf95c] - invoking task executor ConsensusExecutor\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:27,332 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=de1ca509-7941-4c92-ad93-1df7279cf95c] - finished processing task\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:27,332 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=de1ca509-7941-4c92-ad93-1df7279cf95c] - try #1: sending task result to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:27,333 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=de1ca509-7941-4c92-ad93-1df7279cf95c] - checking task ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:27,336 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=de1ca509-7941-4c92-ad93-1df7279cf95c] - start to send task result to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:27,337 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:27,338 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job] - got result from client site-3 for task: name=config, id=de1ca509-7941-4c92-ad93-1df7279cf95c\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:27,338 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=de1ca509-7941-4c92-ad93-1df7279cf95c] - finished processing client result by controller\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:27,338 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-3 task_id:de1ca509-7941-4c92-ad93-1df7279cf95c\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:27,339 - Communicator - INFO - SubmitUpdate size: 606B (606 Bytes). time: 0.002095 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:27,339 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=de1ca509-7941-4c92-ad93-1df7279cf95c] - task result sent to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:27,339 - ClientTaskWorker - INFO - Finished one task run for client: site-3 interval: 2 task_processed: True\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:27,414 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:27,424 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,347 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=config, task_id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a] - assigned task to client site-4: name=config, id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,350 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=config, task_id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a] - sent task assignment to client. client_name:site-4 task_id:cff2ed3a-56d5-4676-b811-12f2cd1ebc4a\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,351 - GetTaskCommand - INFO - return task to client. client_name: site-4 task_name: config task_id: cff2ed3a-56d5-4676-b811-12f2cd1ebc4a sharable_header_task_id: cff2ed3a-56d5-4676-b811-12f2cd1ebc4a\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,354 - Communicator - INFO - Received from simulator_server server. getTask: config size: 728B (728 Bytes) time: 0.012186 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,354 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,354 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,355 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a] - invoking task executor ConsensusExecutor\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,355 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a] - finished processing task\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,355 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a] - try #1: sending task result to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,355 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a] - checking task ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,358 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a] - start to send task result to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,358 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,359 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job] - got result from client site-4 for task: name=config, id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,360 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a] - finished processing client result by controller\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,360 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-4 task_id:cff2ed3a-56d5-4676-b811-12f2cd1ebc4a\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,361 - Communicator - INFO - SubmitUpdate size: 606B (606 Bytes). time: 0.002285 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,361 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a] - task result sent to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,361 - ClientTaskWorker - INFO - Finished one task run for client: site-4 interval: 2 task_processed: True\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,457 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,662 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,856 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=config, task_id=61256033-1e00-4555-a8f7-ef7377d1e6f1] - assigned task to client site-5: name=config, id=61256033-1e00-4555-a8f7-ef7377d1e6f1\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,857 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=config, task_id=61256033-1e00-4555-a8f7-ef7377d1e6f1] - sent task assignment to client. client_name:site-5 task_id:61256033-1e00-4555-a8f7-ef7377d1e6f1\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,857 - GetTaskCommand - INFO - return task to client. client_name: site-5 task_name: config task_id: 61256033-1e00-4555-a8f7-ef7377d1e6f1 sharable_header_task_id: 61256033-1e00-4555-a8f7-ef7377d1e6f1\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,860 - Communicator - INFO - Received from simulator_server server. getTask: config size: 701B (701 Bytes) time: 0.008032 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,861 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,861 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=61256033-1e00-4555-a8f7-ef7377d1e6f1\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,862 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=61256033-1e00-4555-a8f7-ef7377d1e6f1] - invoking task executor ConsensusExecutor\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,863 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=61256033-1e00-4555-a8f7-ef7377d1e6f1] - finished processing task\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,863 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=61256033-1e00-4555-a8f7-ef7377d1e6f1] - try #1: sending task result to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,863 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=61256033-1e00-4555-a8f7-ef7377d1e6f1] - checking task ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,867 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=61256033-1e00-4555-a8f7-ef7377d1e6f1] - start to send task result to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,867 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,869 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job] - got result from client site-5 for task: name=config, id=61256033-1e00-4555-a8f7-ef7377d1e6f1\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,870 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=61256033-1e00-4555-a8f7-ef7377d1e6f1] - finished processing client result by controller\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,870 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-5 task_id:61256033-1e00-4555-a8f7-ef7377d1e6f1\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,871 - Communicator - INFO - SubmitUpdate size: 606B (606 Bytes). time: 0.003672 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,871 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=61256033-1e00-4555-a8f7-ef7377d1e6f1] - task result sent to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:29,872 - ClientTaskWorker - INFO - Finished one task run for client: site-5 interval: 2 task_processed: True\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:30,067 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:30,072 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task run_algorithm\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:30,369 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=run_algorithm, task_id=eda2b3b7-f158-424b-a6c0-86b769fe67be] - assigned task to client site-3: name=run_algorithm, id=eda2b3b7-f158-424b-a6c0-86b769fe67be\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:30,369 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=run_algorithm, task_id=eda2b3b7-f158-424b-a6c0-86b769fe67be] - sent task assignment to client. client_name:site-3 task_id:eda2b3b7-f158-424b-a6c0-86b769fe67be\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:30,370 - GetTaskCommand - INFO - return task to client. client_name: site-3 task_name: run_algorithm task_id: eda2b3b7-f158-424b-a6c0-86b769fe67be sharable_header_task_id: eda2b3b7-f158-424b-a6c0-86b769fe67be\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:30,371 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.004151 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:30,371 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:30,372 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=eda2b3b7-f158-424b-a6c0-86b769fe67be\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:30,372 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=eda2b3b7-f158-424b-a6c0-86b769fe67be] - invoking task executor ConsensusExecutor\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,355 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=run_algorithm, task_id=29a5a623-1855-404a-922c-8548d2c1490d] - assigned task to client site-1: name=run_algorithm, id=29a5a623-1855-404a-922c-8548d2c1490d\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,356 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=run_algorithm, task_id=29a5a623-1855-404a-922c-8548d2c1490d] - sent task assignment to client. client_name:site-1 task_id:29a5a623-1855-404a-922c-8548d2c1490d\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,357 - GetTaskCommand - INFO - return task to client. client_name: site-1 task_name: run_algorithm task_id: 29a5a623-1855-404a-922c-8548d2c1490d sharable_header_task_id: 29a5a623-1855-404a-922c-8548d2c1490d\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,360 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.007064 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,360 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,361 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=29a5a623-1855-404a-922c-8548d2c1490d\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,361 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29a5a623-1855-404a-922c-8548d2c1490d] - invoking task executor ConsensusExecutor\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,368 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=run_algorithm, task_id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25] - assigned task to client site-4: name=run_algorithm, id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,368 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=run_algorithm, task_id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25] - sent task assignment to client. client_name:site-4 task_id:6dc738d8-d113-4c70-99c1-53f5ed2c8a25\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,369 - GetTaskCommand - INFO - return task to client. client_name: site-4 task_name: run_algorithm task_id: 6dc738d8-d113-4c70-99c1-53f5ed2c8a25 sharable_header_task_id: 6dc738d8-d113-4c70-99c1-53f5ed2c8a25\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,369 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.004394 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,370 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,370 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,370 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25] - invoking task executor ConsensusExecutor\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,868 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=run_algorithm, task_id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da] - assigned task to client site-2: name=run_algorithm, id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,868 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=run_algorithm, task_id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da] - sent task assignment to client. client_name:site-2 task_id:f22cd8c0-9e9a-4532-b9c0-53b6c977e9da\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,868 - GetTaskCommand - INFO - return task to client. client_name: site-2 task_name: run_algorithm task_id: f22cd8c0-9e9a-4532-b9c0-53b6c977e9da sharable_header_task_id: f22cd8c0-9e9a-4532-b9c0-53b6c977e9da\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,869 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.002690 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,870 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,870 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,870 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da] - invoking task executor ConsensusExecutor\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,877 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=run_algorithm, task_id=cd95cbc8-beec-4237-92a1-c27a203d8c90] - assigned task to client site-5: name=run_algorithm, id=cd95cbc8-beec-4237-92a1-c27a203d8c90\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,878 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=run_algorithm, task_id=cd95cbc8-beec-4237-92a1-c27a203d8c90] - sent task assignment to client. client_name:site-5 task_id:cd95cbc8-beec-4237-92a1-c27a203d8c90\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,878 - GetTaskCommand - INFO - return task to client. client_name: site-5 task_name: run_algorithm task_id: cd95cbc8-beec-4237-92a1-c27a203d8c90 sharable_header_task_id: cd95cbc8-beec-4237-92a1-c27a203d8c90\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,878 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.001726 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,879 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,879 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=cd95cbc8-beec-4237-92a1-c27a203d8c90\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:31,879 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=cd95cbc8-beec-4237-92a1-c27a203d8c90] - invoking task executor ConsensusExecutor\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,052 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=eda2b3b7-f158-424b-a6c0-86b769fe67be] - finished processing task\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,052 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da] - finished processing task\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,052 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da] - try #1: sending task result to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,052 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=eda2b3b7-f158-424b-a6c0-86b769fe67be] - try #1: sending task result to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,053 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da] - checking task ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,053 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=eda2b3b7-f158-424b-a6c0-86b769fe67be] - checking task ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,053 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=cd95cbc8-beec-4237-92a1-c27a203d8c90] - finished processing task\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,053 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25] - finished processing task\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,053 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25] - try #1: sending task result to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,053 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29a5a623-1855-404a-922c-8548d2c1490d] - finished processing task\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,053 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=cd95cbc8-beec-4237-92a1-c27a203d8c90] - try #1: sending task result to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,053 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25] - checking task ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,053 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=cd95cbc8-beec-4237-92a1-c27a203d8c90] - checking task ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,053 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29a5a623-1855-404a-922c-8548d2c1490d] - try #1: sending task result to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,053 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29a5a623-1855-404a-922c-8548d2c1490d] - checking task ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,054 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=eda2b3b7-f158-424b-a6c0-86b769fe67be] - start to send task result to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,054 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,054 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da] - start to send task result to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,054 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,055 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=cd95cbc8-beec-4237-92a1-c27a203d8c90] - start to send task result to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,055 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,055 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job] - got result from client site-3 for task: name=run_algorithm, id=eda2b3b7-f158-424b-a6c0-86b769fe67be\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,056 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=eda2b3b7-f158-424b-a6c0-86b769fe67be] - finished processing client result by controller\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,056 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25] - start to send task result to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,056 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,056 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-3 task_id:eda2b3b7-f158-424b-a6c0-86b769fe67be\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,056 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29a5a623-1855-404a-922c-8548d2c1490d] - start to send task result to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,056 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,056 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job] - got result from client site-2 for task: name=run_algorithm, id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,057 - Communicator - INFO - SubmitUpdate size: 613B (613 Bytes). time: 0.002475 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,057 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=eda2b3b7-f158-424b-a6c0-86b769fe67be] - task result sent to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,057 - ClientTaskWorker - INFO - Finished one task run for client: site-3 interval: 2 task_processed: True\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,057 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da] - finished processing client result by controller\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,057 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-2 task_id:f22cd8c0-9e9a-4532-b9c0-53b6c977e9da\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,057 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job] - got result from client site-5 for task: name=run_algorithm, id=cd95cbc8-beec-4237-92a1-c27a203d8c90\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,057 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job] - got result from client site-4 for task: name=run_algorithm, id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,057 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job] - got result from client site-1 for task: name=run_algorithm, id=29a5a623-1855-404a-922c-8548d2c1490d\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,058 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=cd95cbc8-beec-4237-92a1-c27a203d8c90] - finished processing client result by controller\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,058 - Communicator - INFO - SubmitUpdate size: 613B (613 Bytes). time: 0.003446 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,058 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-5 task_id:cd95cbc8-beec-4237-92a1-c27a203d8c90\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,058 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da] - task result sent to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,058 - ClientTaskWorker - INFO - Finished one task run for client: site-2 interval: 2 task_processed: True\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,058 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25] - finished processing client result by controller\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,058 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-4 task_id:6dc738d8-d113-4c70-99c1-53f5ed2c8a25\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,058 - Communicator - INFO - SubmitUpdate size: 613B (613 Bytes). time: 0.003244 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,058 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=cd95cbc8-beec-4237-92a1-c27a203d8c90] - task result sent to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,058 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=29a5a623-1855-404a-922c-8548d2c1490d] - finished processing client result by controller\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,059 - ClientTaskWorker - INFO - Finished one task run for client: site-5 interval: 2 task_processed: True\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,059 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-1 task_id:29a5a623-1855-404a-922c-8548d2c1490d\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,059 - Communicator - INFO - SubmitUpdate size: 613B (613 Bytes). time: 0.003021 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,059 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25] - task result sent to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,059 - ClientTaskWorker - INFO - Finished one task run for client: site-4 interval: 2 task_processed: True\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,059 - Communicator - INFO - SubmitUpdate size: 613B (613 Bytes). time: 0.002907 seconds\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,059 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29a5a623-1855-404a-922c-8548d2c1490d] - task result sent to server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,059 - ClientTaskWorker - INFO - Finished one task run for client: site-1 interval: 2 task_processed: True\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,107 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task run_algorithm exit with status TaskCompletionStatus.OK\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,107 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - Workflow: controller finalizing ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,108 - P2PAlgorithmController - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - BaseController stopped\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,108 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - ABOUT_TO_END_RUN fired\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,109 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,109 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,109 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,109 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,109 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,109 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - END_RUN fired\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,109 - ReliableMessage - INFO - ReliableMessage is shutdown\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,109 - ObjectStreamer - INFO - Stream Runer is Shut Down\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,109 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - Server runner finished.\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:32,109 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:33,942 - SimulatorServer - INFO - Server app stopped.\n", + "\n", + "\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:33,949 - ReliableMessage - INFO - shutdown reliable message monitor\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,067 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,068 - GetTaskCommand - INFO - return task to client. client_name: site-3 task_name: __end_run__ task_id: sharable_header_task_id: \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,070 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,070 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,071 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,072 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,072 - GetTaskCommand - INFO - return task to client. client_name: site-2 task_name: __end_run__ task_id: sharable_header_task_id: \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,072 - GetTaskCommand - INFO - return task to client. client_name: site-4 task_name: __end_run__ task_id: sharable_header_task_id: \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,073 - GetTaskCommand - INFO - return task to client. client_name: site-5 task_name: __end_run__ task_id: sharable_header_task_id: \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,073 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,073 - GetTaskCommand - INFO - return task to client. client_name: site-1 task_name: __end_run__ task_id: sharable_header_task_id: \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,073 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - server asked to end the run\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,074 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - started end-run events sequence\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,074 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n", + "\u001b[33m2025-01-31 10:43:34,075 - Communicator - WARNING - Failed to get_task from simulator_server server. Will try it again.\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,075 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,075 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - END_RUN fired\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,076 - FederatedClient - INFO - pull_task completed. Task name:None Status:False \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,076 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,076 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - started end-run events sequence\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,077 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,077 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,077 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,077 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - server asked to end the run\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,077 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - END_RUN fired\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,078 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - started end-run events sequence\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,078 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n", + "\u001b[33m2025-01-31 10:43:34,078 - Communicator - WARNING - Failed to get_task from simulator_server server. Will try it again.\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,078 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,078 - FederatedClient - INFO - pull_task completed. Task name:None Status:False \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,078 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,079 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,079 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-3 \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,079 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - server asked to end the run\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,079 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - END_RUN fired\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,079 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-2 \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,079 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - started end-run events sequence\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,079 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n", + "\u001b[33m2025-01-31 10:43:34,079 - Cell - WARNING - Receiving unknown req_id='a9ad8558-922d-4a2d-8b68-4c2d6e450e28', discarded: 'a9ad8558-922d-4a2d-8b68-4c2d6e450e28' headers: {'cn__return_code': 'ok', 'cn__req_id': '', 'cn__msg_type': 'req', 'sm__ri': 'a9ad8558-922d-4a2d-8b68-4c2d6e450e28', 'sm__pe': 'fobs', 'cn__payload_len': 459, 'sm__ch': 'return_only', 'sm__tp': 'server_command:get_task', 'sm__sz': 459, 'sm__id': 1738360030169108, 'sm__dt': 2, 'sm__sq': 0, 'sm__os': 0, 'sm__op': True, 'cn__reply_expected': False, 'cn__optional': True, 'cn__secure': False, 'cn__topic': 'sm__DATA', 'cn__channel': 'sm__STREAM', 'cn__destination': 'site-5.simulate_job', 'cn__from': 'server', 'cn__to': 'site-5.simulate_job', 'cn__origin': 'server.simulate_job', 'cn__route': [['server.simulate_job', 1738320214.076976], ['server', 1738320214.0770261], ('site-5.simulate_job', 1738320214.0791261)], 'cn__send_time': 1738320214.077028}\u001b[0m\n", + "\u001b[33m2025-01-31 10:43:34,079 - Cell - WARNING - Receiving unknown req_id='9e1feaab-50af-4e97-a33e-ae25ae7c7878', discarded: '9e1feaab-50af-4e97-a33e-ae25ae7c7878' headers: {'cn__return_code': 'ok', 'cn__req_id': '', 'cn__msg_type': 'req', 'sm__ri': '9e1feaab-50af-4e97-a33e-ae25ae7c7878', 'sm__pe': 'fobs', 'cn__payload_len': 459, 'sm__ch': 'return_only', 'sm__tp': 'server_command:get_task', 'sm__sz': 459, 'sm__id': 1738360030169109, 'sm__dt': 2, 'sm__sq': 0, 'sm__os': 0, 'sm__op': True, 'cn__reply_expected': False, 'cn__optional': True, 'cn__secure': False, 'cn__topic': 'sm__DATA', 'cn__channel': 'sm__STREAM', 'cn__destination': 'site-2.simulate_job', 'cn__from': 'server', 'cn__to': 'site-2.simulate_job', 'cn__origin': 'server.simulate_job', 'cn__route': [['server.simulate_job', 1738320214.078249], ['server', 1738320214.078298], ('site-2.simulate_job', 1738320214.0791411)], 'cn__send_time': 1738320214.0783}\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,079 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,079 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - started end-run events sequence\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,080 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,080 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - END_RUN fired\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,080 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,080 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,080 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-1 \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,080 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,080 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - END_RUN fired\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,080 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 39848\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,081 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,081 - conn_manager - INFO - Connection [CN00008 Not Connected] is closed PID: 39829\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,081 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-4 \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,081 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 39847\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,081 - conn_manager - INFO - Connection [CN00011 Not Connected] is closed PID: 39829\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,081 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-5 \u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,082 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 39846\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,082 - conn_manager - INFO - Connection [CN00010 Not Connected] is closed PID: 39829\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,083 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 39849\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,083 - conn_manager - INFO - Connection [CN00012 Not Connected] is closed PID: 39829\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,083 - FederatedClient - INFO - Shutting down client run: site-1\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,084 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 39850\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,084 - conn_manager - INFO - Connection [CN00009 Not Connected] is closed PID: 39829\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,084 - FederatedClient - INFO - Shutting down client run: site-2\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,084 - FederatedClient - INFO - Shutting down client run: site-3\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,085 - FederatedClient - INFO - Shutting down client run: site-4\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,085 - FederatedClient - INFO - Shutting down client run: site-5\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,085 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - asked to abort - triggered abort_signal to stop the RUN\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,400 - hci - INFO - Admin Server localhost on Port 57865 shutdown!\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,400 - SimulatorServer - INFO - shutting down server\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,400 - SimulatorServer - INFO - canceling sync locks\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:34,400 - SimulatorServer - INFO - server off\u001b[0m\n", + "\u001b[38m2025-01-31 10:43:37,873 - MPM - INFO - MPM: Good Bye!\u001b[0m\n" + ] + } + ], + "source": [ + "# run\n", + "job.export_job(\"./tmp/job_configs\")\n", + "job.simulator_run(\"./tmp/runs/consensus\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, since in this toy example we have access to both the intial values and the adjacency matrix, we can compute the consensus value at which the clients will converge." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/82/970ljrw529v0chx2svm8gwwr0000gp/T/ipykernel_39797/4202699194.py:6: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n", + " f\"site-{i+1}\": torch.load(f\"tmp/runs/consensus/site-{i+1}/value_sequence.pt\") for i in range(num_clients)\n", + "/Users/ffarina/Documents/code/NVFlare/nvflare/app_opt/p2p/utils/topology.py:37: UserWarning: Casting complex values to real discards the imaginary part (Triggered internally at /Users/runner/work/pytorch/pytorch/pytorch/aten/src/ATen/native/Copy.cpp:308.)\n", + " idx = eigenvalues.float().argsort(descending=True)\n" + ] + }, + { + "data": { + "text/html": [ + "
Consensus value: 0.47792279720306396\n",
+       "
\n" + ], + "text/plain": [ + "Consensus value: \u001b[1;36m0.47792279720306396\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import torch\n", + "\n", + "from nvflare.app_opt.p2p.utils.topology import get_matrix_steady_state\n", + "\n", + "history = {\n", + " f\"site-{i+1}\": torch.load(f\"tmp/runs/consensus/site-{i+1}/value_sequence.pt\") for i in range(num_clients)\n", + "}\n", + "x0=torch.tensor([h[0] for name, h in history.items()]).t()\n", + "consensus_value = x0 @ get_matrix_steady_state(adjacency_matrix)\n", + "print(f\"Consensus value: {consensus_value}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By inspecting the history/results, we can easily see that all the clients successfully converged to the expected consensus value. " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# plot results\n", + "plt.figure()\n", + "for i in range(num_clients):\n", + " plt.plot(history[f\"site-{i+1}\"], label=f\"site-{i+1}\")\n", + "plt.axhline(y=consensus_value, color='k', linestyle=\"--\", label=\"Consensus value\")\n", + "plt.legend()\n", + "plt.title(\"Evolution of local values\")\n", + "plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/advanced/distributed_optimization/examples/2-two_moons/README.md b/examples/advanced/distributed_optimization/2-two_moons/README.md similarity index 100% rename from examples/advanced/distributed_optimization/examples/2-two_moons/README.md rename to examples/advanced/distributed_optimization/2-two_moons/README.md diff --git a/examples/advanced/distributed_optimization/examples/2-two_moons/config.py b/examples/advanced/distributed_optimization/2-two_moons/config.py similarity index 100% rename from examples/advanced/distributed_optimization/examples/2-two_moons/config.py rename to examples/advanced/distributed_optimization/2-two_moons/config.py diff --git a/examples/advanced/distributed_optimization/2-two_moons/dgd_results.png b/examples/advanced/distributed_optimization/2-two_moons/dgd_results.png new file mode 100644 index 0000000000000000000000000000000000000000..555aa9f3c7729cbd66eb8f64a6790e0c3fc1322d GIT binary patch literal 76368 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

9PU=u zC_}9;U=l99Pptd1F(s_5=sS$L5W}J&xgMkRwsy@eNq3**Tq8Qx-!Ew791ffT!PTlZ3dGK!`^-iX6 zJyyBGD@SF4bzT6lYuMyz+8KuG`hg*Wa0`@g&(yY6U_~*iZ!y_Uo_`ZGs;!{Eg+=!L z3c~ZF_~)We$Vo+EBuGCg5N`q+Wnq@?-$RUy}T=o<-p@&(XUlN(Sb9ZQ?bkK zDuDO8fM~ORQSY)^?!KX>+qK!1GrZfuF+#DniIUZyv^zJ@p= zq`uHb9cSOIcM8cza~QOT?7lYVnFPpcb7na#+dJ3cL#mpLOBrLps9j% zNhM&ocUfLMEZ+|}= z8}*~>IqP^Ani`s#D^vPT$>P(1=faNwyfyb7H3Lcki8}i)8HH{q8*w7LLH+)N9DO8r zYT38lpxEzU0z33`2p@boS3{ouqu!zeDgzR-V0_5YBrne~FV+i-FK@9`vJ3=#{#Suy zqmtAp6ZYuQqa^D~y%r$c{#RYNk2#2NG(9097_?Afz^dynHjCllQ}WZ;Riw5e*bM;^ zSpO%~Lb;JN0MIX;I>#)Qpgjd7t^X{OPytJ}v(|y?C+-k18`sUFxTE2l?IV#GJ^_K* z;jeGv*ncB@!UA_zYuMG%0=;}@so#I!ns>?#izlf7*b&XaH1CbIozKq9Tv%TPnN&*9 z&`=!in%0~0r+4%WM=FOUbqF8t@2wONEa&kf6?XnX?n~mo<&vkDobGw!8y5d+%esSX zi9jpyXj(j|9k96QFlS(Amz9)61Tb%!wG7@PLp0v~r;bdw3x+oFs@8Ea+B(}u#%NO; zIJTjTW9Zd)>TlGqPiFtyjx3DGkdY1#+wS|e7>edk+V$kz9MOZQv$W_G=sDEZTLU8_ zDYR#Q&m5~>H3LxZwBYIYyUyI*8%F}`e8k>vR?%O1{D9p19=G+#`^Vz*xZJCe8@blQ zX$TQr!H-G!`g6B|?A8t9jM1PycWt;2TIE6L!}J!9eFQ23_Lf@U(Fjw%59_*;*xv9^ z$eRw6KVP(!z=iR2VB@h*xGgd#8qAngR_T*}_$)~$+S%F7u}S~gt!#V$9#2C``tG zdj}@=?)5(v;s+zc+HF2mf}@WcQFL(rAi3Cb|0+8K>_)Kw0yH{Y1Dw!Qw?)nk4Yt^^;~!nG3H>w^;bYGp}DOCQge6A}=>g~(2j+71R$ znMWXa{Q!gXHJIFr-@p%|+Wdb>GN?d2lZ}>^_5i5BCo4t8UnPu;$l(BE-m&R12+z{{ zj{s}rKG+4_aHat?QfeU~5+H<$OGrqRHCw?)`8+0Pb88E(TflXl0!$S=Wb&LY_89No zB)~S_z?1hVhHz8DZ?7f7=kOQVArXW$5Gcy^0F_oa%=0yT&dY-o7NVvadZwcJ2+jz!d9h#YG!%|?ZJ}xMK%&CZ-ce)J=HF??gW+o8&qI`yUv4%LnBMX z^w#miM~@`oh5IfHoQ=@@JKJxrR^)g>ok%QD7&x;mqjH{f_j!sZql2ziDb7IDGy)7w z8zl&iW%fbj+3d&XmtqIWU=>x%AHmtsYX0!>aBd{1{F{nGe4UqNeX7sAX`H92Z$ydV z+QBoRpDAPsYNoWqlOAl~f^1-eD{Y>hf@A|>F?)cF4>C;O^v$lo8D*TIZyiwBRDT;L_&6-(sKis(d-3KqTU zhq!bK@2-gi|2D_?59|J-F#Wkj*LM_#fP2lIE+aV_=lta0@Nj-`pRt^g@6m#E#K$v@ z*OdICzrn(j{;yiho?-$kDoc;m8&{fs(A&{y|0@gazbv9GeuURV@JO(?blJcvoZZ4e z%DzAE3rPAL46g&{HW*mNwGqag9uM|by*?eJ41HYNJ3ajfoV?@oGg}}j!TERaOO0V=G^@uar-T(zzD-!@x6V}=kYumzKL!)cs|Ks9}b@PWbh zcE1bLl7r5w8@uHxT%eSal^qI*mmQus1X=0ToZBn<5y35%J9+`^AnH*gwV&!e-8Bm~ z!Z7z`a4G^+{{u%-Prnol16hD-!|3mZ21XQ{yKRWDnx5}s`#kT)+Vm-Mlnflx6B9$g zCR5MY%?c!b+jQ%^Eor{+&8iArxL}nwtc4SxG8|mort9+%L*;JekiGRbaotn=39%-W zBA-;x%hhoh?6Uix^uWKpIdYwrKh9Z*Z4`mb)uNb*e1hNiOi&XQ1!-hAzmI-St-DNj z=h&Q~giFE&lb6_CDyh~IZQ;%|gwKY&83#Uxz8p;hO_D)_BX}}~ILpWepIz9FbujC> z&zqW|Ysh2bCuy`XpHmbZYZeH^R^#*vG>eSHJV9Los4rfMR7w6pchtGl;9RZjp9!u6 zTC>lA*sL#0!T&gu>dEpf>p-D~w1%LT81XPt<2cQxehTcv(D>FwJQ+%#TR9si7xO5Y z;8_uiV_KFG51B5;guq)L^in+!nvau})mo0Uvb9LB&?n&cUM3(m779InrJDRME@Sv( zL1p9E+J5Ke$;aFd#?;j;JbOiFT4~ak?oml0*n%`NHXp}19Kl_p5h$1(b17Qz;AASk zaMzL$dHO5u(!sGz!7j=|>y=qCZNs`mP0!i2n`HPh4y2#Y=;(bU(6(qS`4b*IeG1?m~L)+U8KXyRvN zpn}vpJLuO;jUj2vIunFGUFB(-SlB3t$&7dew`YuBiTye~CQe2lQJXtnNKB=RK7L4sUa|yk3G#eG z@R6xHB3=$AQ;nWhmUS=D+7JAgq4|{IB1c8%8hLMl7PQT6@`mj~0Y1kc1+T**Pg3c~ z&%watGkMmc#KBiAbs=dv#R#f-cw{0?MMYMxTgTtR_2N~|Oc6g$$)wJr zvk(6J3`19hw>xdLBNDY*uRM0!XhV27g^<9o5{#kr*b&|>ufL#1MqhUrV?SO}>=R&Q zuxh|b*5&#*$v8lZV=$=|U*hXjxb2Fl`RAb91e$=PeJPKppJ?DKwK*9Jr|ON^xH>JY zm6l8|*JWwS10x4=6NX;1-RH#)n~YwYO0Z*12jgd|rD?Kvq}bdcZ*cb@_>rqhRyxJC z@y_*gq5na`bH!0|94VEjsG@Wl&rdP8b4R_4AE4^t?*x=h(pQQewe;bp>cMvDUe z`6_dHAllfKA&)QNBP^F;-F~aoGTQXXg$h@BdtC7hhAMVD*TFACm1VA*qira09>$qZ4 zA0jKg^(Bf?)=J(UEbe`tEE_IyDXDyg;>p2#9cC3zCxDS#Z(yk1d8K1!-$SJSlcszj z;#AzWB#D0Xs&F-`!(2c_^obCe1IIGktfj}N*^Oj+%nw^+{02exp+1y+3U2lxTm24W zALL09L0S)_)I>-mk1ejc3rYxeGXiuD9r(?9Z^&VfFR_fRLK*qcS9;q=E~1gt?cN)) z8Pcu~D>><_pVy)s$|f2f^TjJT?tgPh((hCDk9w^z z?c&Ey(FuQ2(<UrFFG*l)sGfllG&w7g7Uucti-R`xU_jdx_dFI?WB2lpH^L zE3W_9hw^FS2=<+H{y$0~GNmb{WL)Ox{V|WaW+on5^bqNs17?O01G?ZE@8|YRcSeO2 z!IGsz6wmx>6e8A=ebe~SDbo)RDP1+Ni3(6dF`ie>z2?BrJ(xwPaIeaK@m62~&2DqJ zps-X@Q8CT{uz{w`EED&}M@g0Xy}8}?Aw4USxBNorddQzHbk`ZO-Von=pyD)X;-`q` znSom|mK~=&guB0DM1~WmhpzBY_I8Ft;ajw@V-Om=vtbl{oTg$DK%FNv4lbjg6yMMg zSPKt9>!D5Mi$>$z)%nci($CRL&C7%#nEZe#=Mhs*)p|ZuxG|9CNuHXpYp`-R*<#mp z>)civ(zFYXsh!Az=wsqx&k0@~6+5kwe0B@xdWOeLMqe$vvgA;^s7v zY62SBMyxzd4vs0N)GAeE6LxzxUJSnU@-KxHt)+t<%+lBUgPt|9AA9pM)=)dJuVW+8 zR&&q*Fy%ihorv*oB;r5L?^r4$Xd*F6nwQb-eY(hx;_Ja*WLNj8Qx}7Ip`4_;Ji_NE zXEK#>1=X?}P2|CbNi_|%(MyRCMiK#ANi6I^A5FCu8Lrtj~YBxY_9IZH${;Dvxbb9DBZq$VL?ZM zx3~Sby2bKC_&Si=)u1uO5j0u#NVrT<&whwn$!myI>6379lu!>q9V9!p(a<%WoHvcJ zfBmc(BksbN2SV=G9PwIEq?5%q^3;M_$dXCzGM-=X^8NNDrCF{gD(e&Knv&vm->rbG zJtxI*j|3ti9OFW1vv15P>P|$N_ns=_nSCMCmEtdm9HQsl7iUf~v@0byHL6p1Kl|W@ z;F^a{cgJ|nKD>07gXb+ym>-j=h8-4#)f?5lt^%nlgRfoUJVLxP<5+LLDGr?Fm5Ygr zy?;7xK3jnjtMs-#*3|d2O#sJ!q9n*AP$%P{XEk0u*FbGp+;t2xP))h^82D6RGZ%Wp z$;~0UbAd|{(Qxk)vn5VOR$v1qcoHIIRQa(;pYPJ#SD6)5%7QNHN* zp#XbVdAb%o#L5&TB7ZjTOs#s-Z_Yxj`wcs z=dkV8Uq-INCLP~2IbtfvA)6ibWz&{c*ih;dkOUv zR!?Tbw2b`4gu}?J?u-v!|nYn^OSz- z9xwZ|ZO$uE*k5^SN$YJ7AOZvanu^F#HyVDs)ABOU7L4KpkG`g zn_N0(a=AA1-?sA$u$SJy;fO=1m<#NWZh9Cc026CS4X&Rk`}pzW&OzH$&xWw4mN+FH z9m>m>FAqY~)84)A?&c?Yobi>pO^>;A&cTgDZH4QxP)+C&PnTiSgWbkG>|cda67`xW zdLe&uG_5Dif@%;bl0TcLnlfZ)VsokHP1|wMv!kqzD-g|&_P1g##v022li)5C&Jm1H zj9PMk%X&tq9H}tDoRigUjPbg4dR=P$W=}=uQpE1~i?dWRqTT2i86JLht%j8TcmlB~ z)~uv*LgMKVEzzd8dL4MKcyLrxpENm*A)neQMj6kz2{(p}xlPJ` z18o#pN_kxUr{}CG<1z-%j^ul_aGFmwT?4Z5g!~Ic!KHDq8H<5-0$GBE@04@79R=?n z#=eYtmrB}8qP*j?(R~&G{W~2W&(x2j1EjXpNgd4od(>(<{&EAwQ<&O%Q$!69Ys0Cw zXU_@b;=VYCe~{M2+2%yXBE01_p+I{T^RZNgQU*VmVapbr2^5%apP2q^YlH8r*R&z5 z6>PO$bc4IAP^ci1E_fjM`&Rsp0PPJU12MI4EFVteT9hmH?S3o!fUMXkU$^&3M?ozW z;}7aoTf`H@8O$dAH;5i9XZklf+Y4WNr*`!I;8Z0Lzml@5CYMZ#Rj`56mv@qrtlXGZ zQi}ZR%aeZ|zaZhnw@qW3HcXMh+r32jGIedkkIVMM!Mg&SIx>tt%$$9p%CHEE`RW$Lq$&jz4Hoj*do#E~Df5no~c;l*COIQx|$K`MImn5pI5hA&xi%%gRI z110Yl>1S#5zIM}blkX%J!xO|}Q8_@ob8eX9O>nw4OqT0aD1{}x&?DOmGj3PKo|w#)MZ5TXUp=oIII6$Fc9#O+sp^fLWl zk0dnR7Jz6hy_z{b{`2P$7nM5EuT!~QWGn4(I55IdA` zV3%$@Hvcn8E=A;@mPUJDlf-I8pR{N>THBNElT8p+HtQ1_iq$O%ZZ-;Rc56O75el7j z5UQN;ll%5zee`oA|YQ3?5dv7YnWNoFaN}bku!DFx0xZlT~@RDrF7C&ri;7s69*%8VzRE3 z)X^v8jXGQBgEIpg=e42vDC|(bH36xq346XSHCzlgMI7P`%>wq}H|%nlH66%`X}A|N zRyLhvktEZJ3Wsx4!Fd{=HUDt>j!Z_%$?Ybg62mgOEn`((Ai`qEic25A3k+ddEuj&{ z+7t}R+UelCuG*hi6yk}eKaEls^-0lcdL)JTY7-L|dlW3=KX#~o5*{W)1pSbU>ecaX;wfQI zX=o!GSz%E^KM9{AUD^Fs!E1V~q!p=S5~N7v=PmOH^5=X7B(+q!+6YM0M^`v{uW)O!mv;QHP>VTU%_dbPv4@)C={j4e)5O1dvTz3YG$iM0;W$N(xiC zi(OZSj(nTcADV8m|GJbJHZwDm!W|qbW4Nks6J40&`fL2;Q!3jnbQ<4Y zN=JM0#PP5!M(Js8)N8!d^X}m zoV~o@8ui-7;NoxvX5;S7!8RFIJ~aXZGc(~p|2vTir6a$Rx|9T02l7nwa==!KloncK zUih(=j=GosKB{TO_bF`%Y7YlJ0pbN6!vHdaBm$HC6t#;NdAL>1o9>&2hsb({L}rzA z2)aooFkcm|M&yj}Z!acOsek>hUiFgWHx)d7!HhN^%5>SRL zo&K=u6Df)VUXjtY$jN8=&dhAgoT<>kVRqF;1C+&+LL%*VArs?nxu{b=PSx?qQxRWn zm#w(JZ`W)@t6&Hgw+vM+`?)zz{PTdv%uADZiH#`CAO1kS?CNiSg>YVMgWh$t5-oz6J$ zS6@FOJ=qSUrK4Edx6_F3sU;8hKztXhO2lP_5i2&4))KGssygyp#zPCmu-PpMTbM6V zMlBUlN^~)o zODB`IjFVu*iJ(6D#UDGE9Z}v)`LO1fJ5w2c-rSe(`lphsuWUExEVRv)HHmPjg!|>) zO%)|kc11a=cD%llCchpEr*GfUln_ks36K2;eUwM}*>o$@ACkvhf`8ISh^DBU3P;B< zDmq$_PS=tr`=Vr^_LuMWYzy9(qAX|dDCyD)C)J=Zx}^FqD!2CbT>G(o_1gd+LxQwN zT9iLpaSQ3>=RK<=;~b6|b=0_Vnn+)=jw1KVKN@{PM6J&onH2KzKUV6Q?ySHUmp|7v zMjl2NCJWIQcjFC<@e-*?_etQA#bEoiJFjE&@S~L<{**8HfrmgW)SO3!7v1A|Z*2LO z*?#Vm{%DE^AHGFARA1gX{C=a>^(!!SAl>_DN+hzx|NkQEFWBO2f;C(;fdIjS!(ah| zyIXJ#PH+kC?(Xh{;1(>v5InfM1ShyNxVsN>UcR-~IcHz{4{$Z_bXRv(JS$_I{MZ5lb(7f`kR@>^P0T#MlX(+LBO$dpg=x>i&f*IpdKj; z%a2w4BO-lKQHcVV)luG^MY11KJ5||lNgk=uNbHT&A?|u*cz1=Hw%OhTzw161EtHK9s$zA z7Oe}^xJL-_gSDQFKUlucJ_o9qo5pbJ%s)kH7i@qYaQKRyl!!~7$UE;y00HbXZpNnGg}q-FB*J8o>qyg`jbfn1idl8mKU&iO#>~QNJ*M! z=vN=R`QceH{SJ~63`WN!CHpBuV-==nHC80flN7-+uUI7D(snrM)ZFTKSL|lRKl}f7 z1W47ss~G@Ik?6PcfF|h-;5u9%5OkevxbizVTwBlM>Af?zQ684e!L@S7_6hSsiOCLD zrqvKF{~A6mB!{6yx_Hk?MWB&;DbB}iFFUZDSqOE=201$! zPt2VU5B}dfhN|kp59SasH6_oeXIs{3r)OFD6XaSHeym6M(HxvvU2udv-AfF^QBgmP zyh$i&I3G~+{l_F*o*eM6{^3sP)VktjyMlW^cfZ9It`qugRO`-u#lxmV$m>h7#f{(j zcb*ve*!M%jtcq|QijV)>gjR;rf}yW!UxD&qXhu@f)0dWufQ821KjVYG;lq#XMJ&s& z8O%M)&kI@b=iUr%B|GFA!W}J@vKSuuSR|@IoSSkzvL`~M@|m&BJrUvrv2MINRXg%~ ze2t+q`IATD*@gIe7F7cRMA3)DO7tWa*rct3aOS&DSF*xDo8*BnAqg`TzMiU78;`Z; z&m9w*%eiN{yh&5BbIADjy@kL=2Rwyn`rf@X(WF~;Lk(x7)v}?!+hoMM_MtHG0$ef7 z*t9I1$ONGJF>#40MxL+KiB$H+Rur^1GKOTsbHy}*3Iczo^1$qP_nAukST96cpBPl5 z7tG!r_4eQ%U%;!P1HEB);M@6-T@KMUUa_pJyNaj%-Qr(hgSUm-uICf$p7>ycDlh*Tu;Sl$io z@i23C^TyHqD+F=ienTF{LzquyyC0{YeeYXIrg!~g@elcaW$@K6R<)?jD`iKR(^2L9 zTl)H!DZluwqhX_q=4XZRy*4*Of!P1&BQ)>h(DxwrOS_&Mc`gq%yQC)f?t)Uu%g)pZ zh6`TE#!KK+JGY^JVzh|ZpAV_?;X-zFs0@*Kwae<*^F)aTHrmV@D*2zKBdz+iU^6F= zz!J*AB;KW{?<=+9$)!Ng8aaXP^#lpnShT|%#k=qPgkIZJt0pY?4{}DL6IQ7BtcHSN z^hh8yTPeQp!?N3{yK^y#7_pbL2 zK*pcs%#0bU9&(7Cm98F3`y|*O_Q3GiVup0Vs7>_Sef`{ih~?v00KF7dSTAK5ps)d> zn`48E_pj(;azJGEa|?D|8gS8hA*p{|lc`~lu!XI~97i^37^NjdZQ=X3MnvQ^sUA3z zWvFUws;BZCxrObQ(1T6!T)+~#A$X1$ZZTgPhQE!*fm*8z-`~4p+^upVF{^5H?GqDW zK2-y47SU{JK(HU1AZxvO8?>Ttkm`+^RYW&UZP&kxvqoV#?jeWIPKu%I+rla4O;-mh z>eUryc=LNjAx*a7W6?hSr%W3jijohTMp2FvyhNo*>}Tg9^k{SZ)gG?2VU(f95X-0U zScIAarjZeQ#fXnZZ?UmAVqsZ+uQBJUgcs=dI%Fk75n_5_I!h5a(C)}Dl#ijHQnW`b zCJou(vG%dz*f9RjgtK=|;PF;0SAvED*6mc5Ooi})B`0+jx{>gv;7p7{N24rHb_I6( zZrQ_&^I|nhi&}4`>AjGpVK!~xXH?2%4WV#9f@?H*OvK-A#OAZc%yrD?gXk~_xCqtz zK?Pe$m_-xR&4qQxOu&+>;l631e3@t%UZj#zC%tMJyXP;G8tdI%)lReBD>H77UY=w> zUn($h%`M{a039h{Q$FAd#@zW^sJ0B|FgcA2G2LIQrnlz!9c~vQs}feJZr_=UQ7s)i z9+dYB-(fxvH0!ieJ^s~lo%7cq90u$pwrf$@$idv5&{l7Y!{(Ou=Nd^}-pFlo}ppS-82m!_&(~gTpEnj0R61j`j z@@F!FsXqlDP+**v#oqm|YLn_D5a?QsJ7^PD8xGThV{FsmKv76V%?W8gya|l{dDU}@ z<;J(oO}>K$Hhd@6dtZlib{7C6MG|E+-gC*%Kx66j_vvDz$6@o%Z!j8Nisk*4<7w&t z3S`y3b2{!)hD_7H&`eM57~Dm`5!biKBb;6LEoe4>#96v|fsMihrQ+5rTTY}o*@nww z)!3v7)nn|UvKv3VK_>U%lC#ndm-en}T|2meFdq(``zFsQBD`wt+D1QM1n-+K2R0$z zk~fn{Wd(&%8X~Aqe-0a^Uke=H6aoJWk?7&Lki_nL#4Jpqv6vD5dHzws-Vfd%lofy2 zPera<+TX>8;0M*hc&@I7F_YSR{qigT64guIX$bq#XOA8q*OSbJDSLS*b^*mZ1_vRr z^sMh-&d}bCJjtWGMk&XU5IY%{lhAJ5bv@>Y<_>#3 z(tfDAxOsE>-)o-J(D!Q#a#Rw{s_aT!d*eaFhm3X$eV0@5~fk(L-8NK(?8x5w7rCD>Rn5k>2 zkNRbx?DMr7upY~KOSQUJ15xAIa7($~RdYY6nW;yjY&zHbcO7h()j#vm69bJhOo& zyT&D_DVB5srZTv?7j629hmp=(#*wR=bH7l%Bi?YK0CK$0kgFKSMuV%IgvHM?75td> zkm3ID^OXit5e#1h(KK4ik1UUNM-Awqa|m1FGvpO}mU6SlUHUtw!@u2>W3RUwwmrOT zc^N7u%JnG7k>KSFl!ftscnB8tzkqsfQ6zo*GM3Hac~NpK(RIJ%7^uwXLvBd2%b7oc zryV5YL`DO`l~bLCq9~YCGv(n)?Q+zEJ=$QgMhP(>)dv3Mu!@zXo%!3LX)j}MTU$zJ z*Q8#J9Btyoh&{Dar`<_sgt;|TFd&2r zgPG8ro4?}}e8{I{ndkSiAh=2{$<Xrww zBo13q>8~XdX`}9^>D@19tpRW7TLP94v(dVi$Tli0f7{F z@}S4D|7y)J>(B}Ojq0x3`Yii^*Qf2l6F5{WRk{W7!o7n!4w~HPTn#|cQelguBkb;> z?(UG6H!X9?DgSKK7q#&;+6d4iJPVqTlUs!&G9d9B_|c|K`h$$JRpRZg_90)(=G86* zXOo|a)idGh)K0!0H^`?3*4$ZLf}nNRQw2nb&D5% zys>_3@3HihQwb$HRM%0`#?LUvEI+SVVxrEhO_g;jQ8{F*JSA{hGhLkHx%xX6ISjaX+X}|7K+LLmdDAfpizqvsT8&n z>f;@!OA1nfd1@Cj&aEf%|Ct#ZVy;88P-06yO$aO2)&*e**L=BDJCef z**8{#g6J{Wq!d4;lO%LV>|&Szzi3%C6eDUeAnYpBFgk-~PU@5D=5O|xMh6dyu@T#T zrCmRiy3?MB{?iZJf?h>+xm}Qf0zjXaze;81BWQcT%=$J}?3k+?PcIU+eYa}+5M8w5 zM;m*cB>GeY;rB|RhT|XIR}U|uYR#C6N;z~vJpu{ zIL{fkdcqco^9}gH00k@k$YJIPc)m>neKr7 zL^zZa(~u9Y;7Y&e@rhoOg^whfs`w*tgPvIN`!(c8P{RU?iU1Y`qDw}4+B7GJOuT72 ziCuXk^$&V?qC?Ns+D2N>+#ybb`Bb$WHjTFAwDGOc-i^{OOE;P~IOF^!tgK%Qw!JGu zlzrJKL-e%;%bVbs&U0HUL{@FcllxUEwG~&k1InI3w?M68FB9a|Yp=X+(e%q9!cypH zDW`kO1m|Z~X6Uc?jC2_*jfXYlKCX?EYvHou*gt?1o16dB8^$)=s)P#dumNQ#BmF`;K4> z6U5iOCjHL}HI4V$4yAq!-Uq~Ed}}DNpQBvsjUbvWQ!dtfMp(7Rjz~iKop>goDp--M zUoGgx-HofiIDP$`*27GUQg8WdUpv6nYKsBB7ag7PJ2@dJ&Ocv9HO(OUL!m144%pa& zpQ0r#0 zjl^4*cY#piv32-$ep&DJoGK4akazmNqBj7`+AD75e{E)iqoV>R&+4T(_U-pnT(*nv zqWgk+d&PCVkLv&mw@oDp_jMU91xa^(<#R0T-!&3v{Q`S_-HOY+xo~wq^~tnFyCtk~ zco*e}vZr4?f=@l5s=28E$!|m%S$fNt60DLp>>GLM1QTE#&=wZJJL<%b@{@k(wB%_K z#G*$RgbgnNAyA~|`l-=vpNP$ zWuG6z5J`tiEbzYnl?M>IC35Qu~A30R*rBCPp3Yy~Pfbf2#>&>)HBFX;5Q zg7J!O0uke>xOo-*u<>9xbTX#RYX4tblzfiX-P$Jm2Q0mRkb5%S4a^I1OwI6qGuo+Y z%?~C6o-_j#32J&aCgj~1ulInJy6eWh9G$j3} z)`Sk~g`ncrE%@9QHj|EYbTY^2SY!0g&6H9!Qe*Dx29rnJ@=yLof?d>#0ok5ZqaW2D zo^;h%yviGGE#Kn$x!}7q(Qjc-0vf3|#x#65%~jGPSvPOsxfBtwIf<%U&hGQVl~q#W zm5OKg42kaj=gt3yT6l7P{Eak!iT$Vh*kfmzC`OK}8**-V{`+egv)#=t1QX-h60p=^ zn!{XPUIOs>h4A}Y3UJb><#{kR@6(B#pbnPOS4`nJP@_Ugv znXfSuw#L5j;Z!$LyH=qQsKUupD4hLhcXiG4 ztK$P&JW>f2eK-0GslJi)PqVE(YN}f-GRfX5^ivHo~>+N-!XPO-z z9&UNe28at<4}z`-s;{iUS5rJPbL*SRxoAKHz5DGsZs|Bh7Rr43|8GYW%a$n?TfBE) zzfxPOKEHBkjCE`JhDaZt&ndPY8MJ{VA`QUJ1fCi0Ra%X_yLIu0o+;)CKRZUu%x>1A z@c+I!3D6>pJ*AN9Lgv(4P!BGI5}t*#v->#-A^5HS{|Iomekgr+C8t9mUi6|zl(I7K zx2tE`Wpz);VXkzauFaWi=a0UC!Es`u*VccUyfwG|m9~GzugMce`P-Fs;)Q3P-J&K} zHTpDq>`lttkp|~@zWgtoO;v>J=0BHYZyBw!vhpAEV4kV@4u5~3hp@RBFC=IOa~O;+ z*a^4}=IVbYCQ^7yMD!O5(DL#&Ns$Vf6lTTO^6pZ2&RA>eJn;R-)IGCQJIinrTjD{S zc-ZnTRXfD6!lopU34z%o|A3C;)AABU%d5^Se-+1uX9Q{wL#MNe1jTFXpqyxGzbQ}% z?$Bk!++;KI|L1&pc_KvQ{XeU01FSZH%3B9;|9>5FI^QWmSm#RKq`zEaHCtwsPU%EO(&T~pb(W~VG&Ab_V%Ex|&hV~-9sY4k2^0nM;L^}fD zO+X*#_cx;E`-XdSriaft}!ka<%Bddf#~>-{xfoQ~=rYkGEiQ1v0T({S%?LDT&&M6Ah`6r!i03a~NK z)y6Y<(!C|$@IRCeK*CZ85VQ5x6ram3{$D?L9vK50+HOocA$|Q5+-#cI-Rc?Fvb7C9 z=dn=;-#1N;&tl@3hxXEuRUd~h1f!y{A8qz5S@vh{=89y>c&6V+4@c`ODg-LX8Q)Qy zvHu^7F&^`iF=>_jGMuB?DPZ*J227C3+S+v9tN?}wa72i$z8uwzZvgj=#ghM67OxY0 z_A9>j&p^*?xsGWhbh*j->5gtN$Eb#itiHt5tovrx=Mh`Rnmf0-8#O2GE7iOGjj&EO z57v=Lp~S;PVETcF7voMm!$6teYW-6g6SI%V87V-O;)`O%cEuAD$F2~#ed(G{f&;J2 z<3Y*Vp*zI>r0T*GAUQxyr)(D~o~9sDf9wwyxZ>Q|>R)eAQOQ#)t*U4wK(Ay9T^U8h zh=}m}9Z=qhNu~IcfiR&RpoIMi`6jpR15oAalRM^SXWberK9iBX1uSx;dY;=jyr?d^ zxc`&{*=+V|`zHt8XX_yAzvG!E0FW?vqUPSYq6x}L}88~BQj5QaFl_?Jc z9zQ;uppe7X!6<9X!Iq~^Gu=#1>`ELfh)b!%IU)4iA1jfSzu{0;5%5n`v4rKHn6OA1 zt@a|E^)(L|#PNqb&MQK+Hv9Ic{4h9T{k@|kN#Blt=T~aJC6(spG{`+=ClcK1-dbMx zle%YYEmPh0FHESMsf*OiN$INyt-fu{)~q|Bo$fn*i;eTo zYR7O0g{t~p&Kw+c%sc^03s!l#V@VMAN%ENpYJKcsVTuUo@|}!O8|}ULFe#ebAL|AD zcK*jX2>fmD6~&kw52S#H&uWbrd#O~T zX=`3?6P|f`dS+=CNXB-aiq6$YmXE`gm_q(!RPmI&{#NZoQy{+O)md4 zPl||8K*iF;#^mVmMLEBHBG`W#Kfds@KcXU1e~$apmP3~0+0C|S7p+%dj&9k{xp~OS zo3CdF-EhES@^lswT$uawYPrmlD4#UwuU#w9?_o*r{Vn%|La)*O&K`Y4kidpRn>b%` zB}gnT(8)K=k=n|QA>m8e3pY36zOvW!g1}u*Y9F}X#lMgos4Wk?!wr3>CPx&LI4*9r z1>QU<2vOV6Sv#cp+(;ZXinJDmo|{JaK}NU#dBA2k#+73ETd-y}I;fAL2;7OR^ZUuk z2UyIOzfsZ9zRHQDm9wm_TIvI*;L8rF1HYEmCv7HiRGom}I5H*)G81wWF3ETK3A$P#ElbtL9yYtd6*D+c!Lp%m92Sx!TD(4a(%9WX;b z{6#%)O=)t%W*PXS`rozexx;mmxPr2pIXu1H>^SWvd}9c%=~;W5b?mUzH0@8yx>l_S z)$us~rXyvOka8t+^$ZWAyq2|n){;uF{DYro*|)r$|C#yJpA&GXtKUN>9u*5kugaf1f_bvQ(;3RRe8bRqf@wm0gK>Z99m~IPlan#1+l|`5l{8oT+^;c<@`Z zyxn03FZ_Km=g`vV`HYev-$#3T2}b!*u`kXW5`U;urZ`Xxcgk6&Qw$CARhUfW`8svc z8f3yzOWh3`EZ?m@v@1OS94z4(E>W`$F+T0{A^6fsTdUiRV?ew|6cgqCkoEdgPGw?HMCjOO1tVvS@@uvFyjDH zwTO!tU{b;TY{x7brHvpp%|mm*GGEYN&{bsFLQlO)>u<&zH8HLhs=M?SoSbs*Y44sb zr-w*-Y#Pt-+7Mwi>Q2T#<|EbiM#-%%ATwoDw}H}Up#jOGhQ^oEN{GM?L<9Z@AgBFa#3mu)d#*N-L15{EAI%T!1kt~_)j|W~{ZFW3+2*iOpqs{(JDbBz2fp+q#Bo8w8!~iA zE*on8aCg9<%-xM(JfWg&@37Et-=GNv5eZzhMsj{*$+ihVz$1Pgw?Q$z&=hf1&%r9h z(S=r7t-e|jclVz3s1akSbhUSONJDv|3O>(dtG5Xp)%MHw>8NXz#~n=Yo8n6uk0NZp zWE%gYLhKA1jO@>z+UFxs@VW)*n22FbIt_L_t%3=ye!8>$j zEnMcmIwHB1xxoVsijzR(SzCOM(gppV)eccje4iRzDd$y@fEyvSplNN~Fp^)kBATwO z?~=}8sTTCf3z>ya4^aGi^@cX+3Tm3|EU3S3D^8CgN_?|SdV8J3`t?i3myn*3Uojtq z?tG4%<-a!|NZ{tV9bQIEz(kvy8mTUAhfr#I<}UuX5+wl9aKMo{w#Q1F#>bBP^tBFO zHCI$Kv3g1mNxhu!O=(}S(iYoJ-HLi?fL{WMu3#&E$^9^k>_YT3OoiSm@;WAAsOLi3p|| z4`OmhafwU$D7!6Z)iPdOZ=i7)bS>#o)#>VQv-_IduE6-4*`AXf z0`b?~lK6uc$l7&ddViw`7v}OB61SJNpy&8p;>+Bgh|(a-;=kKnZ*iQ@Ae%#w+@i=k zLzJ`g!nu`?5v~;p&X=V2yY<9)KAnPL5Sr)|$HfT!1XL0I0%Xc1#TOl}qQ?U3-KeHV z#V~4i@sxDnhoGel-s>)RRd$7NI&(`(I>az-)ze-cC?ythP#hv-dJpsLdNz)=!zp#k`B;&dhyAwKosXQ+YkveJWRuI9<8U}bI z;Wi*xuZ$ZEJgB`l1%2Zoms$yG<3VULgJ zgQTP4IC!V`lIKtSWBZ1W@$^w83Es*braQ{6zq5_mQ0GzjP7Xn-4oWePvI&v#Bc*d^ zxVRk`@i7Xqc~45G+y9nj{^suzD@1Skd#$p1W%}U}4Wr8DqGeqgLEgY&rt##&yQA?K zv6Id&9wqaE^$-UOac&Qwu6b}N?vv#HfHSD(7Z@c*c=m0@+d*92SikphqT3LJl`uV7^;k~3dXPK~WBbMilyQA?=Q={YKCm%mBMx||K*N_i8VAOqlj&Ttu;CL3a z0gUxsz|^=zlc=v0T#_QK_iw(^&x#n2B`*ydG4d>5F@8oYg(%#=!Qq^lhjx_Hc)c7> zfcs(ABZ!cT9Y2(1xHS1q2FU29X$6%IOdF{d5mE)Ci~S&)0Bet7&rVMpoF8B=Y(14e zQVEd?0KdXLMM820H{x!L-+M`CP_Cm<>b~ufZX4!*1rTy$ByuXD$j5#Q3r^t_U)rRh z>$`;s4_=i#<>J?ZF^S$c7;eH=EaiyTNsgaNX6WRy38TMsfY4V$Xz^>k*{4&w0v3_o z4_a)YP5<Ub``)%`QxCy^poxeBBSy_AG{D^9UGrU*6Sn9Zh${^zb)8p;a(J3Z(E;drQi* zHbEk#AM+k?8b=BTqga6)Z0ch(OT;kZOH=ia*p*1|IMA}*lTwPsN4O?NC%etCX63ua z8(0}9Y(rhsd5*$?>yXfLMHCh7C=qImwvfv(=l^IQO`F#@JrQ3?+p`HIJ0{-p%tW7F zzZPcjY6!2`X1{591EgVphme=yZwl;C+_Wzdp)fEi>u?yiyHI|ckcaoMw zo~Wr$WcQ;Dkh46ny~cr0GiTLG5(DJiZd74ZdLh++=RW>3+jG*Fn2R9hto(?L4~-Si zJ2$6^e8KSnsiZl3){^|9(Arg2yPrCyc z%qy%CRjU~3=69awHLRS+ZXx`x-%iYL)e4IK#WEh2Iq*W=YUGU%Jn)SWIthUHt+(sB zl7mZ8R}4P4UAA_#&Qya)tnolM#Bd#uy<07IZ@wnphkCbbrLurjXk7wzM2P`ho$Ea1e0E*O6oMQvgJ`*iqyg?5xyK1q)(jB@|apjTcf?oRt5z5Un6AYDtG^fmrms z16~Z=OHe@*JRVA1PwXc2udg1U%yw_DG^NDFxaI}mKdv>>zOn@F^ucw77t+eSc|;{# zR%N&3*ffjM78ezP8aZzyu+Sv10v}?Qs*!i|y4+mqyE9d04I)hOsJP1l$98`#{nXQd z3{U`wP;&n$Iidiqk_ORZwBT{gD9)Mj{N|AAK!d1paj~Im7XI1@ZazbXyKp(9>}r?7^wC%I zEg88Wp(|~Nc#TT%y8Fv;-Z&PU!oUIaECJ!Go{S%!2t_-q zvH0HaR990z#n3;wdTh*g8fvV&h1wZW(a|BPjcVI4A=)pcm|Sd(ESsTJ5ho>UPM%1% zUi%WeX*2+w3H{Sfh*vmi{3~44OUJ0+l84=kZ2H8(BeqcU+YQG7eOfOj`3AJ0evR4C z(ds)sL|n5=XuY0$qnpg}Zl*Ei)9fL?)%i9=(w~$LL%9J6m|%pG?wE;3NaX~r6k&_^ zMtial;o%Cn^d`5gar;M;QvTNxhkk;obI2|0yc))Ay|2L!ENu^r6K8|(u9eF-YJON5 z*?J7xdJ+1}%pnVq^UZ`;c8k62V0ys5@|*}|qNb^))&m~L?99XKz83F(qe`g<8?6%C z>%h+e%?TV{4Y@=Zfc(gFbjtC!DeHaM0J^($7?X;?oM2^il|D*Q>j*0y4Hx;d{nBdt zQ6rz0lQ;Dh4S5H_I7%6y4>FSRB(Wtb#YTP4gY}=(RnyQ*Cha_R3OsVJo2rX)5r@%9 zh%-?OaXX0FU+)>IuP;-qJuU*Ob`-7sPCn@`??&p9{|n#g93Kiv_mLtBgoRjCT_W>V?*#R2o+%H?$iB*Hhc^(W|YQeIrB&OUs-5OT{Chvv;O_}<#v_D(% zm*MHG#=^2cWZ>Y^sDNLbjx(d!n9lwzx`fPh=cikyOk3XzJ zoC;m4`drk*N7&7TIK%xB%ZldidJFr%MvAh-OKRV|)?XP0awG-d#9zbYY#bXI%jz>I zc3biMSq-4H1~9|?W3Z$is+9yQ4rq?^Ueq%h(hI(v*gLe~6TY8J$8yvZkk#W#!&3`v zK4umzRfqg!|HpD5jd?g(IlQ&S1B`zIgiPc@ktKxx+?EL2U`r9kBn-bq>bgUZEZkBk zup>UHo0xoBhCD%L`fF`-ytVU}f0{UL#%1;J@H6A?E5m#08wO9sOUVH*@aGin8%&gj zF*s~a8%O^0ndaT~>xcgiKi4e-(S`hvhH%O40xu{gzUzN!h~yP}_sKaVPmL06aRQ~5 zjRf1jMj*UT1Uf&|BKy1EPxXJCZJ-6wDQ0?G^WhYdCTM$E-SB*o?Ur!l$-GGV%m?u8jFD>iwh?fH`WQ@=xL#&GK z^_}z!H4pd|O zj&{p+T%+2Wzr;AL82EUo=Tq-V+L{87&B<3?mxcP}wJ0%p_m`WZ%`mO?Tk0ckyY?kH zef7I!q@p}zhrwC>3N%)q@S?WUk5qEOQe#8nlC>nRZs;VMT0wj|!weIEhz&?B$%Q8S zii{u4xniEW(OeR8F7^+%#+$9s>&t3}(r>fkCZtU`3w3=*>i_a`p~!t+bWnvQ{as(t z+gpS>K||t`yf!~9^_t@a{!?_mNNPz~@yO7%m(~uRp-=7HMUHLU4-v1Ngv@OQQ0i3d z?APaco*qUZ&KaGT$$iRn0sm<{@6@3D^C$at@Kd0~7PBMb;Nq_2%L)_9ipP;0%TU6* zlnJHXzBqZevb({U=8SeyU7C#d9xmqtHaUWwFwugz2rn)=@srR%cRy;VLic$;cI2PmI7r?=x{L*yBH^Zf zLJ@SuANi8n4Y9meR8!9)Y|v#vK@L+V*gdB+n2-a{xwKj6ky-_Ts=vb+XEE_Gs#HSjnX9URWQ(T?a)nwChIfBG% zTT&zdOFIR%L!btf8gD6F-}Z(tNA|`}v%YwUdEmdzD^jj*ym+NgQNe_+M9YH@C8;le zng+hbhiMQhkUNJUS$_iP6|}MT1??Me{uQ7$dTWDFKsauyi)RxeIDqO*N^$jCLo3YENsT#19y+vUP3JQ{|Wi79A+0PHa zv|m8nD^>s>cI7NupzdIng(}9_qSU_Qd&Fo4>`7p#A{OTq^%HzTYNLqT1X!b z2rhGf@(}-?_W+X@u<&lWSr~Ti4`=3Ck0e9y$kBQV_s&Q8;gqbz=tT-<_aJ~cR`3$7 zvD+!GNr>`aEWASf7mYra*8u)D00@$Ak})_* zgb1&gKc&Keq=J@<_72u#=i@W{2+y`xq3dTHWS>e@ZMnbwOj#;6U38FmaZO8~W0>=$ zLv3ebX*k+)?t+|m4H&#u-L@=T4b!|ANilR%(ZFpq(Y^@!K9`t8Zrq~TvuSVUIwfe> zq{NDqzaQ!$9j?wL5SRB+n46OG$pr_&Q=h#2!A~B|I!=#xe67^JDf)Mi3*v^eGEdUI zmB8*yzhwCQWmuVXw>QN$UgX>ha>J)I--ydpiIdl9ES)Ii8wJuQVfhOzaUP>Wg@t{b zd`?1$p@Jg0~|~w}_X#N@i{p z%@?k`IuQB&%!K7yBszQ9AYi{mh(>GMch;t(8(ADjs(2o61 zMIjP>9+)T!-H^>*<;P4qPc*<976eCDql7*+k_Z?7B&37q&^Gg9cv z)K#1qJl3yZ@8thMm7sC(nhj`oB)_9@=I>U_=8xTkhb6IzcP_&e;L>tH*u9*_c0sOs)q=P^OS4yp6c%b9`n(?Pu^uB1q{ajg?aAepIQ~?e zjYQw;BT7l}uJq2|z?2SvhskF{4^ZEM@zK$*=5LV4|B{AIbS5gYmO|>0PvBg9oC+}<5^63Ry<_@Z*q|7g5 z3UceXg|=!Zbgl~h@c0hxz=rmvP(Tj~Zy>&<0Wi6}^les6vfLMQSQ~xF*QdI0JU{5C ztORdc=kx})Sz`>vRHskG+!3QSOAcLkDN{y#KBJ+U7wpt8vSeZ6gdxcZ!mC%^Y{E55 zv*N&!h7Kr6HVUcVi^4}6r}cM=6}iM*z(s1xy6^~xCdJq4afgiM=X;2Eb)_Axn}&Zt z`=ITJgnU1_M>6TNqITHdS*I_M&e%qQ8`sv>=Qn!K6+}yPq6Pl=7;q&0O5)FXvji+w zH!p_GP&SL>$$(ij=aJj_9dER?3UA^(IY2GswTHv=OMnnJ6@Jo?1SN_mz;Kj#TXv43hiV)gG*n}K+WIkb1YS+>-sTI^N!}_Vq zd~dE^?;rTkNhnxdq(d6rW!s~ zz-2}k$k^*0iJ|=cQxz~BE59I~D`OSVY=xl_M**-+Pl4+YL@XtB_1SNVQrKQeDO+kL z-((FwsOKOi7rd~xB+F}tExwg-Fnb~toDwOc^ZIq%&bLICmc6}K>T~R6s8$k2>fVuc zS1=`v9$OZ!aNeohicET3F4dH-B95he3h1}D{Iyk3E{gO3KmKz3)}NFRCyD9QJFm^* zvwP8&Kho9_!pogCc_=N&p*xyD?XupPRyFz1;e5j5(NSGe2lFtnQfA`FQjsA`#F@dcn#Cizj$55cKPpJFKTq!IE!S&(qYoaACRmS+^6}_R46#og7F% z*B;kTX{@;|9oHDjPpa&da{TPCU(zZV4?pF3i5!mO&-f)1=QNyySOIEnE&Qs0(blp! zi!3E8J{`o0t-P*eUB_cQYyVyQ-@lg zo@@K$g7Xojj2~hh_J71J*b8@0=F;iTT|7wOsE5oUH7Isbl**p(KgY$c^c_=$7i;Jt zV1(iVrz23JaMIvFEBd?g{154hSk2%{uBXH=4C%dWA8mS%d2AFyBvDa%=`?TJLR;?~ zKJ)P-S3|V1Ie8uD%q75os(xojz;Fa|0-Ri6*x6>?oL&zw^Z6AxN9Q*&R}JbJE>f8|K%LLDiKe-+``1-blL}OWOI)L$c4J}b-FUKhh<;nIs;9Lg_-O9TxeB$x zc@?(+QJQyZjPsP#sK%ZAzzsMxF!3^_eZLkO$Vv@rbt~hSBbaA}P%BfZYs4|>ji!(1 zSJEiwpw{lW5Gdtf%eQKLWvu=wGo8lyLVubu0ouo8bi z3_pG{1i29(5D6~VbB&no6;=k)@ypj8um=VwFUU-nU-yaS3w+%xdHZ1po6x zmUrDXaT^;PGXMqy%v*t!lRGTX;qMOzy`=5u1^$r&Hz|IGu-%u2OXu#rdp>uU3tE7! zdS<&vj9#{?V*co~hcaI?b`{E@tAsn8ASSe+zQiTs?PrK z;sa#$%2{t!KIDJ{$Bg?L)m-r#7)a8g+CvR$6+HJ-*$-$(p3#sIkGHX?XjiVWv~!)d z(&0^OrVfN({T*Hw5}+9SydaCnqM`EE5q%70Za}n(eb+zIh+AN@3!^8noDh1)_ChgK^*>2*CQ%VZb%LUai0Y zQW^#Z8y#jQrhZ^D5Gij>TpE%#2lX*g7KZYzQeVH=Q?Wn!L+TtPMoTg#)2UXDzx0ZJ z3)kn9eJQb}l%GhT5jc?B3&Dyrr=ZeV0!2iuzx?bVah>(k%lb2f4(~@cj_skmyc8@G z0Bcuve_c8eykaBD6z81SHdnWGS?BKzY6pu`pzNqFEKTGkh;}#@I9w`fW`Y$H{u7>| z@NP6ob!0Fy=zR`Qj}8P%+}o5!;#)88)U~t-;8E}=>f6mmLBQmj*MSO}z~Dc#(G1E4 z4CQg9P{KSAC&?rtJU$BXizVSP<5W#)ysqf{Pgxxl`}fH>o>xM;frV2v(oSlwcgAcp z%5+d8;JGKh5(~uUGieeo0`>y?uvuILiMbfYpZDihgJ`;Fee|P1R`nPU}>U-i^1!Z*W0hfO%_P?7_bap1LG|g z<`W~l!Vh*kY+B0IwY_*sRv5d2bKM)Rw9fZIh7Dn3g|sAML+B@1I6J{0DOh^PB8Lc9 z^nPwz@y0qNc{KD{>< z4-LsAB_$bb4W@+o1pyPxiFYHx?%-Wrlxr+zn0&G-$>6~7)zH6R!yI#<6P1Ipkx*?W zYE>6hFnwKaQwe1RxM8=)rnE1w4UOl>mswmnoTqYjkp$ zwV>5(YsS8de(Cr5^r90W-`PjZk z`X=JKPU4NHRmZmL{OAoBju&`vN2q5G{ zD;aiaDY@_Y*^?RA`Rd(4Mzu%EVOCyOyZQKesTu-5R{Ze!r7@qM&;X;Bb{%F%fDQEC zZJ+#tQ%v@O7FifOPN|EL+3y00{kt!Pq>h$x^K0f7#=vedwpqHn37#oc6<3eWPH=!i zcG$_(m+xUDwJY_2j%?e<6{b>+aCcQn+I(^*6&~8)_$EnX21!-};zATHy*HPnzigTp zFLiF)AvBvo_QAyvCr>W)sLtr!PPP3vW@A9FoL`7heeg>)t4xAY*fx7yb=OR6(0b4C zTXS%H6b#KYC-%o*UP`nd4!izKHYD6p51r-$+5`3d4*dNezE*ZzOS=?kNJT2 zxO#r;=*=D|c5w=pPXYt@w6;PL$zSh|;%~CdFTPh#bpBv1b{5N?^2il9)X$ko&CZ5Y zwJ#0?530;!WxqIUb)8bpr8fcea5Ln27Y-q4PLXq0X2rP=38CiS#xDXw5uPQ@`k5|d z6i<6qHqJB$Rh;ZAu-GOvGde~$ed-jOZhdR>Zbh9ZI_}A0b0>ZvEF6!^x3#t=DRn9# zr%V16yfX*#aYu0RP2%1`up6bW!sMo2fDe+dZ(ZUir-MJ~9PaByMVaU|Hr^8OXda&j zeYO9>iMkzA8fZTgxpNPF5dyMF zf1lfWGtEu|&r9`{5Z3_J$omUL>Q%Qjy>wYvqbXMlLj7a(od9NXH%q|`Zp&XIuBe$? zr#p>~LWgjGq18(nsG(c@9HX#>o z$+Cr7dX5O9HwkeJnci)UjT#<`k5E<%srr_a1gycK*15H&An;&5a@FxOsrt;K6!POGjmbilqI|-cgU0 zz!!1~{O4!f19dGbvAH?_mslJGv)%U+yeVO1KJw}@hja3#HtUaKkf}_B;D@yWxmLPXdVx>>&8ha z$C^+Te~2nL{?;JC1!`H{vn^k~K}dJ`&)qKB7?~_RmmX_w3d30!LlJIoIXywOIj4E&Z!pmqVx$k>rnq@8>S-EkIO=q?Q^yOBq;k_0C!Vb<@R zFeMUdlCS<)3{Oe;zNICGJ=nu%Ame9`W#9+7L%YI2rXm3RJJ61C;Dc{PvM7vHHzqsv z&Yw?bm=N3-H&L#_^4h&k>*d>xD9pq4BlOlJJXCAa_20yABBH?Q7?sMQkl8%d70w}v zg@->by(IZou99YTxA>s(91)W0_M6B$@0;V$(9kQWvmRrNJPMV%IVzR92tmt4!+y35 z4dFC=<>3cYL8`d!)Z1(C>}p2^ci#L3G_4wz;tC_I&?YEa-afdwc2EIYAD! zR}b`5Uxap6`rX<>kzM8Dwp^ss;T z(r*BbZ@XBdt0#G7vU_V3mRq%fKc|0G$T!5n#4HY$d3k<{?Tt}asR_hyZ&3-A$4q zA|fLE4qN_pC!yZxR3=Uw%xL$kUGbUU1E9JG@D3W+Zh0OTm+pz9?Y-6ZFU&@Ceu4di zFqMJ>=k9xa4CfG*0-G==V9k7I<%4;8lr^2G0Wj}v&MYVji}t~}WZ=Em!Zg!sg0p>T z)Ue3D+DQx&eS?mqLaSj)Rb8jf>zP@`gq+@Dfi5#NM)|Iv%VUjE#b)52?e&J{BhYx& zhPfS*2pmvbl~dKJ{lJyp0z#m!YO$#BgQ-6Qq}f(T$wAm^YoG1rOj5T9+B~N(Vm@PR z*aPE3G7p;b#C*hMk<%9@e)ww`7{pS%KZ3s|s(RGm#g)&7{S+koXNv?~NQBhrRvw<7 zLn|T}b=_pgP18(-H4h3@x3H=81YMm;(IoM;cMser-{=)4HE`F;t5&ywr(8TuO+5+G z&NRLUs?Rip-N{&`y;?+F-s!HW;Ou1nNRqeQ$dKKy0F2#Gdahyo8O>lgv z<@DE&-NDoARiWC}DsRMUl*nB_I_qD2{5#>Uaevmx1Moh9O>~#PD!oNb&>u19l^2N(h zqXPPH2tey!lY{ie3trqmtUagaag=H6!J>z}!fsc%3n}YS?d`P+dR)$b{Jl0_re-t{ z7KhXwGL6z$Y$X)VRlQvXz%}Llk?#Wh{+cT2K+jS6&iNUub#{LYOHB4N*zu z$$uPcP7b8i$uqfcQf|24$vCK$;aGZNEfOeuChZpjt@D#nP|_{`cQuSys|OoXy+0-c zQb!=j*iApT?%pUslN()9*mEJyW{h&v)cw|-0g3sHLulBVONiSRF9<2lcaQrnrfIpx z(n+aTz?bK%da`vw%n~ykZ0IvVOoSuJxs*-1VB4^Dqom2M%hND}+qoLxPdVd`o((J+CuspPkpC~9{ct=yP3}4 zBUcKmLB;iW%#y#Kp}I>bM1>yh5Ht)gX+ z(?uD&se`ldy!OYZUbh~GB(PGteBl;f8<7Tuy3kDy4Qp>bP3AXI`bzE1gw2E3qqL`i z*i0|GIzXWgI0fvFUsWnNj+;v0%(%a+U1qgxKQDa^IltB;#cEAnOg9qa5ja4X~+nn2}&&f!d?q}iP6Lwq+DLx|~EbM%1$Q#7J?Lu?mJves-I zK*9`YpFRK|=GymMU^Y^GrZRbUms48%p{qObwDi}K1A4u%XudFzEk-^?`dXCPH2}=PB~UlsB7>K-@wyKlA67f z#>ep-gP+ekkHhzN6->1|8+a`agrEGFp+9lBG3_@Dori6DJR(Cw5jcwR^FL3anCXSF zpik5)>GfUbsifuIE4~i&Mi&zOM&gQB#tdu0+e4rCYrlD8Yx;F1C{&GW37dRS>U4zq!eS@0#t0`Z4#K83N>)AUD%Aq+cwp zUIq}N1a;gLk0IHd)D18hpzIFq%O;VH$<3~GI(v>AgGmgTy5On$I`>2cY6N-e=sd)- z2-82nrUYj5+eF4`n#wc?gzMr52Tso>Seln<3yU zt;6*8@D1N4kV0eoQv;cuE%;LX{dLRW<2 z)!Q6v!-8k`9DT5&tiKD?b$C~DrO}#z-1CU)e*yzlRfAB00snu{(<5}G zj?e}fnB)%1&I3!XAjE$vTc)><75yh&fdJ&<>dOc#XjbohgG}n6v<+>zH;4q<2co(*Nt*K zLVWkX=Jh2!#pyozs>HQ(F1ll2U@ZNyCGmZp&CR)e8Nx`I&7>YJYLYGF@Obei@fuIp z-4W6`Y6og(#Q71;j80Wo-^o+@;~#bz6Hprcy?<*K@gjb|dRq+zU? zHImJ6X)FjMB}wiWyWUOy>3t;oRg4@>zP3gAE-GRQUS7TtMh>cQA!WamdTrQ-)H}NL zU`_iTA&_G82JvAS5Bb7K@%w)S1I3fwSyGtW5XS@>T+-}pmW$%ofHG2}BtuyC0qfm; zv4Ue#WGShcS89Jzg_p8IAnR17iTZq_5pk^J8g{d}4{ijIoOIza8P|&v8~;038ETxO zGe~0Y>wivnS9<@vK}Ybw9Q*tG&F^n73E9~(XrI~GE(1G7(+RU5(0-TcKH)s?xb?_) zCBAzUt}U7pzL9%;Tt7OJWzW?ky}^Frh&0A#bdRR^Efx%ctDzV%+EdqiYB~AxU zb{IMAsaSvw1leia(0lGxcp>v^t@=Cp*(nm{Pxou1LZq-4>c`%FQr?M?4vRMlDExYv zKAh;5koEGJ1T+j_XbBWI5TMWYe*eo9S@-tli;juO7*xV>BW7mWwCUS6)9|z4U3KGS z<6$S1#7=&L;zfq8D@8BRPeOBaXjJ`;O5px!C`9fMqR;IofRDZzAk~4DKjR_5z1-5R z9p~yHnEwg&QwAEZZoKzb*qdqAll;?X_A^@-7;p9`uD%RA`?AaV;ZEC92%vIma9#u2 zN3v!etyip7u>+A((mlrocmybdJsvfJ>#Bmwcf}H45F%vE=OQ@^u_(sGV&$IoeqYX; ze+Ln{d)#} zJIHd2-DP#x=1K;CzK2catTYP^4uW0l19yjP#)+y~tzF{$R@j}2)7lpTP7r&kCq*H29F{MznjZfHo zW!ZbC9;^NTlTzy2wP?KB+VS6=V-laR*-zusdV|R{XhXuU{>>efx>2AG^%E=NcWFf|Tid3}iYc4>vS+MWMRXb1wun{to+4)(t(9Na!}zLCV+FD@?9h>20? z=;#nUu1=Cd!|pWY;rB53FXA5mi@5$JYqu%MrPTW{*%IF)Y3~HNdsf?((eCH(H;abX zkxbna-IgJoi8K`2_jGejXQ8X_s7@>#-$4X6QeoGLMT%MOATRY$f&kx)!&R=Kn;ALw(DMM%@z6gb`T7l z6UZ6nSwR+?tC`a3?-q}zgCzP&T6pvI8H#54gOX{+_OJFhe*&6e2!|-Yp?~9H3?-Z> z&TR^zDu+VcFs)@YOf{nRlpv-2@u5N|i|KbzvVgI6e~9CcMqLfZf=z#NzY~ghsu&_O zs{g+04B=sWJzQv1IS`^F?zYlQOhr)7iPg-m?0ix>cBxLT!vNRb+tF(ipy+6m!y_3~L1uQeE9l-Cfh4E1j z8-Hy#56sq8;IZ}hwtD=jgFj!1=d~I(hJlH?~y3s@w91T-02lPL2 z_!#O9D}48t>*)AGQb`G;s`aFd3sL)6JsRpD9StSnFg5Luprw=g;z+WJLJ^hVAwuOS zfm5+)&dvEHuPcearhGJZA|a64_wI=7+ghsyG6(Z=CaFno-E49M1<`QWcbE?)AE%R#i3V3)&~JVq}quonq^T)B3!AT_=q$!k3i5k{^=7pBL3Q zK(OU_VN%{jN*=<6fZ*w#IY?nx*th&YgCmqDh&W6yB76LDzsN@j{lkADr>Is}V1z2~ z+}-(Z?DXoXpVjlEOdSx5~w9+BJjgDTOF(D?(eLxDG{wTjizuLwDMGE3rhkM%fPU2*S z+G4CIQK$&A4w%G(KXs9w5h%YPCGym#*U-(CzY6QVQ9ttHG+D^MDzrw|02*;v@PE(rcBS+Nxn-b0;Iy>~` zKLjnB@$yC^d)kOv_GH@X@H1ESCTM%aolj#WS4XkpPbAQdr{#aJvLe==#k=`G^Od zIIQsTAO-Vvt5JFGVG=4+IAoFs1%RA-IOcEjo-V3;#&U9>{B`UkbBs{#Xzjzet(pf0 zQLzVI>|aE7L*k4SM!O`E)Rd-VR0I2q;D}V3nLNDgA1Em09Z63hQBGnR_;wv6R&{;N zt)5K0W1KyyZuGALO`j-co&B{P$Zk^n;Cv60k0MPCs47SHYfmyBC`VH~L`_Xy{RSaM z=5Sb|k9nMp4A{v2WL8R|yu7yTA`QglBh>%!l)sc(xv5p1ID9NGq6g7>D7s8s=YH=XRzP+evJ#D* zbo4UF*n>UmnONF~VrKxWR0SV>D!7bt>15*Zxi3Neh}<%mRWqi76cdgONxL*hs8Ag_=YMer-P_1e9*StIwP*`WuzmsE zIC18@Oq&K-Ozuw|)fzu0wX*d%Y*A8=sCZ{fR@ME|qE#fo44dXA9sWJ_3&8yJ))R!J zs-yE1o6Eah5!4ua!2G`H{Y%Tb*yCJ7Y zf*Qwv5ph}C06F0V>-4$e>G^m9#n?`dhgU>}M3*|X_$rv1#tPQRnVCLID?5Gr`@Cy{ zlQEL3V?w~-_8-6DptzxBTHuG8E)U$ZlFt0KMY_N=zZn}&EVjc?*{LMoCKC4pvb!^e@dV&8bh4AJ)e*TMSoxB>DglbFsrN4~@ zTdRB$&e4UqhUL11tKq@?@tZ23Y|X0P6_!|<`&0kp*r!6X z?C15plk$Loxu0Kk_&*G28CXd%WLQ12Y8jtzc2T_CpZC$k2|I0cvQa_9RE#)b(G!W0 z+dZ!F9$L^d0CE?RmJ$;@Q`u?x2n5HTt5A}DW#Q&ZJc`ET$KMQ^$eJveP><%Hq+BKJ zr8eX0yl}_v0(yU7y7`Mu2l^33k?YloAhx+2gt^%tb%-swK~x6CBNd-d_o^4Km+YhDJYurRX_ zwC2G>R8EGt3mINToT%!IrOjWi#|!K?c3tRKO4wv=0c!%U28xmS5D z7ZR#LpwLJ0zT6j<2jLh+PqC*bo0w(iy`G((lDyZ&cYhJyxrR?`KxOu5)GO*DaSqvh*?Ryj|p$JJUYZ!=TY5ev}2?5jxfTtQvYxx=J=Le`zo=O@*+3oo6G z!4{)w+c*Zo@FEwsV?>}MmpTGNp{wQK$<&CKkD!YV^!rWsxwm>eE=);?H zRo%V7ir6LyH}a=$C@==km6@%s13%H^n!jMVW#h)-TVjDTDNw(c*3 z^Pdor@1;Oe$tSf?Om_eQCmUkFdtcw9gUu2X&rL;o$!P|!4aomEyo%!sFZWC?yF0`* z?Bmo`af<_Td47n=ML=Mqh@4R)YMbqKfbXH{x&>$!&=EQGd+pF*COj zhYUD#%xc>zYp41VZpdTX#;_HHSB8uZ87JJsTSa3uud4-?0Lrh8nqXgA14mMf7j{xw zSZyjAq)PIYMT1|tj=G?vm%YUDO2$JN1UiuDy$pNPI)-dHz1UQ7B`L^2GtdsOA8ArYfYx3_|nuk9?C^dU2JJ5WcQjm9tT8o3kwBR7h^FG zD9}X2*=RAY%&h;e({8>o$+787*MO6$Hhtkn){pt#wR_yL*;`v!?VrkYWKI|~9oR0@ zL?w8*`ddXWFd&{>P`TIJOQ=O8)spRqRn+2W;^Jy+?sFpu|jP??qg*A}_tcKFNHN575&W{I_QN0i|R>FZ{$2bBZKMW3*bXd zlMHllPB{qyNQvNey(Lt%5=3nzAtiZ^0ZbAXmo-qmQYS0Pg?hF9RX7nH-nD;_^b@DRu9~ zVm?NA2J2Ub>j*l)`3(#kPtx$U!bKgd!?%qGqzBKQBV3?7_UMXCI0dNA7qjBc?}S$uJK zTx{6u`Ei&BjQgT$eU?HObs-~~P#h$tK3iMgCd3Ren@w_q6}1LBaltAlelx+MkOE$m z?b)gS#GX3I`_f-~HpJ%OaGjce%|=WBI&KyH{mR|n?(iHsMNMGnm~VoRLRjD1d(a(3 z^Rcrdg@>9-HXd6NDjNdP6vyfZYsw@6e`!<~TpQ`>w6J&7F^O~=rEyK}qy%NtK;pU! z#${a=G}7ZDN|3Y*tL=YaraaJC{RnkuhEbU8t8qYyzA{^DK2Xc^;O^cb`g`TNbk`TY z4E3>#*qRZAx}iU>W%yp9uq|i=Uq@<5CsDlXIPU;PCdq_cw_;btU~11VYi@#$LSXa1 zA(O|+p%hCdV81zAi_Cq=^q(xbKl#PO%?-Le7>AO;noq0RCfr4#VaMjYV-;;ZtnSCV z)uI-iidmtV%v+xh4)#E%I)o+N!OC;>6NoG_{mlqOG`GVsLk|roauE2|Olm829`4p2 z{Xq(8Ob}-@t8!#P3pC&hvZGv&$t1p-5Vp_DCzj$r2bPaht){+kdySMn^~d3G9!! zUuWN|5@+o*3Uec~YVf+!R>wKO9Yrwid%Vs%M@DPQH%FkA#uv&^TKYyNof3g0_zq~X z6X%=sr;ja5*8P~k)WE-KIL66iw1B#`%2qbZwI5lr#*BvAb^-31nBD1eTLL3!D=8_B zs0f_>uOS)ulBynVs^y2MP=NFE!iN|aVgWs7YB?t&m^Q+%$_pi z+Wg+wJ5%28=BmkpRGk0&@bS#1QIE zb^IX666f>-j?@~!#)%9Mhb@D{JSv$eN^!%Tot=GjeB2X>$CPCJ|1V=LBF$H}Hb7A` zptBgjztTw*bPsz~Om$T(`giCDm{;4oUiDZz?j&P=YAhb_iN6x_LPtyDS5<#Rj#+rn zOMHkKu68d&6M{o^CB9qg!gdWkk_zTHII~kycy&wl&j~YtS91xP$uaODVvB)+@yGuE zid2~}$Q+;ly?XZ<0_gI&qE5v|FgBtft4Qc%`^u$|zM8g0h2lYqPxXrCq-W4+^09L} z--ePP9=&6i!ej=Hg9A^rNQmPv^I9<@u6AnH-3t$9S7e{hd+N2PlmGn5dTd{Z-+&Fo z944tOj&6b!l&y>zl`{W*=j{x6vV0_xb-Zy@U64wlr90Pw z$tH|Mq>8(ur#oE~8WkbG(7lUT-kN>X8=yNiX%!ZzE3hDtvCkVAg$G;W6SM0SLiCIi zVU8KPSDUa-2?`&TD*+8)rIsE3^@;LcTFyjBBn-$=DAL23fTt1b#OYie>jSTHuvsJj z(Pm-)hNh~Q>n%)(-fPv!n76fM7`^R+xbB9BFJ~R-mv}3k%@X? zy6bEoMqx&3_Xqs+6xx?+-p?wcZ2U-DN-%Es8mJzhg9*hP!|5KTe%*ywB^Z|plw9Hy z^lr&CPPaz~;TcbB&0a$RWPH>4!tAw4oNDzx{`4W@t(=4yX=u&y z5f3))Q*G@xYzy|ufthZJqn7XHPnidvhURK97vMc@ckcc(hxC_UFN$gHZVavvmq(1#NS1LX}g6hUt075GE{<;bJ--5+Yd)ARXrzf8I#~!bCinjQ6z6tRzCYizm_I8N zE`G|}Jb;M1T=@G>9K$L-Ousu~Sg4-6s{_6PziPxG@tkOZQ=W@{<3|#v^C8|6)~OGi z+28!31S9g1vP3?X4CIt54ylt-wLr#n-UNI>(~@4CdKE=PZ6|~j#my%a`FQN~_mJo& zko3pD>uyw<&){gt+Evk3{ht!o8e#9+sxjja9$Ss2Te5?>`EaK{QK+J~uS(~vds5JA z_9i{fz9HWi7&LggfebGyhc&P#BfmhN<4Bki*e4|;Xo6FfoNKrpE!MX2JHkBcU9#dL0$@SND31`Y0H^j>E@MLM~ScJ*NoL~xu3{Mv-p-Sge z9*XPY@Lrx+G%I<&tV+vw=C8UjF)<^Pe?NyovjcLvC%S-)cKbCs^Do**W%B;(iE~2U zpEOn|l5-*0bvy;+G5iMa@L4^?W2|fbJ2L|#xb4RiCqtnw!$?VJ?k?GlQ=VAemB%4U zB${O#i+dQxN*i|Wg)g<{%`iV+>uXkX6@%Pe`a&)XCD;s`MrEC7n6pCok zdS-Ti;PPS8MyAP8l|8;@l{HwSg=Ra)i`7t!A-w^ex(4WtENnE)RpaQuzEOiCKiFU9 z5|=o{?w)P_)Aq>?ZvAB-$g3AH($4tvj|?`OyPk6E)KdPvU)||f9HD!Z@P&`!+nby@ z;M{zzh2sxKW-DyC%cPhv#^qyCGI@E1NKdwAYpsNMYMEyx1-f2uHw$VAI9BmT)zTkFGf?Jk^ea9~7zgy#eN5VF#u-b>OTp4~)PHg*^V8>yO z$=U+RWA8$)k*X+8zgB8%nDi6~bA{;a704BONe(si_`bXOyAdh|tkh&rmlV%CvLb2T zi@@D?P)xYT&ZiPT4&iA(0bb&B>9KM!^Zs^!_&Kqkf9{2~6u!cpy$wdvMw|$xOJ>5h zLdjEcC*KM@Lb+7s#2@|vNO2R#9c1%6i@VF3eXzQ{@YevQwX?~q(zX9;AP+D86KxE* zeyi_X$lvH<5L<<6scg5S8-hJO_I{tuT5GdMBX7)L#HINs&hNw|7%|u1_4Lvu8H>id zQSaWJK^Y0L+d(x@;h8HN8$=w)gzh~)AF~j+h;WH94GCE?Tt!dFS$2rIUL0WEFE~iGZ{E8{ zyEr^Xn-{g4`H_e*f;3WfuFf2}Xjzem^OOk`|4yo}fVn=xYaf>JxhpOY(r(GvEId%w zmc}3cJ*nUj#lq?c2-t`hkdHvKlF|C%M}z4q5=aa_{|cCf`@w};=VnAw-S_fSz}@5b zhcJN0qtUVNoyX2&&qUedroS^OKtrI{fso!#IM;mtxVo`ku|3)mzy8T zOp5td>r+(s)?%{H#kL@5K{)T5{&H-x^pd3h*WWJ76V=`3<=+A;W=#dMMpPOLX0kXAWUs+jd9wr?l)?By=N?v(Oi8O&#%iXr_I1P{BM zQePd}+`X-;$t|3ju|_CLT-t{Qp0{eM=x48J7klDo`ou2ggzLHy*SDGjRzF|dU0h5x zhu5}gK;nJJbg0lNJvzC(1fN!S#b(;IemPETv|Z)hZ)WqRs-IjIlfn*;9%1{3AZPg< z6c{nHJ~z*BF)ew*$5gIPTb{^_Erc{TBKTNHY<7=M{lTZq%nkchpb(#`j@ls+bUb15 zr?=tCQ+~$9g8Zz{;g*D9Doe76DVX>$yl!1zGwi}2r%e|1dd~r4!{+0)Stf-UOB7xR zei5g&Z3JFc`ztqwhH5CV`22Bhj*czH7X;T$jUQ5HSy9d9teZaOlu)+ zfKr_lhk;{jaK{xF{a@K1##cXy0n)7#0a#(*r2yj&*@ni(Z56-gkK7q^;+mLu8)bfj z+E;GHyL(pE9JNc2W&Hm;0kNA+@IoY=_9y$B&3D^I{^h@nh>B9-D{Tqv58_W<-DWj_ zCx_63{C?e-NCc*&SEN3WL>JietSb%#NY-zAy$=(LdM z9@X`?pp2)oxVu8fYc=H9>vBkky3-g!EJ`8ebkZGne{+@SLvDWLL` zi(*L;sB z2c_TdLSv&*Tfd<6WM<(v$dT|Bqz}|z+bticnOMen`=YL)du;b(M+2^+R`&APx4r}6 zq2hCxYG!&Flr$y`Wr{I;{@gR1NUy4=7Y%j0@$6kxsc!wppqE7UaBCUC2PrMX$rt!1 ze3YA-Ya@XSDofi!uwyz1Q}}Fpws-wPKYx$*Rw6PR??C0XCNK6%OVtKFOzse7M#;9-X|bpODpTQpB_)PFw&zk<0TZ>==< zUg>stP7c}z1T!dcZ~@Q{Qm_DYc%TE8fWNPWBf&x`rtI(i@02r|$mLVv#YLVbZpCHx z{nb9`p_%U#gP)f11n~1z#(%+ZG+O1fO-6lkgtpX5Spj(pxd#su15s~SimN5qU)YIY zH6^2Wf*-DG|_HbF% z3uq52k~N%f>L?vtE!;PQ;}%gQ`sq*<1j?QK3?<<2d=S@axizluI!s;or!4zF($BG9 zl`X^SsgX;n=<~(euSTk{oesXAjY|Tz)~c%(vQN6j&Un{a7)TJ`VI67>;Me)`T3U#t zq@)};^|iHd!3Uv~Rh=h{bYsFDR!j-sNY+OGC2VZTPt`ph3+<*OpWgM!PK5(n4_J;4 zJ#iYa;Pl`Py=XF~!w>FR*dNQcO-8@PHz60v)aUO{OywH3R{TxVhciiKI4sWZ0_5lP zu@5Te&z-2^ujr(R6xiev#O4i{53t&c8eo0jNibe^-&?}2Q_SL=|F(g@m+>1#I34#N zFgyfLScyM&gez70pW1rUGiMU%I@ZtfWKo35U9AnSMu6z;rzMOh_RRe<3ZAL>k`E`V zq9_qDG}c!SHOD&teQGZ~lR}BcHF?urxL=Eu?nxXuk1XV9VE$TJ;m#_pFGgMO8*WYl z7{c7Zh`!Ieyts}&Ep#zD(it1kjhL90{AAyN;YbyXKY7~hxlkByJ<*B)sJcbegss9SXGppQt}C|~-m+ljwxSVz}zl1A&IxK#^6&|ycT zXdb;fhza#IOJzeIk}ssw_4SJ!d`z+9D2O(PfTLfVou801!u~ET7lt^ie(cR|N!wJ9 z+IS;v85Oeu_-Vz)WSUVCYxH%-ReXD~(r7hyXo4X7-ERh#=>B|sD&|~5Czk$TBaS3q7)eUw@0TISbso6GiW_C5x*g{o{k?n^0geU;E|+gDG+Ah z^gM_4)9#aXJc@>sNkq2UGlZ~$?x3qfQwXUMU>hy*WzkUCM`O}hk1Y3DU@Tdsse8-t z?+S}%{>|toflqW}1t-imcKQD<^9Ee~Ju17V5W6|me}B})9k{n^+hBlZLq?Gvc_hu` zrbUL@Yor-+0A~HMDE_(6Az9c`RU90w-6Iz}TyV_1{3KcC7+D*L+Ph&OC{oN^=Ho?? zqo9;d((tNsVarr$OUL<36w3nzR0h0fa1an#e{1VNC2Q(h+ zWzxwq2W<^%)vo*KqeKpfes9_3H$x4mmj;zv_6bJ8RtG<0?^^!?-*l>n|KurtPK9M? zxb^QgwliWPM+b(Cj~ir>MuPm@kT-v)yQ6Nm{9XJX*ck#Q8e;&uh>Yxa<;uWzG_Fpq z0FmN+u?=6?X>AEro$3FNy|)aGBj&b6$IO_RnH@7z%*@Ob&>!Roz?f&z+i@p6=>ysil^*wYBzI+B4xPBDI28G{HJq!F_9D)HE3o z**?#I8-JU#Z0h##Nxku>#FIA3;H%Ivh&WJa2)l--YLmjj{a$Vom#hVSXRf>;`&!~Q}A z%FSZ*sD7KkZPQC|Z&3|(o*Rl0TPjGtpJqF`%C!wk?HpSk={ONg9ppLz(W=x`c|0D} zA#0}$R^K!x4KD}5RG~uJQu~ZwNPo1V8-W^HO(zU^yJUxYDf}am>Cr;-Xb!`kMZ{jN zsw&InK+IcFgQ36BpQ5($xdybTCo^MruEl@~R(#Ca+Lp^VR!MS8+jv5GFHG2*_TT31x|;o2qL$*XlyT1a{dK{k5jm0&w(^vW@sEw;!QF(CT~VN zLO%jD-MZj@ zM1>zc6+Q^sT10a1p-|S2G!9dn;0i}+f6U9f{UVvy*)B@gaL{r%RFx%DXhgHuPWE|W zkk~Akusq~qe+iYa>S?&`aAFMSU2h))m0lRYBj@9=SvqDA>LvBSxw<|Iuv%^TJ~o|d z;0`r?@{6X`HfvY)S*&fxKX0BT`r2c zDfk|0*JeTmE!!2Q6+&WfC~EyZEDxz`R-^tQ4QEJ_c`d^-DTz+ZN1j{r$>@;nTVn^X z(Ke`aE`Cive`6kER0TyY4=mWUcJ8ZH{&=aiYXRIgS0ovkJU;B_Ekzl$zxKL>5G>Tr zN6F%spoz{HO(-(%aGWpt+vvxvS41|L{&dn+*qR6Iz?%rHW1Gh$_cAoM3?*d2fyg3H z5j|t2k@i~&`!kRS*>}cVY){lr`-wA{ zcy*1Ma(%ZX5N?^zT>Uydm-3QnTs?h9mH}ov-}W7fs$pgH92}q|5u=p3g{}J^RT3~m zvTw13F0uoK^}XLDH3xoj22xip6^?uhSt%fpcB5Dw^NbrTsu{b>=-5uZ2I6IlyM>|T zp@FB6u`{umi(yZr0=4dTf-p3z;^3=fS5!Y^N7dIIiG9Xdz@VHjez?UYlSE`o@Us(E z?W+pV)VQwarHw5C6OczL(Wk|XqzW8sBNobSu_VPJ5`1j}j1&Foy^qN)9P(zR$@-I+ zuO=Y@)6m#>wKq!q*T)OeKsz&be0*3VEIXR_@-rluY2(v(zSs}P+868?k-=ile$8g( zr$0i6^kd~{32&@&}j6bv!q5w?ECZb9i{_nKtxiu3zOiV%BG#~$z zUZ5XIH+UT98mujOK;n0a9%%U<(%ZZ_3}pt=nn^r$jy%jj68adohB^V=DDTN&x8h#E zyuAJZUe<$yG{wa4qBU9wf$9*gOjpY>aZdkClhqzwM}(s8S7^-^Oj#{F~N7E}UV4LPPKyBx~Bhqv^rn$$$-&^-bhfY$aIq zt9I0$WC-&y`FENg^eoTb(26+85sg27&;4kR-lQ=EVSs(oYXw@agixA5`oK} zcFdz5VCfcwgBNPCa9!bBQI#G`@9ws$ZpASJ7G1of{YTA?ealh{QZej|Cc<| zSHT28HukU`m;e4>Z@XeOhc4fGER?0@oxhV*`SO^MrX7KoI34w%I#bl`d8^IsgE+|m z#HC%yjd%nOqeh|Rjdye60JC|V;TgMb(Lqd)IXKk^&-4C&TQNY)BHBWa z>lp4t#-Gs)o$f5wrL$E2VRV5mL@Q>u0#qsW{me1P{&`*q8=6)E{(9=2zV3>FeN*+>hKhEvv(RRg9jHh$7H0ujsw-rxVk;E1q52AknDAn4X zeyA9U{yw#sTr);B#INp42rOWYuPiw@5F7UGZer~%xr0iSS)U#-m8&LAmxrqp7YCvR zFyXNDH+UYj?)FoKBmpWHaE1wFLhNB$fa@C_b+uo^f(|D(b)IrMalk>DSH zd0%%_zl6B4I?!vI$g&Q9S5@au!W&R=bQAuVHguhTRU=6HAhyrX z>GkEY>dfq~ekW3bgR^W+i$h@ido2ZcQgoL-gBvsZ$Xu%robX^EDlv>^X>BR&rIzj1 zR?S1-H`7E~TyZxDLjGrNa!3NEi*cM`M&M)_1}p8{oCej}WABK09+94jBGAbk z9?LkUo_p85k?Ke` z1!r6;wtDro%qMx+#}nGKv9sKNJJEPAdhaq6^Tzghm!-2j8&+P!ODM&XfDmP;y=-JTT5wHc0absGnsCx9} zcFQD8dT}3hlBW5h6G?u~m?|&9jXJ4vfWXqPP;+uvW)^Uj0*q%-l!)&nZL;8|+#+Kx zWP1orFUbd&R9?uuivkGKcbJAuhS0+eWlqQST$@!v+6WGlGnOS10Ldu=kW&lQfj?Ru zXu{^1`c9hLq50-M=}EFk0C_5(SL@lAirU&;5u%ZWIYJBRwF^-YZf;yYMmE)fZrz8Z z_tLf1XaL38fSj<84e4Ex?ml#gXO%+{s%GyDj!!g|NCj3AJM6$pQ;i+2Qt~Ay9B8BJ zGlrp=u=d=wbBMjyG=t~^7B#0ztI`4@8vBO0yyN-3?^h+32<#2G%}mAq!^@9qY8_u9 z2eN8G1yeuvgIc~DrcIWx!506hH{5n`D>g9rVwMJbO&_PtP4Q)YJ>qC_`t9YVmWKRIzRtt!$#-_jD**T5X zO#Ygy5L-yo7`jsSr!3rnvhM~doc$Wcm?E{45{%|Y48isMu~R`^on3tx5x{1P*d$*Fx-D85m|gjQUa_sV6vy%1Mj? z1+)Dgd^r-R8+h*rCuc|%V;aT;CM9v zyu^MgKLk2Oj^8_}4R+R(6kFm9!9Z?*w<`nXTph{EYaBf==8AY21D(YSv~h?}70?$x zNY;{FQ`8j7)7;rb7om_~QM_ld2!d?Rf;FFZ9dZMK)p)L*8}-oWI*3^$JqgVb<$mWH zXSA2JAwqqcF>#I%gsU5Y?P6e6F1OSWq)%f+0-fm0_t-!@K}qzw%m+jNA#nb)sE{d^ zVdcc7M?P;T(Jt&jW(Fg7d+ZA>CVo^p=8qo}^5b$}hsQ!3M6i zxFPBg-v;}!|Gjd)9WE6U!<85LRz62lLcPvcL6W!m-GUB8UM zhmP%fnTnKvUkq;_r$$)s?-gs87_I-=sK@XFs2(O`8^`o}jtGUyyPgh`lZf`>NHYp1G4lrhi_ z9bX~Z+}Ug+V(xiliqtem`6`?4{nkbh)O#ZtQ=>VA&fFjsva=$C5wMIzXAFZ~QC6b% z!!Gwn56291c(G+sdWXR27?zOqM630Ui@3-S=#W|{x9&WyTD#wnKzO-+lhkqq6kXVY zG#)Gm%?~8E?u2Fs#L|8$kbyzzT!t4VzY^n(!1)ONuD_B%yyrX^cp6%CN5)`l?!UIM zrMd;h)bEnkFJ{-EMoq5+*T_$#{uO4DElr;4o$q3bQH5g*eqZ?aRWE;7zC7_V7z3z( zxM4bl1{0Sbc%|!ZSch)z5~rRj;5HYjrh+MjK7Ev6Lg9m>lFk;VqpcGxHDnU_6-1M2 zxN=LBY4PE#jJp}l%7_RZ%dp>8<0;WbGEBp>)u3reqpg8ybfXxs^_J!%#s_b-gDUbZ zqA6zib_kYTJ=*cSM#n^N39B^IjkTX$Tfhhcx~adZ*}^|i#nKAFKP6@aarql`GhCtpgN-if2KRJP(UvtD8owuq3Ks++*2c$kx#nY#&$L1N-g zh5K>Bf4}qyd)7}%`8~7a&9}=XFP%NkSVKGFHZd~1l@x_-6fkz%vw4@?0}oB`)AF^@ zl`yJiwt~amE)f%XQ1pp?nA1CTkOJ*Ryt3}Vg061lt+k2N;Z8q^Cv@u3yGol-tN4wJ zBuH_rBtWQe52{c`4$u0Jb{-ty5jWk@IBEY;K12#&aNA z^}}jyo~BB z$1*Wa2*b1`g8q?dxcxN`>)FtxYb+x4T6zINPu~RZldSm+T0@@wKyY@BaHnEsD3@7( zgmC1Xj7&~|=E01}^epzSk>H2jm!)9Z%p)~4phekQgXic8PFaq=*yYrF5?$q z1UyIIdfdKJn3$Rd!AMGW3zwWmTQ-7)R zxHC_1!Mwh?^WfXL=2dlV>poAxg_!gFr)9;4kOrULE zz;FchNw+LWPX)fR13OsEWNR-63X3%)cu*_PTJkIBnGg}Lo-=AERleM9Z%Jg~NW7mI zEwHA))cWF!>M%%nmR=iN{nj<@a-v>&LF{I`u3hnrqo?Fo-a@`axL&r8c^33Md+DbS zfasnuo4qd{*wXQ`?HY>31s;&0UAo<2$mhy4j_~DEQT4P5{xFwrd04PXetm}h=!~zB zrH!Astl#W$JfCi4^r}E^mY3N>bB|fApwGL0+J+~ijn~#Di5Xex7!vGq4dkI-aB-y^ zFvlAm#?eMC#~7)}_;%_yjYZ5R%7wf+U=uqh+NkYSXIaTN)!|*!iaABKB3Yn{TyU-=W8HBD;C5(ZF2Ml8 zo9F!sqVlm7M^5t?I!lESUN@pM78~#?+jMmgf7YH}T&?3~!V}Q-z;2lxtDrItykzwf z&tnf+yq2^pwp(oVnbui>~#pe$~kFF`{bl+vdxau3w{)1=orX04NvHqUe=jz+Ghk&#ODI$kK*@7LcaQf z^_U3NngQ7wvDEHTUbX1eVd&VegMY~+Ig%MPt^QtvR4Ky{c0>KW0@fy{#1+N6HUzmQ z?!LwqfG3mGSQynRUZ5Sci!18E4f(anjnzm@vq_NU$4qf1gm_`-_{f*ul-EYeRmo(X zi+`x(Jzk@|kfqe`0ed%q{l>rTzv`BItUH;Va}AS}ulGRe7JyrqFDj_T-={0T%9-wS z>Esc_aRP!BI{kC18HHb`FQ{@mt}hj~TT^=Wx#3iOG1szl18?_om9%<#bTr`2+=$?9 zD#V){1(e6P912cNOzC8&<7_R0nDjtK@@+r>)ie!T2 z_=jU9gS65j`&q z@}eJvu)gOq^;p`ddz#*%AX4WmpENHHJp~3@0x^+G!TW=Vw^^sz@|jkG8TGUvkVN-c zM=&%T-m9YVI4NV3Y5V1=G=S?}mXP~e_MJF5MAjd(VAlB8hnki$cpFz!8vHO33yW2yPe0{k`T6h2-7v zPwnh8=6fwDC!Pu>*N3d>vT5Cd`l3>Ll2Vxa?)c^cP@}%^JU+1ME|5?qhG|XL;9LO> zCeqDOsKuPbSOLROnDio;Y){{p=^KuWBW7qYjTGz1#;b}K8=Jxw?e~vdvqkX_Bi_$d zl2mt~SCJbIc6*_QiTNc)=H1*<=6?EBe0P_yY0TC(Qr45;8ogoAyn(2RaHahqiGO}_eyNNgjWRHn4>A=xe5yUDrJ;S-2OQGQ+{!CuAS@RhYJb~mjv)gk3ZBSlx z6Uk{Cr2RPW?QPkjWxbm)x52S@#U4L~gWBRT*pecbe}FlsX|Tdhu$h9X*VG4rxn2hR z7$q+1IEJQ!8^yTM9*IlEFczqf5@xY*f^LI9_@eVebR@K;MC1sbjVwe+(i)t!KhO+v z;Laz^qt?M+X=87;e|bcz=IR^?JZc!3G6h184uPW=@{SsT>{CcTHTA9#8Ld&yc&#-} zv%i-xaE6E(XgA_Fln3$tsYWoVUWje4r(jnRxR^gu)BntZC*Ie|!ai%0$8~U4zzVYe zvA|4!^GJT>sC=s*I-2uPM6;@U%gk{Z0kS&l~UN{4BeFz^3LXXt%y)Oyq*_o`^*+$NBA!hq}GEp`c`lZ7Q$# zMTxZm+PX=zd;vGozAYbVwB+iTSNbj%7ib@-;qQ71)#L+Pk`lGc6WGyfqP5S4R3Jql zSa*fb6sSR}bV-g56}#JZ%U0A>?)u3BqYySn9n6_094rQbWa5`*-6mD2JUSu|q0KKL zw?W8>iN_rD9QPl1kZ;e+=W=Q zPxgXVA;B_gUKrnS6p7R-_vnNH&rOz0?(UY^NjTS9q56{EAwM~?#@ZDus0A=->Mi8% zVqH9yR?lQ=u&FhaNAs6}qQVNq$c=UfV_&)j-m0QXZ+mdxHVDqDmmN47b1Dxm_oKNorWl#E3gBah(b>RnT1#hOQqHY#c($y$kqqad*7yoVj5B5NZ@1G1uI8Sb9vO3b>00svxQVq zXHJjBxzNQ)PyP37g92~-vGxed9U$C6@sYyu6b05YYlL0^%kFB)fMCuV(6?VP7Y)Xf z&K%ZkyE$KZf?>>GZu(0l*;rTW-s<%onXQj8Y2k3R# z4_iJ>ui?SmDW)aOqjWjYX8e?;0cOH3gn^d@AwEY9mLh9&@K;^`P=&8(YKZL0jeU=SX=nC@gu{yf|+QJkW_lcaAIsCgVE&k zQL0>7XjSP!HErhKjGNY>Vz5Tm(1E()cbmR{5xlse9=~bv(dY(;l}0?Xj2JG9?)hlw zwAuuleS`gzTKQ5_h3miO>7udf($;9}Ua9ggdeHG(-Ts$V(bP~QC8AD|XjnwTVMTLP z{n^N}-oPLRc%}1;(Q>Q`aydv6xv#?J618tyL6)~n`={)w(xYTT< z4rYzxe)i;gT%;-+_uxOwClO&R?qUZmf`E;m;+OgQXZ zRi3-L$r(Q@Qy(kPTQWlJuj=l6An(0maDNV>ElTB2 zPDsOfLpKUS@4{r|lm?P8>l2kTROLfcSxMPoQM9SVtF*}@p)GvO#l&BqmBVnC<;uVK zN2w#A(4lf+zBkw?atqXEHvnxraI~4h3bBmyt#hr3{rT5qm^ve=@`0KlGv_?1if^QfcGEYAm2ISB7=Hz*n6aNU1nBRB0#bP zCR?1Q*4yOXRX0_+$)N6m^7I9zsVNP(o}} zVn{yGU!Gi!g9dh^1j*!K$OgGEh9ZTy?1p)p-(F{a%f!rZq{(;M!osyyY}ekb;-g*A ze;m}`4vNS9xy6YMFN9tI>-huq>Q0CZI@$EvXf5=l3U$r2`7lMTc1o361p7~tOv)E# z|6WPiT2&jQfl0SXjXb)wrr2$!zRx0NV*z5NLh*93`@yDda@yw0<(@TDF#jf7M#=oa zGu|N$W`R5=vhg~wL-9}}tB`4(1ru>)dD!L(ccMl$ZG>~aT#*w`74Ru$*4aUhMwCg#5L1$UU3f!d$W;Q;x<5ne>NEc-IxI1ewL| z#^z7C)8T!2YSZt|>|n*pm4?Lrotm``Kep1iuQaY6Nm&WGnlWV`aK`ed;^VgRtCthhOb2I~fNtaPbnPUs=j$EzTRmX=KYg5_hMY{7Ds``#f{^=8-9P;l zZZEhzt?-<(O8U&1FV0=K*Zuc}i>V9usDJ_c5j<@Gyls-g&P1)p+_~>SaX4Oue#=Np zT`L}^uI~WbU_NEb-AR=9==%y3GXKwU$#1of_D$*z7w)N~tO1PBdO}G< z7Qa8TM^ZI(2n_F};|x`cUbBmU&;BcK02GNFatg*u{vwm~Of&T~WQmr7Kx4PKcQqIm49V#7;AYETmuptAF4}O@f&>q59rWM#0lDFne^! zWM43{zOV$sv@-^fR=dva82gIq9*Tudo#evK6^j$BG$s>-kDzeoYG+c{b!GZd6>dt zD;ZVN^M%ZBx!x=WWlW=SUsc;#LOiJ*2lFo?3z9BE&YOOxyFa6HEG*X-YDjYgyl;xM zKRz~0(E5COn)o5a+eT&86d@fTZ^I&BDSrgHW=eRWb2NA$POBZVc+zug5dp#%SxVqP z-d@`vLUQx!m??00F**;`7mx>ir{^}eww4Xi7_%yxR>My=mIqG9leJAeQ{hf(t+o8&+90L%^u> zN0j_edN6s2y|kSXW+aoUG%m`q#v=q=rNePy!8v2cM8d!T2+BYl?P@UGYMjP3Q#Wi@ z@C|HmX2M{O^&}ex0cQam5GKYExo(OpSdmb0?S&oq4UlHO0(`cojGS8|=(jAi*~2p9 zXE3Nv?|@9;rMFq)t)pxg>ikiWWg3t*w5NbjCkp*k?Ssg(4}ZO20AdJxNy@D*&O~J| zqUoR0Xj1{N0%;q}C6=R`!P1MQ&(k_05puN#+nX1nt!;_h{VWE25^B0`9oyAi0N-Hp z8O!pb%k5$}CaN{b3m>UG#_AbbmX7T zermu&W=_tKLOu&M??S|^Fda+}rBm6hb2YNZ`$$XnB&kgJI+}In&qxT;J(RZ7OQV%K zEMp4;o=aubz~(j77-tiGy(CZX=&xp`U@r#0{r}Y9WG2U{BTIguoxVge>-e3tk4f5C zXaB(u5%Tfj_we*gMwOsMydz;+j`+#IC|~^pdk!%pE&iOOBSCurj83{VDfg2wgu#XcflMu9Z$wV3t`@@KY zm;?ONW+kL<)|Lo4Zm85at+CKkUx5@=!34T;3oG}m@sPyEL{$i*>xuot96sH|*M1|# z#IO$tTe~DPKFoo!0pufBS`};U$WTq&UY0@P+k|%<@;S7MI@FMPfT}X{UvDiWHiI|U zJNY-gF%%>L{%>_2%G>hp-k-;j`J=FEJ5Bp60+)aq;(p0jK5$gz9BRkpjBBL?s)-2M zIYROFu=I+R?&^eZIMB9llofyUgG)GK(B7PnT-RVz4?mCnAR3&KzGIi=?-A%d6_B$# zZv)8G^ayi7cF`m7vOrWJ7T5&jeZPHagf=M_+2;Vc+ zSo0IfF^zr+FV$&q!il+Or}2+hq9VorwFRPr*42*ZW-?k}_{L;kE&w5)2nd%^Te4tJ zXxMA&G%~#A4k9+iM-o= zDo_Fw?g`4vhv0Wbv{(7u$qXw+20}ls8PkrKPb>cMu{Xqqws{z6WJmzhUcH-WN5qE#^a7H73chQHfe??*+GxA-a0qUs8S$o}xH z>kce8Yh?ZUWh_mTOz-ZyE>4UO$!gWBm7A*MZ_*Ob{;Iv#^~z;>5ld=m%IuqpE6B}9 zHJkfY$PeSFC(kq9!4o8M^{NlnGD6AbjPEZ{kKXyxyjRcp${#SPQD(B$?vASog@TFy zZi{V1W{2{N)U2LxC(_bnxqz&;&+04GgJkv^1OYbEk5fXF*LI8f&%-}$t-UC8)LQ{u zB21PIsOZWnG{f<1IJ9&nnf)0FU@0-JBn5KSkEK#=0J#cnn#ftG%R+U`I|m_Or$pl($Wxt_@FhIalf-GTzsVc?e4?wG!KE^+)nyh-DL!` zA+tMCwvk`*ym!o0;~|jPYs~|Z?e0nxY+w00l{dQU&|TY6Xz~}a-4(wv7lp)9Rzv0j z9$(9+jpw9bQ7SMruaom$y>{{=c+c!)ji+G`D3mWi%d#NWI++U^<(69+J7qfP z+othxY!Mb6)T<`4qwgYI>VW8a@E>3Fy`6u8GgL0}toX{LaK8xGtX+F_Ngg?2Z@U+R zb#?Ux9n#V!F4}Iu#u~pFsEH+E*gl4^morr|QpLwk8ECUH2L;gK6{J zx9#bc(|?m${+>11R$K&+l0#Qf7n2=`Z+?N)9Q;dhT3;khB%CB+8s)Jn_Q?1lZC%z5mrsT1aT~Omp=nh9( zs(w4Mi6*u`i(N+onaCky(^Z_HX~Le3h>l=drR0q(vJeihW4W?^JUq}J?8najT^_kM zVUs-vH^Uw=5U3lPkf3}!U_{MYQqjA&2-6P-P1p-oc+^ki+OCvIJ!Jm}yiOWxA$%}j z1WP%efDvG*FaNv%LLZtKvKHm!hCSK6;WHi_RvNBF-zaaZ{P4}}#yWsINIoc0lN;4| zhm`6WPAPgW8J*w(%Ws2DRfA3@)Ylpc?{BI&RrNFZ9N=d3hfufO+-s2d!=+OqAg-U? z;g#Z{L#VKa)gR@U8_e_xTOjE^3jp|1CnYMR8ZB-j@WAm*7Fb%RtgQl!$XY3LMKTDmZiBdpHwsVFo<1cnV6z@&Yb*JxPn-?@muL+q5NU zhYShN){7&<(&o=qHFTna3_(GuTp7g^IXW!S2*6+zwnhx*a>7|4 zG~LnqTj9EF{n%5`8CCAK(v)!ZzMS&=l8wI&<-L$awO}@|{<@_I|3e;``|uw_|^PmqN;#VcZEyy*QW-|4U`kw7eNTxKpeiPZKb z&m^O@+qim4Vm2pJPbnfqsEcvT@+kt-drJpAyl;7ap!~v<8 zK)CpYlUU`xkl{b)gG;9DsGrfx;pvd}HdF%~^jo5nXkH2epqJ*xLCa{kx~}Wac88w@ z&0Go#3c!6B8e13Bt7zr)Og@SBlqdxIIuKP(6L#~s3m6Feyz>4LGxA95a&7foXzABH zlFwn4ih;+&#K_nvtl*+22jHBzF_u4n9R3EObcf$)k)9`B8~n{>r*yUBs-N@6W#4Gy zEzJjy1<094@i7Yv%ECIWCQ{4j7$2vkdRTueo(P=4G#@(zj>@AA#w4Hc7dG@X1k{hx z))b||ueW&(r*0GSl&q!F*3L=6xRg~=($JFT3?A+NUI!nGq3RhN);Pj8=FyB;XM$N6 zZnF3LLYSSfw2nMaJ53quy!a69`IDc9Gg;xSc}(tt&qPx7fUuQ%wjma zd?qsbGa0HQDXj!b7j{6LWHt&II#)DqR(hl5Wpbj%Rw!R9jsMbEGOd!D8dSAi#a~&GUxpb2zyBIy`W&$5t*TqeGRc_`=rG|`}DV6>1jq4$;7H2BY5eA;dW2- zI_KoxjRtt`x9oDPEl_}!v*zDUm>=G?l&+bf*L5c#)k{L%k|WfVuD*W!g`VvXMy=WE!MCLYE z<36|tT(P2Xwy>Aea`LaJB3|K}{&gNYbt}qOJf2SGH>o$KZuT(ra0XcjAB~pqUnH4> zVX=nhq(Q~sg+D4JGAp|v1v}*!$8Y|i7*rr}FKT991!X?RwJC#~oFm?_5kz7x4zQT@ ziJ~g5CaBAy+CiW-HJFlwq%;twK?P}QU%~S(QNn)F%G2=YzDjxQ+7ok?7bQ^)3EGeK z^2NWJa;CT{KBPfb?`#3!uH4IYxKZ{>?ASZt2yuG81lYY1#jh^rY>3hjp~Tr9+)rKt z8eu_FdL(mYCiW)95FBsq^!Bg&&QN0tLYYt?86_*ao(Km^g=+f#ee*fGVa4CxuwNO1 zwJMQ6y?Rwh%OIzFyyCA&G~p!c*hJ!565Jkwf{BjZ40lAo;G2QMi&AUNc6)o(E{BF| z5#4!efdfl5_^(bn3_ov-a;`TT?*0Aum~&tiyg!;FXfVO~*DiH6E#_a+pvH&!ChW9< zv(nD{X$99;v41v!9c!0XdH}!g>G=y*VlFra(I^mXN`87&%$1o{TWfMvyPua zr5qaFxpCKm-C?aJj-tEoDmXWSz(@;y7~G}zmdzS1mH8SAI)nahJ&OPR*Y5Uq*nc9> zgUZK&|F<4cT^D{tNG*TG>(wb^+8Zx{JUa84Bjm03!hb_P4CVFn7HjDybE-b;x!b`T z5rm2w#H5B#(K&TFAW;MID!J6p_$677)&Rb+G(co=mP;`izHT|z3+!<{wrA~C=&t#^ z4Qp_lvEQEK>U@_`Rn%;lEe*3A5u!0 zm3qr*hQ##Xuc0C~U@+AwV13qiX!p7|$ji zl$|QHP(l0Uhpgq1(@bvYrYplBh|*xPW!w%#LAW!nF{P$1!e*h;yKn=c_Na5AJ3x-C zb)X8Q4AmtVV&T$b$YN37{zX80)zhN}q&sP6tgEPH#^1hLOkFL*`qz7punDD7d>E=u zdwF4R(-N!|EqjYd`)5_tjwV!OcTq2I%QcZh&(j_+14GFCVC zH~3f;jYAsj;Z-&wN7~q&+?}} z5k7>Zvzo!*Xc-hM@6Frl!6>)$=nhg;RP%H$Nmw$Ybg5Nia&(Sgi`SJWK$y`nj_ zpKIyx_wd%`7J&`|jQ4cO-v8-mgfKovdIo8;Ob0jd^Q?uN`4{^xF+V6rZAErmVD@On z_=2MOC=Kf}kpMt-QjX8u5wO&x2B5XF1JPA%MR0ZlE*k&^y zQge$A=UNi}77e?qZfK%(k`=249IYgQS3co>clYK#*WDYUw@@>6Pf_)ARx>%#{q*mh zjl@&?nBb)|?}?vJd?(TrjuN9 z5Bs<A05QQzM^pTrHw0l$2=gZ9+QYMac9DOlG185_BJj6oNI>$32#A7k4{ zlhB9TAPy(E>%?@wl#OepM~`FW*NGRTCX4(ybtMfAB*~38K0{t5JGYwR$}8R0q^>&( z_fuL;1c3+sA0nhW`N|$;Cd;y787uy2Eon4hZBH#83q&nz^$%)|XwYMSG}_>QjW#{K zp&>aLX+Pu`2W(Mv!U9A4cpN1Mff)n%C0Y1b1+3AbSGBYRyCL_PXW93K9@~Yj>`S?- zulmH0lTy}F;aJsIM`CtN;3z9`H8efxd1amHIg80Ah)(mO4g97XdZ*lLKGxZZscb&z832q!^?J_MMKOPB{Wqt-0M7KE-Xc$r^&{o)F z<_5zu_F3@WFp1{qKfYv&mnwcNQ-JC(_QRhCQfIH*d{dBIKNFnXalPe`@<|v(7z)5_w!A<@E-}p$N3-m`bXvb@9K}V zzC{1K!GBI?DOUP`tpE4LC2aqUrGM9f5=#>Qc)k9!2b(_kZ+!c>=f@!x-2d3{|MvdB zC2F6xqwn)%!uzo1`2SXsgNt2nFhSVxx{-5oaiMvjrJ=DKCUDKVa{EX%?l=M@Wd%w* zUB1K#3M4MtaXBM`vc05Z3(|hxtVR6kb6ZH%dw3(~_IkBDTyL|^kN)fA>W)AqW(`<@(n6uZxhy{E$rhKw_phfMHJGm|Ix%20$Ss zylAGVopW+<t(-PyDkny+dKt2oC#h(6JnIO@%8-^$9)FYPV;E`ta~oL(*_ktZhlng(EFbl z&40`PD1gMQKD3zjKpOJyX_2RE3cmq=vOS)UOY0pE<-IOEH&vt$ruWKAbNUh$_|rQL z^!00QBSxmCe&*#e{*Ttw$9=D7+W#d3ll|aoizv2RnjSj!_HkeCqt1WHP+gF6KY&z# z8h%?#w|8_p$n!k?J=XZF@Nn8VO%qsq;dS^`dVa3a9h7J!o(+iZ&6my{A0J;;`f!@_ z>26;D-`m?;+7|Bm{6F_3XzSY}O+{lVbu>+I&6WOx(W!k%-_-4sqCSR3%lv?_hP0xMl0uc44%x zyR3HneF7N|AQlmb|GYozOml;ZR2*=7gviI0f3g^_fy|&_k*=;TEV1wnr~i62a(SK3 zsX$ej?zpjk?5NTVv-Axl(sc_G>H2>>XS(Bg^M&0jTXE@!h4zugzn}j@?f?ImPUrt7 z3aZurbA9^%E#Ci)#k=?3>iSTxpK?dkBQWFN2P60yLL>*g7hX!4WdguX=7cjC7fzcz zLOHcxQa?fHls=nC>v$JxVr(Kw2|ZEvO%tbvja7&McLp{73o9{^VEoOhv+ZG&BX8PY z-pvc=>Ixzpb3zX%jrkmvxQPeh476lfzj%U1WXOPv9Y`LPw7 z?*RvG^2~8HKXyOMK_GxOegzglFwjSCj--hOuoo6|=3&(9n_PxaMUzI)BkSgDtXZeJFk z*GG`CGHk`K5AZ`DQ3ME*(YPR0fe2>@K^%hxzVCm(-$JK&rZo+Tbo;!moXV_P zy!&^8#+^lpNKn|2XfD6E_WSy8?VLu;=}G@`Pr{R&*p)m?4COkmOca-RG=(9?n|#KAgK24?HAQ z_1E6}t8ef8wZHQLp0{MkA*?zkdXCzAZghW~-fo5c2z^rk$y`AusK!a9D=eWFT z(p4+$s++Q!AbK5innI?^L)|Nb-7T|DmG!3;HWFunz#xX7?)~JnI^ci@eRHCHrt1<_ zVvd;ORpQ_EOfkuhD;>!$*zY>Sh2P%%&*$-!&I9|$Jf?&RovT8x{b4qY$S;7KVt6a*G~+UewuF8NwR&DJ#?UrZ*L&c_@Mo zl21IvOKG}M3t#^jd8p+z*`BK)*$;uN9Nut1RJdchM(SCY#_JODG&)sI-u6fw=QWYm zBv)&`Vc)+uk=V(;{|XvQrWeJyPVXuE5LnC|MoCCJ230-U<4zyCAq)hDLP?N)oX(KDX(b-*ndt3oPJTD z$jzr$7 zyyM>jdtj^Sow*x8z_Tn)u+&@TjoNY0@R&}`!k-5W0_^6l8&C=?(&#KPuQF=sgGOHD z{BYPO-Ik_kcJ_XhGRAH$7o!z97={|W{ZU&tevNwyNIQo^iMgi2nexSDg2Y56ZlR&K z+}CD@qW%$`I{ru$+nDtt)^BGJt1iCm#)qeT@F6$R6WEDsXDorv2tx3|21K&yZD`4L zlco1+Ww-j?_EP+9*V#zPgOA7SP1LQkde;PK_Y5w^sUpDM1k9%!G1JTcbC?}rPd$!df z`;AlCkJiSslyo>IV26TU{u=!PisDe>kqx$U*1~h`s^ts4!%q-vlN{Ly@w%WaUdRI~ z+up!L+mB8Thc@mE>o~vvdkE&Y;iz56^#zXK^^6yxW63Bwkgp-D-S6rKxr@9;R_Hm) z^b@%x;YE#XIgoz4t;qgYHk&_+$M=={R-X3yLz3KRJYRDXvG~BI>48R$lc*!|!{IbL zl)`-VeBH6pg7Ej3S2U30hmlOej^~MB`&*1IBrx8Q?$ySwI)v~?>5l`4ddhv<0*poN zSCPkS7S3T}->W8$sa&cI?X)touRqp#a8E^~M6}xSK3Q!Ph)jAIjIVC@MOOJg#MJWtu#Xh#mx)*q0} zv~@e2o}J2)twPS+IfYgbhNa+I9A|x4ED~1s5vZjV=4@HqHW>)E*VQ5b%|XPmB1 z^~_riewr&(S00CtKeN3JEgHDcpf%M~;+ZM(uO1Iao9fwZSl1@{z0|-rdpmvw29_V9 z+hCVc03Xp9$p|d|VEQZ}&HChp>qbSH$=1s+5sXZ%iys$A%NJ2mj}Gj~Gzux+^kTu@ zb#*v4L@GER2HeMiIGC??f6Di3Y2z;2*q0V51P%(@ib`lT!;U2jy|z&_~LU z`2LR-+dZKs3uoNoSC~w}Y?lLkNKL!A8bFz0!`BWJtf=_V^Ws-2SoKM_sn3WaXn8$F z)Kf1u7)Yljp_#vzw;_zJ5rVM*!h|96A@>Uih=Kit$6#uHko_5AvG*UEWL$)}Jn+^0N z%gg5T82yJ>f-jN%Gr|r$*3KPkTzm0*&x&O0c|Y7GtA3SJq1ULo7@}4+MN(%yFcrCb zB^g^!gis@9`@2h@ch6qj-jEYUSEx#Ck)%i+@)`KUZ+K>cTJ>eAXQq^YfolcVEYdZ9 zDQIqIXiBDJ9ek^Js9l|uF3N6iDaXQpEj&ME`MEgTZkjiJBj2J-C1x_WyX{pjCD@F% znLAs_Qjwne!)S*hmwg1$jBhx!=o_Gi^JEUTX%ET{b*od3j~=I>nfmb6RyRP10?U0a zk}xh#a3*$*JH_m|zVNld{(x&uR2b%vuKSh5Vv7V4Qg9S1I0{qHgbH3`BS08&I^NVe z8~JnQ-`@O4+Wi|mbH7{Y*+(j-@YPbq{x{C$@Iiu3vKGJF5q>wbZXQ&&)(6e}{csW? zi)_1tanKGp@Xs^cPMbEO77d{Pg}Y3oeXJe0np_)KEJh}R>AVWaqJ3t z>NYt_%j~w2C%rn(Z}Vxl?cldh0kBO6*k%y>bFozd>A2vv(vq!cBjlNFjXR$L+e%NJ zBN=;NOEZK2eg2^T=wL{V?nD~_R^VLjW91gwu%!&h2KR{4wOy%AGkxXWpqqk$@s~=UKzn`Q-JCc!^nRjTFg~Qz% zq8V5tMO>rxUa1aM7=VOkYS4f*2Qg59LE59nGz8x(CU2F$Oo7Hvngvl|xb;QNI~6QX z62L`c`XhzCGFx{)GN1%b#YIq}(*1Ipot5zj3h^^pN?G6h_=3!KzgGrID$!%f z9K&c(wIi!NW@krwaOZ}M9o{(YF^-tIU*_FHXCqdtPJuGvC& z3RAlMUNtCZ6(-@Mj=9tH4TJjSK!<_*0N$xFU-IyXHG`IAAd}a84~jT&(&tkYlYRBR zrR}IR6_Or(q&qzEYCRIDd=GXD^$iS~t68Es&XIh`R!G;~_08ygicV)5tJyiRULd{E z1zaX-u8Qr|_x5I(Xr-qmc6d2Qvot%N*T>Xfey-(6|NVRtX*X5!Oei;b^;9P4r2}lJ zfdwwv;#jxz-06?d>q_8pW#fjx-B5=TW3Q(BhCnV1(cLK2KvF{=rRkO;)$1%1T2qda@Oyi}#X*d+}vfCOym2Ze*0pj95lykfF zXwf(FP24u~qooy_3)lo4LW+`_Sru_y@aVMpMksPUqa?GCsWD6JB4QMt>Q|Wl+R(#T z>gCb^{r?g9U4bs}gD8|z*iV_WsV5>{ijJZWgUi}>nApz-J!pOnAX?GxB`k3(0)Wm# zY3hQ;U9_H=l6_V4*?z>asD6g`BOm+N_zzvQG2P=525h((^5 zdJ!HGF$U`BK|9g@4W07-XS+Z%X&QW!;GGQAZu|3M=kh`q+Yu7EIN)S)>WSVZH!$80 zV1Zz~Q+EKbnPmonymaJ`(I>HucqHdlo=eHZN%Um9A;CgbOZl`Vj3DL`M|lGw_~xYj zEi}w@e~m-TEqKhvNQYAhcU;Q0%D?+AUyGgZKj&Z8L7|$(N&?+~MQ_PMA7z7*Jf)9N zJk~iZmZ`^6r1Pbq@<_n$nA)ptjhm||* zq>tsNY~$5CcpKZH&W?8#fjx8(Z=Ey=bs#ti1&h~zf)w))fCFS^u&SI!L1(BV0lak! z3r?i!*v8Wpe7n{q+aT=}s{WU!XIW`^#SISB2CPk6IdyVeLZr<~|?e_$kAH{5kngePx7lP?p}! zOI8v*1d@FbyD1|G;vi>^R~lAZ|{&s+ageD2!a{|1gGaozv` literal 0 HcmV?d00001 diff --git a/examples/advanced/distributed_optimization/2-two_moons/gt_results.png b/examples/advanced/distributed_optimization/2-two_moons/gt_results.png new file mode 100644 index 0000000000000000000000000000000000000000..8f086af3119cd006a435c269db1f0b2776f3d978 GIT binary patch literal 75513 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�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%0A6aSl- zRmD_GP)4u!1(aF->+D#=&}`c`ot+$z)WDkSKmeW)n~`DsrlQcUsm2@mIgySa&pwEm zS_DW*2>Hh_dgU7nvg`0DSc58O(VwhLL5SCD?o5?ldjlxdpxffY$@I zvMM8VThTw79e$G-m*MexVgTAyhdk``glyk%Gm{tiESdxA9OrHlitmZRfUdA#E7Gv~ zye#cVSZ9ihY1mJ5yZ1Ze8u%S%zuaZ3>*_|hl>GdOKqM;i#uZ)F1O4$w3URc1?%;Aj z-g%$R=NDAmddUz+iczo3ZJ{{4RK#+^;Ud|RG zPvL!z8?xZ>Ti$cctE;<=iR zhxF^#;SIIC1c)?HIu8-<>{nEc8>y-QDR$6nuU!C-pIUST{ z)>RrWgI_V#t}$=&MD@o>Bw%#~A{mB&(;D6negyIrpW{2GQbJC@vDJY8+r*~0*G-&* ziArg$Wr?sqydJW~C%F#aK0SqUdx|vc0O{wd10Va3V=7>{nNuHz;8H@n_;Wp{AfeyOJlQ24=N9@3TEkc74&!L*W5G`;u@TkAJc#6^otXLED?@(M03%+yfk+fDb*7aCI#>k;|}j8A&P zLw-$12Njm&BUF7IYS!~+^P={|rIeS7f`Vf2z&@qtkeA_d71&RaH#@~e==Jev^Ondq^`B5;(3rptc7v9*jwDgl9>oyydjFmu@h1FiF z_iSfZ{Mm=C&cigY2GP&p+Dzz#FgYd595&*ScIj%zr0$ zkV4grlw@&-9p82L-$7nn3AL@BeHHrJp$m|P($mwSw$m&iss~Ww@=D$3spNsQl$3Ro zmn##OYw^o*StWYh+kcFbkwHO0pH~%==s_8y&5u|Czpn32spgvH1_I)`_Tsvhg2;0A zc&v6z(9-04@5>CKbK9GHVAsWrZ0 zyr;Tj4&fNPGGO97`3|u+E+wB*PlQAZMO6VI2t();uZ$wgezo1NpTVFjfnVOL%-6_m zTB|5?^sCVx`242e1#_2}%N2c>IP)WjiB!_h^S^^$9FW?e&^3D2%kO$PZhw)+msQew z5&V0`Z)4YtA

eoA_8*sW+PE3VMw_CRO>x3w{;VYAE7wG^Sbvbzmm)HMxGkV_3#I z)RLv~ZT0pkM&n9s(x`je-CVv6f&CmmdFKSxGmK7UE5bA@=iNB)QlehpNc54=pSick z=%TeZfQG&4a4P%m-d@)$0t#Xo{Wm%FI&JR^m|R3UJO5h*nCmG_mQmWXtzCOy&-Ge) z{5Nk0{yc5cY00hAeZCb97D5#I`G@LLMw&n2aP&#W^b|#*d$-DN z+Y(lBF8HfiS0euHm-067PIMeXT!$TR#00Of>cql>KDfw&4YbI`z5njQyZjr($>%xv z0mpWYL<3-GcCYYKn*l>5;@scUkKev_eDC|9_9U9{?c#$RdDZ6H3i67#a8T#BBs?Yl zQT^Dn{f^F2A-f$IwnqN0sk4*a-8qyee6-o7(gWxoD1nf=gaK_ z^3|2E>1rDGm*?*jbV>Dgv!syQ*SULwzgO&RZBIQQHy(TEH;IXf(S>>>G`)4X_jYp& zPubseJbCG(1Hyua*J`$Md2a<&5gIbjy?9*l^*4y$H?QII5E#@{N+X2N$8ocrp_4qc zv7!d5<|tiu({9lvl5$;}EW05uEda%g85++c(x_z~N{QsXp?ZLP0pwrnr|UgU&-VxG zY8q0C2g#`A8sEk2WF%+*FZ?C}#uEmk=eUTpR##jEd<*ahY6p~l5Kb*<+PBxsH_pc&R+r?$6J_iyLq^#{#gR49Z# z{!Gr4`?%<$`}Qy>RFD%MS4*H|&)t14*f zRGY*GROopsMQ@8SW=_U*4v(UM=l9ju^uj-cGL)xN#)XimkyMrZ)8>31rt_YUl)szx z+KxV{9(BE>5W7Y>a%IJMGrj{nM^4{w&P_L$?z+|qy9A^Ndk-kDxXCC%79Kb235$K! z6{oJIE2DkhtS*L#-h*s!nSTr(JiF&nGnalmeNM?X)hOXmR7=0Xxc;fU{YN%MrRu!j zB4J*+FI{u%*|hjPWeXp*+s|>A&I+p5_J5lvGdUNx1sKsuFTK=eZ|vG}{vd*U14?M( zs8E14ho2}ow#40#S|v-~+})HF6!ygjJH2vq{Vz7(j2KPfxKE==5@qWR zvzs66FxVgs2<`Xpox*+s^?5(k#V zsqL5G^y}Y$>%G2v>rcOLi_VaVm|joR0+hVUdKPNn2R*h_qa&F`#AGrgcnyT8oJjG}=u<%ZlTd-3y+{?vr!xyd%{xW=l$Ril`DVQu^r(=fi=8u zC%b(j2Ld?|vVIHEg=vu{mMZxyLEeH0BDp{9cXY)VZ=ffMNKnSi-URB6iP^@y+k!N; zEjQ5Jm0*v)@m($@7QiovXL&v92R|lH1oYg3gMgY8ZWNM zaYE%uL18k8c6O}SM~i89nT#JO#J*Eo$h7eGjYdcSUf&bo{KTXT{)Z8+ zpf%Pbl(9;Lm)Uj%qK+veXA&fIt6enE7+$bno?)2}H2B-E;z~1_X1SJeR7!OPN%lCd zTh;YO=j@W7{}j@m!_0R-eb^OxWXh{vB1B1=4cCI)%lmGmW{eNAuDM|Z6C%0yX+8d% z7&zU)ddA32?V*}frw;KYE{2N+%9zf2QO;9`FYl`=8DxTjITha@^r@T+JuY2JUcaG; z^>phDjCexKpCvGHgWR{%cFfm3S9DF#E_O#{>RXWQM4_cqthHCu{NWnBMk<)B4d?sz_6Z^d;b6S z;q8_vDRlJAvN$~`QI|Ikz`MG1@qlnG_tqoF$rWC~xcv=(y|L!3!TK3Waj6l!DTWA$ zJ0^}Yob#5{YVp2$p#^E;I9MpJO6K#^v;t?vyUK+(hED}Aq5M5PLe)M@KGVM#b6q=VO)LmQFq_4VU;;`CMCHMLzkfdLi*?dl55 zDNk~D8jjPgfc}7ScPf!$wTBOWjeT795+;%@3sJY|iOL-47ak+-9T=5IJIbJ|@sSLZ z+zWoQdMV1;!;FT|*n`gT@!VvCS8z4pi*a!Og%CO#rSCH$`TdHd^ykm_32|^V|AM7n zkzur~RpU?@Mffmt#i^+`K*VJ4wfhdG9jyg`_AT+)Hre82AWgUh0PvKZ$^Qi9!;zXB z+dLv8hw(=~2<(8Th2gX`&aVEz#wZ?%sAaE0zp+<%n$?dfm&DLt8Zr-?y6l*ZtH7*} zO6w$$0TCq7jY@iG{_mhi!_0TY@TZ?mE)}mqtDV6SrZ8XT^And6 zDaFUjujbP5I=!R0Vng_Zfj|0 z9!&Iq<{lL-_V<#C`eA1LbtjpSz&V>aaiHNj-@hOoY^wG*KdLGfjk74OTq>BDzs6i6 z*OJcAX6Z-4FIVMjdy#E5aQ!~R4O?h5&u&3Y;ZMu!Jo@8R6(z57n&^cFHeJ*{6bHkY zMN_oG9C{x(@U^ugvU2K02k{>;57PdF1Ipku|MJ!vwTh}{?`J@467|fYweP{8s`N!U zJ~)E#X(k0N3NxCJ#=kg1HR)YgTdis}frz?4`W>cSuvMJ}n#wz)Dgu~Lnqg-GE3+=$ z)WN}ce@urqqNyQAG%-h+NJcoZsO5*0x@?`cBwm#19Qj_C&Ag~kRh_^-?Y9;;);eA| zucd)DDmW)@)w<~iPDLFs5&-gsa^2IUNx(MW>Y;}anOdAEcw+v|cZ?%Q;V0B(b5EXe zk}+J4!298p$5T%spGsWWN7#G6(w+F1O;?3;Oix`8U!JYQ9-h#shR^}&I@fD_UQd)d!QR^GazU{)A=?XV|>??9xP! z_b5=z(rrJ&6T+Y8*?j)s_N)}xcjn~AX5?H%3$XU^OqYg%hb<)ml~RP7LU^PKhWt=g zBjJ-S=jPaXc^};CNu1sml^9gEcS&DLOXz9v1Q=3~%kvJzbxg$pNt)gL{cc9dyLX;q zSySymSqi98wstKD{JrInPw`+^MOf)gTxY~iQOxnaAz9S5p^;In?5Zv#{VOo1#yf1z zCZO@jgW%J?rO;$6eCR|4Q?iV%nIx*iBa?gkElc+bpb*nW3g@J)Q(gUOGfJypV9A-h z)z}->!I|VJ3GWCgzPt4VhNFZ{z9(fi=!VF5E<6BQ3A*!Mv%G zw;M*))Vfob96&8v3<@e8&N(=6wt*rpoEqrbJN57w@Fv*zugfynq;d2uErgyf@Pb;q z7rgDC53|kcTG4!rZ|Ow3xe*Z2vQEfC57Ih%$fPJ$~9BSmo^;w>GryLDpgg)@@NF zE~XW;oYKRRw&QO^6JJT^V&fMMj zF;hn)3@ej*5=?7H2s^;Il>N_yXdW3wOFbf>{%}#-HV)&tF>hkGRFiG(wEebJ011MX zsNEPT2qJ<%w%lD2q#D|%%9vK`$5Izfj@&+)_x|!0+X}x)gqy@IC2h-0b_DxAEN)#c zfZt(^K~Gp}){K*a-*ItRAqFNoR2{{-kmR%CjoEc<%mKiG(*?>%B#62n#jo(g!onsW z^m2es7odzReYU^?E!?=!E%fg$?zg2{4Kl4EOV7t+R%Ei!jnPSH_C)zx2U@-OPOOvR6jy$>6`@{AHq^2)0UZv95Bz1vC`MVn1A5T&y~ynz?)S zL9NdIdpA^kGb?89&;0#_Uk73ePb%^`>B7vILOErbJrS34<#$(q!8-a25OOr+X1ZEsW8&~VvC0=kj_?vdXYC9iJ=P?FjU!Cc8UstORNIhQwa z=}ka&!6z@zd=McUQX0SsrDCwu)|^hwD=kJ3y!9qO@y1Bmm&P~f)_qI|Xc*52D(GYb(!(HLh2i*FK&qAJ`i1`B1pKVNLi*hwFbCzVgTkT2=nH&jOqljDqm(GSfC2{YQWqavvoXi-htne0$>)98f zB^31ik2F6sJ5|D8Fe=z-UA5#O5XdNgcQ6u`>Vu!&U|%6lI{;TBhsyNh_i#eI_HQH! zK1{`c`UU>8H8%$ACdYbK_FZ!E6PLeup%_t?=%rf@y-!a0qIx0EqxC}G7WEV9xp@mw zzvpM+@7?C6SJ53T1PK@P)!9PTVveLdMbqCXb2E)9I$Y5<8HTPo2>khVCIGdAF)9DmqcK_R_RTx#?8@<2{Ekzef#zo=H@aE1%K;MsQGer{CfOBGMR}os$g(9OB);7;YkQQ)xnc|$cRH*M9;i2` zj4M|EgF~+1Hmx)3&{<_d6~wedVvX@#1p%v}jOI{N77T_H5nn9yi*Jn*#Q_|6%njS% zW$ULrfrwFrPXZWleBiZQ=Iu+xetkYiLxuc_Ow{tW6va*ztF?Zi(li*suYX7X10dcp`|LAvKtBlZ>I|{HGOABU&nG_=dl)%sTGYpP#8u0QYM%ImR0@!`Ov0^ukU@Dsj~!@D2YElIDjie~*}& zg=b6>zsUTn$or!^kyr%3(E@ z^r9vw?-G_M{~CGysAlkK9dEzF;Jd-fA;S%$7Y(~tIGuUwkWcy0n|bg3m&3%N z+*=7*_~A9aNw^tus_Na93!KtzLk6A69PZCYB-$|h))ED>_aC~TjpI)1(hGJv3F-*` z8BX{1WRW&d96ge$((BUdGH^aRB=*Oyg_VJ8!GR(*iy#uc zsiDQACP52fUp&bqqjIvOY<6LqIwdqw#80D8*l;rfEqE354~1C9!lpFBYJR6cQ+0CB zM&t7nwVLANa<)=-CYF}%5cGb$Blw}HPt8Xm&tH_2TaI6^V~A$wzaH-AiQH`Z8Y9!3 zOeM9{M^Kz}Dk+j=Ay-OChr(#-Ob9fc#Mk9GliATTQ&Gh-yxU!v8? zq8EMZn;h*~94sN)Z)2}MF-(9P-sQ8`eASEhkr;Ny?`B!?iSad7f(vZS`Rx-~&8&}` zUo8M4pCXxql}DGoI^k*{?2ElFEP&FJsjYnr-smo1Vls-94v)#|!aVJQ|3*hC8^{oM zl?or=4Rf~1ng5|eap@C^$urySIcxRhXgnyg66Cu`$ak_Dp87K?$3|Whq3$MLy6L5n z2`}KcuVm>qr%YEjgJyy1;DZzpMTWF}3}P~U%Jkt*ty;USrr+kQrjbxl6f5l7V~S&oADSAXOiIkjEY_-4L^<}_sS5Aikr*;vMYB? zus%ZU^^*3f=wECrG)zx+=1b{xfll1RcTI+>2yoJLz3KME*&ilwU%AH4znYs#q6yiR z!xiA+;T3ZDn8~BMb}qI;lt+3v^PQS7xT`U?vbMk>sn*6Bzjm0RT}6WiMTgcJ6!V($ zgsCN^wg}+=g08P~x4Cott8=NTzHoHaR+nKnBxc&m=rThPc+?dsB2hgejr{k%aLy@4#p)3nZUp{s2YBD>dmAAI&gXc@t^u{Z%SiBY67}gb%q`Zt>uUqbKK+;Cgy!M^%S8c^u;<=E*zO+cH)}>dw=Q?Y1`PCa zk(%N^q`I%avmmjde4-<*_u88UiMPCUb93uDxgpa)yTN+IWX~VlENyuS7xVcrx`Ptl z19bQGerYx=x=Z^nXYPBy*5~@I{^vi(%Wy1H>dBCWb27dKcDb@3|IdqHPz6OS#|3dE}maLvvyz?AEBk#kfc{UCy)A zEju6<_r+dDy3X<83!sdZeV;H+nKsexL)H7ERV{aziG{iEP|I$ussd@ix*rshQ1YKG z#fs>0OpOUo@=9>nVp6@zjreNn%>IT51LhO$lP;kpL*8`2PJ**f-Obx2;REK&eP$4g zIjlAJwE+zYZ0bIQ@~+`ML9*qetuA{N-CH@XO4iPDZ3{)Q+-lpoPtl1w-f*B6xS@5$ z=O_xL7?Io%3JnRL)db;s@Z{O%KrDNP(>pY_cI3<5iwHp-vz)44WGFuSMf2NO`H>ul z8g((&BI_xl`8q)2FKW#1*hOKykDSyS0cfpAz3{!xJj^mUdE04DU~qJF1gIbi4aBb|n67|av_guj`D%lA-wO-=n$Htfn#rj-MV^j_`I4n|i9Z!t%K0?TMAh{+)tYD#v#Sspq)=l#t;USELj#xa$U` z-q)=m$Yl~^n(pw9<%$qWy>sS9wH}e~3St0fYmTTQ=f3)E2`)r=TK)LL*Czc8=Wv+05d}d-}5!}-)JT(TgG(guU7r3z`q7g zzYyQEt?@47cOSyoeF>F!A7be#EiL_0h;Q41>YryGJ6~&!<$gF92uN`I9)hSuw>pSk zZ#0K5VOONc%T|AXKRQ5GwITDFFP@wXLEy7ST086%Y5+NH06He5odf%(ItPh6hEb_s zFa@5d#Y&c$@Q~Kdfoz7&6EAsSQ}o3|ffO44o-BwuEEq1oG`x9WSqM z@-?7sFLg}wF%`IO$=>NW&<6`d}1qZ>0S78waweACwk%%3^B-AP)QO=4me zDu@ZwPRsj)NO|y0Q=cpllr1w6{a4*=NRMT}78Iy;_^L5u(#=J9Y&;@3<xX{GDFI?B_oRNQ#;L2%p=!i;#1`^-KI#5G4YSNSDo^LhOIBx&4X(jF71SVhZp%? zuRCjVr(mt5%RTSE1&eh?v&anCb}c5Ia*T?ZeE60-+uQ6~V6HSiKK|Nq>xn>Vi@u^scVJg|j26C% zUIE!aZpFxBd4B%)&x!w8@WT+DNV~x5&n-b}HB`A4oMAmjHdyU%Vk>NS7ai=&%WRaK zb6X(-w{pUU3;ayy1YJi_v<#Tik#3;KE$s6G;`0dvC_8e9B7^I2-}oUv(_$0m#ZyWI zV!!joQ3dhdelJ)o(0M3~o-;=aQNJ~;GusmtQ5jC21Bu1XR;}I~dM=IxM{Jthjqtre7tis%YIo8#cHJtMSLAO0JioF4M<2zUrosNGy z^p|}vauu=99detOdd$^UV45bF2g_(O<{*ZtDe=9H64Q6+=cMlNNm%WVv&4CcpKQFf zgS{lCl#D&YQOk#5%Brfynk-mp-Rm0j+jG0V`4{gqx6NNUAv<*7d-(rz1Z~Oumr8o1 z+wRtCks73UU=XG)hb8J}OrZNSO-5DsIv1NGlsa*09`*@k^*6l@#G00k(CNw@kzVpf zS-N(d>r=hGmC)1+TO+jmgXc4cjEvk7s+pkJ@d@Uoym`>T3#sx_I8X{*mVE%6b0qYp zM?J(7R+bPc?30wnFba6&i0N*mN^RFYFRuY}dRRyLd7)o`=^i zQsJuo2e0)Jj_Ly{>5lafwSI^D2~FWed(jlEjXy7*I?Ybg{Oy6uoK@Q<79`F8_{H)= zN=B~>IlZwUT+P{2?HUtRH%ol;e(cFlm}o8k`8jK{5@`sf!RG;sv+#9;zo@&-zlc9w z3z74er=y-??$D_TpsS9@z_1j=tj~7b2@_Uvrk{Uzm6&2`udpP>tj3QbeZx33Zi&*C zeD~=L{I)!5n6&#HKVzr)hb58*mfSNvM2w51j$lh0ShgUt^Im-AX$c!mn;%X<*td;I zDHZ`VAoT2ITDifz?tZ2Vt&@t5b#6pGliFLj3PN=GI5YYg)Rd1>E)={C)W&jZJDmfp zGzi;0{hYmKcHHOoaIO_({?!B+4gR3tX7!fH)5LJJPB1t*oLjQJI^pO1F4c88sNPYE zKew2?7vl3p$z`RWIVN?vl9d~4iQ32?2G%C=lcNJ>t%9q}FiX>_Li$7};sX=V5MJ|n zp08kX&FJ~y-yEvRA|DLnSxN7c9OuZrB1&)-K=RPVIg+-Riu~GfD$d@t(m%>&?+Ce3 z)K8@-uFL~<o5*NHXOWRTyO@zVIeXP^ZHmuWr$CCVqJXvAOM1qmjx%nKgbjgrt>2qiTpLj%uXQ#+~U$= z-yOmOnn|qF2Vt8qxa=ho@1!HY?Ocr-la-Plojg+P?HGiq+-_aH1RGD>H$>=XmAcD` zQs;duQS+XR(IWP_nsydy_PE@;y~2BoJKT?$I^q*Q1~{tEC{5J&gzDf6YPWF^*iE?B zqQ7&%jZd4}9L*AxOP@}Y3t@Lt$v9BAV%>{?XL)m)@!kTr3?~mgLI;|peUo8_0frIN zYgmiF_RV{T*G{ZSKA$T<(T-ozwr_cpLPH>#}_ zY7u`=#l+oF|9xz1Mje&}Ta$&w+LcjJ@=Gm`l?lFH*2$!Z3L2}2%FI(*z7AFzrVX;0 zo}qv1m(M`QO)a;SC0g5wEd_ z0*u{oIWDt-1&%NYoPo7^m))iz>WL6hfs@tvJyC;gTFM>>Q6m!eT$Z5@IUa;C1U5r$ zRkV=Lse%EH2b2h*TSKX#dG$~?rXOmOqsdY-Qcnu|sg=&t_!{G|?Y`z)f(1vAu}|ZQ zj-HhR5|%vXOwG-&z6cV?_$zvsrCemJ~H9TZ0;hWI?!QxnRQF~qJhh%Ix7qczMfj8VXHfS3%3j5`J< zmSGhaJeqk3ADV=LAIx)*GJ+&JjI;)UEA}Q6eki*ePNt*>6j4BsVPn4MgsvK+Hd0ux zky^28jraugdsB{JItf=3sfQ+EoK7M&=Zp|cTicKXjc;31MpeY06NZN+klja`rh0RD zu^cn1$B%DsVUMYsg2HD^6?juH@M7PB6iJEmjLXCh&8js}Y`UHoN$A?) z7nnAu71UFDCQp0jfFXvV3#g$w?qj7I1;nxF=7u7adUoNdqk-cm_Am#FBPIziKCMp2 zm|DiPKm8V~x`+-_XFDQ6aPi(ld#R&{PtYtR$ z`uy>7gmC-qlIrkSJ4nRJz)ys{H)S)=;53{MM>( zZci}F0|pY2#38nXEF4%?@)}mSY^W+0415qy9TV&=-f{+jam1JlL9VK$?dbcQFx&wzoA z(Iwyo8i{9y3%>In&)>42b#yP|aL$&FmIQ`JGH$$b}oI3il*#tMFBuKR0%~h1?A3^n=OF z1yf)F={45&BAn_&F{?W(Em{M1+jWxNZAbuBo7Hp*Ogu-Aq<=%-Tb1#?oet_Mp}J5Q)vbSgHExk30F1P&^^mov4$p-H&TF zNXZ*Q^!#~o=JjvZ{&y7}o;DdjTT?zleHW;;0gD-xBz0|Nz07o-l9C_KqwZ0GUx#4D zdTFvw#`aAR_o=|?IIa!Z=ApvW;yVOOgIRJZJWim#0*i@A$j?U0AhPP}2*}6q2rw-6M5^;@N(po}EPp76PA%q7FT22^8>P(1GEOdu<|Lg-FzJ{eqG2fteUU z$P|%R!WZ~eifX_lJA8Oss*LoH2u58!Y=I&E)QIQTA}$z5qNA@K)D1fEla}`94m;AQ zJD)_Un+B9@jzLxrt{o9T`vU?>up>&s^G%r9;;5LcTtqe@huZvYVg4Xd1Sm01t-)vB z(8)Alz#VbS&Mx#WGaNY&F%}#HUp!uL8ucKJCPWMtbdD234`oKo^l_H|CrVFO<_a)cJ*0t-pcQZ3 zrs2ri_?*(D{g{uPavn`snP}Y%uDV3KKn-77$%3=(wj!51Ig3!t z&?{Kr=Git2IbAmf=+6G(_YIUkF*^70m#=MxI7r&t%8z6m zQGW)zHGr!w`*>S_7I^@BJOW#z=45u*cU|$yR0jbD+VVU7^bKpKOQ(eo*4#L|2*(V~ z-r;ia$fn+Fm zQyA(xF(K@#Mbcu!+zpJCiGvrY#%>!0w=)9et7uM1^i554dS59^@9yxHK4^HQPCF58FxdxJwKPeg1Qj{obMLWLW_h zn?^9P{AVE|g}z)JnQ1JYV2RDV+DV4~U!e0&#|!yWc-@f~oG~jE(DS@Tw8XK0;RYHi zcG2sX5^I)N%Q0B0T02xbh|FV*SEkp6sR=o42ldhqD^zRmSOU@y*}VegCC`sD>f+Q5 z3s3j8LXvRDq8D@6%Z6iP_~66Xm^C-Zhsz8|u*R(ra)-udjtJH*1t@99;QOHs>2bmc z9B`)Behg%9@oTyFAFZ`}ErZZLV%AwM_-vR}q+0&@yx|^Dxzf&Dnt6 z8yK2OBMcqm0W-rTRn#feTe8v>R3(0xP?z9sf^XZ*(U6HS0|6L}-$bE#0%7Of0wwd$3d2ZLH4Jh=|dy7zMb6blV$zfVwRg*8M#{S}>t6N|*kx^UoO z6mCiql0ob$%Os6wwL`k9VCtrj1nEYok;pToOZwDJ?!agDoZg{SVV9!L1Wu>#@{Ls~ z1F2?$+}J_5i_0rFu`EeJBi`AlFM~IPdHxejlpw_PSJ)PJW$_UgKD}(rbPFj#+~Tp+ z%PDfxvLc))L3Fh2*e#!xmWnz(#ITt_lY&XIgfX@%&b8c1+aYtFwJ=dMwy>qJ=%`fD z=36sOtc@g?6uk=PzYl}04P!S7T0j>z0doPiT^$TDbmw7|@3 zI-t;9OX1W~0dpUGv#BfAGpG!DucoH$KuyNQ;7hPjIx~a(1~6&ic2k zN|eDq89Dz!T5T?U21ZeOfpo<>24u8lSUUcTdN_~7CJr`J*{BrHhd-K6TzTn6U!jQB zZ4II(F^;+~FHG+~zsMd$(hhuq{ccBv$t$s)&T2g}Y|8O4tJW*PJRaYEdyr(2j1z!s zFBjRA+RGvc`x#QJIHN2r)p0{YmS|OhP@anYdukm`jl!rgl$?jCB*}b6vMPAMD&^@n zR-{k0%r>l7x6Y#IU^R6FOuJwThk61Sf}dy00%rUZd~hNegxs^TYqPlEc@S@iL$e`OFIHksVW6Lc7MzFI;;CfdiU^p6BPw4 zS6|+eM12{ci2#`KS)C>5%vFn_Fs`-GXjxxIC{gdxll+-heHnxzTvweaEtc6egj)es z1N3fAVaZh$%bGb_d7nDQ6e}FeLCj#!u91J~0 z_auD!oQJ{(w8XQauM*y7F19cOXU0XwhuLR5VU3U#y1rretulgl73(<@8NOQH=`zeA z_>hC?gR;{0C@i=!q=hwkBXHK!TsFzs?v2~TwIHuB@?&f^g1A&^xwow4lA968qC{g) zUe{Mw-@z-A@cL6GPIvg4E&TxXi&wP=SLzaygfXkY+%X9A;m>fl>wbc7%uv=Q z+j~;dHOv9In&Sq63o0fM4ugXR{n?kki2xqi=j7;PFx?oB=N8I9Uo%L*C4|-zDQ;%Y z5Ln$CiS`B8o1^cHl{H3YUyk8-tUhAUM+6L!ifxfXs2sykKt&%qro)p^#F)s9G{_9` z!PZdQYN>OIjYD;I^-@sB2UACCwd|e*&5SF;X7@xwsBceWHwY$A~IU1@=CZ zsb!1OP?*TBz;2(fZf@ICOYa=OUC^PyaUsemX69kds$qEUa+K3WMqYnnURD*a@?}@@&7z*FV9KtI^RqktGdf>?fO!%P(~Ots!Ak zisZ||%u?*9sfio}a_g|Li86e+*Efe+Vy$gRm%~{-iG9WyEpHpksb+V?p1Gn#qT%oIx{nz@XmSllAw=z(pCLMaP4z8@ z7Q@uIW9t9Bhv_aUVb!EfQr+8+Es|iu`I2$5x_QTZbyH^!AZazm`FKaDGw5Cs%O)&`*keK~LQN_}cOs#ZT|vegBf(QIcu-o5Lc;?V zA;1xa(f#6`$I%?Yj~9*6(NZ1 zCrA}Ki(O%T@2jb0=0;r*lZ4U7-uR_UJ?ni2%OgXleCM&Gm1JQn4CbxSf+=dz0r^qh zpYE>(al#Z28EMu|ehJwC2JG*T-4#2;1kg}!puA(~C55#lx(P5q+JIvxc2yZ3*Rw}> z6xO0FFyEA`_MpH({XT3B2}jRYP&nQq50(+kacU;Fzw1MDy6!qLq?FRu+#R?%VbaiS zi2+u4hmwa9i;!zn$}r)f+>BLEv4-$pk=CuN1Fpp&%Lq);G+*FoxXT?ls%Vu$zn75a zFK!B07V-*X=P9Vs72b;PbsyNUE>kl>&ZFR&h152hFwA>CDi>qst484msE_u^_}D72 z4RDL1C+lhCV@ZD`_Cdwx@VGp4FGm!uLZQ1i6QmP%6-plK>Klz1+9zkTRs~PuOB*E3 zO+_Id3Th{B&Yl0hQvyBzgu*2)ecP8%JYf^egZjNT8J21nJ2d~3qNjZW!Ns`?3O1i{ zMc$BXdX5n+ztasfp7b})Hf%eW=fQ?t*$at0c@BB>Z&EOO+6wDEI0LTZgN$oD;lsG$ zM^2AejUqKPiz~0z74;f8kNX%DHRYp6iLP}Ew}L}RzcA>8_)(W&vp>NqG~*bh*s>Sb zH8r1zN*?G^%h(dLWe5Pgb-~_Tbb&Kkkj!2bebRM!gF-c!o9-Yifj9_FqUx9>b^b|H z(Aqe`1Enyq!X~VrpChr=d7nyI!cj;9McetKy+1}9PlI)jK0K6Pd;> zOz}=^cli@;JAgjNM*O;IiPSr1&SPX{*mfpFgHGDNS30WcJ-yBgp4o8b>hgFN>gBUX zyI$kTeFw5&|3K5EWTSSLx$Cb)wAW@){rUX~kHl6%cx+yPW1*zweASV)WqPTGK`&mCLs@a2C=?zyyg=K~uUz*tG@5ml?7QuQ7l0|_w?yDL4 z^KsV=i%XB|#ZR}5?gfk3&&XX~;CEuCd+T%P;CAvo1&GDB4mU#$F?SSex=mg@6_yoW zwmfBqgYB!`e6crYLHf3QwV+OziWCkLmR9v6md~zc6!))ASaNblDicgFb?88Riuc|z zgWPW9-LWHW;^~CDKW@u2qJ^9n|MYTW2*kD!h^WAm^k0kaV^E6_^xkYA4C2c+4^_0R zBK^#QmX7Xb{8Qr~6qu+y5_QJCWnr%!J@Pz&hNQ_Z5&bdZaquFqi~sLAq;E z5C-7Ht;P43;GE*X=b6yKT%}P>RFokot16QSMzrw>R@{eBpWScJQG+o?ZpegJrdpkXvvUM?X68Z2BAhwHt!gl-P~y;B}rQr_j}uRjPVBOOW^s z>{i#6EPItyQS8F#T1>a@9hQQAa!&NFx6g(oS+SO7*R|u;7jU~nVnvBlZ|V!Df9?-w zPnwbJ21Cl2=w?VKRV3dHS{Hyb*O;+Kh7ePu>PlC=QtOA*UYJf~Do^%y#q{L6Tnowi z%t4{N7otPeKfx!5B0 z<75g~6I4b$AwZ{M9~g@<;6Jk7wfr)dHCQ{zNLlm|J@cuf73nLaR3MV9@7_$}~Qk(5Wf*V+3SGG)$6oF!eXtQvngcA=|!$zt^u zNSGB_aPi(k&*dse#(G1wU38r#K$GY<%1W=5^FD=X*;f@4&?XGl{8!;Nl>9=f* zUZNaVP-1;56*O7Ulc4#*m|WY5LxD{dsM+q%#WgLoYI@a(mom z07c+sp@rat+k(6kAFFu!wL4aQIJj%%J)i@Xqu8T^6WDG;P9>I^gm?R4?GxfOVMu=} zZ1Yv322aDCs1(wp;=PARMFb6%5t|*%OU6O5g4ykb@pD&>z>9gw=t}&xe+#oa|5_&^ zHQ20H5v>-9%?)z>$}zx~(%dYxenEZJU+&OWj^CYk|NGmtMXMz(euD%VYRhk`%G0-j zcs%Zc98s2Gg}_*o4c#hUOd~Emw6k89RLdYtiyCA&&2xDEOv&mzH=;5*N;VzTq}6SW zDcQ|Mxj>RV7Q!W{7FRvZ`Z30)1MFE4XJ9qigfWC(-GC9Dt?-OLVjUbC)&MgR`V@W= zip&`dB?QDan5Qw#13L5f&`ke!c?rl=O=&V}om#^N{CYhOm=5nV_3QX{fj)Q{WevR` zF*2iQ>k|5&A8&~)!6@EF>dYs4Dln-o5AhUQu8bnvaB9C12!h@2j=McAj}cOglbeZA zCkySD#uf-w=~OjJYQNF(^V4TI;sdGh=j_`zWR)1tI&k&$d*qF1sY_8&Q54bYE?L^> zYg%@dpGT7K$BT5vL1;~(C~Y${s-BGCxL_B;J-CV_YIT@;QE!&4AX&L|^tl^ZhDl9} zrlmD-{ZjS^@ue|WG9qJSK5ny9mQ|-Yrl#aTY5$#@;+9W!z2TOiEaI;_?G*?b&EUS~ zx^I<3z|;Rah>{q1M$dDt6P;n>tDs=!Q_cdKVrFEH&+1-ob9Kb?BNaOn@8b^>n8V0g zxb1NBhqFkd=Q_tVe3sa__Jn#n>N_6yTjmA$Wd@3!DGr z2lr*W33Gvr^(4S+dUVuxcEotWobi7Mqv@G z8?eYUP~a0@!jHm@A6RSDckjAgyDdU8qxFKJhs>271WqOcfrN(UBZ5aXrH-U5SUfWRD`|EnG@?zdLR>*cfLxy(|b zR;J^(G)Q&y$_(!S7mL3uAg0gTD8}^EuDE*W8#o70Bi>Z%hOjVo2Z8920$FAu>a)yA zESYg$U#xf#jMWWY6}kwzjcm+EY^N!snl|>ur3m6^zvv&qc;wTn#=%;v@f_@o)Jyv+ zj6rCjuMe7zE3`UF8c8mu4+0ihX=P?bd1!NdBxg~$Jf`A7Zv<@@C0a8iky~wJvs_RG zcL4JD3-|2{YkuxkI{Je{%a=WK72|Xo4n65Ya5{+`g0_&LgTwM+xC%{u4@dyL&|&n( zM-_oirKF(&l{*>M(<5?qeT{1_U_P1iTqVf*HhMRkUsT&5=c0!k(Acrca_n5O6J8g> z<^f+pRY2;_XBS#bt9xn_Fa@qOn8{nSihJ#n4o+N z35=bnF!cRP{+6VEIEzE6I_hJ_j%Sj})>jX#)BC^@bJ2z+2jTgtuSYuUd!85_zesnu*YaY%<@l% z+v!>s;NX~_Yz=l-BvFI;40 zFjgZ1Vu1NkI5p{9a!uA~+mt&N`P&)rSeH z0upl=(c--Ml)CW*%F&d|D3QoyIZ|XP(ZZ@+eRHJL-XL`tT`0VmT+AGJ{P*4^8FPC9 zh!K=T<_`7)WFj`*WRj3}(WyrSaWwOTF5eve2;He+X$M*`Mr{1`uyVFOB(33PWczkqS&%d$sE25OXq}&=J^IxS!azsu>7~|R%a9mryK|OfrRDDG%dR}lV41xi+ zfukv!pT*d!nW-YOpSa1h2a69~w(oC8%@RF}6lxUl4WFOqzz42|*NL)%@_HkF*yhPg zi=dACs=JQsx;e0z$w**{;1ELSW{2NmcbV;8py$IW2NV7)U5P_NDrVZ`6b zx#|6$Ynb!ooIz{0;=^~+fPuR`XrnnEi=&DINrV#xD@8*9mj$On6E?vNPqfO*97_ai zydZV5C0G%)7_nzk!*|Ok!-d)5j-z4(D+4I06Hx4?S-wG70VdWKH%ru)MV45rTuhIf z1HWgB{(ApEzT2%C@%H1D0%v^4;I zDG=lr3^%i-EK!5M317uFlEhnylBEZCeTo-~t0gNa0?kSbtbmR=v;Otj0Xs94T2$P? z5DBanEo+1A&pd|JcL6$Q#3IG{J#Ll)d5y3AD;3n&9$)c@L->=s^5$T13A`hyFA`A+ zZm|m1EvuxyRDe!scqo80OKc~8F*V0{%O?!>CfUPSjQPUT)47h!PY|rJp}?3?oWjV~ zLkn&fK(i~HG%g^u+$R%2aZhAO_LmEGrsJCG z`5bsJBkn@xvdvI6hLTmb&iIwSn%4?5O2*5W9)|{^89J+Q{P)^?5i|8p$6N$tx*?~u z83gEFGUs}#_JC`3`wO!_F7;~Rm9UVhORVz0{$6-~J!R_6^6bt*s#(P77W0&X7;74I zXfq@zK!>yp+zTjK&VwhxY~Mn0&X4k+7gb> zAKaaFJ(CVsnV`cekkIi#ZFby@oJZQ)FU|t4P}RaQ+w9R$d)pbIl17+`;YGUkIz_pj z?iThGd)UV!5l%1>YPPSX1k&&?H+@h^NGlHe3G|8eMBN`5_{f$ zoaRI(apO-tyK5M>Iw)YX#mWZpVRP!rd~UNr=OqYoPxzhKlY*~pwUL`6$+YX2)^FYv z>^hLKMDvh;u2G`WQLDJa?cHel zLBREogj!1a<<)h?2#HZ$I6!uIA!MfWiB1UX{dmHloxAuNsFG+_V@8iWUW@6KS-uGn%9!e(RecPWT#5rSQx` zu!;!%81D$yvZ6GewIgAT-E67LMdpU+u0meNvPxUVx{VL$GnlyegC>Q4x{p)H3J$F_ z>abq65#zat{z9_0(QdKK879W8<2H{IIN#TgtO_<-AzaENv^ZIUY@`2Fqrp-}F^RQIi@ILsZc!{D>fc%a6mDwlnGSmxweZ+|On(S0|pexu2)PVvsp>O?hnV zf%`uP0$R}9VFhjLNlJlPrzD90Y$vLh1Mk@`l#vsx;k-mhz`%$@O<9 z!-^Qpzl~jVSh^)!UnDw1*GJRKDkCEfVijZ&2(r$Wi>i#Z4!<%pq;+eG+4oeM6}jjy zcz{f*XU>RD_TAla0a6|lcmI;9Kkxll71Eu`L~DA3K8P)TjX9nPsi0Jybxe#oCFE-^;fEvpDwaq#&QlJm6TBKp!#_)bi3X!Y~ za+m1xehG2k>k7j+V@wAR&~M=g%5(5|FdQZwl0w=u@jlhH_;~po2bJNkWj11>JM7Jw zo_O{oWh?DQeju6Cwap<*YE>`NmI#S%7Lsx9p`sBj?SZ4=D5y!qh})g+0;C!2`+J#Z z3pKJPbiD5PYVIwEq{CI%2>guxKF1e&v>wR+x+8JAi~d?fR^4N+Sq#uW9>z-R_f-T! zyc|Tjjxi3aP0WRao|hKbZOC0;UuU12yeGO2jlDzE(l9{|8#|W ztt1Y5y{yKMOUD>p37^jB450M<+ICXSoZv^?+Sc4_x_RCxI~qN>%EO54`xB{n++pdj7L zKML03sDTs0;NCla?f z*!p@t7j^?q~%EjS+NFxAvB{yNf~Oalc~)X~vr zea3^`Wkeq)J_bHZdc_l!-_NQpRZWiBW_C_8*^JiNl27Cy-n&oy6U?A=8B*WTNNrLr zxfBjrKTQC{Q^2Yl5q%*fd?{QnW>3K~YnE?Er0a0N%Fb`X7aO8rD^ec3K^{V}V(Ia> z%GY}zU<6VJOA|@|qnxYG#C=6dhJG2X=LEFkHf6J}8$99R<*(>!QXc7Y{cD18;!utBC3S8qa zYJbaCr?%1!OATuA08nXyp*K_*IZ4Ul+4#-1J6#KsfsToWFS8CwtcFL5!?P6mC3o7M znAvf(LZfmZsS%e&uWcE`_jimTxshZ0Jw>#GW34QJS%A@9U4HCEdkacM@z zEOTZ`k>Ud5;E7AY_GmIqU~~s{PbL zaY^WcbbETW8Nl!Rv@j1wkZXZwV4SJLZR*Pm-{E;=<-Ix7cxQQwW}?|apRRiD!V@`= z@9vIq_7Lz3&V2`hCK(51r1GvTI<~l)H;Ei2M?mSFIg50k_`Qo3&#Lyfd2<31vIeI3 z{yKdQpJr1R(`fYLr*9qurY#$uL-TNAz3A#PBhE9|T#KCgnW_QoRf~qZtVWu%C3{;W z+G8}d5(*9|mt_v_Q?c|~kmw%#CxdM^g+{{IO8o`3U-+{{=9UDxJfrT1=vinpgWs`t&9K9_2I7i~YDlG3@$hdW9%3wc6M zicB@U+ykAv9uR1M#vyqCDaKt?*VO!=tpoOGfkwoQ1j=(|Pg0Kc4m1ePn*5JZ)&;v2 z*2-rX9CZm|Y0AGEDg?J&5u==(4#w!?x_%wpby>?Q4O-e%f3Re)kEYKY{}gq){@uj5 zDS!BD`Y$fNI;5U*WU@K@pxZV4^Zq#s3t~k>@?_ZLvi2EdL|s>2rfC(KTddx{HCt7t zm|PqLy;W<}%f>IN#PJoBXCFRFK6olMiOkn$)PuVl8iE3BmgW-z+WTKIwETCWHGdmw zn7A|+ROG=?QG(G)&@c?Pube9_PE6M-{xMVAkxv044A{T-T0pFmTCT|wBZUWy7%R`C6tXD zPA)q!r=UFoc&X}b-7gPRj<1p;(@b>cU=_hB`1;I00}BTV@svqg#*EcZ#jk*cf{ zs|upok-z17!T)u@FYxE?_UQx4JLOk=dIZhefHodpTe#>Hi%Q|SaZ*Fmmut+BG0#PDA{zq@U(qJO*AixS;9FNahK`OkxQI|7r*FGHAouZn5Ibz+@t) zSL^Xjf6qC_hOp0lUVh{TB#Z&4`yBd@neB&vt@>k&;Ipj#OQ7YcxhjlceH#qlU^o8~ zU(R;^;)vqqw;!M>>kP(xIY0RIAEYf(z_fTXXE3$MCXLiX@XHdU1Sh_ro<0Ay?z-d) z&ag9Dz^}%Cgw$ha2$I)$g7ia1f}(Hv=!Myz5jrOMk$Zff{QdIS2>(n=cjImjziT|l zZ{*P~D>LlxepV6eqx99$K`_Y6=`Lo;WW90q^@o8g(IsYlJo9lr0qYS`w{-(j*D+nw zcy&*C4R!7QF>A{E2z7XV0Ws%#SRa+~tEMeV4Kg+i)AzauG8jUl{{44RWg&9n+}+BD z|MJ|b1JW3-a5Qr-=ig6?E^uDXASz}M8drhwJ& zfew=^sW@HmTpTmoEp1r40QAY4Ni#% z%r(cLG##m0Mmc+17oz(Tv{hlW=TgoV);$CbLjJW~=Kocgw7Vw$3huDg0}_9^=OJ5F z`tG3mwZ0P|`s@VR{RzLarEVgM8?x#4D*a#YG$h~+6$oU#sS?bx`q{XiK^jV1o;ZuY z_hTF#zEQrVaKLakPt*XUmv0}&tG=ff0|cx|zA7_s;TQP98vT2tg5szEAuAC1y#Q7D zbpZLX;NJFpAHPU@ZKjt|8w+N;ytzMKS#l17H{aL z|2m4tjrn)W@1>)#6ucu}-i-p-n6aUXd2H0V6* zBwr99ho+!QTqRX(r{q+64B3R!A4T0;EX4LZ6 zh~%TN$p=mDk1kEx-U1_&X=^@!kY{LgbQHHMTkc&w!GYk&)$8G5iQ_(Ff2(m4`;EE$ zoxc3PHWQu97%{m5?*H=_x)p;)15jG03+Re`0hOPcw}@XhiK7$lRXv{02hRbGiXyv( z`FXr{GB|kn$%B2`j~~1HV*%o5fW-g5H~%A@|9^k+kF*?Qbo(4<_rzv5>mSL!;?1n8 zB5qK1wcqn!iJ4zBKLCDxhh9X^?{$<`>u|vRs_(>_&5C>H`8ANRzg9%MAxflU^6Y zROfH$B}XvkbK z`>eKmQt`v0=}oVmc&hlVfrLq4vH;{i-WsLh=$wD;`+uDC|CkT|izfd{9g2P*K)>D9 z`_-rag}Q%7|0e^-|9{c9m;3*^>fL#@JJt8EEE@p(zZ%rO-M|yp2iqQm>Iy!#KXgk=<|=J0~_t8B$O8-WXlsKQDNzl%!3*4 z%yeqMbwsv5*4Nt4I?epywD@@9bHe?q?UkGBSKY2Lk5K~x`~jSsSZ{l6)h;k#M`8`9 z^>+AK9uywf`B!{21O@i-?2vSCAJ-N6LjpUY|4*FU*qZd?htqx$z|2t$B+nNEiAu%r zjBQNUr|X?ZH;R1cVxDK+&@<)L9T}}|r#X~zY4M>*gsqg(Bi-{PsQgRcJYq^wIJP=t133W!a0g9yhK00w&4b z9<8B47FBnYK!h5HTm9M1C$gNEEsG143nU72_`Qk%Y)4TnA#c(Bb8EQk{AzapCa8%;-38oci>*xb)H9$b!Bni*3JywCg1ZX>P{ zn~_CB5u_R0uT(NS^+EgzhVnuDt&)y$w1CE34uF!#>-}{7(jbtsP@z3@B)~i%n#!Pu zR~fadW$^Y?s!vG`)(Z?ShqI+G>y?#PSzpdqlSL5vNWuefAed2tNT8BaMTc`;1>gTS zM(GnmuwqAA!m4piO=ks2JXy_V8E=6b!g<^T(1x}%o%lfo^F06k<3JoWr2Cni4^Z!? z2I7PZSN4;xfNAUl$qXka^3_lMjx)586tx`(8{cbnZ6EDVe(V?3PwSs;xU5-7tyzxbWLm^Nx4rpFiJbE9CZX(Ipc`$h>G8P4BP^osp=aTsF~s79P$@& z*?~7k{$_LXP5d=I;iw-X1EfAgMB1MEJX}d@>ba=vnzG`nPJu_BSBj5k(B* zuk#<%Zbo?v825uUWEVa6hrd{ROUAedjCZD%YZPb zHD?r(9j!(MHIa4le_NO^!XoY$vHvo77-OYO2c`ct)?0J_oyr&GIc>WH1dl2H2ZIH7 zmB2>@JorDZH)}>PCIa)`0$lyCW&BU=#rwmTO|SlNnmJmkp8?obRZrL2X8@h*w1?YM z1J_5Y9CtGQyN#d&Kn6no_fI!PbV@lX(J&5trFq=pexSYRqzCNEWh~dMe>N-lF z>u2x)+}bnPop=3ZHsHV-q&JWntO4Y(i9Y~pjoDQ#Taj;W{jfghjXTW&Fn6Y|d0&pR zSxn`TVexxjSE^$HH<18D+1$4<>ilxQUu^rkwej#g$%(fG z5M-P&iQ}KQ$R!mG{ch*;_Y?axQV;L|nZFr3XeR_7kIF2d+XOGD?o})I6@`%~!V*M* zaGD1RlGnRJHg$u!Dj_eK&Z0SOD4yTN*qmAlNpo{8v-a4@=!)Pwe+}?z{qM za}Fm`73;Tq7RsPQ{~i>4Ilt;g_GM}ZZsZ^Unn;Rs&E4c-?Y1NJ28bthk8c4wT(ptv z>8y9Ax%2t>VfW^E)XlY`i37#9<9@FJ2oDdt$+VhS$A))jo9Zi2fMR_X5MUA|;)t?4 z9)F+O-aZ;UA8HO(Sv~A{Fl;+z;jA*b=0zbPyQkhO+B?c0D(JI#Bd$UEBl4 zpi+VWZS}9p=CuslAG;|Uyg80`(3>sWv9j0(-VV=>dcR{kBg;z(gNa}724hk_kaq6p zc>Ri?%F$v!_D@L^9L^Q_-)jocJO4hTz)K&4$6lrt8?<{+oU3rTKdG4ev_sXr^72)Z z=p#~}O26~d-MJ+orXyZ>Cu{JaQpP4vyKyd#t|^tmXpj@jb68UM2&f`4xEwFDt4DEt zJUV5QpLuB{3s`QGG7H-8 z)a^?!J{X`i)L9xtmt%mt?wU7MtTY^P^UD@&MrI|#&Iv;nwzKq)f#Be0BQ7xW0 zuiESBR@TsMk}nPXZx1x|X4Y?;zt(JFDqU9MKu3bE^@*d>cHjc=z!8qNqTkpi-1C~P z;o{DAgk1I;NIxA1`CAO`M>He761G1R+&=63T+fL&Z-687F{x+#$-$ErYpZT?<38c; z*vqi~1rS{7JD*n-a-bN?#o<&N?hJippMlDt@kyb-&sv|n|DGV`c88Pu0d10y!hoJX z#}T_7@>{0cDj4dp*ec~!_NjOApNTbHw-YNnXyz30RiZh2?=T$;Xf{eeE4dePKbo(A zZ)SV|Ty)M6snB0M^L|*-H{ne{+!+{&AKCvb0UK28-5q7@!d9^OfE8No|K}L zp^Cw=U^_9dVxJc0?67xb8~WVX2{{kg&fq6Fej7Oj^=KN)y^3_lP z>!Fu|$urQ8eCvtHbV{-(RJU~AEn8QAIiJgIY36Pflr(L}6T@C8aZmLUoLhzx8T(dm zG5u|8?NY}Uyl}FPBKPuihNH7^Wf+nI<1 zX|3&fbtmB)tzW!gmU41x{`yYN#T!o_|q|pmqDYjb0akiPdQmV-#Db6NV|8niG=c6cfg1&iCn@>-zou`{(!9 z{@L|h&+~mg-_L!2?&o>#+cYJPiKs@~^ylYyelORA)3cKUdypr7D@_WZ_}}<&jp$^Q zHi!N*_$S#f8*_SH_2d%gnT-KOC1-;uvU63bCpw=*x2b59hOZml(6Q#;+v~rH#r7f# zwO&5A%-fIXzd3buD{kdlaSY|_%FwX#*!3nWpNRrnnW1)T6?_KQa!5x z6Lre(L7;+B3(d)hI z1rQxQ5$rBQc>m};w=$OHS$EyKXIgW62Ho2eYxTK);8c1NF+E}{PfH1s+6?Tr;Z_!6 zPwrqiSdYdeP25fC1Ap^1%Uw@jc!un%)E%K_=3&E#!ksyKbeHC!Lm3MRCEQpJvu|-* z5)q|tYg@E?m%5A#i*5Y2yAN?JS)M94UjBvO)?VN9gOT#%C>)OW2E4&6`KJ%zm9r)` z*$7vFOlzYnKW|d2$w@av-!t5c;yI3%Zt(5R8{zo8w=7I`3rg;OiQ-y4=c01M|f3#)x= z`W9rPA~5<5&DN_x^#tWApEQ_3LeyYj&A{cn1Lbi$8V2cE25EVFBKRW9C4QF;K(Ap^Hq~GTDz4+Do0Zo4%}5%0M-l z1Gb6$FjiGjm$cZ;Gp-lPWLGp%F2=T0_n7fcJQ!L%>FV09B;ZpZ0t_ZEY4Ihge0W7Em(C54 zJmDb~CJtgiGmNlPKyl7G(_L`u*!|;~0P6meacJiE5gU*NI&I7=Y8Xzk{Wiy@5kPPK zLTzQ3?Q0UWf;?&|xCO`!93bVQ3u(&5xgjwAm6b4YO;6VDQc;7%SC-dQ>a9I)|0*7c zyP{mAe_tM&+_yQZIrB_ceh!clGbo+t=Xz^~Y(5rvQ}!3z#zyA8n>e;5pIXJdu<0-* zf*E|?*>y=Uyc!w|fR78thiZv~hH-yrWA=?4|1Egp0wAzIACjDJ*Y3haRd^IqrBj%~ zHz6IV>%+ikECsg_FMk(HLJv+nINhG+h-Pue=hGjWLJ-wpQTOKN)s}ZYSrNjik9pa% z*(T(zqPhTXWJ5rE4YTVFhz^|8Z8DtZn5jFq03%|C#Z6DUZxpnb6g*;Jpm)^q6rY^f zHQ8FZMVe4x>`gnB#-H0%%}0BF(m|SVDN+a zuD8t||Ht=x6?rczs&I)4Jtkqrqq9R-M7Zss0adP=*?FgS;__-QCo?R%q+2IxnojwU zL)52d3hrYjU)NeR)#)G(?oE8JNiyfsC>NPEml+0oJVpiSH6%N-;KuAT%{`@nyW)%! zrk{qjU(@FI_w^EzdhR&P4ISC1FY+l)Qb;3|r&J(6`tq7k3!wVho(FWcLhXlxck-;` zUf(|<+?rC{sLZx6H3j#J##Nvxa@<7mp|pz=b);`fy$ z8Ls5#84;ASy-n@UUkNfzogYi%S3#i!a4ksA&}&MZ2INO@|C#`F{|eyjUI8qM8$ySH zHEz9O>uCTW5%UTNiZ-RG=99H7ldbjW=}vMvoE861lN<(3GA(jmo7=4h^{X!G_8_qT iN|+}9Z_RR7$ja(HA6jamnNTr|1^6Q#j&+9vulx-$`T=ah(e4g`xeH|WXpx@TehJEDIr4EA?u8tkiBHz!`PR? zSjLuREW_|Szg_orKlkxI&vU%XKd47#3 zcA^LdqcAvq3j80}Io2!SFG=@@2JSjePu#uCU9Dm2=I+igxv^<~+mUfg_f>t^S|-9U<$FQyNe zF1WZWoVP}@v%PxduR|xRq!f6bf@);P-Diz3I(g*gB!IydOjhTb)sp<-=yI$XLci9l zx>&PYddK8@3BM{h8|W)hq|~3{?{8%ll^!4a^X=Ec{~y1TSnUZoEM*K%bK37;Dy%Pn z&(9?~#hQ2xnR>MiV01Eba+Hw$$zGE@o*B(X$>=Nllg@oTG%#2-JC~cI+NrNB;M^xN z4!?MA|G~bXQo*rmk!!Cnu5Q4b0+Wlh zYzgn$CC-*exXsNj2MECempQmP94Z;3F*_@5zAfETRLY8MiQ|T3ceW4=yky12g57d3 z&v2uS8{L|E|K*K10i(}1QBr=pzcuLjF*3V9kME659de02>5LTZzRR&#+1}nRBRv$b z7Z>o}tw&m4A%bNhcgLk2oP41B>o!*%!6qx%^79jydgb@TUuv6}@KdrpOP#H97%N{K z>!!#wDEe^a7RLG*uYu%jq&$i2C3`Z<|3Z=^-i8t;E7@pO$rEQG0^9ydCzr}<>e9qe zWnw^fQJ)95>PL@|K@r>H?)J(U9-CXxR~l?qsDFxDf%a0 z5;V!Nxqx8PLm)D9-<3N~@J{>~9p$Y*zzbQEwiZeL?HwKXVate^7S@1!EAw^RqxS3T zq5j06#&z$V2`~JBjwWvC!`*H|Y5o4h8o`W~a1T)*@{&eU>2MQ%q~j-pjPrfmgev#l zUjDIm=jre*o|`u#ZTqv@{C6gXepO}~H(Wk@3SU0v7_A)5wYbA1X7}M>w*`KwehR&9 z#OkwfU1FWGZ2JUZORZ}n?BZPt)DKHWI{wLkqfVrXM&jh>^Dl*f&0@PLiPNL*IXVXuI;0b_E^2=;%&BeI#Z;L zDZ>d7^X)Nw9?D-xmJ>`dj~@lNPd%GCCryu`P-7^{VN>H|8`#fjR9n8nz;J;1nx2k7 zRa^XYM1=Vk2K_5D&I}u^#v7>XSWotp7Uy-=q7sbx?6Z_#;m(##!6Bw67?-PxPDhz3 zvig5UIWauVO?^ZT&*{0Xu5+~Nf!mu$3k4kQPvK{yH3z@VO*g&8>(`TFmPgBS)#cQf z_1p4~9Y3|uqt%uXXXc}fep@w#ET}*9kuJcpt0xyyKZxTu{1j3DyWz|RxM|HThMa}r z;MprfG4;0XZIu{r4}=ytrq(-C3DE#UUeLf6~^UHM?Sr@ zV{m8n95yF=s>1?1uXA;vKdQY$lf3f{isdxTFvB;m(JVc?-*lce;Gj7Cq=n;`U#FNY zbDsTLF6|jy4^z2_S=WWzdmQpU$8?JhTA8W8_8`vpnc695s+eK!K5Tl%>zzqwRDVQX zBlfJb9_=dLYr`}fG(BD#%#YsNobLdaj3E2lnc(bkI}xn#x{e{L;gpl9#sdN3gr%%R zN0oizTjT-zA~Bj#{PIX?zuEVu%g8+R5x8m7EnsM>Nyl~D7uH^? zU;XHO_bKzUpU+9VFKJ~yZjr!a(`AMK3_PBvb@L*;pbp6_#K%{vmv0oaB@JLI1+`k- z!ctl_4Q6tGA$)H(I=b0;zB_pk%!MsCyKy><@M6~yv8h?gBgtYWz3%XL2t0#4>9I7p zD6C41Mjt!~Kwl|+P+Y9NmV9$tV(M_aBLDF%M)=`+3+vL%kw)7wtEw>?+1^i^=475gT%J6um^6C$CreMt;4ZTr)*p=o&!@Nd;Cghr^y+pdeb;Ab;Ri)# zj?aiV{iUc)Mh|tuPF*g}av~Ge-L8q+pl6bF|LfojDSpbOg}G{)f1<}wKvXT0w`E{S z$~W2PosR(Q>*4FR*KHQts}s3=-8Arn-{SB)WmXzZ_jt2&ED|1IMWjrxMK3DsVeM4N zW*Brl_Jrn^)6uq56`dNQ&S~^Brr$sTk(E1m+OtL@H55RkO%zbU^j!@mHW5kGG z2DUzmnFQ>B;iG_}0oISY*lUvO9wX&`dm9;>gzi1;S9SzH&!-oy-8mc2%5JC;J(Y%9 zZyQ@?k`zB@V=&5bJ-HkHi1K`tkZ#c(=by4b68xmHq=R{dR=JA}Xw7Lv8?j&x zkM)|Z0TLs9A^JjeQx4uaP3z_)2S1T-FhW&*yD8@tns7gB`o&T~wMI(7;odVf^K5jw z%2}*gYN#b9)(?xa;Wf-1Wgqt#GWDrUyYf=kvkKgVh36-?M2Qhg-kWoaBXq^t8iuzu(^|TaZ`xIX)%0X46ZhT#2++b?Uw|vE5wERP7$%zQ0kruVWFU#g4mc za+1T2OGoUizVaoUtmvhSx$)EPU9DsNliR%$Oy9#N`6l)ooBdiNuiH*3GDnD|t*Dyr z8Ro_-5li(#@5emQm9BNHCF)K1&OE1N=`GYbr;a$H7PBwNxiOSmSjSs2?)ny$Ojyax z8Bq~aEhIh2F*An2Y}mNmP-mPf7OmPzQ_f#AmyRR7YDt9&}VS@boJ1zd` zaP7$b#lx;s2<*Bwa zDzrF>OFHTl?HQoDj=&8hQ#C&g%T(!{^j)i!WZM6s$hyeOkC-UrS{R69E~H=Jp)-&@ zm9r9ygCF7&{BZh8C)Mqm<;j+kKRV+@iTMQ0NWtDvaxp>*>#jilZbDAK7n7i@BlRug zO@7Fl23}*?4@cv(=sxdPt%_(<`*`cVP_=4>n0o-qQ!}TJG`uFqTV|;#sB}P9%k->P z-q|0FLnp58sJ+W2=zQ`VP`>jr&r?IYRz(+iToT;cMJCHZEV)R#PX<(7n zuiKKCqcOZs%hYrc7CWy9Bbg}00d0ANM4{37oD8k$o-8SN+$v#VJ_ki>ITYi_kND(1 z`q{QhAA=RqO+k?sSxmVf>)$8}JgfDN0q0pppsmJkYl*UAP4vm@N*PbI1}=TEW72z? zILTO+S!{O~^MXyxxGx6&)6Ou)PBuZw;c8ygIn2O57Vd{pzb^HObP8i_$ooY{wTKSW zLWsyCJo->zqm9%WW6w4G%t~HRRQ}eOBJDeC1K&415c5n;aLhWRG+2maMOHoW;{Bq3 z|IjI5e=I}RgnU+4DCm%S!2&K%tgiOmS>1IZdPCfg2$$8J=20LP+u7RMR>-M|ebv{U z;ukx_=;C4%g4Bl2Gr%Ip{=O~fbOJF$Jna!WQBeF*+ZBf6HwkOC*a3|p(tR-<&9JK% z5hEEE@7-M#kXmFZT(cw=o^5pHqY{|~yD4+HJ42kKXa_t!shmPaY;JKCP|Sz4{HY-W zeTCtNyE$gmp}MwJMkyJGX{^3U-K>YdDVbm8z+_KKVvDm>F5O#ir1w!!&NtSacyxoA zNb6fha|r0@5IJ^$RUZ747~<5OB;i2EgPopj<%k$K7EbzJ_~M#a$5vUPzW|2&0Xu^U zCSH}{C#FXWof(V7m^u!GMM!GmWTiZYD(XHJxU@xaR%t(J4r7vpIXF5FT4uKA;8sP+ z3^^V{5c4tpmF_wJNcA-CY$CN9PNYIdQ@YIfzFm3F2m;aOP9_d5t?R+v5Df)S_H=)z zhvyrWVaL{TeQq7>^#o|_Cyg>GBeXE+OuLc-Qiy;-k?h)s9Mra5xfVGL7a$}|@W58Y z*wy6nmJY0yQ~w@V!ojKQAjvX>3HY2dqKMN)67N6ivO#EJQD|M+IKI$_uvV`|t46C( z-K#JJmFLX6I|P}J1UCe_8&Y+XHrP9{D(5kb_c=ceZ1O5dEf;;?%DOFs7MkQ%e^>eD zf`u-v7?Et(mTZ?(z*~zWV(%964fK4fMWt~kIloBZ*Oih)&0L-8JvWNWSJA^XFB819 zh(=&hCr|C}mfss@Iaa3`uZ#;0RJES zY}=pL&>)xl`SXAzX(2s7gcWsnWyz)|B_E!iZ84MV6VCijvolLQF>kX6K6ORL?~BY3 zMkm_{0C+XS=@VN!ShuBigG^rswJNlO@BH8o1NSXok0bJqamY2-*N3%NZvPc|Xy`Oi zg*ZCP%gdWr@Wvmdh}4uO>K+h*fO~y7f<+gTo{FL1M|(g5$bPzP_Uv2LY?NvqV3h`V zJYLVmrC7{+!)l3;TR2#MB%FB1sl1?iRdNYvzLMaxOcvg?X7-J*FAOSkCtC@a)qLp~ zItFW{fr#OD_am|znEq2n$is~|5B}7{=7=j|?Fmv|1;i!f(dcNYO#~`=YHg_aBWbKK zC89}Ok;OZMxIcAN*R`f#X_lw2YK{cQmxK> zmW+Oraj0IQnS-hCN*T#ZwN}q`9jp}Yq9j;8d^Z4ldJcm3ZS+7UWPr?>NaI_DI zAGFRrP<(eK(-&F0HHw3YOZTt7C{eq05;Mv9kyaSI(Vr z=a-H?8XJ%cCp(FFoNrcZl;SXN7yiN~; zIkOwJ%S(l%V>F+xvI#njZaPnc-nu$1DsttGM9DT@ExukjWxepY@8YwG*r+ha63-RDU9 zIb!3mxrI2>c3ksAaZJl=oqHRt9P9f)V3|cU+w`X1FR|%iDPBJnZ`j1>5w^a_IMXlD zoMRcL`D$z>7AWM`^s_1l8K^ZDpZzzx#q?YUYDw(ZXgVw-q_fs?xkzBJPoQWI$CknG z2{&iEg*|FvM0X1-^eyeSJ)+734ouq{2EHf=T2;6-Q^r?!KI^X*yeJ&#+pQyII?yaf zo1Q~2wtRm>8!f9m6`)c6bgWzeRnI+h`Ai^gXKpEAAlW=jvU%4XoZ2?*RkZ$6ANQ9*LzZ7aQ@OX^4x(Ax zd-qoeezkfny#DYNy+&`LH(;sOKrC-GoDpg*vF_MXy95TD3>ymEa1AT)_<){l3pkt) zXl9)XI3klgx0gp;aR~iI5u(AZtQ>*VqZ#<2JeaBVt-xWh{`vK}YZHV1u+y2pqVi#| zRPsm)v@S;aNzq4*gXY%9(0H99Fc^9BqyyGtiG z&#v^h^XmNIq@EdD9GFSgoAYyXb780~JCT*0{iek?Z{HFfC1knyiY(Mo$6(!W&>Nh= zysIs{p*j3#48%{v7IJ^)0#N}>#>U&C`nvg^XtzEZ=fzjw&29hsD>5pIF3JE5W2N%x zY`@oO4diR^;#cQkf!8vh(3D>A!ygyRvU^%8EcNz4o|YfhdTly;{2h8X)LLFUQtm4S zY(e5h;o2 zLc+Z_=mnJo>)Y;>Ft+JfV@G9D$ia(~XRHVV7}7H*0E7lC&wd^=EVGLl7#wT|D*_uO zv%6N|)MXfqEzz+peK(XkFOSXkBuo~&vEhoz$ytco(d&9()0Myp07JgM2Htx$^yv4k zvmCke6tGqSy!S=;dvLxmrn0|&u*ctVN`VL{SQxnGlib2-BI#6r;>gw=v2C?GlYATs zVZBIz)Pp_whNTLEHNWNJZ`(!z>rK9(j%0_yU>1Li;-1cy4Vm$^u=qYzD7XL~u#f;d z%7V&Vyy)q9Sg#PnwZp+qKfSv*^w^4y0xMEG5FAoos~>U;s#JPrll?Z@`i6&Z0zXkB zkwq4}>`x{UU4K5OY^M#_mG^%N#*VhWJ~u#<@+7ZGZ`aMPJ8ygDqm7+v5kNY-dIOJu zv@Q4iY#QYyn3bkrqgJElg&QE5aHa^zeRYIi4)fEsdu=mG{-Si>Jg&}bsKAsC_@F?= zynoN3NU+q&Qd2gjStI&n78Pk>b8}}})~eTJCVYQYEfu_Ft)2;&ntja?9trs;hRWbk zayR{bfRgJxs_kJ{VQc|8S)W?2xrGTnM@##bA4(DjbTUgyN>r!neTa63RqhzU0L?OB zUm8}rWXOj$dn^$rwA-hu+wrb#=@Bx# zYqdKmHS5h+eH4Cgk2wwbGgrwGeLlhi>P!O2M2D2CB37@#2#%L)KWG$u1xB7*tPoPrYr-Q= z5HVHdkxP>`Ky!CdWfT!vX3<1l>l^O#j=EW}a+VGQfS#|gMjP__M~ci})*O-_g;!39Q@*$)v~uv0I6@_bZao^oQBU~CNQIwz>Wu)cK+Hk(~iB2sJL4f)a) zR)@Gk6z84EXX%~EQWahHxbC}Iw(Ut0ZdSlWmwc?lxdNP+&os^5@FTy8Gtr+?7 z*^g}k>#aSMJLM*1-x4huzG7Nv@BNmoHxue*xB) zAQwpi3v}%esJKC%@&ESXq=*MW*T3ct#q+=ef_{CJKGGi{?l^uEENiZv!Y!@DA*7Ie z2+hh%QALHjcdgg~^ekYE!TSNh4}%TApbi84kaXa0Y-BY1ofiH9Vp|))7w&+pSi^c$ zt>2RI6k)Rmx_ucN0REI7TR)Ub@6JmBBr3k*e*mT1ckXb4k}3q`2Qe=iD3ruu+r$`U%)qo+Fs!IqNyrZ`Y|**%-s&g3e49j0yla zfX520aBb)AjI(j0{Yq|&i?>Uy)%4G?{>Cnwc5Of&?#6f4LoL>;cb!uQaJV)Q1PMTn z?YQ4&*YxJz?4Yqz3w6AjG2qmny_2cKfIEHh(j^rS508Ugpi{WP z(hz9^rscY&*SJf_HJ8Qfr=*WTBRFTpRIjP zLBGI+2l&SkGc7EDIZ6N`6@4Yj3}kDP%D;h&{wbmW(ACtV^YDj}U)xVb>A?bJvQ&C; z{AOIw##yLN99Kq9AOz!7cXXZsoSS`jXR=rH1*Az1g5**6R>S+qFZuZcs#`TAk3b+IdRRSw zB{9C?dzqVRkypKlHo%6j z#}(?--WZ6RTI>0WNY{)6+Gmz$I{P#)01?^doD#P(dk{;Hr+f828j}Kf(K`{ZRTC&x ziZaXfY<@I$zb9T)@eYmu{z`?1);2H{mbgC6qXX(bmzNWsWD&%&;!$RfE#b^ia6{M! z(pav~%}#tBXfHww->Iq)YJQk3FE}26q19iquK`iuw#)jR7Q&*kKMvy2_$`B#*P9@J zDfgb(U7zuQ4Iy~{(kYE;^}sxecKdV_damK%85aS<^yjNwfr5|kqxEqBgf!f1a!Mxw zQbG9TaRPu6Y~tYwz*kV$0iJc106b%3o_+v>_5Jxd5BPa9B!FOhVSn)LG5rl7F95dv z4R&qb%;0D+_wW;Xv0gu}16~DNp!#$Z;5HQmc(7R*pAc_RPBR6JO&S8#^B>P=fDvfw z)+Oe;m>KtE|2BA$YqJ=jL6v_8`|Sc1<59Z)C6B*R#7lZ$WhRZG$#Vb{QZ%q2LWh=O z7W=b1A_5L9p_J5@JlX1Z<`ns(ge(kp13k^nTT~L*=M005@(KyX0a1hUUR$4O>3}jY zZ+wjYEG9c83XHEdD0~Bc)k<8?@v4_#I0dHg_5k*FLT~T_IKhpMPY>T(P1bmem^Yk= z7k5ZV0)7EVOOtdd3Ri`U%hgtEcg&zv`EazxyAUWeuHk)TwE6FhwCL?P>35#sGbm0#R{7R*ZQ@Hgp zxo}lCY{aY zu?J;>d}#j-Lx$;9iwDL33%-Tx76t)R15;2C&RP%5+}YHZG*Q5h7sSB7Ur@Yu9f*|v z(x?@0@LZuN_(N>$B_=?JAUUUvK;UZMJ{*jk1~bY2?8AeL_bK=~PB(*L^+1e4dhVm8 zJJkUQ=ZHh#`S8ZX#F&y$h>|+@MQzi=6uX(`cO|ZPl?jvEb0E+Cz!7mzdkPM06+8&? z2JjnD?qUM<2d)JGwdnsWNOtE3B>gY^J%jE)26DhyP#>^4dWg+YJkRJ^<&Ep$1mZQP z1|&Bd%~zckn7)Cm%al^iG|fl46Ag!wR+4xR#_*f-U4BuU?l9J?P<(>|wn^C4I~oC) z4IhR`jNt>^af-^oT`E{4`d`aN9tY!b*j9=;qp2AHJjaUbvDRAz6GU4TsS4BxtU>>x zidDXfP4lE~sP5iAP-H~GyQ`jpUp{~StU8~@YpM&UWE;z=q6l1Wi(zbMLwySM6^EwG z25tl2fd>{%UnT*pnYeEsc$GEv`wCw0)FYkMyCp{_;X00O0G##DJ7kT zDM3#NLW$OofbV&OrE@mLclCX9vqEj{CRi43y3KdT*ra%KEtc8YTq|SV0;I2TezOhS z!~B;e*=UrJWA%!-#L>ZKW?32Hjwqr~xNB?EmGH$*i!`x@(x-Gie(G%Rm?9LK`l$W| zFhGg}^@ifv!x0FLn)#M4;j*KFgD7# zK?$2Hk*24Q!4|GjnU_yXEhV?>kSN}(mcK;!UfIzA*M=l%# z2LVg#o5sMmKfz1z3HAl=RfTGAk7XaTx(23RU`iEN#56Y@ILg;cj+OXJd&I&3=71W2 zc9lR?>>s$H4rW+8USHstg&+=Hf2Y?N0^A7~RhA~r)jWS!7B`5Oz_xU~y}j!Lnxi;X zt-#tR;=a&}I^s{wRWdpT^TFN&#{fte9tfBN@{)kjjm^2PKMfFIOwIx^~2Hi7{ z05BL_!BS5cks+3OZ$2T9L!}AeG<<-3kuWCFS>O-GCL|u$B&rg!>sL^Y zcdx~+f#SqQ?V7(P&E21YEXX@RWX77jPJ4}JhniqNVZ6UdZwJxbCNK6T7Jjm@qwF zmD*>)=n(w(wb*&8bxm8pNZ?Tu2w3}HfNRHNff~1Det59w3POVlZ%2?tRt@;ib;hq- zVn=eQ8-OdsQTn9o4J&PsTvg{Gn9V;p0Y*R*VkG(>&YPEd3gBkNK&OFz+&WRu39gu& z%L^na6o%7;4XlbU$|(LDxU2_q9<7}6&&@OUE$;U=iI}9CQIe` zBi>5_A;Me;j3xKBJxHk95K+WjWZS=R3j_jXqT#j)A~xOE;${4+Xohu__xm;B`7eus z8IRm~@da4^?)}33k27C3y^n0Z;mAvYn3U z##;Rm%CPA1b4RVL7ln|mLLdJEWa3%Pgj`}@W_CqH=7D%=!@( z4r8&~z5{t_q`E()i(*0+JmAo8k2F+2xjKJ>;utyRi$DPPcvCojv?nX~bsCA~zsz0M3_`@z$uX`XpJ`AB zi_K2)QK{QZUR&U@k@8%Qgt|ab|Ib%8Bi#(76HIp;lU5nh%7d4MSO=HU_xS|{W6i$@ zhtd=0ss;q978oH*H`_8SLbN$2GxOm+7EL`FDPwe^t=&kn&XL9rS8%(+f$mg^=%NcT z(vC-f@uo&59k?p^s48wUuKcF z=0NclD21nau8i}XW2wLU4fsA$tMu|jY3M37=NUQX!!#k!^-bCV`67Ho{CTFJn#1NU zNZs4=3`@6!5j2G?X!ky4+xqOXvNH7-H%*c2SQ$$vZgz38_Cma#Q7*Of?gvmeZR z56o<>J6F;F@@=Y|bZm6Lf_@$I(Hr7RijsG;*I=olZ(jp{2&}KC39Mhu1A^;}qFKFW zSf~E6kSR?I>kq5=O}=Pp$n4FE9|h`LuVF)XK~~BJietUV?;*5tRaKG_z`*nPS#H%v zXWCG3B?^h!!zZK4sTXKub{|8l2p)bo1FyRH`B=Py$QhUjKc&UZKP>Ob@#j>q)I!5! z7_$H!JsF>&-J^@bReBnA|AS!35D3v1MFj-~`IHOI)$OlFL-kxhpR0C@rB=Vlhu@t( zZCK%$oD%c2@W9l6F6U9Y6_6Pl9mqp%!KwvzNVmBkcLNVA+m$Vt{SP;Fm@NT8$$!@? zqj=XXT&{jcU#6VQSG2t1d)wOCrM(lsaz#Lfn&zqDO-s!6js z;RNcY6GLfyx`iQ7gA!PPQ*)Kq<%5*~F#_RWbHq7j$=fUYfW9e!4y4uh;Bz;M9`gYj z$@cx<7h?^vO8fS1g3TAAJcu4EWkc;?s=LF3by*@5DgO~F9z50m zIM7?y${ohI03qzZf7SJ6G`*BYoj9zh_F8D#*=g>CFULWT)UeL466#`A>G}g*DEU#l zOSV7eb1s{z7%QTBK4&QB@p6=^;QP^0qsonTK0GK~_KF5#<1y5;a%ozlJx}fIqR`}J zn~lT$wWS>r2#*WAmYBe-75t{?$i4{rLzn+}y}+^ygWAm?j!*;*VHVq`PY3?Xl9@Pv z`~4^r2r{JsYOL@1Z2-%DDRmh9YIVq$wsmm8b*bU(J3XJ=#;t40>^*?m#+bsw zq0(SLB7a1nZk#-MlBvpdD<$S~+g&=hebDUfQLI>jv#1L63GA`2+TJl(#MXv=EgrR;&YBDazQf@*%`OT3A6pU)B-iATqv3pf#Zeg$odkx1Mec{o{)c z<{R%XlfiLBR$_svJZ`u*a1U>5C}drIIh0{Cc}3?K?5iiJ+3&B^f`UAoO_ED66e<02 zZB*3#;ALWkDH8fDHVVL2i1O&XD+xK7Vt5N{RKv@#{A*WuXWbnF~V*7yH` z#Q7i4j!Qk^2DIA&bnuMq?Cc~DIw22Wt~;3zzSpMt$KEKmY-y+BPGWm`>RfxPSi0A^ zK;n&>L#j4PX!PCLuMA_T~V_76+u;a$jjfc>wJG*Pm8yFO6XStZ6gL~K-ukCIml-DM%SPwa@O|B zU1Wy2cX`hV*w0(na}kH6HfzJZ<ZY9 zeFp4$K&Kq5S*=={Zdv^@LnAT$n!{?M%EL!bB!;>d=)+mB`u*gC{raP7Xjzrq-R}kk zbIp6}ul&G$? zsQ=ITyVRy<5DC~DR##8Yb8%n4&`bboHRIPXQ2xQEU+@9&;+Azw;B};iF{NYC4>j(s zKiFIKs?S}^WdjD?WHi{15_m$7=64J$Pjj9A0}838MaYWG_#4k{gRg7fGs*DKpH0K} zY%?8$UHfW%alx=g?e`aHy3?nkWU6yb1mo@j?3LX022H4~uv9`}DoN5kh(NprxU2M; zk9LsE8vk2nffNRZUi7RUJK;cBuU@Mg!@DV7igy$aX6D}58-4Y%TX_o#0+-wVEfyJ5 z$kivl7$w7_K^h(qZ0_#OgmkJjWhrhbF#9jz1@s>WfV4iTk}9c7X`=L&DDc9$Yfo1CS1l5 zPB`fT?9;`pOhVbpBPrqmC^dXI+Cv|`hxUE2pmxpoW>}AMY=qwX(g&)Tli{VFf?!P1 z{Xt!a^I;6QTE4F1PgI9Z->>u^gQX%d@p58sIAqUx1HMbGlFanig-U$g)Q zI0U|Y+mt-_*UtMJ>+Wd!m;*F)mwz-NWpT=`Nf|sKSR@M-|5e?`duLiCK2g671n6(2 zlKMC!9Idiln*c#1j7gS)Z!DDMdt?@NW=G##;^`$Q(uXH}xuegL?{sEq>T+B_#9dBt zD>+b&0Kjhj5pREiDukZKfbJ$seLZzSg13RTVq4OWbTgA(JEO*DEE;Zxo5-JlTD)m**GuROrgba5+UgKuCg`Ohac5;y{rLP_&ftsU{``(pPudIP!qa zPtDEEVW@(kC5HNX2eIP*oMMD!*fOtk;xzb~vnt7ZD6+!H&pJfu(RXT|k^QKFcVBML z%%6s}GLQUSYgznLYk7J0d*oW@6|OUIjk^Z=93pl{-?OmZ(-T!@`sQM^A34l5t;ID! z@s&e2P|M6LK5~c zxNyW-tAQ}by9xn15m@*6Nsk3p2&;zVrNc3KpOA)+bJ&?ik@0Dw!+EDoqc#Mz4nj%y zsUXf9b&pN^iq$jaGk?{3H5%0oTtEPu6Xx&WHX&7#Dk5Wf(y`zbTCtZSWH zk(Jv+NZ^wFQr2#9*0EB~r_Y-Ds}R%)bcx|}G}9ong2Jo&9%V#_aHe2RRfTH;iSj4u zPzyWjsSm|iiI>%T5eA$RMnMl@!0_tyW?JWe5T!T_hpBIA=21h6jUGocm zfRxtFtv|Es{rb%z{HjIUl00o3t(}}jZSf6MP349GRbtTe_FB}7<`^a!Q1tIbf_d26 zdLe!6+ErsiHpl)*+EZ$=JEt@*EWJNsu%9w((S@*MOV7TvqN{ksl4A^gWWHh8x3R@x zfmtAlmyTVN(Uxo#$-(Y8dn763x{yKWs!qOF^s633|EqMGc zJZ(ArpF5D@Joc-gurT^0<+%^Xf&@oaF_H5M0S{->@fKuqQ&MgN`z|26&?OL{1EF6#=NG9Wg z{m{dnV`mzVTBR+-9$u-d_|Ov-SuJPsO_B#2ptv0N&*`&$ch5X$0QQi0OL)46s$DU- zDG;m5lHyXJWdHWnkzd>-f?Mmh-oZoqrpTfX%f9N%Zy+asi;}~%)$Vl-d3(&2P!#yV zTYW@J(j*0Q&mb>o=V8hn>Au@+eQ)j~im(3CYdhJf1A}FN1>mJx`igV4nvUn%q`+DY zx!iBQNQvnnmopl_iCt&6htnuBC+xQB>6QrA!f5HEXGG4*zl`E#ws$}7 zl@Q4c7Wsymto!Y>F{w7GAJe#au%-#?n_%erhk%I}Z~LO~8}7YBS{x_=an?zT*gUPw z@veX~qeAP-QfiQS%*L)+)O;62UxTAKeSVh)b{07^fno$Ga;VO5tKuWC2Tgl*|zwUFEA3)kI~OExMdi;W$7=p z7mzl1F?ro0*k3Z#+Uvh=n<&|t6%YfF$6sN#Knmhjry@(U5Q{TAv=VxLoH6XkJcgwp zZnqL@=+;$)-F9HS$N=w3yd3}2xYo7O&;J#2>Zs$DPUc)$T;u3LkewXwJH#f@r7W!X zv_e7+5UAsF(9`*zJeQMcLj#EFgXEt^pbeu&;}l1ri&!QG;TQMx70rm992O3H?3vWL zT;KHpm_>RAXS_{g2SrhSh=JE3D}3VB1WPm8boh6|;pz=LQv#q|cNm4CyUECtg&#UM zv0~(5y>N;SEVs-chjN@|(J?g@P-OP_P*=a4AJAGEeUEh5e-2+_Kj*@pmilU~R_7q) z0u{nwoBHcbZ;)^?jRoDhzI+#oNcnN2gy==E40D}12;i)rNj*npH2OCa+=m~u%-6FmG$@g{ew643D*v0W z417J`)c+N=d!{AS{A6av9HQ8`bBp+LDWlc0?S0Ie^}aiZ=Q!yM#4%sB!NLff3RQFS zG!XJChKt;JWBa~NDt5>GmaiYu306O@+1qn@u%5dh(3CIvBkaVV8_i^u zmH$;m&&Y_kg_RXkWK`i3)5$v9zq4kW6Z<=_5Onl>^c%7^EQ#w4Bz!rx;ffwhq<8dH zd>+#_Ul+LRG)8hCxqgU(j@h5R*yQ3eR+UFNhGvW|AN)!x74p2M2ChzjzN8thMlo2! z@0n+Gr^JT~^sO#a<((BlNW@rsO11zGA5;~V_EXf?l!K&hBA4xB^dqXYGAsgH!v&_1 z8*_)ec?m;L>HQe0zAHxngco5dK>@i0`OnHXf5xRBu!hn0Dq2HQxxy-P&PXE1Bmb!Y6MF#jvo8jk<9y#5 zE==>qXL%j)VZ4=>gFz?d?`1VuVh3MPiRU(`_!ZS(fu?A7r(mN^%^k#BZg z9kJO&Cr_OybE(29*UH!xC&>WVLxwyB-;AgoMt%|%De~<1V+o+fh~!^oxtTYHZ@!h8 z;2zUB%u>QVelIPRxlTT1j4;PMzJ;2iwkDbY_7d&ox;hN@4OoHLopktl4mVw9gx`t2 ztn~Bwl&ThQqrT^BR6)kv!(w{KU4UpzGhb2Fi!~W$W(97(7X5M09c9 zBUrh10PCxq%e&t11*4m0f1&NOIZJ=z;Ue}WV>xc*ImkqkU5lS4jO@f`Ikstm&t7Os zQ;;ZHr1y4SRxVlU8shw%ui%FdSsIF2_Al=L$gh(F{3NJ@BVPDbTSZ01olcc$q~sCy zz;||X$4mKlnA00w+PJTy%zZ{PID|oy;c`%>4Q({nd1Y{(fs>+PDIs}aCwG*Aowl>V zk|)#oQNAOo#j{is0Ts9PIxlrNza6T$U(A9@sWu zw2#Jh`WO?~&A;=d4CYTe7zvC#(E^^DtkI1kS5Qg~8(SIV{0%yCrzp2u1A$}Q+dg68 zx8nEyS9<39yA{L229*@C8;}V{%B9FnT)VKsX9Q5F>DLpc#i^SCEYe6h+9SgRzVN<6 zo_ufR8)xX9+x|RFN$~zwROX#vOZO~jOAhXEi{-~;+LyOqK6hPMs8)}n`e534C=$oZ zFX}R%bn9Ouz;-%2CBqML8KDmmXv@2Pn7lC(m{#Jd7=7FSiSjW2#fpIJi?<6tEVsM` zOArINV=Bhaapd3jAo&w{(g{V>WiBxX>k|&_=`C+v2oim}gO22chG4uQra|Rw)!FNR zu0@uW|9Tjc_|uQq+&YCxhZ$L#cp-X?s90{6_gS9|Ne0SY9qdf2Gs^!o%fJ@49;L%3&-7K#k?dhnULBWl{e(E8pkxLsCMkmQsurKLA$zaDap z-LmD~WgUJdmSMICn!~8uLVHRL1==o@b{R#7WEt{3Fi?B}TU46&9KBJL$Kpig-*B); zI{a&j%W!wFWm^B__EeR^m8r?>h|7aEb(dqQPs}txKC0{*)1usCP z*4h`h+k)Gv4flWf*xE4_qJ>6wuu6A(6LlbR6$Z%FLu@q3@s!K>7Z(u+lDmIE<7CXn zP|R2(qp;Bnq|tdyg9ty*WSv0?;&~GtkX?^ksQEKfQ)Rmk2p9{dth3b1??bq|-;Yuv zVLljTnm+oBFxSVq?4Toj{ z;Pe-+LX29ezp=I=Ee`CI5!IA3>|xQ{+i8^-suKuajOt~ApPwRek>feh_in}~NZ*d; zErP7!K$%`z1_NQm&U*&D!4drq=gVU*cW}QQQqpQ~JS(Q+vZCE~0)k7ZWD~|+L_)Pv zf=_0lWZuqfeJPMTJ5grbn8PCYj#F_-KB%d>aeTYj>V;7`qowsTN>&)ykCF8w;Ce10 z#A8)oGcvV8SO4>o$1*==U(rf`etPsyAzzNdH!w5&_+HQ=`F2d8~VPwc$dU|{P)?Jo}st7o*^}R1Xb78 zFK3!I@lLOu7FBqz@oLwQP_~Rdi3QyR%}{+Cs3{qk=c0W!#*r!w*FrARkicIw+}J{9 z${NjnTalk_AJkjFxSR21d#&&G?^iMhptkt)3w2(mYFs<`I2xfdm-r+9^v94DlRmki zah&Pze~a-0`siT3#COMWZzzDQU%A;Wh2Q89iUT-Rd|d2%T-B>0p{f0=NNMGREd83p zQ{H}U_7)$rZmUab!jZQ}&u`)sIZM^YApnj%*Znq)2Abk8BSu0A)zK*n3N zB-icHim}CstNX-KL(qhk4d*WU#|#G>CNvbnukpm0dd5GiHS-3!4k#1g^pQBxU^qxN zX1^Y%9e5{^t&z+Nwt>g^F>aV2Z?~QeYc2VfaL#_Vzh_AKuU7ZmHlcUK^|{Q-rl#M+ndnQ4BXC%xu{k4~(w&Uv)sqwNfhHIo%~&>FtJ2DITnoLU z4YNn&z=ww~x-KJq3=RdXKwVYY|K&e_T|@ z?b)l@*M!~`XfyZUE3MLH75YPqNrbXGSqPaV#*gRL)tOPMgNC7U3vLD!N;AnRz@jJg z?O29OC_p&#=$l^I_jX=t5drQqia+rC`f!RJZ68&2~(=^_ivN7-D(`=HKbAH zHM^ZGJZEmVf8zW03fT&YkfJQ1>_)aw zmSiyYCCg+9kwhd*%2JdiA|drVujzT;@B6&J_mBJj)Ou0xytJF@MhS0REN0CJ@2}5$)DSQxPo2r|J^M1NA{40^XZ$iL+1G6 z*9#z|!Rw?mWhFaQ6u4Gt)KdSOz~ z>0k?c`?6s9C+RPMBLMa3{WH*VwY_;reP-PEiJlVL881 zl4Hm=R}sq*q4H8?tU7P&F{RqeNzyI9)ZdfT)5u*8$&Hq8yZ0E*r z*0h7zlvF)kmU6H8fxM6aC+7cd%Zsn_I~DoT?|1bzk1CyfjKu^wjK&$~JoUmvM)gdy zwbXdEhW28R@t@kuxwhD5%b3F-k_Tzn@18fG{E|~N{amv-`oPweDv%=lQ+psCb6uQ@ z$HNM4i=fqtv#&zOdhv-EnXmN_h^IJCICbpXReqXfublQ33l1p>h6VuSMmLpGP{b z&15@WZwmRD?%sz=?%BAuli!m0uJDD!E`6!XP0=Fb`2UeJAZ>*E&}QqFl|md&PYk+@ z4Gmv;#Vt)fJ9m%J5})TJ_2BB=GvE895<@a)f7sclrqPlfPDn2B}NtY2kN-N=0~^$W|p zqW)l%M*QuJhuKtG`QP&a=>N!FKnU^}#4A5jqd8wnt(x8X!_0H08mDcjWcyX+Nh*ix zkKT^2&87n+^^CoJgoJ>*>qQ^_p9@po2fSH6K+h3Bq73kSU#Yd}bjiyr6+Fx4zkr7L zGScoiQ?B|coOPY~G}!m#T#JvI>rMNH+GI68bAC~vCQ9S)?)1ap@A&uD*GSce?VFiC z*4!#f8%YukI@ebDcyH{+;E+>DZR1~mKDJ=Fn{-sirr>0fyhz5Vp4`{( zdJ?4x@d0e}_BohfhvgryKk>?fRLYx<;ETvYwDT#l5JyWJMTh@Ug`8A70&Uh4-t7l~ zXZWpkg~rap0)zCMWPw?Z6Gvofx>s(hX}NyCvSZ z^?W2JCG&Qc*?zp3x_h3}t!WJUHN(3i(fvB!4A266RHLAT{4%_fI?Z-%Zgs85^2lsz z&C1IZzEacC^+dUyT0N4tCbl1t#~aSyXbF$>Cdb7CT0s;!&YgKCuyO)gp`9$#naQ8; zmnU?3oa-(m^KdPV3*HJ2jJT&7Sea5?mRdQZt+(XxE_UNx>s_Dc=#aHQmqC;|62H6I zp@D9}pRX_F@wv2~Z!<4mKJ(b@dFplFw|igC^?)uS{Wra9@ssFzs|;l_ouw) z3rLT&^&dTGWqC&Tuw6l;?)(qlbBF6Vj6_hDsg}fd9I-V)S~)lDorunq?t}HPj?Zg8 zT-N?YV#89ZPES0=a|DgcdHM24I&RsR-JzsbD(l&$Z}_XGI{3g zQ)qIz6ibWcF~^Gz7w{-vbx-w_5HuP8!cMAD#B%N7r zqiZ+;Req3o#itv!4w4!>ClaVS^UI#y?ORc}P z{WeUN)FHsjW^`!CMnsw@HPE%+`Eh+~P-P46&5r?2C*N+Kr(^$D47@*ftKfc_NCJY( zJ`3OxC_Ss8ZNB&7Qsp_pgLlnqH&fEB6OE5RYB&Z$>kYeoC#u3tMEx=o3&IO6v1sGu zr41gd=ErK5hN(PQDOt}Hosd!-%ip{!8TBWE_W=--LN;YLI3j|}W8y%DVQuL<3%F&p#$-((E7AZXNp8d`st7 z&aIVCsJ7jGh^pXLk2&ufbDlI&7>~TQfw(&bGV_Ey=d-Kw#1v#(cCDn3-adN)1sNKQ zit_`Wd zJavio6k~B_LhG&b#qk_+MAYW$RZZ=94mbC^>+N5)6`RV)PDt_6twSxY1WEH$mLkr+ zOi9O`Izsk|pddYqS4w9rhrWl0N8MB`f}kL*V0=csaHIDNyr^&Hn(pIsZ36Kz=8jza z4=1H#0vBrdFV}THz4bMlA$X!A8$q5GE^@S)ck-m!-uNXFh#x<@y*d$nU~tp~4%NZr zn>aZidJtxTCOwP%68krDkJe?y;BB>#TW>z-Sq=H+wm2;RHP0WEe6hfx*}w8eHKr!O zGHvQqF?H-(02EU6o)20F2B*QbNy^;ONZr{@r21HJUiW$!Ge0p`(qL^EidG_+&q+9de*R=(tbb9I)P((%J#Q zQ|PN>=H+8qdXTsBI(>gigmrwc>{f1*e;Y?UTU$zNGTE1^^v>2f6Ox#$jCtG zM|<{`MSNoo`Fi9Sh)kDvn|?UTwlN-M@hyK?$>#7}Y>e5)s_3xc+K0?rtmz?@-C^{x zzico!rm~$PlpY?+M|!HdHL1mILNv!?iL zLL!)XD{zQj*D6e3et2unVoGLvwAxW+>&EbrN+m(3tRF{1`hvF4RzOo(<+|YnE2aG* zFtK%z`QeRx;^u)QrvMX17G9y`QtVM)q=JLKsfqhMIG|>!@+)2CJD(dI!Qw>==%gAx zemuMVX9XKA$7VQWfvXaJ+lzG6KewvVD&&Ze}pa%#rAtU(x=sE2a4Ik!hbzJF8LH^ZBE< z=<#;c!xKg>AhBJK3IaJF#f~nK09& zp#C|dv>Dr*yEqI<-b?RY4BttY|26GQCk_O&Y(3Y|pY46Dhw+U5{WJE?dc~c{t&2KV zYW9J1Xi&48-D{6yXNVA_a4?$Gl@DfrB~gg0^VGdB^CYkfwC`sQOJ5#JVu)(!wBBhj zI3i=NT0lU7pPf+igh6!rnE6GBPAFWu%NIuC1AP~4Y?s{ZmZVnY@EH?cB{yre8!9I`~nZv%O-7UTVwVk{UCuB}s+ir$&*M zk=Oo4qH{uc7NQE;N;q;*-+mZRPk9JAmtLA?hP4ptxT5lCfp-5n-3xEne7FcVt_`vW z*3PRb_RO)ycL|KwdL<*BtGk#aijwXC3diM=zt=(jfC&=BXksSTmOsc^ab$2S`sZ6t zNkLDaKMSw$i?lCasl<^@TC?q2ehwC0cOEAEXAZ5w@acKlY?n+W@5jU}S+m0*Zra4D zUTnO%4CQ~?#N)9AE3tugiY=e)(5YI3X8 z1qXYP6U-_&-eBmi%Wr8>DTsQa&IGXJ(}`GG->h^R{e2f);>FWw_M%^AywKYkICYj+ z$uY(lkX}T^^XJb8Um58ZYu-BhU?buyhicJfAUWpaG2sm;S2@e0(u4=T>!GF7N6+(1 z)0NDLINWFAk_Azgjq~bsCyH74XZy=+4;rdt$w&ZxyvB@j*mB(dGxwO# zyE|h{2$4P`E_^hwo{f#IyUgxcesKlgLNHTi?F0Bortb+fRwcAE$I?2LH?76UW!I}+{BDvMd0HmfpHC3spF@(#dP@Qs`cR;t^=*AG zZ5b&(anJcZH9C|(+oRfxv@-vQ1}zVwW-0bPh3Y=<5{DtB#4;BX)ayh8LSzi1%pweV zdu2{^>0G;3BNcLM;Z7-ekpDW5(J^+9)KSGjBM;F#A+qf8SF1({9Nrg-f|*Z9!H3St?lUW@8q}>4U`Q z!NsaOW^WE>6nFYycnY$2XIG@cqu~b}>iypRcCguZG4z%1>yDv*`Z=1ly~f9k>$ z%~z=oi6kqL3yhmRt2C_%X;HkQB_o#;2O?ja*{261Le^VwSVv^<`VJ=w=+Ax3>-1e2 zxr5;@ZCm?Q*E`X0wV=A%T%uR+vijG}Xp1`OSXU;fosOji@EKfeh{*>*MaWio+1#I?#qGty`U%LLrG_X4S6^d*AY3dcGzv{IdEJ>%tn012g^L-*_1BmIb zMJ?WbPo9f75!3R*oV{B&S!~YO#&uqdc)M_T`tqa@V#fq-3%2(os38uOj*|n@F+#H>h;@^+Y*NQGl6LDyQTZXC0L0xM%NH~AdXj*4ret&s} z(}RONND!q`fW^;w+d2m27rU3W?9}WL&mUy<>#qUd9Ao&l3>p+J##;Ll+Pqg^)B@+U zwDLZez?uQLd&f8Q*2Mzc6^Wja1)!g8SHjR@?82+5yh41NR6bEh=4>vg=-;etk+&(L zqYCu`cKWz5)KF4G30HXKHJ9}lA~3p!=Okq!;||Vz<2c8o?306gR_nTy1%y|etmc_< zj=S%Z2F1nFxGp1{+Ei(ZvaYe!N~_k~X(}pFcr{!m`?4Z;7Pl->Gm`o6q4GAd4?Dhk zJ;AdrJ`=_K^adQOb$Y*ArtYGdofn{8Laoe*DkE%CMrCyV=g7^)V)qfaMp4BAw11E(v=gtq;u&( z;e)gr4*9t{vpUII&MW>fTX~@-|swhfw~GtM>h~8XXEj_Os7_8m6llf&yX2DX@fF%HFu7 z=3)jdW27)I@vz|Fgy4w4-?Y*pcu{|NQORGv{fnPYF&`E&URKn!bi}w{jo>k!mCqU# zM%dV^Mq*8RPMm`Z^Cg4aVxza_2c)APxa4z;(63zFSci;xKcqGLTe41s;1+#)e9VM8 zOGrQU8?=Y~KEDNZ)qKEC8uMxCWVFa(@mn8OEw;WC>clcUex!GA%XNO|Q`DbhSpBPn z*HEx6!p4?d<&Ha%q}T-*h2`ORou_Rv8|1ND$F{#|BarO8P!|@j#T8ln^GciwW9;hi z56!(S=;BH75wlI#two5xDiFCpcVNO}+&I^Ux#+v4TYptHH8*(vWsM%jt};p>y|lT( zWAax5UI^mvH8$-!CS$bEhCSf0LkF&JqbgMX3T768-pb9vGPn*p=UlXmz+Y( z?f#qwrTa`5^j9B?WtU7+J9Z55_Xe46Nx6ztfR-@J{Y$?c6(v$F7G*G5e!9_U+?!Zo zghJ$&F@ING+Ukp^!!~ATy>8MW7L?!hoD`YfjAdKA@{<{Cy%wq(h=@z^8uSBo@V*0& zDa6_faW@gjxv>@v9eqc)Z?;_h%03XyK%AXRbQ2?G1+Bu{Q^9w0Rzx3pe(<{;%5d6q9I&pipP?M&PXBxD|HikSjN)*UOlFf~~9+|{6Wi*TqNu2$D91 z0dIN&Dn5!gylJ=-j4$w*HiEL`-?YARnCp@XU)3d>+=Y0b@NQco%)-h_RCVY5>->fW zE3k%PCOf?~m^Qw(ZN>$#;;d4XF;C$_82YkVm@{Hm5USwxWch_jS|Y}yjK$9GZW-` zv<6-6ZnO>9yG~0iy+eOYLsAf4bRi=FaW+!3=`firAHINfyCD+92gj+ z!hHm=fB?%hH8&ST9FT3n>QVN}hch7(Q=KSWX^Rei@aul1%N*($FDh+hoR4&v*v+hq z{bUZtAA-bWAb>$4=XKGY(g%p!0kh)lLAYjNAReqiMG#P@B))fRzV{tBgPOICWS0fL zSX}Q&Xr~zIk{aW`DeGw4S7e&a?sVSFlrGqm3H|a{Ae_e>A?%D#CVilPrD$bkv_b zN@y9eBSZS(puOZGH0+w1n(`wT5&YhQlA)L6*e*Dw7_xt!I$*X@LO;OUxOIP?*^yBA zZ8R`&_wvT{*A%9=MPtOM75j?&=I>Q-wH7T}AMScy zIMMjh{V$V~DZ?2gKlOq+td5zq>dR+mDmF%7)&W-r32?qZdK>@fSy)>?4H!DhL+kKn z|AeYyqbl`@KAl?vBc{_PMs^w8-xkJA;ay!8nmCv)gac*2iI9QJ1(X^XNJT8 zIX|rE2t%CFCqj#pLlCe7*&m1l2(**;yuSJKL@|+Q5VQ=8U*zxgBGpucT%KxMKz%t- zjBGIhc%78SvpMb43}_*%B}4Bd_^)bLt`E9aMS;8h71rybUq`{WzuX~tCF=u?xIJ~w zWsbJ%e(?JF9{2ot47uC=Bye20fEJohfNqF zokWfl4#gY$P{H^bUHlv5ByG{h9|ijuiVGwho8xDS{D%-6>YBh{(>tMGzSyl`VpRK| z-xe8+5>ctY0aZh`%LQ%WwlTvsg<|TGW*!{7#UeOd4ZA9n5Oamei|dFxg;kYH4=lv> zRUkuqz|X5FVDNl7gaa;f*G}7>byOR!P|C3|0YMALjzxZzawRwwi->aG>Ok}k@H_h!h%w+%$a@hCHa04!@uZ#^g`@$f1xz)Z!qpWa#HJ?O*WA!Wn!EfM`5OKWr z#$cc>KyKUAGUhwn+=@%(U(e^V4Z-wYfwg3n$R6Oz7eVj)8=P?

Dw9f+n&w-SaX$%AIf1w8HvRaI;64jTrk&h&Ve-m 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\n", - " network=Network(\n", - " nodes=[\n", - " Node(id='site-1', neighbors=[Neighbor(id='site-3', weight=0.3333333333333333)]),\n", - " Node(\n", - " id='site-2',\n", - " neighbors=[\n", - " Neighbor(id='site-3', weight=0.3333333333333333),\n", - " Neighbor(id='site-4', weight=0.3333333333333333)\n", - " ]\n", - " ),\n", - " Node(\n", - " id='site-3',\n", - " neighbors=[\n", - " Neighbor(id='site-1', weight=0.3333333333333333),\n", - " Neighbor(id='site-2', weight=0.3333333333333333)\n", - " ]\n", - " ),\n", - " Node(\n", - " id='site-4',\n", - " neighbors=[\n", - " Neighbor(id='site-2', weight=0.3333333333333333),\n", - " Neighbor(id='site-5', weight=0.3333333333333333)\n", - " ]\n", - " ),\n", - " Node(id='site-5', neighbors=[Neighbor(id='site-4', weight=0.3333333333333333)])\n", - " ]\n", - " ),\n", - " extra={'iterations': 50}\n", - ")\n", - "\n" - ], - "text/plain": [ - "\u001b[1;35mConfig\u001b[0m\u001b[1m(\u001b[0m\n", - " \u001b[33mnetwork\u001b[0m=\u001b[1;35mNetwork\u001b[0m\u001b[1m(\u001b[0m\n", - " \u001b[33mnodes\u001b[0m=\u001b[1m[\u001b[0m\n", - " \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-1'\u001b[0m, \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-3'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333333333333\u001b[0m\u001b[1m)\u001b[0m\u001b[1m]\u001b[0m\u001b[1m)\u001b[0m,\n", - " \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\n", - " \u001b[33mid\u001b[0m=\u001b[32m'site-2'\u001b[0m,\n", - " \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\n", - " \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-3'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333333333333\u001b[0m\u001b[1m)\u001b[0m,\n", - " \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-4'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333333333333\u001b[0m\u001b[1m)\u001b[0m\n", - " \u001b[1m]\u001b[0m\n", - " \u001b[1m)\u001b[0m,\n", - " \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\n", - " \u001b[33mid\u001b[0m=\u001b[32m'site-3'\u001b[0m,\n", - " \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\n", - " \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-1'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333333333333\u001b[0m\u001b[1m)\u001b[0m,\n", - " \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-2'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333333333333\u001b[0m\u001b[1m)\u001b[0m\n", - " \u001b[1m]\u001b[0m\n", - " \u001b[1m)\u001b[0m,\n", - " \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\n", - " \u001b[33mid\u001b[0m=\u001b[32m'site-4'\u001b[0m,\n", - " \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\n", - " \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-2'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333333333333\u001b[0m\u001b[1m)\u001b[0m,\n", - " \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-5'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333333333333\u001b[0m\u001b[1m)\u001b[0m\n", - " \u001b[1m]\u001b[0m\n", - " \u001b[1m)\u001b[0m,\n", - " \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-5'\u001b[0m, \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-4'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333333333333\u001b[0m\u001b[1m)\u001b[0m\u001b[1m]\u001b[0m\u001b[1m)\u001b[0m\n", - " \u001b[1m]\u001b[0m\n", - " \u001b[1m)\u001b[0m,\n", - " \u001b[33mextra\u001b[0m=\u001b[1m{\u001b[0m\u001b[32m'iterations'\u001b[0m: \u001b[1;36m50\u001b[0m\u001b[1m}\u001b[0m\n", - "\u001b[1m)\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from rich import print\n", - "\n", - "print(config)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Instantiating and running the distributed algorithm\n", - "\n", - "Now that we have all the configurations, we can instantiate the clients and a controller." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "from nvflare.job_config.api import FedJob\n", - "from nvdo.executors import ConsensusExecutor\n", - "from nvdo.controllers import AlgorithmController\n", - "\n", - "# Create job\n", - "job = FedJob(name=\"consensus\")\n", - "\n", - "# send controller to server\n", - "controller = AlgorithmController(config=config)\n", - "job.to_server(controller)\n", - "\n", - "# Add clients\n", - "for i in range(num_clients):\n", - " executor = ConsensusExecutor() # the executor will be initialized with a random value\n", - " job.to(executor, f\"site-{i+1}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Finally, we can run the algorithm" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2025-01-29 09:52:48,639 - SimulatorRunner - INFO - Create the Simulator Server.\n", - "2025-01-29 09:52:48,642 - CoreCell - INFO - server: creating listener on tcp://0:52347\n", - "2025-01-29 09:52:48,681 - CoreCell - INFO - server: created backbone external listener for tcp://0:52347\n", - "2025-01-29 09:52:48,681 - ConnectorManager - INFO - 40803: Try start_listener Listener resources: {'secure': False, 'host': 'localhost'}\n", - "2025-01-29 09:52:48,682 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connector [CH00002 PASSIVE tcp://0:12575] is starting\n", - "2025-01-29 09:52:49,183 - CoreCell - INFO - server: created backbone internal listener for tcp://localhost:12575\n", - "2025-01-29 09:52:49,183 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connector [CH00001 PASSIVE tcp://0:52347] is starting\n", - "2025-01-29 09:52:49,184 - SimulatorServer - INFO - max_reg_duration=60.0\n", - "2025-01-29 09:52:49,214 - nvflare.fuel.hci.server.hci - INFO - Starting Admin Server localhost on Port 52348\n", - "2025-01-29 09:52:49,214 - SimulatorRunner - INFO - Deploy the Apps.\n", - "2025-01-29 09:52:49,271 - SimulatorRunner - INFO - Create the simulate clients.\n", - "2025-01-29 09:52:49,273 - Communicator - INFO - Trying to register with server ...\n", - "2025-01-29 09:52:49,274 - ClientManager - INFO - authenticated client site-1\n", - "2025-01-29 09:52:49,274 - ClientManager - INFO - Client: New client site-1@10.2.185.164 joined. Sent token: 52a5b8f8-7212-4b8d-9030-ac9f114421fa. Total clients: 1\n", - "2025-01-29 09:52:49,274 - Communicator - INFO - register RC: ok\n", - "2025-01-29 09:52:49,274 - FederatedClient - INFO - Successfully registered client:site-1 for project simulator_server. Token:52a5b8f8-7212-4b8d-9030-ac9f114421fa SSID:\n", - "2025-01-29 09:52:49,274 - Communicator - INFO - Trying to register with server ...\n", - "2025-01-29 09:52:49,275 - ClientManager - INFO - authenticated client site-2\n", - "2025-01-29 09:52:49,275 - ClientManager - INFO - Client: New client site-2@10.2.185.164 joined. Sent token: 7f091ff0-d372-4f6a-ab12-7abea650e0ed. Total clients: 2\n", - "2025-01-29 09:52:49,275 - Communicator - INFO - register RC: ok\n", - "2025-01-29 09:52:49,275 - FederatedClient - INFO - Successfully registered client:site-2 for project simulator_server. Token:7f091ff0-d372-4f6a-ab12-7abea650e0ed SSID:\n", - "2025-01-29 09:52:49,275 - Communicator - INFO - Trying to register with server ...\n", - "2025-01-29 09:52:49,275 - ClientManager - INFO - authenticated client site-3\n", - "2025-01-29 09:52:49,275 - ClientManager - INFO - Client: New client site-3@10.2.185.164 joined. Sent token: 17b50b63-378d-402c-9537-1d09edf1d9b5. Total clients: 3\n", - "2025-01-29 09:52:49,275 - Communicator - INFO - register RC: ok\n", - "2025-01-29 09:52:49,276 - FederatedClient - INFO - Successfully registered client:site-3 for project simulator_server. Token:17b50b63-378d-402c-9537-1d09edf1d9b5 SSID:\n", - "2025-01-29 09:52:49,276 - Communicator - INFO - Trying to register with server ...\n", - "2025-01-29 09:52:49,276 - ClientManager - INFO - authenticated client site-4\n", - "2025-01-29 09:52:49,276 - ClientManager - INFO - Client: New client site-4@10.2.185.164 joined. Sent token: 8cd02ee9-686e-4f58-9e18-10b48a4f0239. Total clients: 4\n", - "2025-01-29 09:52:49,276 - Communicator - INFO - register RC: ok\n", - "2025-01-29 09:52:49,276 - FederatedClient - INFO - Successfully registered client:site-4 for project simulator_server. Token:8cd02ee9-686e-4f58-9e18-10b48a4f0239 SSID:\n", - "2025-01-29 09:52:49,277 - Communicator - INFO - Trying to register with server ...\n", - "2025-01-29 09:52:49,277 - ClientManager - INFO - authenticated client site-5\n", - "2025-01-29 09:52:49,277 - ClientManager - INFO - Client: New client site-5@10.2.185.164 joined. Sent token: d757d2ec-68a5-40a4-808f-9f5dc141903d. Total clients: 5\n", - "2025-01-29 09:52:49,277 - Communicator - INFO - register RC: ok\n", - "2025-01-29 09:52:49,277 - FederatedClient - INFO - Successfully registered client:site-5 for project simulator_server. Token:d757d2ec-68a5-40a4-808f-9f5dc141903d SSID:\n", - "2025-01-29 09:52:49,277 - SimulatorRunner - INFO - Set the client status ready.\n", - "2025-01-29 09:52:49,277 - SimulatorRunner - INFO - Deploy and start the Server App.\n", - "2025-01-29 09:52:49,278 - Cell - INFO - Register blob CB for channel='server_command', topic='*'\n", - "2025-01-29 09:52:49,278 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\n", - "2025-01-29 09:52:49,278 - ServerCommandAgent - INFO - ServerCommandAgent cell register_request_cb: server.simulate_job\n", - "2025-01-29 09:52:49,287 - AuxRunner - INFO - registered aux handler for topic __sync_runner__\n", - "2025-01-29 09:52:49,287 - AuxRunner - INFO - registered aux handler for topic __job_heartbeat__\n", - "2025-01-29 09:52:49,287 - AuxRunner - INFO - registered aux handler for topic __task_check__\n", - "2025-01-29 09:52:49,287 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\n", - "2025-01-29 09:52:49,287 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\n", - "2025-01-29 09:52:49,287 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\n", - "2025-01-29 09:52:49,287 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job]: Server runner starting ...\n", - "2025-01-29 09:52:49,287 - AuxRunner - INFO - registered aux handler for topic fed.event\n", - "2025-01-29 09:52:49,287 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job]: starting workflow controller () ...\n", - "2025-01-29 09:52:49,287 - AlgorithmController - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: BaseController started\n", - "2025-01-29 09:52:49,287 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: Workflow controller () started\n", - "2025-01-29 09:52:49,287 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: scheduled task config\n", - "2025-01-29 09:52:50,281 - SimulatorClientRunner - INFO - Start the clients run simulation.\n", - "2025-01-29 09:52:51,282 - SimulatorClientRunner - INFO - Simulate Run client: site-1 on GPU group: None\n", - "2025-01-29 09:52:51,282 - SimulatorClientRunner - INFO - Simulate Run client: site-2 on GPU group: None\n", - "2025-01-29 09:52:51,282 - SimulatorClientRunner - INFO - Simulate Run client: site-3 on GPU group: None\n", - "2025-01-29 09:52:51,282 - SimulatorClientRunner - INFO - Simulate Run client: site-4 on GPU group: None\n", - "2025-01-29 09:52:51,288 - SimulatorClientRunner - INFO - Simulate Run client: site-5 on GPU group: None\n", - "2025-01-29 09:52:52,300 - ClientTaskWorker - INFO - ClientTaskWorker started to run\n", - "2025-01-29 09:52:52,300 - ClientTaskWorker - INFO - ClientTaskWorker started to run\n", - "2025-01-29 09:52:52,300 - ClientTaskWorker - INFO - ClientTaskWorker started to run\n", - "2025-01-29 09:52:52,300 - ClientTaskWorker - INFO - ClientTaskWorker started to run\n", - "2025-01-29 09:52:52,300 - ClientTaskWorker - INFO - ClientTaskWorker started to run\n", - "2025-01-29 09:52:52,341 - CoreCell - INFO - site-5.simulate_job: created backbone external connector to tcp://localhost:52347\n", - "2025-01-29 09:52:52,341 - CoreCell - INFO - site-2.simulate_job: created backbone external connector to tcp://localhost:52347\n", - "2025-01-29 09:52:52,341 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:52347] is starting\n", - "2025-01-29 09:52:52,341 - CoreCell - INFO - site-3.simulate_job: created backbone external connector to tcp://localhost:52347\n", - "2025-01-29 09:52:52,341 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:52347] is starting\n", - "2025-01-29 09:52:52,341 - CoreCell - INFO - site-4.simulate_job: created backbone external connector to tcp://localhost:52347\n", - "2025-01-29 09:52:52,341 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:52347] is starting\n", - "2025-01-29 09:52:52,341 - CoreCell - INFO - site-1.simulate_job: created backbone external connector to tcp://localhost:52347\n", - "2025-01-29 09:52:52,341 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:52347] is starting\n", - "2025-01-29 09:52:52,341 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:52347] is starting\n", - "2025-01-29 09:52:52,342 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00002 127.0.0.1:52432 => 127.0.0.1:52347] is created: PID: 40816\n", - "2025-01-29 09:52:52,342 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00002 127.0.0.1:52433 => 127.0.0.1:52347] is created: PID: 40817\n", - "2025-01-29 09:52:52,342 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00002 127.0.0.1:52434 => 127.0.0.1:52347] is created: PID: 40818\n", - "2025-01-29 09:52:52,342 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00002 127.0.0.1:52431 => 127.0.0.1:52347] is created: PID: 40814\n", - "2025-01-29 09:52:52,342 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00002 127.0.0.1:52435 => 127.0.0.1:52347] is created: PID: 40815\n", - "2025-01-29 09:52:52,342 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00008 127.0.0.1:52347 <= 127.0.0.1:52432] is created: PID: 40803\n", - "2025-01-29 09:52:52,343 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00009 127.0.0.1:52347 <= 127.0.0.1:52433] is created: PID: 40803\n", - "2025-01-29 09:52:52,343 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00010 127.0.0.1:52347 <= 127.0.0.1:52434] is created: PID: 40803\n", - "2025-01-29 09:52:52,343 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00011 127.0.0.1:52347 <= 127.0.0.1:52431] is created: PID: 40803\n", - "2025-01-29 09:52:52,343 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00012 127.0.0.1:52347 <= 127.0.0.1:52435] is created: PID: 40803\n", - "2025-01-29 09:52:52,465 - AuxRunner - INFO - registered aux handler for topic __end_run__\n", - "2025-01-29 09:52:52,465 - AuxRunner - INFO - registered aux handler for topic __end_run__\n", - "2025-01-29 09:52:52,465 - AuxRunner - INFO - registered aux handler for topic __do_task__\n", - "2025-01-29 09:52:52,465 - AuxRunner - INFO - registered aux handler for topic __do_task__\n", - "2025-01-29 09:52:52,465 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\n", - "2025-01-29 09:52:52,465 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\n", - "2025-01-29 09:52:52,465 - AuxRunner - INFO - registered aux handler for topic __end_run__\n", - "2025-01-29 09:52:52,465 - AuxRunner - INFO - registered aux handler for topic __do_task__\n", - "2025-01-29 09:52:52,465 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\n", - "2025-01-29 09:52:52,466 - AuxRunner - INFO - registered aux handler for topic __end_run__\n", - "2025-01-29 09:52:52,466 - AuxRunner - INFO - registered aux handler for topic __do_task__\n", - "2025-01-29 09:52:52,467 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\n", - "2025-01-29 09:52:52,467 - AuxRunner - INFO - registered aux handler for topic __end_run__\n", - "2025-01-29 09:52:52,467 - AuxRunner - INFO - registered aux handler for topic __do_task__\n", - "2025-01-29 09:52:52,467 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\n", - "2025-01-29 09:52:52,972 - Cell - INFO - broadcast: channel='aux_communication', topic='__sync_runner__', targets=['server.simulate_job'], timeout=2.0\n", - "2025-01-29 09:52:52,972 - Cell - INFO - broadcast: channel='aux_communication', topic='__sync_runner__', targets=['server.simulate_job'], timeout=2.0\n", - "2025-01-29 09:52:52,972 - Cell - INFO - broadcast: channel='aux_communication', topic='__sync_runner__', targets=['server.simulate_job'], timeout=2.0\n", - "2025-01-29 09:52:52,972 - Cell - INFO - broadcast: channel='aux_communication', topic='__sync_runner__', targets=['server.simulate_job'], timeout=2.0\n", - "2025-01-29 09:52:52,974 - Cell - INFO - broadcast: channel='aux_communication', topic='__sync_runner__', targets=['server.simulate_job'], timeout=2.0\n", - "2025-01-29 09:52:52,982 - ClientRunner - INFO - [identity=site-4, run=simulate_job]: synced to Server Runner in 0.5146529674530029 seconds\n", - "2025-01-29 09:52:52,982 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\n", - "2025-01-29 09:52:52,982 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\n", - "2025-01-29 09:52:52,983 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\n", - "2025-01-29 09:52:52,983 - AuxRunner - INFO - registered aux handler for topic send_value\n", - "2025-01-29 09:52:52,983 - AuxRunner - INFO - registered aux handler for topic fed.event\n", - "2025-01-29 09:52:52,983 - ClientRunner - INFO - [identity=site-4, run=simulate_job]: client runner started\n", - "2025-01-29 09:52:52,984 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-4\n", - "2025-01-29 09:52:52,984 - ClientRunner - INFO - [identity=site-5, run=simulate_job]: synced to Server Runner in 0.5164279937744141 seconds\n", - "2025-01-29 09:52:52,985 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\n", - "2025-01-29 09:52:52,985 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\n", - "2025-01-29 09:52:52,985 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\n", - "2025-01-29 09:52:52,985 - AuxRunner - INFO - registered aux handler for topic send_value\n", - "2025-01-29 09:52:52,985 - ClientRunner - INFO - [identity=site-2, run=simulate_job]: synced to Server Runner in 0.5183467864990234 seconds\n", - "2025-01-29 09:52:52,985 - AuxRunner - INFO - registered aux handler for topic fed.event\n", - "2025-01-29 09:52:52,985 - ClientRunner - INFO - [identity=site-5, run=simulate_job]: client runner started\n", - "2025-01-29 09:52:52,985 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-5\n", - "2025-01-29 09:52:52,985 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\n", - "2025-01-29 09:52:52,986 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\n", - "2025-01-29 09:52:52,986 - ClientRunner - INFO - [identity=site-1, run=simulate_job]: synced to Server Runner in 0.5172262191772461 seconds\n", - "2025-01-29 09:52:52,986 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\n", - "2025-01-29 09:52:52,986 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\n", - "2025-01-29 09:52:52,986 - ClientRunner - INFO - [identity=site-3, run=simulate_job]: synced to Server Runner in 0.5189590454101562 seconds\n", - "2025-01-29 09:52:52,986 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\n", - "2025-01-29 09:52:52,986 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\n", - "2025-01-29 09:52:52,986 - AuxRunner - INFO - registered aux handler for topic send_value\n", - "2025-01-29 09:52:52,986 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\n", - "2025-01-29 09:52:52,986 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\n", - "2025-01-29 09:52:52,986 - AuxRunner - INFO - registered aux handler for topic fed.event\n", - "2025-01-29 09:52:52,986 - ClientRunner - INFO - [identity=site-2, run=simulate_job]: client runner started\n", - "2025-01-29 09:52:52,986 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-2\n", - "2025-01-29 09:52:52,986 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\n", - "2025-01-29 09:52:52,986 - AuxRunner - INFO - registered aux handler for topic send_value\n", - "2025-01-29 09:52:52,987 - AuxRunner - INFO - registered aux handler for topic fed.event\n", - "2025-01-29 09:52:52,987 - ClientRunner - INFO - [identity=site-1, run=simulate_job]: client runner started\n", - "2025-01-29 09:52:52,987 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-1\n", - "2025-01-29 09:52:52,987 - AuxRunner - INFO - registered aux handler for topic send_value\n", - "2025-01-29 09:52:52,987 - AuxRunner - INFO - registered aux handler for topic fed.event\n", - "2025-01-29 09:52:52,987 - ClientRunner - INFO - [identity=site-3, run=simulate_job]: client runner started\n", - "2025-01-29 09:52:52,987 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-3\n", - "2025-01-29 09:52:52,991 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=config, task_id=eff69353-3cd2-4d7f-8605-865b815810e6]: assigned task to client site-1: name=config, id=eff69353-3cd2-4d7f-8605-865b815810e6\n", - "2025-01-29 09:52:52,991 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=config, task_id=eff69353-3cd2-4d7f-8605-865b815810e6]: sent task assignment to client. client_name:site-1 task_id:eff69353-3cd2-4d7f-8605-865b815810e6\n", - "2025-01-29 09:52:52,991 - GetTaskCommand - INFO - return task to client. client_name: site-1 task_name: config task_id: eff69353-3cd2-4d7f-8605-865b815810e6 sharable_header_task_id: eff69353-3cd2-4d7f-8605-865b815810e6\n", - "2025-01-29 09:52:52,992 - Communicator - INFO - Received from simulator_server server. getTask: config size: 697B (697 Bytes) time: 0.004989 seconds\n", - "2025-01-29 09:52:52,992 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \n", - "2025-01-29 09:52:52,992 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: got task assignment: name=config, id=eff69353-3cd2-4d7f-8605-865b815810e6\n", - "2025-01-29 09:52:52,992 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=eff69353-3cd2-4d7f-8605-865b815810e6]: invoking task executor ConsensusExecutor\n", - "2025-01-29 09:52:52,993 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=eff69353-3cd2-4d7f-8605-865b815810e6]: finished processing task\n", - "2025-01-29 09:52:52,993 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=eff69353-3cd2-4d7f-8605-865b815810e6]: try #1: sending task result to server\n", - "2025-01-29 09:52:52,993 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=eff69353-3cd2-4d7f-8605-865b815810e6]: checking task ...\n", - "2025-01-29 09:52:52,993 - Cell - INFO - broadcast: channel='aux_communication', topic='__task_check__', targets=['server.simulate_job'], timeout=5.0\n", - "2025-01-29 09:52:52,994 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=eff69353-3cd2-4d7f-8605-865b815810e6]: start to send task result to server\n", - "2025-01-29 09:52:52,994 - FederatedClient - INFO - Starting to push execute result.\n", - "2025-01-29 09:52:52,995 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job]: got result from client site-1 for task: name=config, id=eff69353-3cd2-4d7f-8605-865b815810e6\n", - "2025-01-29 09:52:52,996 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=eff69353-3cd2-4d7f-8605-865b815810e6]: finished processing client result by controller\n", - "2025-01-29 09:52:52,996 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-1 task_id:eff69353-3cd2-4d7f-8605-865b815810e6\n", - "2025-01-29 09:52:52,996 - Communicator - INFO - SubmitUpdate size: 606B (606 Bytes). time: 0.001696 seconds\n", - "2025-01-29 09:52:52,996 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=eff69353-3cd2-4d7f-8605-865b815810e6]: task result sent to server\n", - "2025-01-29 09:52:52,996 - ClientTaskWorker - INFO - Finished one task run for client: site-1 interval: 2 task_processed: True\n", - "2025-01-29 09:52:53,156 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: task config exit with status TaskCompletionStatus.OK\n", - "2025-01-29 09:52:53,157 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: scheduled task config\n", - "2025-01-29 09:52:53,501 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=config, task_id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc]: assigned task to client site-2: name=config, id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc\n", - "2025-01-29 09:52:53,501 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=config, task_id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc]: sent task assignment to client. client_name:site-2 task_id:6762b9e4-f062-4de8-80b3-c2ee6f0713fc\n", - "2025-01-29 09:52:53,502 - GetTaskCommand - INFO - return task to client. client_name: site-2 task_name: config task_id: 6762b9e4-f062-4de8-80b3-c2ee6f0713fc sharable_header_task_id: 6762b9e4-f062-4de8-80b3-c2ee6f0713fc\n", - "2025-01-29 09:52:53,504 - Communicator - INFO - Received from simulator_server server. getTask: config size: 724B (724 Bytes) time: 0.008325 seconds\n", - "2025-01-29 09:52:53,505 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \n", - "2025-01-29 09:52:53,505 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: got task assignment: name=config, id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc\n", - "2025-01-29 09:52:53,506 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc]: invoking task executor ConsensusExecutor\n", - "2025-01-29 09:52:53,506 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc]: finished processing task\n", - "2025-01-29 09:52:53,506 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc]: try #1: sending task result to server\n", - "2025-01-29 09:52:53,506 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc]: checking task ...\n", - "2025-01-29 09:52:53,507 - Cell - INFO - broadcast: channel='aux_communication', topic='__task_check__', targets=['server.simulate_job'], timeout=5.0\n", - "2025-01-29 09:52:53,510 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc]: start to send task result to server\n", - "2025-01-29 09:52:53,510 - FederatedClient - INFO - Starting to push execute result.\n", - "2025-01-29 09:52:53,511 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job]: got result from client site-2 for task: name=config, id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc\n", - "2025-01-29 09:52:53,512 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc]: finished processing client result by controller\n", - "2025-01-29 09:52:53,512 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-2 task_id:6762b9e4-f062-4de8-80b3-c2ee6f0713fc\n", - "2025-01-29 09:52:53,513 - Communicator - INFO - SubmitUpdate size: 606B (606 Bytes). time: 0.002503 seconds\n", - "2025-01-29 09:52:53,513 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6762b9e4-f062-4de8-80b3-c2ee6f0713fc]: task result sent to server\n", - "2025-01-29 09:52:53,513 - ClientTaskWorker - INFO - Finished one task run for client: site-2 interval: 2 task_processed: True\n", - "2025-01-29 09:52:53,566 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: task config exit with status TaskCompletionStatus.OK\n", - "2025-01-29 09:52:53,764 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: scheduled task config\n", - "2025-01-29 09:52:54,012 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=config, task_id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6]: assigned task to client site-3: name=config, id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6\n", - "2025-01-29 09:52:54,013 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=config, task_id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6]: sent task assignment to client. client_name:site-3 task_id:cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6\n", - "2025-01-29 09:52:54,013 - GetTaskCommand - INFO - return task to client. client_name: site-3 task_name: config task_id: cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6 sharable_header_task_id: cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6\n", - "2025-01-29 09:52:54,015 - Communicator - INFO - Received from simulator_server server. getTask: config size: 724B (724 Bytes) time: 0.008097 seconds\n", - "2025-01-29 09:52:54,016 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \n", - "2025-01-29 09:52:54,016 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: got task assignment: name=config, id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6\n", - "2025-01-29 09:52:54,016 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6]: invoking task executor ConsensusExecutor\n", - "2025-01-29 09:52:54,017 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6]: finished processing task\n", - "2025-01-29 09:52:54,017 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6]: try #1: sending task result to server\n", - "2025-01-29 09:52:54,017 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6]: checking task ...\n", - "2025-01-29 09:52:54,017 - Cell - INFO - broadcast: channel='aux_communication', topic='__task_check__', targets=['server.simulate_job'], timeout=5.0\n", - "2025-01-29 09:52:54,021 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6]: start to send task result to server\n", - "2025-01-29 09:52:54,021 - FederatedClient - INFO - Starting to push execute result.\n", - "2025-01-29 09:52:54,022 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job]: got result from client site-3 for task: name=config, id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6\n", - "2025-01-29 09:52:54,023 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6]: finished processing client result by controller\n", - "2025-01-29 09:52:54,023 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-3 task_id:cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6\n", - "2025-01-29 09:52:54,024 - Communicator - INFO - SubmitUpdate size: 606B (606 Bytes). time: 0.002916 seconds\n", - "2025-01-29 09:52:54,024 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cc4982bd-cb5c-43d3-ae2f-acd52fa7e6b6]: task result sent to server\n", - "2025-01-29 09:52:54,024 - ClientTaskWorker - INFO - Finished one task run for client: site-3 interval: 2 task_processed: True\n", - "2025-01-29 09:52:54,182 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: task config exit with status TaskCompletionStatus.OK\n", - "2025-01-29 09:52:54,375 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: scheduled task config\n", - "2025-01-29 09:52:56,016 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=config, task_id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768]: assigned task to client site-4: name=config, id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768\n", - "2025-01-29 09:52:56,016 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=config, task_id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768]: sent task assignment to client. client_name:site-4 task_id:c4a9e9bb-4477-42d9-9cbc-6e83679ca768\n", - "2025-01-29 09:52:56,016 - GetTaskCommand - INFO - return task to client. client_name: site-4 task_name: config task_id: c4a9e9bb-4477-42d9-9cbc-6e83679ca768 sharable_header_task_id: c4a9e9bb-4477-42d9-9cbc-6e83679ca768\n", - "2025-01-29 09:52:56,017 - Communicator - INFO - Received from simulator_server server. getTask: config size: 724B (724 Bytes) time: 0.001911 seconds\n", - "2025-01-29 09:52:56,017 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \n", - "2025-01-29 09:52:56,017 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: got task assignment: name=config, id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768\n", - "2025-01-29 09:52:56,017 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768]: invoking task executor ConsensusExecutor\n", - "2025-01-29 09:52:56,018 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768]: finished processing task\n", - "2025-01-29 09:52:56,018 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768]: try #1: sending task result to server\n", - "2025-01-29 09:52:56,018 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768]: checking task ...\n", - "2025-01-29 09:52:56,018 - Cell - INFO - broadcast: channel='aux_communication', topic='__task_check__', targets=['server.simulate_job'], timeout=5.0\n", - "2025-01-29 09:52:56,019 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768]: start to send task result to server\n", - "2025-01-29 09:52:56,019 - FederatedClient - INFO - Starting to push execute result.\n", - "2025-01-29 09:52:56,020 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job]: got result from client site-4 for task: name=config, id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768\n", - "2025-01-29 09:52:56,020 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768]: finished processing client result by controller\n", - "2025-01-29 09:52:56,020 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-4 task_id:c4a9e9bb-4477-42d9-9cbc-6e83679ca768\n", - "2025-01-29 09:52:56,020 - Communicator - INFO - SubmitUpdate size: 606B (606 Bytes). time: 0.001337 seconds\n", - "2025-01-29 09:52:56,021 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=c4a9e9bb-4477-42d9-9cbc-6e83679ca768]: task result sent to server\n", - "2025-01-29 09:52:56,021 - ClientTaskWorker - INFO - Finished one task run for client: site-4 interval: 2 task_processed: True\n", - "2025-01-29 09:52:56,023 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: task config exit with status TaskCompletionStatus.OK\n", - "2025-01-29 09:52:56,217 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: scheduled task config\n", - "2025-01-29 09:52:56,522 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=config, task_id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652]: assigned task to client site-5: name=config, id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652\n", - "2025-01-29 09:52:56,522 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=config, task_id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652]: sent task assignment to client. client_name:site-5 task_id:7f3c2f75-5a3d-4dde-b7da-bb787d2bc652\n", - "2025-01-29 09:52:56,522 - GetTaskCommand - INFO - return task to client. client_name: site-5 task_name: config task_id: 7f3c2f75-5a3d-4dde-b7da-bb787d2bc652 sharable_header_task_id: 7f3c2f75-5a3d-4dde-b7da-bb787d2bc652\n", - "2025-01-29 09:52:56,523 - Communicator - INFO - Received from simulator_server server. getTask: config size: 697B (697 Bytes) time: 0.002758 seconds\n", - "2025-01-29 09:52:56,523 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \n", - "2025-01-29 09:52:56,523 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: got task assignment: name=config, id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652\n", - "2025-01-29 09:52:56,524 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652]: invoking task executor ConsensusExecutor\n", - "2025-01-29 09:52:56,524 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652]: finished processing task\n", - "2025-01-29 09:52:56,524 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652]: try #1: sending task result to server\n", - "2025-01-29 09:52:56,524 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652]: checking task ...\n", - "2025-01-29 09:52:56,524 - Cell - INFO - broadcast: channel='aux_communication', topic='__task_check__', targets=['server.simulate_job'], timeout=5.0\n", - "2025-01-29 09:52:56,526 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652]: start to send task result to server\n", - "2025-01-29 09:52:56,526 - FederatedClient - INFO - Starting to push execute result.\n", - "2025-01-29 09:52:56,527 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job]: got result from client site-5 for task: name=config, id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652\n", - "2025-01-29 09:52:56,527 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652]: finished processing client result by controller\n", - "2025-01-29 09:52:56,527 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-5 task_id:7f3c2f75-5a3d-4dde-b7da-bb787d2bc652\n", - "2025-01-29 09:52:56,528 - Communicator - INFO - SubmitUpdate size: 606B (606 Bytes). time: 0.001539 seconds\n", - "2025-01-29 09:52:56,528 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7f3c2f75-5a3d-4dde-b7da-bb787d2bc652]: task result sent to server\n", - "2025-01-29 09:52:56,528 - ClientTaskWorker - INFO - Finished one task run for client: site-5 interval: 2 task_processed: True\n", - "2025-01-29 09:52:56,637 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: task config exit with status TaskCompletionStatus.OK\n", - "2025-01-29 09:52:56,832 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: scheduled task run_algorithm\n", - "2025-01-29 09:52:57,043 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=run_algorithm, task_id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb]: assigned task to client site-3: name=run_algorithm, id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb\n", - "2025-01-29 09:52:57,044 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=run_algorithm, task_id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb]: sent task assignment to client. client_name:site-3 task_id:6b6da7a8-398f-41bc-859c-7fc227cb0ddb\n", - "2025-01-29 09:52:57,044 - GetTaskCommand - INFO - return task to client. client_name: site-3 task_name: run_algorithm task_id: 6b6da7a8-398f-41bc-859c-7fc227cb0ddb sharable_header_task_id: 6b6da7a8-398f-41bc-859c-7fc227cb0ddb\n", - "2025-01-29 09:52:57,045 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 685B (685 Bytes) time: 0.004508 seconds\n", - "2025-01-29 09:52:57,046 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \n", - "2025-01-29 09:52:57,046 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: got task assignment: name=run_algorithm, id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb\n", - "2025-01-29 09:52:57,046 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb]: invoking task executor ConsensusExecutor\n", - "2025-01-29 09:52:57,046 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,024 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=run_algorithm, task_id=effc72b6-cc30-4c3d-af4c-37906a2c853f]: assigned task to client site-1: name=run_algorithm, id=effc72b6-cc30-4c3d-af4c-37906a2c853f\n", - "2025-01-29 09:52:58,024 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=run_algorithm, task_id=effc72b6-cc30-4c3d-af4c-37906a2c853f]: sent task assignment to client. client_name:site-1 task_id:effc72b6-cc30-4c3d-af4c-37906a2c853f\n", - "2025-01-29 09:52:58,024 - GetTaskCommand - INFO - return task to client. client_name: site-1 task_name: run_algorithm task_id: effc72b6-cc30-4c3d-af4c-37906a2c853f sharable_header_task_id: effc72b6-cc30-4c3d-af4c-37906a2c853f\n", - "2025-01-29 09:52:58,026 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 685B (685 Bytes) time: 0.004612 seconds\n", - "2025-01-29 09:52:58,026 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \n", - "2025-01-29 09:52:58,026 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: got task assignment: name=run_algorithm, id=effc72b6-cc30-4c3d-af4c-37906a2c853f\n", - "2025-01-29 09:52:58,026 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=effc72b6-cc30-4c3d-af4c-37906a2c853f]: invoking task executor ConsensusExecutor\n", - "2025-01-29 09:52:58,027 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,028 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=run_algorithm, task_id=29e31196-da1c-494c-8185-ae62822065f0]: assigned task to client site-4: name=run_algorithm, id=29e31196-da1c-494c-8185-ae62822065f0\n", - "2025-01-29 09:52:58,028 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=run_algorithm, task_id=29e31196-da1c-494c-8185-ae62822065f0]: sent task assignment to client. client_name:site-4 task_id:29e31196-da1c-494c-8185-ae62822065f0\n", - "2025-01-29 09:52:58,028 - GetTaskCommand - INFO - return task to client. client_name: site-4 task_name: run_algorithm task_id: 29e31196-da1c-494c-8185-ae62822065f0 sharable_header_task_id: 29e31196-da1c-494c-8185-ae62822065f0\n", - "2025-01-29 09:52:58,029 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 685B (685 Bytes) time: 0.003091 seconds\n", - "2025-01-29 09:52:58,029 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \n", - "2025-01-29 09:52:58,029 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: got task assignment: name=run_algorithm, id=29e31196-da1c-494c-8185-ae62822065f0\n", - "2025-01-29 09:52:58,030 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29e31196-da1c-494c-8185-ae62822065f0]: invoking task executor ConsensusExecutor\n", - "2025-01-29 09:52:58,030 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,030 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,531 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=run_algorithm, task_id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd]: assigned task to client site-5: name=run_algorithm, id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd\n", - "2025-01-29 09:52:58,532 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=run_algorithm, task_id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd]: sent task assignment to client. client_name:site-5 task_id:4c21ac3e-5360-4056-b30b-0ec27ea0aacd\n", - "2025-01-29 09:52:58,532 - GetTaskCommand - INFO - return task to client. client_name: site-5 task_name: run_algorithm task_id: 4c21ac3e-5360-4056-b30b-0ec27ea0aacd sharable_header_task_id: 4c21ac3e-5360-4056-b30b-0ec27ea0aacd\n", - "2025-01-29 09:52:58,533 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=run_algorithm, task_id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc]: assigned task to client site-2: name=run_algorithm, id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc\n", - "2025-01-29 09:52:58,533 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=run_algorithm, task_id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc]: sent task assignment to client. client_name:site-2 task_id:7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc\n", - "2025-01-29 09:52:58,533 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 685B (685 Bytes) time: 0.002873 seconds\n", - "2025-01-29 09:52:58,533 - GetTaskCommand - INFO - return task to client. client_name: site-2 task_name: run_algorithm task_id: 7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc sharable_header_task_id: 7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc\n", - "2025-01-29 09:52:58,533 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \n", - "2025-01-29 09:52:58,533 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: got task assignment: name=run_algorithm, id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd\n", - "2025-01-29 09:52:58,533 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd]: invoking task executor ConsensusExecutor\n", - "2025-01-29 09:52:58,534 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,534 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 685B (685 Bytes) time: 0.003075 seconds\n", - "2025-01-29 09:52:58,534 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \n", - "2025-01-29 09:52:58,534 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: got task assignment: name=run_algorithm, id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc\n", - "2025-01-29 09:52:58,534 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc]: invoking task executor ConsensusExecutor\n", - "2025-01-29 09:52:58,534 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,536 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,537 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,537 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,538 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,538 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,539 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,541 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,541 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,541 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,542 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,543 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,544 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,544 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,544 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,545 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,546 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,547 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,547 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,547 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,548 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,549 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,549 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,549 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,550 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,551 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,552 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,552 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,552 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,552 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,553 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,554 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,554 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,554 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,554 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,556 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,556 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,557 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,557 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,557 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,558 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,558 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,559 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,559 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,559 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,560 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,560 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,561 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,561 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,561 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,562 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,562 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,563 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,563 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,563 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,564 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,565 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,565 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,565 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,566 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,566 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,567 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,567 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,567 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,568 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,568 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,569 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,569 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,570 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,570 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,571 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,571 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,571 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,572 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,572 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,573 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,573 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,573 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,574 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,574 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,575 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,576 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,576 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,576 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,576 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,577 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,578 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,578 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,578 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,578 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,579 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,580 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,580 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,580 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,580 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,581 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,581 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,582 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,582 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,582 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,583 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,584 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,584 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,584 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,584 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,585 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,586 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,586 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,586 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,586 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,587 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,588 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,588 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,588 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,589 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,589 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,589 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,590 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,590 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,591 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,591 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,591 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,592 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,592 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,593 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,593 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,594 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,594 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,594 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,594 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,595 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,596 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,596 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,596 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,597 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,597 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,598 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,598 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,599 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,599 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,599 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,600 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,601 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,601 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,601 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,601 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,602 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,603 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,603 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,603 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,604 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,604 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,605 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,605 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,605 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,605 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,607 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,607 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,608 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,608 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,608 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,609 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,609 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,609 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,609 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,610 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,611 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,611 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,611 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,611 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,612 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,613 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,613 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,613 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,613 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,614 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,615 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,615 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,615 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,615 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,616 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,617 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,617 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,617 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,617 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,617 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,618 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,619 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,619 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,619 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,619 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,620 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,621 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,621 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,621 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,621 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,622 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,622 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,623 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,623 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,623 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,624 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,624 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,624 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,625 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,625 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,626 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,626 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,626 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,627 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,627 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,628 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,629 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,629 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,629 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,629 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,630 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,630 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,630 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,631 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,632 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,632 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,633 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,633 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,633 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,634 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,634 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,635 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,635 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,635 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,635 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,637 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,637 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,637 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,637 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,637 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,638 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,639 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,639 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,639 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,640 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,640 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,640 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-1.simulate_job', 'site-2.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,641 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-3.simulate_job', 'site-4.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,641 - Cell - INFO - broadcast: channel='aux_communication', topic='send_value', targets=['site-2.simulate_job', 'site-5.simulate_job'], timeout=10\n", - "2025-01-29 09:52:58,642 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=effc72b6-cc30-4c3d-af4c-37906a2c853f]: finished processing task\n", - "2025-01-29 09:52:58,642 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=effc72b6-cc30-4c3d-af4c-37906a2c853f]: try #1: sending task result to server\n", - "2025-01-29 09:52:58,642 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=effc72b6-cc30-4c3d-af4c-37906a2c853f]: checking task ...\n", - "2025-01-29 09:52:58,642 - Cell - INFO - broadcast: channel='aux_communication', topic='__task_check__', targets=['server.simulate_job'], timeout=5.0\n", - "2025-01-29 09:52:58,643 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb]: finished processing task\n", - "2025-01-29 09:52:58,643 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb]: try #1: sending task result to server\n", - "2025-01-29 09:52:58,643 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb]: checking task ...\n", - "2025-01-29 09:52:58,643 - Cell - INFO - broadcast: channel='aux_communication', topic='__task_check__', targets=['server.simulate_job'], timeout=5.0\n", - "2025-01-29 09:52:58,643 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd]: finished processing task\n", - "2025-01-29 09:52:58,643 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc]: finished processing task\n", - "2025-01-29 09:52:58,643 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd]: try #1: sending task result to server\n", - "2025-01-29 09:52:58,643 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd]: checking task ...\n", - "2025-01-29 09:52:58,643 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc]: try #1: sending task result to server\n", - "2025-01-29 09:52:58,643 - Cell - INFO - broadcast: channel='aux_communication', topic='__task_check__', targets=['server.simulate_job'], timeout=5.0\n", - "2025-01-29 09:52:58,643 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc]: checking task ...\n", - "2025-01-29 09:52:58,643 - Cell - INFO - broadcast: channel='aux_communication', topic='__task_check__', targets=['server.simulate_job'], timeout=5.0\n", - "2025-01-29 09:52:58,643 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29e31196-da1c-494c-8185-ae62822065f0]: finished processing task\n", - "2025-01-29 09:52:58,643 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=effc72b6-cc30-4c3d-af4c-37906a2c853f]: start to send task result to server\n", - "2025-01-29 09:52:58,643 - FederatedClient - INFO - Starting to push execute result.\n", - "2025-01-29 09:52:58,644 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29e31196-da1c-494c-8185-ae62822065f0]: try #1: sending task result to server\n", - "2025-01-29 09:52:58,644 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29e31196-da1c-494c-8185-ae62822065f0]: checking task ...\n", - "2025-01-29 09:52:58,644 - Cell - INFO - broadcast: channel='aux_communication', topic='__task_check__', targets=['server.simulate_job'], timeout=5.0\n", - "2025-01-29 09:52:58,644 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb]: start to send task result to server\n", - "2025-01-29 09:52:58,644 - FederatedClient - INFO - Starting to push execute result.\n", - "2025-01-29 09:52:58,645 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd]: start to send task result to server\n", - "2025-01-29 09:52:58,645 - FederatedClient - INFO - Starting to push execute result.\n", - "2025-01-29 09:52:58,645 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job]: got result from client site-1 for task: name=run_algorithm, id=effc72b6-cc30-4c3d-af4c-37906a2c853f\n", - "2025-01-29 09:52:58,645 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=effc72b6-cc30-4c3d-af4c-37906a2c853f]: finished processing client result by controller\n", - "2025-01-29 09:52:58,645 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-1 task_id:effc72b6-cc30-4c3d-af4c-37906a2c853f\n", - "2025-01-29 09:52:58,645 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc]: start to send task result to server\n", - "2025-01-29 09:52:58,645 - FederatedClient - INFO - Starting to push execute result.\n", - "2025-01-29 09:52:58,646 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job]: got result from client site-3 for task: name=run_algorithm, id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb\n", - "2025-01-29 09:52:58,646 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb]: finished processing client result by controller\n", - "2025-01-29 09:52:58,646 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-3 task_id:6b6da7a8-398f-41bc-859c-7fc227cb0ddb\n", - "2025-01-29 09:52:58,646 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29e31196-da1c-494c-8185-ae62822065f0]: start to send task result to server\n", - "2025-01-29 09:52:58,646 - FederatedClient - INFO - Starting to push execute result.\n", - "2025-01-29 09:52:58,647 - Communicator - INFO - SubmitUpdate size: 613B (613 Bytes). time: 0.003040 seconds\n", - "2025-01-29 09:52:58,647 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=effc72b6-cc30-4c3d-af4c-37906a2c853f]: task result sent to server\n", - "2025-01-29 09:52:58,647 - ClientTaskWorker - INFO - Finished one task run for client: site-1 interval: 2 task_processed: True\n", - "2025-01-29 09:52:58,647 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job]: got result from client site-5 for task: name=run_algorithm, id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd\n", - "2025-01-29 09:52:58,647 - Communicator - INFO - SubmitUpdate size: 613B (613 Bytes). time: 0.002851 seconds\n", - "2025-01-29 09:52:58,647 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6b6da7a8-398f-41bc-859c-7fc227cb0ddb]: task result sent to server\n", - "2025-01-29 09:52:58,647 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job]: got result from client site-2 for task: name=run_algorithm, id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc\n", - "2025-01-29 09:52:58,647 - ClientTaskWorker - INFO - Finished one task run for client: site-3 interval: 2 task_processed: True\n", - "2025-01-29 09:52:58,647 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd]: finished processing client result by controller\n", - "2025-01-29 09:52:58,647 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job]: got result from client site-4 for task: name=run_algorithm, id=29e31196-da1c-494c-8185-ae62822065f0\n", - "2025-01-29 09:52:58,647 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-5 task_id:4c21ac3e-5360-4056-b30b-0ec27ea0aacd\n", - "2025-01-29 09:52:58,647 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc]: finished processing client result by controller\n", - "2025-01-29 09:52:58,647 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-2 task_id:7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc\n", - "2025-01-29 09:52:58,648 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=29e31196-da1c-494c-8185-ae62822065f0]: finished processing client result by controller\n", - "2025-01-29 09:52:58,648 - Communicator - INFO - SubmitUpdate size: 613B (613 Bytes). time: 0.003004 seconds\n", - "2025-01-29 09:52:58,648 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=4c21ac3e-5360-4056-b30b-0ec27ea0aacd]: task result sent to server\n", - "2025-01-29 09:52:58,648 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-4 task_id:29e31196-da1c-494c-8185-ae62822065f0\n", - "2025-01-29 09:52:58,648 - ClientTaskWorker - INFO - Finished one task run for client: site-5 interval: 2 task_processed: True\n", - "2025-01-29 09:52:58,648 - Communicator - INFO - SubmitUpdate size: 613B (613 Bytes). time: 0.002399 seconds\n", - "2025-01-29 09:52:58,648 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=7971d6a9-d2d8-42f8-bac5-42bc07f9bfdc]: task result sent to server\n", - "2025-01-29 09:52:58,648 - ClientTaskWorker - INFO - Finished one task run for client: site-2 interval: 2 task_processed: True\n", - "2025-01-29 09:52:58,648 - Communicator - INFO - SubmitUpdate size: 613B (613 Bytes). time: 0.001776 seconds\n", - "2025-01-29 09:52:58,648 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29e31196-da1c-494c-8185-ae62822065f0]: task result sent to server\n", - "2025-01-29 09:52:58,648 - ClientTaskWorker - INFO - Finished one task run for client: site-4 interval: 2 task_processed: True\n", - "2025-01-29 09:52:58,673 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: task run_algorithm exit with status TaskCompletionStatus.OK\n", - "2025-01-29 09:52:58,870 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: Workflow: controller finalizing ...\n", - "2025-01-29 09:52:58,870 - AlgorithmController - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: BaseController stopped\n", - "2025-01-29 09:52:58,871 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: ABOUT_TO_END_RUN fired\n", - "2025-01-29 09:52:58,873 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: received request from Server to end current RUN\n", - "2025-01-29 09:52:58,874 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: received request from Server to end current RUN\n", - "2025-01-29 09:52:58,874 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: received request from Server to end current RUN\n", - "2025-01-29 09:52:58,874 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: Firing CHECK_END_RUN_READINESS ...\n", - "2025-01-29 09:52:58,875 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: END_RUN fired\n", - "2025-01-29 09:52:58,875 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: received request from Server to end current RUN\n", - "2025-01-29 09:52:58,875 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: received request from Server to end current RUN\n", - "2025-01-29 09:52:58,875 - ReliableMessage - INFO - ReliableMessage is shutdown\n", - "2025-01-29 09:52:58,875 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: Server runner finished.\n", - "2025-01-29 09:52:59,311 - ReliableMessage - INFO - shutdown reliable message monitor\n", - "2025-01-29 09:53:00,650 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job]: server runner is finalizing - asked client to end the run\n", - "2025-01-29 09:53:00,651 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job]: server runner is finalizing - asked client to end the run\n", - "2025-01-29 09:53:00,651 - GetTaskCommand - INFO - return task to client. client_name: site-4 task_name: __end_run__ task_id: sharable_header_task_id: \n", - "2025-01-29 09:53:00,651 - GetTaskCommand - INFO - return task to client. client_name: site-5 task_name: __end_run__ task_id: sharable_header_task_id: \n", - "2025-01-29 09:53:00,652 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \n", - "2025-01-29 09:53:00,652 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: server asked to end the run\n", - "2025-01-29 09:53:00,652 - ClientRunner - INFO - [identity=site-4, run=simulate_job]: started end-run events sequence\n", - "2025-01-29 09:53:00,652 - ClientRunner - INFO - [identity=site-4, run=simulate_job]: ABOUT_TO_END_RUN fired\n", - "2025-01-29 09:53:00,652 - ClientRunner - INFO - [identity=site-4, run=simulate_job]: Firing CHECK_END_RUN_READINESS ...\n", - "2025-01-29 09:53:00,652 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \n", - "2025-01-29 09:53:00,652 - ClientRunner - INFO - [identity=site-4, run=simulate_job]: END_RUN fired\n", - "2025-01-29 09:53:00,652 - ClientTaskWorker - INFO - End the Simulator run.\n", - "2025-01-29 09:53:00,652 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: server asked to end the run\n", - "2025-01-29 09:53:00,652 - ClientRunner - INFO - [identity=site-5, run=simulate_job]: started end-run events sequence\n", - "2025-01-29 09:53:00,652 - ClientRunner - INFO - [identity=site-5, run=simulate_job]: ABOUT_TO_END_RUN fired\n", - "2025-01-29 09:53:00,652 - ClientRunner - INFO - [identity=site-5, run=simulate_job]: Firing CHECK_END_RUN_READINESS ...\n", - "2025-01-29 09:53:00,652 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job]: server runner is finalizing - asked client to end the run\n", - "2025-01-29 09:53:00,652 - ClientRunner - INFO - [identity=site-5, run=simulate_job]: END_RUN fired\n", - "2025-01-29 09:53:00,652 - ClientTaskWorker - INFO - End the Simulator run.\n", - "2025-01-29 09:53:00,652 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job]: server runner is finalizing - asked client to end the run\n", - "2025-01-29 09:53:00,653 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-4 \n", - "2025-01-29 09:53:00,653 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job]: server runner is finalizing - asked client to end the run\n", - "2025-01-29 09:53:00,653 - GetTaskCommand - INFO - return task to client. client_name: site-1 task_name: __end_run__ task_id: sharable_header_task_id: \n", - "2025-01-29 09:53:00,653 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-5 \n", - "2025-01-29 09:53:00,653 - GetTaskCommand - INFO - return task to client. client_name: site-3 task_name: __end_run__ task_id: sharable_header_task_id: \n", - "2025-01-29 09:53:00,653 - GetTaskCommand - INFO - return task to client. client_name: site-2 task_name: __end_run__ task_id: sharable_header_task_id: \n", - "2025-01-29 09:53:00,653 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 40816\n", - "2025-01-29 09:53:00,653 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00008 Not Connected] is closed PID: 40803\n", - "2025-01-29 09:53:00,654 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \n", - "2025-01-29 09:53:00,654 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: server asked to end the run\n", - "2025-01-29 09:53:00,654 - ClientRunner - INFO - [identity=site-1, run=simulate_job]: started end-run events sequence\n", - "2025-01-29 09:53:00,654 - ClientRunner - INFO - [identity=site-1, run=simulate_job]: ABOUT_TO_END_RUN fired\n", - "2025-01-29 09:53:00,654 - ClientRunner - INFO - [identity=site-1, run=simulate_job]: Firing CHECK_END_RUN_READINESS ...\n", - "2025-01-29 09:53:00,654 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 40818\n", - "2025-01-29 09:53:00,654 - ClientRunner - INFO - [identity=site-1, run=simulate_job]: END_RUN fired\n", - "2025-01-29 09:53:00,654 - ClientTaskWorker - INFO - End the Simulator run.\n", - "2025-01-29 09:53:00,654 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00010 Not Connected] is closed PID: 40803\n", - "2025-01-29 09:53:00,654 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \n", - "2025-01-29 09:53:00,654 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: server asked to end the run\n", - "2025-01-29 09:53:00,654 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-1 \n", - "2025-01-29 09:53:00,654 - ClientRunner - INFO - [identity=site-3, run=simulate_job]: started end-run events sequence\n", - "2025-01-29 09:53:00,654 - ClientRunner - INFO - [identity=site-3, run=simulate_job]: ABOUT_TO_END_RUN fired\n", - "2025-01-29 09:53:00,654 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \n", - "2025-01-29 09:53:00,654 - ClientRunner - INFO - [identity=site-3, run=simulate_job]: Firing CHECK_END_RUN_READINESS ...\n", - "2025-01-29 09:53:00,654 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job]: server asked to end the run\n", - "2025-01-29 09:53:00,655 - ClientRunner - INFO - [identity=site-3, run=simulate_job]: END_RUN fired\n", - "2025-01-29 09:53:00,655 - ClientRunner - INFO - [identity=site-2, run=simulate_job]: started end-run events sequence\n", - "2025-01-29 09:53:00,655 - ClientTaskWorker - INFO - End the Simulator run.\n", - "2025-01-29 09:53:00,655 - ClientRunner - INFO - [identity=site-2, run=simulate_job]: ABOUT_TO_END_RUN fired\n", - "2025-01-29 09:53:00,655 - ClientRunner - INFO - [identity=site-2, run=simulate_job]: Firing CHECK_END_RUN_READINESS ...\n", - "2025-01-29 09:53:00,655 - ClientRunner - INFO - [identity=site-2, run=simulate_job]: END_RUN fired\n", - "2025-01-29 09:53:00,655 - ClientTaskWorker - INFO - End the Simulator run.\n", - "2025-01-29 09:53:00,655 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-3 \n", - "2025-01-29 09:53:00,655 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00011 Not Connected] is closed PID: 40803\n", - "2025-01-29 09:53:00,655 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 40814\n", - "2025-01-29 09:53:00,655 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-2 \n", - "2025-01-29 09:53:00,655 - FederatedClient - INFO - Shutting down client run: site-1\n", - "2025-01-29 09:53:00,655 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 40817\n", - "2025-01-29 09:53:00,655 - FederatedClient - INFO - Shutting down client run: site-2\n", - "2025-01-29 09:53:00,656 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00009 Not Connected] is closed PID: 40803\n", - "2025-01-29 09:53:00,656 - FederatedClient - INFO - Shutting down client run: site-3\n", - "2025-01-29 09:53:00,656 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 40815\n", - "2025-01-29 09:53:00,656 - FederatedClient - INFO - Shutting down client run: site-4\n", - "2025-01-29 09:53:00,656 - nvflare.fuel.f3.sfm.conn_manager - INFO - Connection [CN00012 Not Connected] is closed PID: 40803\n", - "2025-01-29 09:53:00,656 - FederatedClient - INFO - Shutting down client run: site-5\n", - "2025-01-29 09:53:00,656 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller]: asked to abort - triggered abort_signal to stop the RUN\n", - "2025-01-29 09:53:01,307 - SimulatorServer - INFO - Server app stopped.\n", - "\n", - "\n", - "2025-01-29 09:53:01,738 - nvflare.fuel.hci.server.hci - INFO - Admin Server localhost on Port 52348 shutdown!\n", - "2025-01-29 09:53:01,738 - SimulatorServer - INFO - shutting down server\n", - "2025-01-29 09:53:01,738 - SimulatorServer - INFO - canceling sync locks\n", - "2025-01-29 09:53:01,738 - SimulatorServer - INFO - server off\n", - "2025-01-29 09:53:05,222 - MPM - INFO - MPM: Good Bye!\n" - ] - } - ], - "source": [ - "# run\n", - "job.export_job(\"./tmp/job_configs\")\n", - "job.simulator_run(\"./tmp/runs/consensus\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now, since in this toy example we have access to both the intial values and the adjacency matrix, we can compute the consensus value at which the clients will converge." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "

Consensus value: 0.5351105719804765\n",
-       "
\n" - ], - "text/plain": [ - "Consensus value: \u001b[1;36m0.5351105719804765\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import pickle\n", - "import torch\n", - "\n", - "from nvdo.utils.topology import get_matrix_steady_state\n", - "\n", - "history = {\n", - " f\"site-{i+1}\": pickle.load(open(f\"tmp/runs/consensus/site-{i+1}/results.pkl\", \"rb\")) for i in range(num_clients)\n", - "}\n", - "x0=torch.tensor([h[0] for name, h in history.items()]).t()\n", - "consensus_value = x0 @ get_matrix_steady_state(adjacency_matrix)\n", - "print(f\"Consensus value: {consensus_value}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "By inspecting the history/results, we can easily see that all the clients successfully converged to the expected consensus value. " - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGzCAYAAAD9pBdvAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAZBFJREFUeJzt3Ql8E2X6B/Bf7jZt6U0LiBzKDYKAIiqCgqC4qCCi6F8Qb8VdFfFAEARdFFw8VlC80D10RVFcb2E5FZFTFERBbkSOFujd5pz/53lzkLRJaaFNWvL7fhwzM3mTTKYh8+R5L52maRqIiIiIokQfrRcmIiIiEgxGiIiIKKoYjBAREVFUMRghIiKiqGIwQkRERFHFYISIiIiiisEIERERRRWDESIiIooqBiNEREQUVQxGiCJMp9PhiSeeqNHnfPvtt9Xz7tq1C3XZs88+i5YtW8JgMKBLly5hy918881o3rx5RI+tLh1Hnz591EIUKxiMUEzyXbzDLd9//z3qoqlTp+Ljjz9GfbRgwQI8/PDDuOCCC/DWW2+p90JEJIw8DRTLpkyZghYtWlTYf+aZZ6Iukgv40KFDcfXVVwftv+mmm3D99dfDYrGgrlq8eDH0ej3efPNNmM3maB8OEdUhDEYopl1++eXo3r076jup9pClLjt06BDi4+MZiBBRBaymIQrD4XAgLS0No0aNqnBfQUEB4uLiMHbs2KCL7a233oqsrCx1X+fOnfGPf/zjhNslSLsSqTLykfXi4mL1nL7qJHlsZW1GXn75ZXTo0EFlTBo3bozRo0cjLy8vqIy0TejYsSM2b96Miy++GFarFU2aNMH06dOrdJ6cTieefPJJnHHGGep15L089thjsNlsQccuVTNy/L5jl2OuDnnsgw8+iKZNm6rXadOmDf72t78h1MTj//73v3Huueeq95KamoqLLrpIVRP5/Pe//8UVV1yhzok8lxy7vAeXy4Xq+tOf/qTawYTSs2fPoGBXzsEll1yChg0bqtdt3749XnnlleO+Rri/79KlS9V+uQ20atUqXHbZZUhOTlbnoHfv3lixYkVQmcLCQtx///3q7yXHIsd06aWXYv369dU8A0Qnj8EIxbT8/Hzk5uYGLYcPH1b3mUwmDB48WLXRsNvtQY+TfXKxlaoRUVpaqi7q//rXv3DjjTeqhppyIZBg4cUXX6yRY5XnlotGr1691Losd955Z9jyEsxI8CEX3BkzZuCaa67Bq6++iv79+6tAK9DRo0fVxUsCKCnbtm1bPPLII/jyyy+Pe1y33XYbJk6ciK5du+L5559XF76nn37af258xy7HLcfvO3YJEKpKAo4rr7xSPb8c53PPPaeCkYceeghjxowJKjt58mRVbSV/P6mGk20JYKSaKPDinpiYqB4rf59u3bqp9/Doo4+iuq677jrs3LkTa9asCdq/e/du1fYo8DxI4NGsWTMVrMl5luO65557MGvWLNQUeZ9ybiVgnjRpkqrakwBUgqDVq1f7y911113qeORzIUGrBNaSufrll19q7FiIqkwjikFvvfWW/JwOuVgsFn+5r7/+Wu379NNPgx4/cOBArWXLlv7tF154QZX797//7d9nt9u1nj17aomJiVpBQYF/v5SbNGmSf3vkyJFas2bNKhyjlCn/TzQhIUGVD/d+du7cqbYPHTqkmc1mrX///prL5fKXmzlzpio3Z84c/77evXurff/85z/9+2w2m5adna1dc801lZ7HDRs2qMfedtttQfvHjh2r9i9evDjofcrxV0X5c/Lxxx+r53vqqaeCyg0dOlTT6XTatm3b1PZvv/2m6fV6bfDgwUHvW7jdbv96SUlJhde88847NavVqpWVlYU9jlDy8/PVZ+bBBx8M2j99+nR1bLt37670dQcMGBD0WfL9TWQJ9/f1WbJkidovt7732KpVK/Wc5d9vixYttEsvvdS/Lzk5WRs9enSl740oUpgZoZgmv0gXLlwYtARmA+TXZEZGBubOnRuURZBy8ovY54svvkB2djaGDx/u3ye/zP/yl7+gqKgIy5Yti+C7Av73v/+pbI6k4aXRqM/tt9+OBg0a4PPPPw8qL1mC//u///NvS7sOqebYsWNHpa8j71uUz05IdYoo/zonSl5H2sTI+Sz/OhLf+f5mkrFyu90qyxH4vkVglZdkAAKrKyQjJpmbkpIS/Prrr9U6Njmf0vbo/fffD6oyks/Meeedh9NPPz3k6/qycpJJkvMs2ydrw4YN+O2333DDDTeoDJ8v2ydVXH379sXy5cvV+REpKSmqOuePP/446dclOllswEoxTS64lTVgNRqNKo397rvvqmoZqWb46KOPVDVHYDAiKflWrVpVuAC2a9fOf38k+V5PqjICSZAh7RvKH89pp50WdLEW0tbip59+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aYiITtiBAwfw5z//GS1btlRzwzRt2hSDBg1SE9gRCc5NU8nMvWzASkR08r/OL7jgAjWx3bPPPqsmunM4HGruGJmR99dff432IVIdwMxIFWbuZddeIqrLiouLwy5lZWVVLltaWnrcstV1zz33qKqC1atX45prrlGT4XXo0AFjxozB999/7y8nM/ReddVVSExMVDP9Dhs2DAcPHvTf/8QTT6BLly7417/+hebNmyM5ORnXX389CgsL/WXmzZungh2ZKC89PR39+vULOuY33nhDTdwXFxeHtm3b4uWXX65QpSET8l188cWwWq3o3Llz0MR9u3fvVhmd1NRUJCQkqPfxxRdf+Cf9k4Ar0Mcff6ye0+fHH39Uz52UlKTeo8wkvHbt2pDn7YYbbsB1110XtE+CuIyMDPzzn/9U2zIB4YUXXqheV97vn/70J2zfvj3s36Iqxyj++9//omvXruo8STZr8uTJcDqdqE0MRiqppkn1BiNHGYwQUR0mF/BwiwQAgRo2bBi27OWXXx5UVi765ctUx5EjR9QFUzIgcvEuz3dhdLvdKhCR8suWLcPChQuxY8eOChdjudDKxfOzzz5Ti5R95pln1H379+/H8OHDccstt+CXX37B0qVLMWTIEP90Hu+88w4mTpyIv/71r+r+qVOn4vHHH8c//vGPoNcYP348xo4dq9pZSOAkz+m7EMv7sNlsWL58OTZu3Ihp06ZV65zceOONOO2007BmzRqsW7cOjz76KEwmz6Ssocp++umnKCoq8u+TbFJJSQkGDx6stiXQkqBOAhqp8tLr9eo+OZ8n6ptvvsGIESNw3333YfPmzXj11VdVECPnrVZp9UB+fr58mtRtbXIVF2ub27RVi7OwSNt6oEBr9shn2llPfF2rr0tEdDylpaXa5s2b1W158v0Ybhk4cGBQWavVGrZs7969g8pmZGRUKFMdq1atUo/56KOPKi23YMECzWAwaHv27PHv+/nnn9VjV69erbYnTZqkjr2goMBf5qGHHtJ69Oih1tetW6fK79q1K+RrnHHGGdq7774btO/JJ5/UevbsqdZ37typHv/GG29UOIZffvlFbXfq1El74oknQj7/W2+9pSUnJwftmz9/ftA5S0pK0t5++22tKhwOhzr///znP/37hg8frl133XVhH5OTk6Neb+PGjUHv6YcffqjyMfbt21ebOnVqUJl/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unVrbNu2rU58nvWx+gUjXy6LFi0KSnfLtqRkqea1aNFCfagDz3lBQYHqVcNzXj3SPlgCEakyWLx4sTq3geSzbTKZgs61dP2V+mGe65Mj3xM2m43nuAb17dtXVYdJBsq3dO/eXbVp8K3zXNe8oqIibN++XQ21UCc+z1qMeu+991RPjrffflvbvHmzdscdd2gpKSnagQMHon1o9bo1/A8//KAW+Wg999xzan337t3q/meeeUad4//+97/aTz/9pF111VVaixYttNLS0mgfer1y9913a8nJydrSpUu1/fv3+5eSkhJ/mbvuuks7/fTTtcWLF2tr167VevbsqRaqukcffVT1UNq5c6f6vMq2TqfTFixYoO7nOa49gb1pBM/1yXvwwQfVd4Z8nlesWKH169dPy8jIUL3x6sI5jtlgRLz00kvq5JvNZtXV9/vvv4/2IdVrS5YsUUFI+WXkyJH+7r2PP/64lpWVpQLBvn37alu2bIn2Ydc7oc6xLG+99Za/jAR499xzj+qKarVatcGDB6uAharulltu0Zo1a6a+HzIzM9Xn1ReICJ7jyAUjPNcn77rrrtMaNWqkPs9NmjRR29u2basz51gn/4tMDoaIiIioophsM0JERER1B4MRIiIiiioGI0RERBRVDEaIiIgoqhiMEBERUVQxGCEiIqKoYjBCREREUcVghIiIiKKKwQgRERFFFYMRIiIiiioGI0RERIRo+n8ki5ISqBf3swAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "# plot results\n", - "plt.figure()\n", - "for i in range(num_clients):\n", - " plt.plot(history[f\"site-{i+1}\"], label=f\"site-{i+1}\")\n", - "plt.axhline(y=consensus_value, color='k', linestyle=\"--\", label=\"Consensus value\")\n", - "plt.legend()\n", - "plt.title(\"Evolution of local values\")\n", - "plt.show()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/advanced/distributed_optimization/examples/2-two_moons/dgd_results.png b/examples/advanced/distributed_optimization/examples/2-two_moons/dgd_results.png deleted file mode 100644 index d75cf0fd3cca2c5266e280b65592a7cc6e797576..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81201 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

e8=^_%Sf; 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≺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

8b=ngDAS` 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 diff --git a/examples/advanced/distributed_optimization/examples/2-two_moons/gtadam_results.png b/examples/advanced/distributed_optimization/examples/2-two_moons/gtadam_results.png deleted file mode 100644 index 317eeadb8c1a68439c2684cbb75cba7784ce0a8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46487 zcmc$`cT`i~q6QcdQB*`gEC_-~kuJRx6s0$%ccdfIL8JswQHlc6dz0RKuPV}emEJ*W z=phLqvyZ=f-+gc9&8(TfhP7NqOipsn-uv5MI|)=(mLa)Jbr}YOk;utDeF1|JmcU>H z+LwsHZ=6++I4F!<1gSIJ~xZd2MY%_r~1G+1lQYmy`Pu=OcDH zD;F0BXAv$g+y8n7r@fOUSEQ4+6F3U7gRG7-3`Y7A`g1M^o^1_-Ri2l7`dIyK;?@jt zqP}_5F5cOmV-8U0nq;by6Hm?WM3Ftd8FfqM`CEqa$3M`tufE2lRwh`H+Q<2qFC z#&7?F#5J+#&AKA+k)WS*=HnQ`e;)dler+N6`%p49?Ek+<8`D0xai2hQoz=4Ndx*p5 z&WQ?Kjp`dSqgqBBo;$VK6%`e++y<_r8stwgI-BTqOE_7?di{AAT|huPlf4)bosg{Y zxo1Q0k|mrX--7BDHmxGQHSg6p%PzAw-5k{&<4wo>)^>K$2YsR{oVCm3?sM2#K?{Q1 zfs|jLZ)qXKjF?#+AKeaJ$42kZo}pDfWjs)|S

^sTLoSZd);# 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 61.0"] -build-backend = "setuptools.build_meta" - -[tool.setuptools] -packages = ["nvdo"] - -[project] -name = "nvdo" -version = "0.0.1" -description = "Distributed optimization with NVFlare" -readme = "README.md" -requires-python = ">=3.8" -dependencies = [ - "nvflare==2.5.2", - "omegaconf==2.3.0", - "rich==13.9.4", - "torch==2.5.1", - "torchvision==0.20.1", - "matplotlib==3.10.0", - "scipy==1.15.0", - "scikit-learn==1.6.1", -] - diff --git a/examples/advanced/distributed_optimization/requirements.txt b/examples/advanced/distributed_optimization/requirements.txt new file mode 100644 index 0000000000..47d6aba334 --- /dev/null +++ b/examples/advanced/distributed_optimization/requirements.txt @@ -0,0 +1,8 @@ +omegaconf==2.3.0 +rich==13.9.4 +torch==2.5.1 +torchvision==0.20.1 +matplotlib==3.10.0 +scipy==1.15.0 +scikit-learn==1.6.1 +networkx==3.4.2 \ No newline at end of file diff --git a/examples/advanced/distributed_optimization/nvdo/__init__.py b/nvflare/app_opt/p2p/__init__.py similarity index 100% rename from examples/advanced/distributed_optimization/nvdo/__init__.py rename to nvflare/app_opt/p2p/__init__.py diff --git a/examples/advanced/distributed_optimization/nvdo/controllers/__init__.py b/nvflare/app_opt/p2p/controllers/__init__.py similarity index 91% rename from examples/advanced/distributed_optimization/nvdo/controllers/__init__.py rename to nvflare/app_opt/p2p/controllers/__init__.py index 948de939ad..9aefb0e937 100644 --- a/examples/advanced/distributed_optimization/nvdo/controllers/__init__.py +++ b/nvflare/app_opt/p2p/controllers/__init__.py @@ -11,4 +11,4 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -from .base import AlgorithmController # noqa \ No newline at end of file +from .p2p_controller import P2PAlgorithmController # noqa \ No newline at end of file diff --git a/examples/advanced/distributed_optimization/nvdo/controllers/base.py b/nvflare/app_opt/p2p/controllers/p2p_controller.py similarity index 96% rename from examples/advanced/distributed_optimization/nvdo/controllers/base.py rename to nvflare/app_opt/p2p/controllers/p2p_controller.py index 0327aa0749..50a49b5658 100644 --- a/examples/advanced/distributed_optimization/nvdo/controllers/base.py +++ b/nvflare/app_opt/p2p/controllers/p2p_controller.py @@ -16,12 +16,12 @@ from nvflare.apis.fl_context import FLContext from nvflare.apis.impl.controller import Controller from nvflare.apis.signal import Signal +from nvflare.app_opt.p2p.types import Config -from nvdo.types import Config - -class AlgorithmController(Controller): +class P2PAlgorithmController(Controller): """Controller for running a p2p algorithm on a network.""" + def __init__( self, config: Config, diff --git a/examples/advanced/distributed_optimization/nvdo/executors/__init__.py b/nvflare/app_opt/p2p/executors/__init__.py similarity index 82% rename from examples/advanced/distributed_optimization/nvdo/executors/__init__.py rename to nvflare/app_opt/p2p/executors/__init__.py index b3093390bb..1d1aca0bd0 100644 --- a/examples/advanced/distributed_optimization/nvdo/executors/__init__.py +++ b/nvflare/app_opt/p2p/executors/__init__.py @@ -11,8 +11,9 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -from .base import SynchronousAlgorithmExecutor # noqa +from .base_p2p_executor import BaseP2PAlgorithmExecutor # noqa +from .sync_executor import SyncAlgorithmExecutor # noqa from .consensus import ConsensusExecutor # noqa from .distributed_gradient_descent import DGDExecutor # noqa from .gradient_tracking import GTExecutor # noqa -from .gtadam import GTADAMExecutor # noqa \ No newline at end of file +from .gtadam import GTADAMExecutor # noqa diff --git a/nvflare/app_opt/p2p/executors/base_p2p_executor.py b/nvflare/app_opt/p2p/executors/base_p2p_executor.py new file mode 100644 index 0000000000..fa3262c203 --- /dev/null +++ b/nvflare/app_opt/p2p/executors/base_p2p_executor.py @@ -0,0 +1,102 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from abc import abstractmethod + +from nvflare.apis.dxo import from_shareable +from nvflare.apis.event_type import EventType +from nvflare.apis.executor import Executor +from nvflare.apis.fl_constant import ReturnCode +from nvflare.apis.fl_context import FLContext +from nvflare.apis.shareable import Shareable, make_reply +from nvflare.apis.signal import Signal +from nvflare.app_opt.p2p.types import LocalConfig, Neighbor + + +class BaseP2PAlgorithmExecutor(Executor): + """Base class for algorithm executors.""" + + def __init__(self): + super().__init__() + + self.id = None + self.client_name = None + self.config = None + self._weight = None + + self.neighbors: list[Neighbor] = [] + + def execute( + self, + task_name: str, + shareable: Shareable, + fl_ctx: FLContext, + abort_signal: Signal, + ): + if task_name == "config": + # Load local network config + self.config = LocalConfig(**from_shareable(shareable).data) + self.neighbors = self.config.neighbors + self._weight = 1.0 - sum([n.weight for n in self.neighbors]) + return make_reply(ReturnCode.OK) + + elif task_name == "run_algorithm": + # Run the algorithm + self._pre_algorithm_run(fl_ctx, shareable, abort_signal) + self.run_algorithm(fl_ctx, shareable, abort_signal) + self._post_algorithm_run(fl_ctx, shareable, abort_signal) + return make_reply(ReturnCode.OK) + else: + self.log_warning(fl_ctx, f"Unknown task name: {task_name}") + return make_reply(ReturnCode.TASK_UNKNOWN) + + @abstractmethod + def run_algorithm( + self, fl_ctx: FLContext, shareable: Shareable, abort_signal: Signal + ): + """Executes the algorithm""" + pass + + def _pre_algorithm_run( + self, fl_ctx: FLContext, shareable: Shareable, abort_signal: Signal + ): + """Executes before algorithm run.""" + pass + + def _post_algorithm_run( + self, fl_ctx: FLContext, shareable: Shareable, abort_signal: Signal + ): + """Executes after algorithm run. Could be used, for example, to save results""" + pass + + @abstractmethod + def _exchange_values(self, fl_ctx: FLContext, value: any, iteration: int): + pass + + @abstractmethod + def _handle_neighbor_value( + self, topic: str, request: Shareable, fl_ctx: FLContext + ) -> Shareable: + pass + + def _to_message(self, x): + return x + + def _from_message(self, x): + return x + + def handle_event(self, event_type: str, fl_ctx: FLContext): + if event_type == EventType.START_RUN: + self.client_name = fl_ctx.get_identity_name() + self.id = int(self.client_name.split("-")[1]) diff --git a/examples/advanced/distributed_optimization/nvdo/executors/consensus.py b/nvflare/app_opt/p2p/executors/consensus.py similarity index 90% rename from examples/advanced/distributed_optimization/nvdo/executors/consensus.py rename to nvflare/app_opt/p2p/executors/consensus.py index 7d6cc7f220..b3f8936067 100644 --- a/examples/advanced/distributed_optimization/nvdo/executors/consensus.py +++ b/nvflare/app_opt/p2p/executors/consensus.py @@ -11,15 +11,15 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -import pickle import random -from nvflare.apis.dxo import from_shareable +import torch -from .base import SynchronousAlgorithmExecutor +from nvflare.apis.dxo import from_shareable +from nvflare.app_opt.p2p.executors.sync_executor import SyncAlgorithmExecutor -class ConsensusExecutor(SynchronousAlgorithmExecutor): +class ConsensusExecutor(SyncAlgorithmExecutor): """An executor that implements the consensus algorithm""" def __init__( @@ -58,4 +58,4 @@ def run_algorithm(self, fl_ctx, shareable, abort_signal): del self.neighbors_values[iteration] def _post_algorithm_run(self, *args, **kwargs): - pickle.dump(self.value_history, open("results.pkl", "wb")) + torch.save(torch.tensor(self.value_history), "value_sequence.pt") diff --git a/examples/advanced/distributed_optimization/nvdo/executors/distributed_gradient_descent.py b/nvflare/app_opt/p2p/executors/distributed_gradient_descent.py similarity index 94% rename from examples/advanced/distributed_optimization/nvdo/executors/distributed_gradient_descent.py rename to nvflare/app_opt/p2p/executors/distributed_gradient_descent.py index c56f3712ca..d95490c22c 100644 --- a/examples/advanced/distributed_optimization/nvdo/executors/distributed_gradient_descent.py +++ b/nvflare/app_opt/p2p/executors/distributed_gradient_descent.py @@ -11,16 +11,17 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -import torch -from nvflare.apis.dxo import from_shareable -from nvdo.utils.metrics import compute_loss_over_dataset import time - -from .base import SynchronousAlgorithmExecutor from abc import abstractmethod +import torch + +from nvflare.apis.dxo import from_shareable +from nvflare.app_opt.p2p.executors.sync_executor import SyncAlgorithmExecutor +from nvflare.app_opt.p2p.utils.metrics import compute_loss_over_dataset + -class DGDExecutor(SynchronousAlgorithmExecutor): +class DGDExecutor(SyncAlgorithmExecutor): @abstractmethod def __init__( self, @@ -106,13 +107,11 @@ def run_algorithm(self, fl_ctx, shareable, abort_signal): del self.neighbors_values[iteration] def _to_message(self, x): - return [ - param.cpu().numpy() for param in iter(x) if param.requires_grad - ] + return [param.cpu().numpy() for param in iter(x) if param.requires_grad] def _from_message(self, x): return [torch.from_numpy(param) for param in x] - + def _pre_algorithm_run(self, fl_ctx, shareable, abort_signal): self._iterations = from_shareable(shareable).data["iterations"] self._stepsize = from_shareable(shareable).data["stepsize"] diff --git a/examples/advanced/distributed_optimization/nvdo/executors/gradient_tracking.py b/nvflare/app_opt/p2p/executors/gradient_tracking.py similarity index 97% rename from examples/advanced/distributed_optimization/nvdo/executors/gradient_tracking.py rename to nvflare/app_opt/p2p/executors/gradient_tracking.py index 473a5495c5..8867732a86 100644 --- a/examples/advanced/distributed_optimization/nvdo/executors/gradient_tracking.py +++ b/nvflare/app_opt/p2p/executors/gradient_tracking.py @@ -11,16 +11,17 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -import torch -from nvflare.apis.dxo import from_shareable -from nvdo.utils.metrics import compute_loss_over_dataset import time - -from .base import SynchronousAlgorithmExecutor from abc import abstractmethod +import torch + +from nvflare.apis.dxo import from_shareable +from nvflare.app_opt.p2p.executors.sync_executor import SyncAlgorithmExecutor +from nvflare.app_opt.p2p.utils.metrics import compute_loss_over_dataset + -class GTExecutor(SynchronousAlgorithmExecutor): +class GTExecutor(SyncAlgorithmExecutor): @abstractmethod def __init__( self, diff --git a/examples/advanced/distributed_optimization/nvdo/executors/gtadam.py b/nvflare/app_opt/p2p/executors/gtadam.py similarity index 96% rename from examples/advanced/distributed_optimization/nvdo/executors/gtadam.py rename to nvflare/app_opt/p2p/executors/gtadam.py index 3d8bdb63aa..d14900fba7 100644 --- a/examples/advanced/distributed_optimization/nvdo/executors/gtadam.py +++ b/nvflare/app_opt/p2p/executors/gtadam.py @@ -12,9 +12,9 @@ # See the License for the specific language governing permissions and # limitations under the License. import torch -from nvflare.apis.dxo import from_shareable -from .gradient_tracking import GTExecutor +from nvflare.apis.dxo import from_shareable +from nvflare.app_opt.p2p.executors.gradient_tracking import GTExecutor class GTADAMExecutor(GTExecutor): @@ -29,14 +29,13 @@ def _pre_algorithm_run(self, fl_ctx, shareable, abort_signal): self.m = [torch.zeros_like(param) for param in self.model.parameters()] self.v = [torch.zeros_like(param) for param in self.model.parameters()] - def _update_local_state(self, stepsize): for i in range(len(self.tracker)): self.m[i] = self.beta1 * self.m[i] + (1 - self.beta1) * self.tracker[i] self.v[i] = torch.minimum( self.beta2 * self.v[i] + (1 - self.beta2) * self.tracker[i] ** 2, self.G ) - + with torch.no_grad(): for idx, param in enumerate(self.model.parameters()): if param.requires_grad: diff --git a/examples/advanced/distributed_optimization/nvdo/executors/base.py b/nvflare/app_opt/p2p/executors/sync_executor.py similarity index 58% rename from examples/advanced/distributed_optimization/nvdo/executors/base.py rename to nvflare/app_opt/p2p/executors/sync_executor.py index 7c75121e16..59b68bbf03 100644 --- a/examples/advanced/distributed_optimization/nvdo/executors/base.py +++ b/nvflare/app_opt/p2p/executors/sync_executor.py @@ -12,88 +12,17 @@ # See the License for the specific language governing permissions and # limitations under the License. import threading -from abc import abstractmethod from collections import defaultdict from nvflare.apis.dxo import DXO, DataKind, from_shareable from nvflare.apis.event_type import EventType -from nvflare.apis.executor import Executor from nvflare.apis.fl_constant import ReturnCode from nvflare.apis.fl_context import FLContext from nvflare.apis.shareable import Shareable, make_reply -from nvflare.apis.signal import Signal +from nvflare.app_opt.p2p.executors.base_p2p_executor import BaseP2PAlgorithmExecutor -from nvdo.types import LocalConfig, Neighbor - -class BaseAlgorithmExecutor(Executor): - """Base class for algorithm executors.""" - def __init__(self): - super().__init__() - - self.id = None - self.client_name = None - self.config = None - self._weight = None - - self.neighbors: list[Neighbor] = [] - - def execute( - self, - task_name: str, - shareable: Shareable, - fl_ctx: FLContext, - abort_signal: Signal, - ): - if task_name == "config": - # Load local network config - self.config = LocalConfig(**from_shareable(shareable).data) - self.neighbors = self.config.neighbors - self._weight = 1.0 - sum([n.weight for n in self.neighbors]) - return make_reply(ReturnCode.OK) - - elif task_name == "run_algorithm": - # Run the algorithm - self._pre_algorithm_run(fl_ctx, shareable, abort_signal) - self.run_algorithm(fl_ctx, shareable, abort_signal) - self._post_algorithm_run(fl_ctx, shareable, abort_signal) - return make_reply(ReturnCode.OK) - else: - self.log_warning(fl_ctx, f"Unknown task name: {task_name}") - return make_reply(ReturnCode.TASK_UNKNOWN) - - @abstractmethod - def run_algorithm( - self, fl_ctx: FLContext, shareable: Shareable, abort_signal: Signal - ): - """Executes the algorithm""" - pass - - def _pre_algorithm_run( - self, fl_ctx: FLContext, shareable: Shareable, abort_signal: Signal - ): - """Executes before algorithm run.""" - pass - - def _post_algorithm_run( - self, fl_ctx: FLContext, shareable: Shareable, abort_signal: Signal - ): - """Executes after algorithm run. Could be used, for example, to save results""" - pass - - def _to_message(self, x): - return x - - def _from_message(self, x): - return x - - def handle_event(self, event_type: str, fl_ctx: FLContext): - if event_type == EventType.START_RUN: - self.client_name = fl_ctx.get_identity_name() - self.id = int(self.client_name.split("-")[1]) - - -class SynchronousAlgorithmExecutor(BaseAlgorithmExecutor): +class SyncAlgorithmExecutor(BaseP2PAlgorithmExecutor): """An executor to implement synchronous algorithms.""" def __init__(self): super().__init__() diff --git a/examples/advanced/distributed_optimization/nvdo/types/__init__.py b/nvflare/app_opt/p2p/types/__init__.py similarity index 100% rename from examples/advanced/distributed_optimization/nvdo/types/__init__.py rename to nvflare/app_opt/p2p/types/__init__.py diff --git a/examples/advanced/distributed_optimization/nvdo/utils/__init__.py b/nvflare/app_opt/p2p/utils/__init__.py similarity index 100% rename from examples/advanced/distributed_optimization/nvdo/utils/__init__.py rename to nvflare/app_opt/p2p/utils/__init__.py diff --git a/examples/advanced/distributed_optimization/nvdo/utils/config_generator.py b/nvflare/app_opt/p2p/utils/config_generator.py similarity index 93% rename from examples/advanced/distributed_optimization/nvdo/utils/config_generator.py rename to nvflare/app_opt/p2p/utils/config_generator.py index b39bf140cf..0106fc31ae 100644 --- a/examples/advanced/distributed_optimization/nvdo/utils/config_generator.py +++ b/nvflare/app_opt/p2p/utils/config_generator.py @@ -14,9 +14,8 @@ import networkx as nx import numpy as np -from nvdo.types import Neighbor, Node, Network - -from .topology import doubly_stochastic_adjacency +from nvflare.app_opt.p2p.types import Neighbor, Network, Node +from nvflare.app_opt.p2p.utils.topology import doubly_stochastic_adjacency def generate_random_network( diff --git a/examples/advanced/distributed_optimization/nvdo/utils/metrics.py b/nvflare/app_opt/p2p/utils/metrics.py similarity index 100% rename from examples/advanced/distributed_optimization/nvdo/utils/metrics.py rename to nvflare/app_opt/p2p/utils/metrics.py diff --git a/examples/advanced/distributed_optimization/nvdo/utils/topology.py b/nvflare/app_opt/p2p/utils/topology.py similarity index 100% rename from examples/advanced/distributed_optimization/nvdo/utils/topology.py rename to nvflare/app_opt/p2p/utils/topology.py From 6b92082bf134365f3cdb1a7b397ba98f569c39cd Mon Sep 17 00:00:00 2001 From: Francesco Farina Date: Fri, 31 Jan 2025 11:42:18 +0000 Subject: [PATCH 07/15] add docs --- .../app_opt/p2p/controllers/p2p_controller.py | 14 +++- .../p2p/executors/base_p2p_executor.py | 68 +++++++++++++++++-- nvflare/app_opt/p2p/executors/consensus.py | 20 +++++- .../executors/distributed_gradient_descent.py | 29 ++++++++ .../p2p/executors/gradient_tracking.py | 28 ++++++++ nvflare/app_opt/p2p/executors/gtadam.py | 29 ++++++++ .../app_opt/p2p/executors/sync_executor.py | 44 +++++++++++- nvflare/app_opt/p2p/types/__init__.py | 29 +++++++- 8 files changed, 247 insertions(+), 14 deletions(-) diff --git a/nvflare/app_opt/p2p/controllers/p2p_controller.py b/nvflare/app_opt/p2p/controllers/p2p_controller.py index 50a49b5658..bfbced41c1 100644 --- a/nvflare/app_opt/p2p/controllers/p2p_controller.py +++ b/nvflare/app_opt/p2p/controllers/p2p_controller.py @@ -20,7 +20,15 @@ class P2PAlgorithmController(Controller): - """Controller for running a p2p algorithm on a network.""" + """Controller for running a peer-to-peer (P2P) algorithm on a network. + + This controller manages the execution of a P2P algorithm by configuring + each client with its neighbors and initiating the algorithm execution across + the network. + + Args: + config (Config): The P2P network configuration containing node and neighbor information. + """ def __init__( self, @@ -59,7 +67,7 @@ def control_flow(self, abort_signal: Signal, fl_ctx: FLContext): ) def start_controller(self, fl_ctx: FLContext): - self.log_info(fl_ctx, "BaseController started") + self.log_info(fl_ctx, "P2PAlgorithmController started") def stop_controller(self, fl_ctx: FLContext): - self.log_info(fl_ctx, "BaseController stopped") + self.log_info(fl_ctx, "P2PAlgorithmController stopped") diff --git a/nvflare/app_opt/p2p/executors/base_p2p_executor.py b/nvflare/app_opt/p2p/executors/base_p2p_executor.py index fa3262c203..e21edb87a9 100644 --- a/nvflare/app_opt/p2p/executors/base_p2p_executor.py +++ b/nvflare/app_opt/p2p/executors/base_p2p_executor.py @@ -25,7 +25,19 @@ class BaseP2PAlgorithmExecutor(Executor): - """Base class for algorithm executors.""" + """Base class for peer-to-peer (P2P) algorithm executors. + + This class provides the foundational structure for executors that run P2P algorithms + in a distributed/federated setting. It handles the configuration of the local network, + execution flow based on tasks, and interaction with neighboring clients. + + Attributes: + id (int): Unique identifier for the client. + client_name (str): Name of the client. + config (LocalConfig): Local configuration containing neighbor information. + _weight (float): Weight assigned to the client in the network topology. + neighbors (list[Neighbor]): List of neighboring clients. + """ def __init__(self): super().__init__() @@ -65,35 +77,81 @@ def execute( def run_algorithm( self, fl_ctx: FLContext, shareable: Shareable, abort_signal: Signal ): - """Executes the algorithm""" + """Abstract method to execute the main P2P algorithm. + + Subclasses must implement this method to define the algorithm logic. + """ pass def _pre_algorithm_run( self, fl_ctx: FLContext, shareable: Shareable, abort_signal: Signal ): - """Executes before algorithm run.""" + """Hook method executed before running the main algorithm. + + Can be overridden to perform setup tasks. + """ pass def _post_algorithm_run( self, fl_ctx: FLContext, shareable: Shareable, abort_signal: Signal ): - """Executes after algorithm run. Could be used, for example, to save results""" + """Hook method executed after running the main algorithm. + + Can be overridden to perform cleanup tasks or save results. + """ pass @abstractmethod - def _exchange_values(self, fl_ctx: FLContext, value: any, iteration: int): + def _exchange_values(self, fl_ctx: FLContext, value: any, *args, **kwargs): + """Abstract method to handle value exchange with neighbors. + + Subclasses must implement this method to define how values are exchanged. + + Args: + fl_ctx (FLContext): Federated learning context. + value (any): The value to exchange. + + """ pass @abstractmethod def _handle_neighbor_value( self, topic: str, request: Shareable, fl_ctx: FLContext ) -> Shareable: + """Abstract method to process incoming values from neighbors. + + Subclasses must implement this method to handle incoming data. + + Args: + topic (str): Topic of the incoming message. + request (Shareable): The incoming data from a neighbor. + fl_ctx (FLContext): Federated learning context. + + Returns: + Shareable: A response message or data to send back. + """ pass def _to_message(self, x): + """Converts a value to a message format suitable for transmission. + + Args: + x (any): The value to convert. + + Returns: + any: The converted message. + """ return x def _from_message(self, x): + """Converts a received message back to its original value format. + + Args: + x (any): The received message. + + Returns: + any: The original value. + """ return x def handle_event(self, event_type: str, fl_ctx: FLContext): diff --git a/nvflare/app_opt/p2p/executors/consensus.py b/nvflare/app_opt/p2p/executors/consensus.py index b3f8936067..894f84afcc 100644 --- a/nvflare/app_opt/p2p/executors/consensus.py +++ b/nvflare/app_opt/p2p/executors/consensus.py @@ -20,7 +20,25 @@ class ConsensusExecutor(SyncAlgorithmExecutor): - """An executor that implements the consensus algorithm""" + """An executor that implements a consensus algorithm in a peer-to-peer (P2P) setup. + + This executor extends the SyncAlgorithmExecutor to implement a simple consensus algorithm. + The client starts with an initial value and iteratively exchanges values with its neighbors. + At each iteration, the client updates its current value based on its own value and the weighted sum + of its neighbors' values. The process continues for a specified number of iterations, and the history + of values is saved at the end of the run. + + The number of iterations must be provided by the controller when asing to run the algorithm. It can + be set in the extra parameters of the controller's config with the "iterations" key. + + Args: + initial_value (float, optional): The initial value for the consensus algorithm. + If not provided, a random value between 0 and 1 is used. + + Attributes: + current_value (float): The current value of the client in the consensus algorithm. + value_history (list[float]): A list storing the history of values over iterations. + """ def __init__( self, diff --git a/nvflare/app_opt/p2p/executors/distributed_gradient_descent.py b/nvflare/app_opt/p2p/executors/distributed_gradient_descent.py index d95490c22c..60b0cda466 100644 --- a/nvflare/app_opt/p2p/executors/distributed_gradient_descent.py +++ b/nvflare/app_opt/p2p/executors/distributed_gradient_descent.py @@ -22,6 +22,35 @@ class DGDExecutor(SyncAlgorithmExecutor): + """An executor that implements Stochastic Distributed Gradient Descent (DGD) in a peer-to-peer (P2P) learning setup. + + Each client maintains its own local model and synchronously exchanges model parameters with its neighbors + at each iteration. The model parameters are updated based on the neighbors' parameters and local gradient descent steps. + The executor also tracks and records training, validation and test losses over time. + + The number of iterations and the learning rate must be provided by the controller when asing to run the algorithm. + They can be set in the extra parameters of the controller's config with the "iterations" and "stepsize" keys. + + Note: + Subclasses must implement the __init__ method to initialize the model, loss function, and data loaders. + + Args: + model (torch.nn.Module, optional): The neural network model used for training. + loss (torch.nn.modules.loss._Loss, optional): The loss function used for training. + train_dataloader (torch.utils.data.DataLoader, optional): DataLoader for the training dataset. + test_dataloader (torch.utils.data.DataLoader, optional): DataLoader for the testing dataset. + val_dataloader (torch.utils.data.DataLoader, optional): DataLoader for the validation dataset. + + Attributes: + model (torch.nn.Module): The neural network model. + loss (torch.nn.modules.loss._Loss): The loss function. + train_dataloader (torch.utils.data.DataLoader): DataLoader for training data. + test_dataloader (torch.utils.data.DataLoader): DataLoader for testing data. + val_dataloader (torch.utils.data.DataLoader): DataLoader for validation data. + train_loss_sequence (list[tuple]): Records of training loss over time. + test_loss_sequence (list[tuple]): Records of testing loss over time. + """ + @abstractmethod def __init__( self, diff --git a/nvflare/app_opt/p2p/executors/gradient_tracking.py b/nvflare/app_opt/p2p/executors/gradient_tracking.py index 8867732a86..58061faa6d 100644 --- a/nvflare/app_opt/p2p/executors/gradient_tracking.py +++ b/nvflare/app_opt/p2p/executors/gradient_tracking.py @@ -22,6 +22,34 @@ class GTExecutor(SyncAlgorithmExecutor): + """An executor that implements Stochastic Gradient Tracking (GT) in a peer-to-peer (P2P) learning setup. + + Each client maintains its own local model and synchronously exchanges model parameters with its neighbors + at each iteration. The model parameters are updated based on the neighbors' parameters and local gradient descent steps. + The executor also tracks and records training, validation and test losses over time. + + The number of iterations and the learning rate must be provided by the controller when asing to run the algorithm. + They can be set in the extra parameters of the controller's config with the "iterations" and "stepsize" keys. + + Note: + Subclasses must implement the __init__ method to initialize the model, loss function, and data loaders. + + Args: + model (torch.nn.Module, optional): The neural network model used for training. + loss (torch.nn.modules.loss._Loss, optional): The loss function used for training. + train_dataloader (torch.utils.data.DataLoader, optional): DataLoader for the training dataset. + test_dataloader (torch.utils.data.DataLoader, optional): DataLoader for the testing dataset. + val_dataloader (torch.utils.data.DataLoader, optional): DataLoader for the validation dataset. + + Attributes: + model (torch.nn.Module): The neural network model. + loss (torch.nn.modules.loss._Loss): The loss function. + train_dataloader (torch.utils.data.DataLoader): DataLoader for training data. + test_dataloader (torch.utils.data.DataLoader): DataLoader for testing data. + val_dataloader (torch.utils.data.DataLoader): DataLoader for validation data. + train_loss_sequence (list[tuple]): Records of training loss over time. + test_loss_sequence (list[tuple]): Records of testing loss over time. + """ @abstractmethod def __init__( self, diff --git a/nvflare/app_opt/p2p/executors/gtadam.py b/nvflare/app_opt/p2p/executors/gtadam.py index d14900fba7..4383bf41a8 100644 --- a/nvflare/app_opt/p2p/executors/gtadam.py +++ b/nvflare/app_opt/p2p/executors/gtadam.py @@ -18,6 +18,35 @@ class GTADAMExecutor(GTExecutor): + """An executor that implements GTAdam in a peer-to-peer (P2P) learning setup. + + Each client maintains its own local model and synchronously exchanges model parameters with its neighbors + at each iteration. The model parameters are updated based on the neighbors' parameters and local gradient descent steps. + The executor also tracks and records training, validation and test losses over time. + + The number of iterations, the learning rate and the beta1, beta2 and epsilon hyperparameters must be provided + by the controller when asing to run the algorithm. They can be set in the extra parameters of the controller's + config with the "iterations", "stepsize", "beta1", "beta2", and "epsilon" keys. + + Note: + Subclasses must implement the __init__ method to initialize the model, loss function, and data loaders. + + Args: + model (torch.nn.Module, optional): The neural network model used for training. + loss (torch.nn.modules.loss._Loss, optional): The loss function used for training. + train_dataloader (torch.utils.data.DataLoader, optional): DataLoader for the training dataset. + test_dataloader (torch.utils.data.DataLoader, optional): DataLoader for the testing dataset. + val_dataloader (torch.utils.data.DataLoader, optional): DataLoader for the validation dataset. + + Attributes: + model (torch.nn.Module): The neural network model. + loss (torch.nn.modules.loss._Loss): The loss function. + train_dataloader (torch.utils.data.DataLoader): DataLoader for training data. + test_dataloader (torch.utils.data.DataLoader): DataLoader for testing data. + val_dataloader (torch.utils.data.DataLoader): DataLoader for validation data. + train_loss_sequence (list[tuple]): Records of training loss over time. + test_loss_sequence (list[tuple]): Records of testing loss over time. + """ def _pre_algorithm_run(self, fl_ctx, shareable, abort_signal): super()._pre_algorithm_run(fl_ctx, shareable, abort_signal) diff --git a/nvflare/app_opt/p2p/executors/sync_executor.py b/nvflare/app_opt/p2p/executors/sync_executor.py index 59b68bbf03..72002b33f2 100644 --- a/nvflare/app_opt/p2p/executors/sync_executor.py +++ b/nvflare/app_opt/p2p/executors/sync_executor.py @@ -23,7 +23,18 @@ class SyncAlgorithmExecutor(BaseP2PAlgorithmExecutor): - """An executor to implement synchronous algorithms.""" + """An executor to implement synchronous peer-to-peer (P2P) algorithms. + + This executor extends the BaseP2PAlgorithmExecutor to support synchronous execution + of P2P algorithms. It manages the exchange of values with neighboring clients and ensures + synchronization at each iteration. + + Attributes: + neighbors_values (defaultdict): A dictionary to store values received from neighbors, + keyed by iteration and neighbor ID. + sync_waiter (threading.Event): An event to synchronize the exchange of values. + lock (threading.Lock): A lock to manage concurrent access to shared data structures. + """ def __init__(self): super().__init__() @@ -33,6 +44,20 @@ def __init__(self): self.lock = threading.Lock() def _exchange_values(self, fl_ctx: FLContext, value: any, iteration: int): + """Exchanges values with neighbors synchronously. + + Sends the local value to all neighbors and waits for their values for the current iteration. + Utilizes threading events to synchronize the exchange and ensure all values are received + before proceeding. + + Args: + fl_ctx (FLContext): Federated learning context. + value (any): The local value to send to neighbors. + iteration (int): The current iteration number of the algorithm. + + Raises: + SystemExit: If the values from all neighbors are not received within the timeout. + """ engine = fl_ctx.get_engine() # Clear the event before starting the exchange @@ -63,13 +88,27 @@ def _exchange_values(self, fl_ctx: FLContext, value: any, iteration: int): def _handle_neighbor_value( self, topic: str, request: Shareable, fl_ctx: FLContext ) -> Shareable: + """Handles incoming values from neighbors. + + Processes the received value from a neighbor, stores it, and signals when all neighbor + values for the current iteration have been received. + + Args: + topic (str): Topic of the incoming message. + request (Shareable): The message containing the neighbor's value. + fl_ctx (FLContext): Federated learning context. + + Returns: + Shareable: A reply message indicating successful reception. + """ sender = request.get_peer_props()["__identity_name__"] data = from_shareable(request).data iteration = data["iteration"] with self.lock: + # Store the received value in the neighbors_values dictionary self.neighbors_values[iteration][sender] = self._from_message(data["value"]) - # Check if all neighbor values have been received + # Check if all neighbor values have been received for the iteration if len(self.neighbors_values[iteration]) >= len(self.neighbors): self.sync_waiter.set() # Signal that we have all neighbor values return make_reply(ReturnCode.OK) @@ -79,6 +118,7 @@ def handle_event(self, event_type: str, fl_ctx: FLContext): if event_type == EventType.START_RUN: engine = fl_ctx.get_engine() + # Register the message handler for receiving neighbor values engine.register_aux_message_handler( topic="send_value", message_handle_func=self._handle_neighbor_value ) diff --git a/nvflare/app_opt/p2p/types/__init__.py b/nvflare/app_opt/p2p/types/__init__.py index bc26eecf8b..7f9815a171 100644 --- a/nvflare/app_opt/p2p/types/__init__.py +++ b/nvflare/app_opt/p2p/types/__init__.py @@ -16,7 +16,11 @@ @dataclass class Neighbor: - """Represents a neighbor in the network.""" + """Represents a neighbor in the network. + + Each neighbor is characterized by an identifier and an optional weight, + which can be used in algorithms that require weighted interactions between nodes. + """ id: int | str weight: float | None = None @@ -28,7 +32,12 @@ def __dict__(self): @dataclass class Node: - """Represents a node in the network.""" + """Represents a node in the network. + + A node contains an identifier and a list of its neighbors. + During initialization, any neighbor specified as a dictionary is converted + into a `Neighbor` instance to ensure consistent data structures. + """ id: int | str | None = None neighbors: list[Neighbor] = field(default_factory=list) @@ -52,7 +61,11 @@ def __post_init__(self): @dataclass class Network: - """Represents a network.""" + """Represents a network consisting of multiple nodes. + + The network defines the topology over which the peer-to-peer algorithm operates. + During initialization, any node specified as a dictionary is converted into a `Node` instance. + """ nodes: list[Node] = field(default_factory=list) @@ -72,6 +85,11 @@ def __post_init__(self): @dataclass class Config: + """Represents the configuration for the peer-to-peer algorithm. + + The configuration includes the network topology and any extra algorithm-specific parameters. + Algorithm-specific parameters in `extra` can include settings like 'stepsize', 'iterations', etc. + """ network: Network extra: dict = field(default_factory=dict) @@ -87,6 +105,11 @@ def __post_init__(self): @dataclass class LocalConfig: + """Represents the local configuration for a node in the network. + + The local configuration includes the node's neighbors and any extra algorithm-specific parameters. + Algorithm-specific parameters in `extra` can include settings like 'stepsize', 'iterations', etc. + """ neighbors: list[Neighbor] extra: dict = field(default_factory=dict) From bdfb3b83f7b2f8f309a890d3b8d957d17aa311ea Mon Sep 17 00:00:00 2001 From: Francesco Farina Date: Fri, 31 Jan 2025 11:55:18 +0000 Subject: [PATCH 08/15] abc algo executor --- nvflare/app_opt/p2p/executors/base_p2p_executor.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nvflare/app_opt/p2p/executors/base_p2p_executor.py b/nvflare/app_opt/p2p/executors/base_p2p_executor.py index e21edb87a9..6929ed675b 100644 --- a/nvflare/app_opt/p2p/executors/base_p2p_executor.py +++ b/nvflare/app_opt/p2p/executors/base_p2p_executor.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from abc import abstractmethod +from abc import abstractmethod, ABC from nvflare.apis.dxo import from_shareable from nvflare.apis.event_type import EventType @@ -24,7 +24,7 @@ from nvflare.app_opt.p2p.types import LocalConfig, Neighbor -class BaseP2PAlgorithmExecutor(Executor): +class BaseP2PAlgorithmExecutor(Executor, ABC): """Base class for peer-to-peer (P2P) algorithm executors. This class provides the foundational structure for executors that run P2P algorithms From 72c55a9d4408bc59c88f0d3f1d7e7aafde527235 Mon Sep 17 00:00:00 2001 From: Francesco Farina Date: Fri, 31 Jan 2025 16:53:53 +0000 Subject: [PATCH 09/15] typo in example README --- examples/advanced/distributed_optimization/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/advanced/distributed_optimization/README.md b/examples/advanced/distributed_optimization/README.md index 0173b415aa..e74af83233 100644 --- a/examples/advanced/distributed_optimization/README.md +++ b/examples/advanced/distributed_optimization/README.md @@ -158,7 +158,7 @@ class P2PAlgorithmController(Controller): Now, in the `control_flow` method we can send the local configurations to each client and, once they receive them, ask them to run the algorithm. We'll do so by sending `Task`s to each client. In NVFlare, a `Task` is a piece of work that is assigned by the Controller to client workers. Depending on how the task is assigned (broadcast, send, or relay), the task will be performed by one or more clients. -In fact, one one hand, we'll use the `send_and_wait` method to send the `"config"` task to each client, since each client will potentially have a different config (because of different neighbors); on the other hand, to run the algorith, we'll use the `broadcast_and_wait`, which broadcasts the same `"run_algorithm"` task to all clients and waits for all clients to respond/complete the task. As you see, each task specifies a `name` - in this case, `"config"` and `"run_algorithm"` - let's remember those as they'll need to be the same in the control flow of each client. +In fact, on one hand, we'll use the `send_and_wait` method to send the `"config"` task to each client, since each client will potentially have a different config (because of different neighbors); on the other hand, to run the algorith, we'll use the `broadcast_and_wait`, which broadcasts the same `"run_algorithm"` task to all clients and waits for all clients to respond/complete the task. As you see, each task specifies a `name` - in this case, `"config"` and `"run_algorithm"` - let's remember those as they'll need to be the same in the control flow of each client. ```python From 9e401f09b275456d5816adb813dff6fc514b5ee3 Mon Sep 17 00:00:00 2001 From: Francesco Farina Date: Fri, 31 Jan 2025 19:25:55 +0000 Subject: [PATCH 10/15] reload notebook --- .../1-consensus/tutorial.ipynb | 976 +++++++++--------- 1 file changed, 484 insertions(+), 492 deletions(-) diff --git a/examples/advanced/distributed_optimization/1-consensus/tutorial.ipynb b/examples/advanced/distributed_optimization/1-consensus/tutorial.ipynb index e981f9ebd6..337562308e 100644 --- a/examples/advanced/distributed_optimization/1-consensus/tutorial.ipynb +++ b/examples/advanced/distributed_optimization/1-consensus/tutorial.ipynb @@ -68,31 +68,29 @@ "

Config(\n",
        "    network=Network(\n",
        "        nodes=[\n",
+       "            Node(id='site-1', neighbors=[Neighbor(id='site-4', weight=0.3333333432674408)]),\n",
        "            Node(\n",
-       "                id='site-1',\n",
+       "                id='site-2',\n",
        "                neighbors=[\n",
-       "                    Neighbor(id='site-2', weight=0.20000000298023224),\n",
-       "                    Neighbor(id='site-3', weight=0.20000000298023224),\n",
-       "                    Neighbor(id='site-4', weight=0.20000000298023224),\n",
-       "                    Neighbor(id='site-5', weight=0.20000000298023224)\n",
+       "                    Neighbor(id='site-3', weight=0.3333333432674408),\n",
+       "                    Neighbor(id='site-5', weight=0.3333333432674408)\n",
        "                ]\n",
        "            ),\n",
-       "            Node(id='site-2', neighbors=[Neighbor(id='site-1', weight=0.20000000298023224)]),\n",
+       "            Node(id='site-3', neighbors=[Neighbor(id='site-2', weight=0.3333333432674408)]),\n",
        "            Node(\n",
-       "                id='site-3',\n",
+       "                id='site-4',\n",
        "                neighbors=[\n",
-       "                    Neighbor(id='site-1', weight=0.20000000298023224),\n",
-       "                    Neighbor(id='site-4', weight=0.3333333432674408)\n",
+       "                    Neighbor(id='site-1', weight=0.3333333432674408),\n",
+       "                    Neighbor(id='site-5', weight=0.3333333432674408)\n",
        "                ]\n",
        "            ),\n",
        "            Node(\n",
-       "                id='site-4',\n",
+       "                id='site-5',\n",
        "                neighbors=[\n",
-       "                    Neighbor(id='site-1', weight=0.20000000298023224),\n",
-       "                    Neighbor(id='site-3', weight=0.3333333432674408)\n",
+       "                    Neighbor(id='site-2', weight=0.3333333432674408),\n",
+       "                    Neighbor(id='site-4', weight=0.3333333432674408)\n",
        "                ]\n",
-       "            ),\n",
-       "            Node(id='site-5', neighbors=[Neighbor(id='site-1', weight=0.20000000298023224)])\n",
+       "            )\n",
        "        ]\n",
        "    ),\n",
        "    extra={'iterations': 50}\n",
@@ -103,31 +101,29 @@
        "\u001b[1;35mConfig\u001b[0m\u001b[1m(\u001b[0m\n",
        "    \u001b[33mnetwork\u001b[0m=\u001b[1;35mNetwork\u001b[0m\u001b[1m(\u001b[0m\n",
        "        \u001b[33mnodes\u001b[0m=\u001b[1m[\u001b[0m\n",
+       "            \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-1'\u001b[0m, \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-4'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m\u001b[1m]\u001b[0m\u001b[1m)\u001b[0m,\n",
        "            \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\n",
-       "                \u001b[33mid\u001b[0m=\u001b[32m'site-1'\u001b[0m,\n",
+       "                \u001b[33mid\u001b[0m=\u001b[32m'site-2'\u001b[0m,\n",
        "                \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\n",
-       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-2'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.20000000298023224\u001b[0m\u001b[1m)\u001b[0m,\n",
-       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-3'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.20000000298023224\u001b[0m\u001b[1m)\u001b[0m,\n",
-       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-4'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.20000000298023224\u001b[0m\u001b[1m)\u001b[0m,\n",
-       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-5'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.20000000298023224\u001b[0m\u001b[1m)\u001b[0m\n",
+       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-3'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m,\n",
+       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-5'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m\n",
        "                \u001b[1m]\u001b[0m\n",
        "            \u001b[1m)\u001b[0m,\n",
-       "            \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-2'\u001b[0m, \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-1'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.20000000298023224\u001b[0m\u001b[1m)\u001b[0m\u001b[1m]\u001b[0m\u001b[1m)\u001b[0m,\n",
+       "            \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-3'\u001b[0m, \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-2'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m\u001b[1m]\u001b[0m\u001b[1m)\u001b[0m,\n",
        "            \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\n",
-       "                \u001b[33mid\u001b[0m=\u001b[32m'site-3'\u001b[0m,\n",
+       "                \u001b[33mid\u001b[0m=\u001b[32m'site-4'\u001b[0m,\n",
        "                \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\n",
-       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-1'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.20000000298023224\u001b[0m\u001b[1m)\u001b[0m,\n",
-       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-4'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m\n",
+       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-1'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m,\n",
+       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-5'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m\n",
        "                \u001b[1m]\u001b[0m\n",
        "            \u001b[1m)\u001b[0m,\n",
        "            \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\n",
-       "                \u001b[33mid\u001b[0m=\u001b[32m'site-4'\u001b[0m,\n",
+       "                \u001b[33mid\u001b[0m=\u001b[32m'site-5'\u001b[0m,\n",
        "                \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\n",
-       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-1'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.20000000298023224\u001b[0m\u001b[1m)\u001b[0m,\n",
-       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-3'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m\n",
+       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-2'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m,\n",
+       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-4'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m\n",
        "                \u001b[1m]\u001b[0m\n",
-       "            \u001b[1m)\u001b[0m,\n",
-       "            \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-5'\u001b[0m, \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-1'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.20000000298023224\u001b[0m\u001b[1m)\u001b[0m\u001b[1m]\u001b[0m\u001b[1m)\u001b[0m\n",
+       "            \u001b[1m)\u001b[0m\n",
        "        \u001b[1m]\u001b[0m\n",
        "    \u001b[1m)\u001b[0m,\n",
        "    \u001b[33mextra\u001b[0m=\u001b[1m{\u001b[0m\u001b[32m'iterations'\u001b[0m: \u001b[1;36m50\u001b[0m\u001b[1m}\u001b[0m\n",
@@ -155,7 +151,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 3,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -185,468 +181,466 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 4,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "\u001b[38m2025-01-31 10:43:21,315 - SimulatorRunner - INFO - Create the Simulator Server.\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,316 - CoreCell - INFO - server: creating listener on tcp://0:57864\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,341 - CoreCell - INFO - server: created backbone external listener for tcp://0:57864\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,341 - ConnectorManager - INFO - 39829: Try start_listener Listener resources: {'secure': False, 'host': 'localhost'}\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,342 - conn_manager - INFO - Connector [CH00002 PASSIVE tcp://0:9312] is starting\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,843 - CoreCell - INFO - server: created backbone internal listener for tcp://localhost:9312\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,843 - conn_manager - INFO - Connector [CH00001 PASSIVE tcp://0:57864] is starting\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,844 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,844 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,844 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,844 - SimulatorServer - INFO - max_reg_duration=60.0\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,878 - hci - INFO - Starting Admin Server localhost on Port 57865\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,878 - SimulatorRunner - INFO - Deploy the Apps.\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,907 - SimulatorRunner - INFO - Create the simulate clients.\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,907 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,907 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,909 - Communicator - INFO - Trying to register with server ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,910 - ClientManager - INFO - authenticated client site-1: client_fqcn='site-1'\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,910 - ClientManager - INFO - Client: New client site-1@10.2.184.71 joined. Sent token: 44efd389-a1d6-4587-8d9f-e6ff608aefd2.  Total clients: 1\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,910 - Communicator - INFO - register RC: ok\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,910 - FederatedClient - INFO - Successfully registered client:site-1 for project simulator_server. Token:44efd389-a1d6-4587-8d9f-e6ff608aefd2 SSID:\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,910 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,910 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,911 - Communicator - INFO - Trying to register with server ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,911 - ClientManager - INFO - authenticated client site-2: client_fqcn='site-2'\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,911 - ClientManager - INFO - Client: New client site-2@10.2.184.71 joined. Sent token: c1552959-386c-4025-9bb9-50232e032487.  Total clients: 2\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,911 - Communicator - INFO - register RC: ok\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,911 - FederatedClient - INFO - Successfully registered client:site-2 for project simulator_server. Token:c1552959-386c-4025-9bb9-50232e032487 SSID:\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,911 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,912 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,912 - Communicator - INFO - Trying to register with server ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,912 - ClientManager - INFO - authenticated client site-3: client_fqcn='site-3'\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,912 - ClientManager - INFO - Client: New client site-3@10.2.184.71 joined. Sent token: f70b92dc-edc7-43e3-a330-7f711dd59bdc.  Total clients: 3\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,912 - Communicator - INFO - register RC: ok\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,912 - FederatedClient - INFO - Successfully registered client:site-3 for project simulator_server. Token:f70b92dc-edc7-43e3-a330-7f711dd59bdc SSID:\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,912 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,912 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,913 - Communicator - INFO - Trying to register with server ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,913 - ClientManager - INFO - authenticated client site-4: client_fqcn='site-4'\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,913 - ClientManager - INFO - Client: New client site-4@10.2.184.71 joined. Sent token: e95e4133-deaa-40de-b3a7-ba37f0a2b361.  Total clients: 4\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,913 - Communicator - INFO - register RC: ok\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,913 - FederatedClient - INFO - Successfully registered client:site-4 for project simulator_server. Token:e95e4133-deaa-40de-b3a7-ba37f0a2b361 SSID:\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,913 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,913 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,913 - Communicator - INFO - Trying to register with server ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,913 - ClientManager - INFO - authenticated client site-5: client_fqcn='site-5'\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,913 - ClientManager - INFO - Client: New client site-5@10.2.184.71 joined. Sent token: b6b4eb38-d385-47a8-8235-05210d2a1f77.  Total clients: 5\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,913 - Communicator - INFO - register RC: ok\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,914 - FederatedClient - INFO - Successfully registered client:site-5 for project simulator_server. Token:b6b4eb38-d385-47a8-8235-05210d2a1f77 SSID:\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,914 - SimulatorRunner - INFO - Set the client status ready.\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,914 - SimulatorRunner - INFO - Deploy and start the Server App.\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,914 - Cell - INFO - Register blob CB for channel='server_command', topic='*'\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,914 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,914 - ServerCommandAgent - INFO - ServerCommandAgent cell register_request_cb: server.simulate_job\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,922 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,922 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,922 - AuxRunner - INFO - registered aux handler for topic __sync_runner__\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,922 - AuxRunner - INFO - registered aux handler for topic __job_heartbeat__\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,922 - AuxRunner - INFO - registered aux handler for topic __task_check__\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,922 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,922 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,923 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,923 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job] - Server runner starting ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,923 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,923 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job] - starting workflow controller () ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,923 - P2PAlgorithmController - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - BaseController started\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,923 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - Workflow controller () started\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:21,923 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:22,919 - SimulatorClientRunner - INFO - Start the clients run simulation.\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:23,920 - SimulatorClientRunner - INFO - Simulate Run client: site-1 on GPU group: None\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:23,922 - SimulatorClientRunner - INFO - Simulate Run client: site-2 on GPU group: None\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:23,924 - SimulatorClientRunner - INFO - Simulate Run client: site-3 on GPU group: None\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:23,924 - SimulatorClientRunner - INFO - Simulate Run client: site-4 on GPU group: None\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:23,925 - SimulatorClientRunner - INFO - Simulate Run client: site-5 on GPU group: None\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,932 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,932 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,935 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,936 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,937 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,971 - CoreCell - INFO - site-3.simulate_job: created backbone external connector to tcp://localhost:57864\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,971 - CoreCell - INFO - site-1.simulate_job: created backbone external connector to tcp://localhost:57864\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,971 - CoreCell - INFO - site-5.simulate_job: created backbone external connector to tcp://localhost:57864\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,971 - CoreCell - INFO - site-2.simulate_job: created backbone external connector to tcp://localhost:57864\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,971 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:57864] is starting\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,971 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:57864] is starting\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,971 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:57864] is starting\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,971 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:57864] is starting\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,971 - CoreCell - INFO - site-4.simulate_job: created backbone external connector to tcp://localhost:57864\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,971 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:57864] is starting\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,972 - conn_manager - INFO - Connection [CN00002 127.0.0.1:57940 => 127.0.0.1:57864] is created: PID: 39848\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,972 - conn_manager - INFO - Connection [CN00002 127.0.0.1:57941 => 127.0.0.1:57864] is created: PID: 39850\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,972 - conn_manager - INFO - Connection [CN00002 127.0.0.1:57942 => 127.0.0.1:57864] is created: PID: 39846\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,972 - conn_manager - INFO - Connection [CN00002 127.0.0.1:57943 => 127.0.0.1:57864] is created: PID: 39847\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,972 - conn_manager - INFO - Connection [CN00002 127.0.0.1:57944 => 127.0.0.1:57864] is created: PID: 39849\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,972 - conn_manager - INFO - Connection [CN00008 127.0.0.1:57864 <= 127.0.0.1:57940] is created: PID: 39829\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,973 - conn_manager - INFO - Connection [CN00009 127.0.0.1:57864 <= 127.0.0.1:57941] is created: PID: 39829\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,973 - conn_manager - INFO - Connection [CN00010 127.0.0.1:57864 <= 127.0.0.1:57942] is created: PID: 39829\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,973 - conn_manager - INFO - Connection [CN00011 127.0.0.1:57864 <= 127.0.0.1:57943] is created: PID: 39829\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:24,973 - conn_manager - INFO - Connection [CN00012 127.0.0.1:57864 <= 127.0.0.1:57944] is created: PID: 39829\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,072 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,072 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,072 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,072 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,072 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,072 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,072 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,072 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,076 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,076 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:25,792 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,308 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - synced to Server Runner in 0.5137271881103516 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,309 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,309 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,309 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,310 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,310 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,310 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - client runner started\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,310 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-3\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,311 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - synced to Server Runner in 0.5162680149078369 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,311 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - synced to Server Runner in 0.5165047645568848 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,311 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,311 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - synced to Server Runner in 0.5163741111755371 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,311 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,312 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,312 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,312 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,312 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,312 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - synced to Server Runner in 0.5167350769042969 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,312 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,312 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,312 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,312 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,312 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,312 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,312 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,312 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,312 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,312 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,312 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - client runner started\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,312 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,312 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - client runner started\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,313 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,313 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-5\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,313 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-1\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,313 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - client runner started\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,313 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,313 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-2\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,313 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,313 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - client runner started\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,313 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-4\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,315 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=config, task_id=7bf65655-f007-4ea7-bec9-6f4988ec7d25] - assigned task to client site-1: name=config, id=7bf65655-f007-4ea7-bec9-6f4988ec7d25\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,316 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=config, task_id=7bf65655-f007-4ea7-bec9-6f4988ec7d25] - sent task assignment to client. client_name:site-1 task_id:7bf65655-f007-4ea7-bec9-6f4988ec7d25\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,316 - GetTaskCommand - INFO - return task to client.  client_name: site-1  task_name: config   task_id: 7bf65655-f007-4ea7-bec9-6f4988ec7d25  sharable_header_task_id: 7bf65655-f007-4ea7-bec9-6f4988ec7d25\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,319 - Communicator - INFO - Received from simulator_server server. getTask: config size: 782B (782 Bytes) time: 0.005942 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,319 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,319 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=7bf65655-f007-4ea7-bec9-6f4988ec7d25\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,319 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7bf65655-f007-4ea7-bec9-6f4988ec7d25] - invoking task executor ConsensusExecutor\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,320 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7bf65655-f007-4ea7-bec9-6f4988ec7d25] - finished processing task\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,320 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7bf65655-f007-4ea7-bec9-6f4988ec7d25] - try #1: sending task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,320 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7bf65655-f007-4ea7-bec9-6f4988ec7d25] - checking task ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,322 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7bf65655-f007-4ea7-bec9-6f4988ec7d25] - start to send task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,322 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,323 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job] - got result from client site-1 for task: name=config, id=7bf65655-f007-4ea7-bec9-6f4988ec7d25\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,323 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=7bf65655-f007-4ea7-bec9-6f4988ec7d25] - finished processing client result by controller\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,324 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-1   task_id:7bf65655-f007-4ea7-bec9-6f4988ec7d25\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,324 - Communicator - INFO -  SubmitUpdate size: 606B (606 Bytes). time: 0.001705 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,324 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=7bf65655-f007-4ea7-bec9-6f4988ec7d25] - task result sent to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,325 - ClientTaskWorker - INFO - Finished one task run for client: site-1 interval: 2 task_processed: True\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,392 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,403 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,827 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=config, task_id=6c2ea1c7-7648-45ae-8a16-6c57016b9594] - assigned task to client site-2: name=config, id=6c2ea1c7-7648-45ae-8a16-6c57016b9594\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,827 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=config, task_id=6c2ea1c7-7648-45ae-8a16-6c57016b9594] - sent task assignment to client. client_name:site-2 task_id:6c2ea1c7-7648-45ae-8a16-6c57016b9594\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,828 - GetTaskCommand - INFO - return task to client.  client_name: site-2  task_name: config   task_id: 6c2ea1c7-7648-45ae-8a16-6c57016b9594  sharable_header_task_id: 6c2ea1c7-7648-45ae-8a16-6c57016b9594\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,830 - Communicator - INFO - Received from simulator_server server. getTask: config size: 701B (701 Bytes) time: 0.006084 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,830 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,830 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=6c2ea1c7-7648-45ae-8a16-6c57016b9594\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,831 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6c2ea1c7-7648-45ae-8a16-6c57016b9594] - invoking task executor ConsensusExecutor\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,831 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6c2ea1c7-7648-45ae-8a16-6c57016b9594] - finished processing task\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,831 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6c2ea1c7-7648-45ae-8a16-6c57016b9594] - try #1: sending task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,831 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6c2ea1c7-7648-45ae-8a16-6c57016b9594] - checking task ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,834 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6c2ea1c7-7648-45ae-8a16-6c57016b9594] - start to send task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,834 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,835 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job] - got result from client site-2 for task: name=config, id=6c2ea1c7-7648-45ae-8a16-6c57016b9594\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,835 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=6c2ea1c7-7648-45ae-8a16-6c57016b9594] - finished processing client result by controller\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,835 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-2   task_id:6c2ea1c7-7648-45ae-8a16-6c57016b9594\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,836 - Communicator - INFO -  SubmitUpdate size: 606B (606 Bytes). time: 0.001925 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,836 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6c2ea1c7-7648-45ae-8a16-6c57016b9594] - task result sent to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:26,837 - ClientTaskWorker - INFO - Finished one task run for client: site-2 interval: 2 task_processed: True\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:27,007 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:27,017 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:27,329 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=config, task_id=de1ca509-7941-4c92-ad93-1df7279cf95c] - assigned task to client site-3: name=config, id=de1ca509-7941-4c92-ad93-1df7279cf95c\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:27,330 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=config, task_id=de1ca509-7941-4c92-ad93-1df7279cf95c] - sent task assignment to client. client_name:site-3 task_id:de1ca509-7941-4c92-ad93-1df7279cf95c\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:27,330 - GetTaskCommand - INFO - return task to client.  client_name: site-3  task_name: config   task_id: de1ca509-7941-4c92-ad93-1df7279cf95c  sharable_header_task_id: de1ca509-7941-4c92-ad93-1df7279cf95c\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:27,331 - Communicator - INFO - Received from simulator_server server. getTask: config size: 728B (728 Bytes) time: 0.003929 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:27,331 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:27,332 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=de1ca509-7941-4c92-ad93-1df7279cf95c\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:27,332 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=de1ca509-7941-4c92-ad93-1df7279cf95c] - invoking task executor ConsensusExecutor\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:27,332 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=de1ca509-7941-4c92-ad93-1df7279cf95c] - finished processing task\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:27,332 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=de1ca509-7941-4c92-ad93-1df7279cf95c] - try #1: sending task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:27,333 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=de1ca509-7941-4c92-ad93-1df7279cf95c] - checking task ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:27,336 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=de1ca509-7941-4c92-ad93-1df7279cf95c] - start to send task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:27,337 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:27,338 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job] - got result from client site-3 for task: name=config, id=de1ca509-7941-4c92-ad93-1df7279cf95c\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:27,338 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=de1ca509-7941-4c92-ad93-1df7279cf95c] - finished processing client result by controller\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:27,338 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-3   task_id:de1ca509-7941-4c92-ad93-1df7279cf95c\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:27,339 - Communicator - INFO -  SubmitUpdate size: 606B (606 Bytes). time: 0.002095 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:27,339 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=de1ca509-7941-4c92-ad93-1df7279cf95c] - task result sent to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:27,339 - ClientTaskWorker - INFO - Finished one task run for client: site-3 interval: 2 task_processed: True\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:27,414 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:27,424 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,347 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=config, task_id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a] - assigned task to client site-4: name=config, id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,350 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=config, task_id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a] - sent task assignment to client. client_name:site-4 task_id:cff2ed3a-56d5-4676-b811-12f2cd1ebc4a\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,351 - GetTaskCommand - INFO - return task to client.  client_name: site-4  task_name: config   task_id: cff2ed3a-56d5-4676-b811-12f2cd1ebc4a  sharable_header_task_id: cff2ed3a-56d5-4676-b811-12f2cd1ebc4a\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,354 - Communicator - INFO - Received from simulator_server server. getTask: config size: 728B (728 Bytes) time: 0.012186 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,354 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,354 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,355 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a] - invoking task executor ConsensusExecutor\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,355 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a] - finished processing task\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,355 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a] - try #1: sending task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,355 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a] - checking task ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,358 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a] - start to send task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,358 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,359 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job] - got result from client site-4 for task: name=config, id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,360 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a] - finished processing client result by controller\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,360 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-4   task_id:cff2ed3a-56d5-4676-b811-12f2cd1ebc4a\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,361 - Communicator - INFO -  SubmitUpdate size: 606B (606 Bytes). time: 0.002285 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,361 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=cff2ed3a-56d5-4676-b811-12f2cd1ebc4a] - task result sent to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,361 - ClientTaskWorker - INFO - Finished one task run for client: site-4 interval: 2 task_processed: True\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,457 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,662 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,856 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=config, task_id=61256033-1e00-4555-a8f7-ef7377d1e6f1] - assigned task to client site-5: name=config, id=61256033-1e00-4555-a8f7-ef7377d1e6f1\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,857 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=config, task_id=61256033-1e00-4555-a8f7-ef7377d1e6f1] - sent task assignment to client. client_name:site-5 task_id:61256033-1e00-4555-a8f7-ef7377d1e6f1\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,857 - GetTaskCommand - INFO - return task to client.  client_name: site-5  task_name: config   task_id: 61256033-1e00-4555-a8f7-ef7377d1e6f1  sharable_header_task_id: 61256033-1e00-4555-a8f7-ef7377d1e6f1\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,860 - Communicator - INFO - Received from simulator_server server. getTask: config size: 701B (701 Bytes) time: 0.008032 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,861 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,861 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=61256033-1e00-4555-a8f7-ef7377d1e6f1\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,862 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=61256033-1e00-4555-a8f7-ef7377d1e6f1] - invoking task executor ConsensusExecutor\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,863 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=61256033-1e00-4555-a8f7-ef7377d1e6f1] - finished processing task\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,863 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=61256033-1e00-4555-a8f7-ef7377d1e6f1] - try #1: sending task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,863 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=61256033-1e00-4555-a8f7-ef7377d1e6f1] - checking task ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,867 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=61256033-1e00-4555-a8f7-ef7377d1e6f1] - start to send task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,867 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,869 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job] - got result from client site-5 for task: name=config, id=61256033-1e00-4555-a8f7-ef7377d1e6f1\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,870 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=61256033-1e00-4555-a8f7-ef7377d1e6f1] - finished processing client result by controller\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,870 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-5   task_id:61256033-1e00-4555-a8f7-ef7377d1e6f1\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,871 - Communicator - INFO -  SubmitUpdate size: 606B (606 Bytes). time: 0.003672 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,871 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=61256033-1e00-4555-a8f7-ef7377d1e6f1] - task result sent to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:29,872 - ClientTaskWorker - INFO - Finished one task run for client: site-5 interval: 2 task_processed: True\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:30,067 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:30,072 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task run_algorithm\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:30,369 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=run_algorithm, task_id=eda2b3b7-f158-424b-a6c0-86b769fe67be] - assigned task to client site-3: name=run_algorithm, id=eda2b3b7-f158-424b-a6c0-86b769fe67be\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:30,369 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=run_algorithm, task_id=eda2b3b7-f158-424b-a6c0-86b769fe67be] - sent task assignment to client. client_name:site-3 task_id:eda2b3b7-f158-424b-a6c0-86b769fe67be\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:30,370 - GetTaskCommand - INFO - return task to client.  client_name: site-3  task_name: run_algorithm   task_id: eda2b3b7-f158-424b-a6c0-86b769fe67be  sharable_header_task_id: eda2b3b7-f158-424b-a6c0-86b769fe67be\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:30,371 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.004151 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:30,371 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:30,372 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=eda2b3b7-f158-424b-a6c0-86b769fe67be\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:30,372 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=eda2b3b7-f158-424b-a6c0-86b769fe67be] - invoking task executor ConsensusExecutor\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,355 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=run_algorithm, task_id=29a5a623-1855-404a-922c-8548d2c1490d] - assigned task to client site-1: name=run_algorithm, id=29a5a623-1855-404a-922c-8548d2c1490d\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,356 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=run_algorithm, task_id=29a5a623-1855-404a-922c-8548d2c1490d] - sent task assignment to client. client_name:site-1 task_id:29a5a623-1855-404a-922c-8548d2c1490d\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,357 - GetTaskCommand - INFO - return task to client.  client_name: site-1  task_name: run_algorithm   task_id: 29a5a623-1855-404a-922c-8548d2c1490d  sharable_header_task_id: 29a5a623-1855-404a-922c-8548d2c1490d\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,360 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.007064 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,360 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,361 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=29a5a623-1855-404a-922c-8548d2c1490d\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,361 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29a5a623-1855-404a-922c-8548d2c1490d] - invoking task executor ConsensusExecutor\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,368 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=run_algorithm, task_id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25] - assigned task to client site-4: name=run_algorithm, id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,368 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=run_algorithm, task_id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25] - sent task assignment to client. client_name:site-4 task_id:6dc738d8-d113-4c70-99c1-53f5ed2c8a25\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,369 - GetTaskCommand - INFO - return task to client.  client_name: site-4  task_name: run_algorithm   task_id: 6dc738d8-d113-4c70-99c1-53f5ed2c8a25  sharable_header_task_id: 6dc738d8-d113-4c70-99c1-53f5ed2c8a25\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,369 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.004394 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,370 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,370 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,370 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25] - invoking task executor ConsensusExecutor\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,868 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=run_algorithm, task_id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da] - assigned task to client site-2: name=run_algorithm, id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,868 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=run_algorithm, task_id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da] - sent task assignment to client. client_name:site-2 task_id:f22cd8c0-9e9a-4532-b9c0-53b6c977e9da\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,868 - GetTaskCommand - INFO - return task to client.  client_name: site-2  task_name: run_algorithm   task_id: f22cd8c0-9e9a-4532-b9c0-53b6c977e9da  sharable_header_task_id: f22cd8c0-9e9a-4532-b9c0-53b6c977e9da\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,869 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.002690 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,870 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,870 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,870 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da] - invoking task executor ConsensusExecutor\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,877 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=run_algorithm, task_id=cd95cbc8-beec-4237-92a1-c27a203d8c90] - assigned task to client site-5: name=run_algorithm, id=cd95cbc8-beec-4237-92a1-c27a203d8c90\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,878 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=run_algorithm, task_id=cd95cbc8-beec-4237-92a1-c27a203d8c90] - sent task assignment to client. client_name:site-5 task_id:cd95cbc8-beec-4237-92a1-c27a203d8c90\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,878 - GetTaskCommand - INFO - return task to client.  client_name: site-5  task_name: run_algorithm   task_id: cd95cbc8-beec-4237-92a1-c27a203d8c90  sharable_header_task_id: cd95cbc8-beec-4237-92a1-c27a203d8c90\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,878 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.001726 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,879 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,879 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=cd95cbc8-beec-4237-92a1-c27a203d8c90\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:31,879 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=cd95cbc8-beec-4237-92a1-c27a203d8c90] - invoking task executor ConsensusExecutor\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,052 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=eda2b3b7-f158-424b-a6c0-86b769fe67be] - finished processing task\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,052 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da] - finished processing task\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,052 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da] - try #1: sending task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,052 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=eda2b3b7-f158-424b-a6c0-86b769fe67be] - try #1: sending task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,053 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da] - checking task ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,053 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=eda2b3b7-f158-424b-a6c0-86b769fe67be] - checking task ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,053 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=cd95cbc8-beec-4237-92a1-c27a203d8c90] - finished processing task\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,053 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25] - finished processing task\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,053 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25] - try #1: sending task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,053 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29a5a623-1855-404a-922c-8548d2c1490d] - finished processing task\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,053 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=cd95cbc8-beec-4237-92a1-c27a203d8c90] - try #1: sending task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,053 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25] - checking task ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,053 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=cd95cbc8-beec-4237-92a1-c27a203d8c90] - checking task ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,053 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29a5a623-1855-404a-922c-8548d2c1490d] - try #1: sending task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,053 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29a5a623-1855-404a-922c-8548d2c1490d] - checking task ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,054 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=eda2b3b7-f158-424b-a6c0-86b769fe67be] - start to send task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,054 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,054 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da] - start to send task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,054 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,055 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=cd95cbc8-beec-4237-92a1-c27a203d8c90] - start to send task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,055 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,055 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job] - got result from client site-3 for task: name=run_algorithm, id=eda2b3b7-f158-424b-a6c0-86b769fe67be\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,056 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=eda2b3b7-f158-424b-a6c0-86b769fe67be] - finished processing client result by controller\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,056 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25] - start to send task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,056 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,056 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-3   task_id:eda2b3b7-f158-424b-a6c0-86b769fe67be\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,056 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29a5a623-1855-404a-922c-8548d2c1490d] - start to send task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,056 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,056 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job] - got result from client site-2 for task: name=run_algorithm, id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,057 - Communicator - INFO -  SubmitUpdate size: 613B (613 Bytes). time: 0.002475 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,057 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=eda2b3b7-f158-424b-a6c0-86b769fe67be] - task result sent to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,057 - ClientTaskWorker - INFO - Finished one task run for client: site-3 interval: 2 task_processed: True\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,057 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da] - finished processing client result by controller\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,057 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-2   task_id:f22cd8c0-9e9a-4532-b9c0-53b6c977e9da\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,057 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job] - got result from client site-5 for task: name=run_algorithm, id=cd95cbc8-beec-4237-92a1-c27a203d8c90\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,057 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job] - got result from client site-4 for task: name=run_algorithm, id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,057 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job] - got result from client site-1 for task: name=run_algorithm, id=29a5a623-1855-404a-922c-8548d2c1490d\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,058 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=cd95cbc8-beec-4237-92a1-c27a203d8c90] - finished processing client result by controller\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,058 - Communicator - INFO -  SubmitUpdate size: 613B (613 Bytes). time: 0.003446 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,058 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-5   task_id:cd95cbc8-beec-4237-92a1-c27a203d8c90\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,058 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=f22cd8c0-9e9a-4532-b9c0-53b6c977e9da] - task result sent to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,058 - ClientTaskWorker - INFO - Finished one task run for client: site-2 interval: 2 task_processed: True\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,058 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25] - finished processing client result by controller\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,058 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-4   task_id:6dc738d8-d113-4c70-99c1-53f5ed2c8a25\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,058 - Communicator - INFO -  SubmitUpdate size: 613B (613 Bytes). time: 0.003244 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,058 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=cd95cbc8-beec-4237-92a1-c27a203d8c90] - task result sent to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,058 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=29a5a623-1855-404a-922c-8548d2c1490d] - finished processing client result by controller\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,059 - ClientTaskWorker - INFO - Finished one task run for client: site-5 interval: 2 task_processed: True\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,059 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-1   task_id:29a5a623-1855-404a-922c-8548d2c1490d\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,059 - Communicator - INFO -  SubmitUpdate size: 613B (613 Bytes). time: 0.003021 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,059 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=6dc738d8-d113-4c70-99c1-53f5ed2c8a25] - task result sent to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,059 - ClientTaskWorker - INFO - Finished one task run for client: site-4 interval: 2 task_processed: True\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,059 - Communicator - INFO -  SubmitUpdate size: 613B (613 Bytes). time: 0.002907 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,059 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=29a5a623-1855-404a-922c-8548d2c1490d] - task result sent to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,059 - ClientTaskWorker - INFO - Finished one task run for client: site-1 interval: 2 task_processed: True\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,107 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task run_algorithm exit with status TaskCompletionStatus.OK\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,107 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - Workflow: controller finalizing ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,108 - P2PAlgorithmController - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - BaseController stopped\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,108 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - ABOUT_TO_END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,109 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,109 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,109 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,109 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,109 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,109 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,109 - ReliableMessage - INFO - ReliableMessage is shutdown\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,109 - ObjectStreamer - INFO - Stream Runer is Shut Down\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,109 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - Server runner finished.\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:32,109 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:33,942 - SimulatorServer - INFO - Server app stopped.\n",
+      "\u001b[38m2025-01-31 19:25:08,949 - SimulatorRunner - INFO - Create the Simulator Server.\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:08,950 - CoreCell - INFO - server: creating listener on tcp://0:50296\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,065 - CoreCell - INFO - server: created backbone external listener for tcp://0:50296\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,065 - ConnectorManager - INFO - 2282: Try start_listener Listener resources: {'secure': False, 'host': 'localhost'}\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,066 - conn_manager - INFO - Connector [CH00002 PASSIVE tcp://0:56944] is starting\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,571 - CoreCell - INFO - server: created backbone internal listener for tcp://localhost:56944\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,573 - conn_manager - INFO - Connector [CH00001 PASSIVE tcp://0:50296] is starting\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,575 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,575 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,576 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,577 - SimulatorServer - INFO - max_reg_duration=60.0\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,633 - hci - INFO - Starting Admin Server localhost on Port 50297\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,633 - SimulatorRunner - INFO - Deploy the Apps.\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,667 - SimulatorRunner - INFO - Create the simulate clients.\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,667 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,668 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,673 - Communicator - INFO - Trying to register with server ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,674 - ClientManager - INFO - authenticated client site-1: client_fqcn='site-1'\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,674 - ClientManager - INFO - Client: New client site-1@192.168.0.251 joined. Sent token: aa94d95a-7ab7-4fd4-b5e7-c63bec545ad0.  Total clients: 1\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,674 - Communicator - INFO - register RC: ok\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,674 - FederatedClient - INFO - Successfully registered client:site-1 for project simulator_server. Token:aa94d95a-7ab7-4fd4-b5e7-c63bec545ad0 SSID:\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,674 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,674 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,674 - Communicator - INFO - Trying to register with server ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,675 - ClientManager - INFO - authenticated client site-2: client_fqcn='site-2'\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,675 - ClientManager - INFO - Client: New client site-2@192.168.0.251 joined. Sent token: 11cddf2b-425e-4fa3-8bab-54604d5740b1.  Total clients: 2\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,675 - Communicator - INFO - register RC: ok\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,675 - FederatedClient - INFO - Successfully registered client:site-2 for project simulator_server. Token:11cddf2b-425e-4fa3-8bab-54604d5740b1 SSID:\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,675 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,675 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,675 - Communicator - INFO - Trying to register with server ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,676 - ClientManager - INFO - authenticated client site-3: client_fqcn='site-3'\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,676 - ClientManager - INFO - Client: New client site-3@192.168.0.251 joined. Sent token: 8c2cb4f1-d813-416e-b80f-cdb358d07eb2.  Total clients: 3\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,676 - Communicator - INFO - register RC: ok\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,676 - FederatedClient - INFO - Successfully registered client:site-3 for project simulator_server. Token:8c2cb4f1-d813-416e-b80f-cdb358d07eb2 SSID:\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,676 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,676 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,676 - Communicator - INFO - Trying to register with server ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,677 - ClientManager - INFO - authenticated client site-4: client_fqcn='site-4'\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,677 - ClientManager - INFO - Client: New client site-4@192.168.0.251 joined. Sent token: 299ee1b8-90a4-472c-8de2-f583a724ef83.  Total clients: 4\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,677 - Communicator - INFO - register RC: ok\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,677 - FederatedClient - INFO - Successfully registered client:site-4 for project simulator_server. Token:299ee1b8-90a4-472c-8de2-f583a724ef83 SSID:\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,677 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,677 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,677 - Communicator - INFO - Trying to register with server ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,678 - ClientManager - INFO - authenticated client site-5: client_fqcn='site-5'\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,678 - ClientManager - INFO - Client: New client site-5@192.168.0.251 joined. Sent token: f93d8156-d096-4b6f-b5a4-5685d65d9291.  Total clients: 5\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,678 - Communicator - INFO - register RC: ok\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,678 - FederatedClient - INFO - Successfully registered client:site-5 for project simulator_server. Token:f93d8156-d096-4b6f-b5a4-5685d65d9291 SSID:\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,678 - SimulatorRunner - INFO - Set the client status ready.\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,678 - SimulatorRunner - INFO - Deploy and start the Server App.\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,678 - Cell - INFO - Register blob CB for channel='server_command', topic='*'\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,678 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,678 - ServerCommandAgent - INFO - ServerCommandAgent cell register_request_cb: server.simulate_job\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,688 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,688 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,688 - AuxRunner - INFO - registered aux handler for topic __sync_runner__\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,688 - AuxRunner - INFO - registered aux handler for topic __job_heartbeat__\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,688 - AuxRunner - INFO - registered aux handler for topic __task_check__\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,688 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,688 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,688 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,689 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job] - Server runner starting ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,689 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,689 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job] - starting workflow controller () ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,689 - P2PAlgorithmController - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - P2PAlgorithmController started\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,689 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - Workflow controller () started\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:09,689 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:10,684 - SimulatorClientRunner - INFO - Start the clients run simulation.\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:11,686 - SimulatorClientRunner - INFO - Simulate Run client: site-1 on GPU group: None\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:11,687 - SimulatorClientRunner - INFO - Simulate Run client: site-2 on GPU group: None\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:11,688 - SimulatorClientRunner - INFO - Simulate Run client: site-3 on GPU group: None\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:11,689 - SimulatorClientRunner - INFO - Simulate Run client: site-4 on GPU group: None\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:11,691 - SimulatorClientRunner - INFO - Simulate Run client: site-5 on GPU group: None\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,725 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,726 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,726 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,728 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,728 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,791 - CoreCell - INFO - site-5.simulate_job: created backbone external connector to tcp://localhost:50296\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,791 - CoreCell - INFO - site-4.simulate_job: created backbone external connector to tcp://localhost:50296\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,791 - CoreCell - INFO - site-2.simulate_job: created backbone external connector to tcp://localhost:50296\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,791 - CoreCell - INFO - site-3.simulate_job: created backbone external connector to tcp://localhost:50296\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,791 - CoreCell - INFO - site-1.simulate_job: created backbone external connector to tcp://localhost:50296\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,792 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:50296] is starting\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,792 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:50296] is starting\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,792 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:50296] is starting\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,792 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:50296] is starting\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,792 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:50296] is starting\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,793 - conn_manager - INFO - Connection [CN00002 127.0.0.1:50323 => 127.0.0.1:50296] is created: PID: 2298\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,793 - conn_manager - INFO - Connection [CN00002 127.0.0.1:50322 => 127.0.0.1:50296] is created: PID: 2294\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,793 - conn_manager - INFO - Connection [CN00002 127.0.0.1:50326 => 127.0.0.1:50296] is created: PID: 2295\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,793 - conn_manager - INFO - Connection [CN00002 127.0.0.1:50325 => 127.0.0.1:50296] is created: PID: 2296\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,793 - conn_manager - INFO - Connection [CN00002 127.0.0.1:50324 => 127.0.0.1:50296] is created: PID: 2297\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,793 - conn_manager - INFO - Connection [CN00008 127.0.0.1:50296 <= 127.0.0.1:50323] is created: PID: 2282\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,794 - conn_manager - INFO - Connection [CN00009 127.0.0.1:50296 <= 127.0.0.1:50322] is created: PID: 2282\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,794 - conn_manager - INFO - Connection [CN00010 127.0.0.1:50296 <= 127.0.0.1:50326] is created: PID: 2282\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,794 - conn_manager - INFO - Connection [CN00011 127.0.0.1:50296 <= 127.0.0.1:50325] is created: PID: 2282\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,795 - conn_manager - INFO - Connection [CN00012 127.0.0.1:50296 <= 127.0.0.1:50324] is created: PID: 2282\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,896 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,897 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,897 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,897 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,897 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,897 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,897 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,898 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,898 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:12,898 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,639 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,639 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,639 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,640 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,640 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,640 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,640 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:13,641 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,157 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - synced to Server Runner in 0.513002872467041 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,157 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,157 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,157 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,158 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,158 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - synced to Server Runner in 0.5145540237426758 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,158 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,158 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - client runner started\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,158 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,158 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-3\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,158 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,158 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,158 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - synced to Server Runner in 0.515538215637207 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,159 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - synced to Server Runner in 0.5153059959411621 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,159 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,159 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,159 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,159 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - synced to Server Runner in 0.5155537128448486 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,159 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,159 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,159 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - client runner started\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,159 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,159 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,159 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,159 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-1\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,159 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,159 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,159 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,160 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,160 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,160 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - client runner started\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,160 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,160 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-2\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,160 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,160 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - client runner started\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,160 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-5\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,160 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,161 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,161 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - client runner started\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,161 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-4\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,161 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=config, task_id=e20ea295-ee1b-414e-a0ac-cf038aff2e98] - assigned task to client site-1: name=config, id=e20ea295-ee1b-414e-a0ac-cf038aff2e98\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,162 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=config, task_id=e20ea295-ee1b-414e-a0ac-cf038aff2e98] - sent task assignment to client. client_name:site-1 task_id:e20ea295-ee1b-414e-a0ac-cf038aff2e98\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,163 - GetTaskCommand - INFO - return task to client.  client_name: site-1  task_name: config   task_id: e20ea295-ee1b-414e-a0ac-cf038aff2e98  sharable_header_task_id: e20ea295-ee1b-414e-a0ac-cf038aff2e98\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,164 - Communicator - INFO - Received from simulator_server server. getTask: config size: 701B (701 Bytes) time: 0.004675 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,164 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,165 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=e20ea295-ee1b-414e-a0ac-cf038aff2e98\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,165 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=e20ea295-ee1b-414e-a0ac-cf038aff2e98] - invoking task executor ConsensusExecutor\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,165 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=e20ea295-ee1b-414e-a0ac-cf038aff2e98] - finished processing task\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,165 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=e20ea295-ee1b-414e-a0ac-cf038aff2e98] - try #1: sending task result to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,166 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=e20ea295-ee1b-414e-a0ac-cf038aff2e98] - checking task ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,168 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=e20ea295-ee1b-414e-a0ac-cf038aff2e98] - start to send task result to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,168 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,169 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job] - got result from client site-1 for task: name=config, id=e20ea295-ee1b-414e-a0ac-cf038aff2e98\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,169 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=e20ea295-ee1b-414e-a0ac-cf038aff2e98] - finished processing client result by controller\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,169 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-1   task_id:e20ea295-ee1b-414e-a0ac-cf038aff2e98\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,170 - Communicator - INFO -  SubmitUpdate size: 606B (606 Bytes). time: 0.001849 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,170 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=e20ea295-ee1b-414e-a0ac-cf038aff2e98] - task result sent to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,170 - ClientTaskWorker - INFO - Finished one task run for client: site-1 interval: 2 task_processed: True\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,170 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,373 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,671 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=config, task_id=6137abaa-7a6b-41fa-bf99-75691d0552d4] - assigned task to client site-2: name=config, id=6137abaa-7a6b-41fa-bf99-75691d0552d4\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,672 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=config, task_id=6137abaa-7a6b-41fa-bf99-75691d0552d4] - sent task assignment to client. client_name:site-2 task_id:6137abaa-7a6b-41fa-bf99-75691d0552d4\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,673 - GetTaskCommand - INFO - return task to client.  client_name: site-2  task_name: config   task_id: 6137abaa-7a6b-41fa-bf99-75691d0552d4  sharable_header_task_id: 6137abaa-7a6b-41fa-bf99-75691d0552d4\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,675 - Communicator - INFO - Received from simulator_server server. getTask: config size: 728B (728 Bytes) time: 0.005403 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,675 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,676 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=6137abaa-7a6b-41fa-bf99-75691d0552d4\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,676 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6137abaa-7a6b-41fa-bf99-75691d0552d4] - invoking task executor ConsensusExecutor\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,676 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6137abaa-7a6b-41fa-bf99-75691d0552d4] - finished processing task\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,676 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6137abaa-7a6b-41fa-bf99-75691d0552d4] - try #1: sending task result to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,677 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6137abaa-7a6b-41fa-bf99-75691d0552d4] - checking task ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,679 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6137abaa-7a6b-41fa-bf99-75691d0552d4] - start to send task result to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,680 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,680 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job] - got result from client site-2 for task: name=config, id=6137abaa-7a6b-41fa-bf99-75691d0552d4\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,681 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=6137abaa-7a6b-41fa-bf99-75691d0552d4] - finished processing client result by controller\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,681 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-2   task_id:6137abaa-7a6b-41fa-bf99-75691d0552d4\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,682 - Communicator - INFO -  SubmitUpdate size: 606B (606 Bytes). time: 0.001925 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,682 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6137abaa-7a6b-41fa-bf99-75691d0552d4] - task result sent to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,682 - ClientTaskWorker - INFO - Finished one task run for client: site-2 interval: 2 task_processed: True\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,780 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:14,780 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:15,173 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=config, task_id=8023ae42-9d50-4551-b941-996930fd80c2] - assigned task to client site-3: name=config, id=8023ae42-9d50-4551-b941-996930fd80c2\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:15,174 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=config, task_id=8023ae42-9d50-4551-b941-996930fd80c2] - sent task assignment to client. client_name:site-3 task_id:8023ae42-9d50-4551-b941-996930fd80c2\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:15,175 - GetTaskCommand - INFO - return task to client.  client_name: site-3  task_name: config   task_id: 8023ae42-9d50-4551-b941-996930fd80c2  sharable_header_task_id: 8023ae42-9d50-4551-b941-996930fd80c2\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:15,177 - Communicator - INFO - Received from simulator_server server. getTask: config size: 701B (701 Bytes) time: 0.008376 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:15,178 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:15,178 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=8023ae42-9d50-4551-b941-996930fd80c2\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:15,179 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8023ae42-9d50-4551-b941-996930fd80c2] - invoking task executor ConsensusExecutor\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:15,179 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8023ae42-9d50-4551-b941-996930fd80c2] - finished processing task\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:15,180 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8023ae42-9d50-4551-b941-996930fd80c2] - try #1: sending task result to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:15,180 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8023ae42-9d50-4551-b941-996930fd80c2] - checking task ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:15,187 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8023ae42-9d50-4551-b941-996930fd80c2] - start to send task result to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:15,188 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:15,189 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job] - got result from client site-3 for task: name=config, id=8023ae42-9d50-4551-b941-996930fd80c2\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:15,189 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=8023ae42-9d50-4551-b941-996930fd80c2] - finished processing client result by controller\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:15,190 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-3   task_id:8023ae42-9d50-4551-b941-996930fd80c2\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:15,191 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:15,191 - Communicator - INFO -  SubmitUpdate size: 606B (606 Bytes). time: 0.002746 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:15,191 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8023ae42-9d50-4551-b941-996930fd80c2] - task result sent to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:15,191 - ClientTaskWorker - INFO - Finished one task run for client: site-3 interval: 2 task_processed: True\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:15,390 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,191 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=config, task_id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408] - assigned task to client site-4: name=config, id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,191 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=config, task_id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408] - sent task assignment to client. client_name:site-4 task_id:8ebcd861-20ac-49a2-8af1-59c6f1dc0408\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,191 - GetTaskCommand - INFO - return task to client.  client_name: site-4  task_name: config   task_id: 8ebcd861-20ac-49a2-8af1-59c6f1dc0408  sharable_header_task_id: 8ebcd861-20ac-49a2-8af1-59c6f1dc0408\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,192 - Communicator - INFO - Received from simulator_server server. getTask: config size: 728B (728 Bytes) time: 0.002734 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,193 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,193 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,193 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408] - invoking task executor ConsensusExecutor\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,193 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408] - finished processing task\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,193 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408] - try #1: sending task result to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,194 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408] - checking task ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,196 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408] - start to send task result to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,196 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,197 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job] - got result from client site-4 for task: name=config, id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,197 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408] - finished processing client result by controller\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,198 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-4   task_id:8ebcd861-20ac-49a2-8af1-59c6f1dc0408\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,199 - Communicator - INFO -  SubmitUpdate size: 606B (606 Bytes). time: 0.002651 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,199 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408] - task result sent to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,199 - ClientTaskWorker - INFO - Finished one task run for client: site-4 interval: 2 task_processed: True\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,230 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,429 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,707 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=config, task_id=418f0f0d-8540-424d-a432-566d8a4c96bf] - assigned task to client site-5: name=config, id=418f0f0d-8540-424d-a432-566d8a4c96bf\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,709 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=config, task_id=418f0f0d-8540-424d-a432-566d8a4c96bf] - sent task assignment to client. client_name:site-5 task_id:418f0f0d-8540-424d-a432-566d8a4c96bf\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,710 - GetTaskCommand - INFO - return task to client.  client_name: site-5  task_name: config   task_id: 418f0f0d-8540-424d-a432-566d8a4c96bf  sharable_header_task_id: 418f0f0d-8540-424d-a432-566d8a4c96bf\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,712 - Communicator - INFO - Received from simulator_server server. getTask: config size: 728B (728 Bytes) time: 0.011580 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,712 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,712 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=418f0f0d-8540-424d-a432-566d8a4c96bf\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,713 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=418f0f0d-8540-424d-a432-566d8a4c96bf] - invoking task executor ConsensusExecutor\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,714 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=418f0f0d-8540-424d-a432-566d8a4c96bf] - finished processing task\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,714 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=418f0f0d-8540-424d-a432-566d8a4c96bf] - try #1: sending task result to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,714 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=418f0f0d-8540-424d-a432-566d8a4c96bf] - checking task ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,719 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=418f0f0d-8540-424d-a432-566d8a4c96bf] - start to send task result to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,719 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,721 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job] - got result from client site-5 for task: name=config, id=418f0f0d-8540-424d-a432-566d8a4c96bf\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,721 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=418f0f0d-8540-424d-a432-566d8a4c96bf] - finished processing client result by controller\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,721 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-5   task_id:418f0f0d-8540-424d-a432-566d8a4c96bf\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,722 - Communicator - INFO -  SubmitUpdate size: 606B (606 Bytes). time: 0.003091 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,722 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=418f0f0d-8540-424d-a432-566d8a4c96bf] - task result sent to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,723 - ClientTaskWorker - INFO - Finished one task run for client: site-5 interval: 2 task_processed: True\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,838 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:17,840 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task run_algorithm\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:18,218 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=run_algorithm, task_id=c2a1cb67-6602-48b1-85bf-914887b44a05] - assigned task to client site-3: name=run_algorithm, id=c2a1cb67-6602-48b1-85bf-914887b44a05\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:18,218 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=run_algorithm, task_id=c2a1cb67-6602-48b1-85bf-914887b44a05] - sent task assignment to client. client_name:site-3 task_id:c2a1cb67-6602-48b1-85bf-914887b44a05\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:18,219 - GetTaskCommand - INFO - return task to client.  client_name: site-3  task_name: run_algorithm   task_id: c2a1cb67-6602-48b1-85bf-914887b44a05  sharable_header_task_id: c2a1cb67-6602-48b1-85bf-914887b44a05\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:18,221 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.006713 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:18,221 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:18,221 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=c2a1cb67-6602-48b1-85bf-914887b44a05\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:18,222 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=c2a1cb67-6602-48b1-85bf-914887b44a05] - invoking task executor ConsensusExecutor\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,204 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=run_algorithm, task_id=01ff5afb-adc5-4814-93ff-60de220be502] - assigned task to client site-4: name=run_algorithm, id=01ff5afb-adc5-4814-93ff-60de220be502\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,205 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=run_algorithm, task_id=01ff5afb-adc5-4814-93ff-60de220be502] - sent task assignment to client. client_name:site-4 task_id:01ff5afb-adc5-4814-93ff-60de220be502\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,205 - GetTaskCommand - INFO - return task to client.  client_name: site-4  task_name: run_algorithm   task_id: 01ff5afb-adc5-4814-93ff-60de220be502  sharable_header_task_id: 01ff5afb-adc5-4814-93ff-60de220be502\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,206 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=run_algorithm, task_id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937] - assigned task to client site-1: name=run_algorithm, id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,206 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.003966 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,206 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=run_algorithm, task_id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937] - sent task assignment to client. client_name:site-1 task_id:d87f7a9d-bd7a-489a-8e9a-1084ba7e4937\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,207 - GetTaskCommand - INFO - return task to client.  client_name: site-1  task_name: run_algorithm   task_id: d87f7a9d-bd7a-489a-8e9a-1084ba7e4937  sharable_header_task_id: d87f7a9d-bd7a-489a-8e9a-1084ba7e4937\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,207 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,207 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=01ff5afb-adc5-4814-93ff-60de220be502\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,207 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=01ff5afb-adc5-4814-93ff-60de220be502] - invoking task executor ConsensusExecutor\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,207 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.005148 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,208 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,208 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,208 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937] - invoking task executor ConsensusExecutor\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,717 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=run_algorithm, task_id=13d25962-cc41-4d1f-b591-9712f8dad70d] - assigned task to client site-2: name=run_algorithm, id=13d25962-cc41-4d1f-b591-9712f8dad70d\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,718 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=run_algorithm, task_id=13d25962-cc41-4d1f-b591-9712f8dad70d] - sent task assignment to client. client_name:site-2 task_id:13d25962-cc41-4d1f-b591-9712f8dad70d\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,718 - GetTaskCommand - INFO - return task to client.  client_name: site-2  task_name: run_algorithm   task_id: 13d25962-cc41-4d1f-b591-9712f8dad70d  sharable_header_task_id: 13d25962-cc41-4d1f-b591-9712f8dad70d\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,719 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.002432 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,719 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,719 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=13d25962-cc41-4d1f-b591-9712f8dad70d\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,719 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=13d25962-cc41-4d1f-b591-9712f8dad70d] - invoking task executor ConsensusExecutor\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,729 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=run_algorithm, task_id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2] - assigned task to client site-5: name=run_algorithm, id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,730 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=run_algorithm, task_id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2] - sent task assignment to client. client_name:site-5 task_id:07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,730 - GetTaskCommand - INFO - return task to client.  client_name: site-5  task_name: run_algorithm   task_id: 07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2  sharable_header_task_id: 07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,730 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.001971 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,731 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,731 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,731 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2] - invoking task executor ConsensusExecutor\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,858 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=c2a1cb67-6602-48b1-85bf-914887b44a05] - finished processing task\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,858 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937] - finished processing task\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,858 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=c2a1cb67-6602-48b1-85bf-914887b44a05] - try #1: sending task result to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,858 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=c2a1cb67-6602-48b1-85bf-914887b44a05] - checking task ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,858 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=13d25962-cc41-4d1f-b591-9712f8dad70d] - finished processing task\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,859 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937] - try #1: sending task result to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,859 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=13d25962-cc41-4d1f-b591-9712f8dad70d] - try #1: sending task result to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,859 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=13d25962-cc41-4d1f-b591-9712f8dad70d] - checking task ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,859 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937] - checking task ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,860 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=01ff5afb-adc5-4814-93ff-60de220be502] - finished processing task\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,860 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=01ff5afb-adc5-4814-93ff-60de220be502] - try #1: sending task result to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,860 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2] - finished processing task\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,860 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=01ff5afb-adc5-4814-93ff-60de220be502] - checking task ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,860 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2] - try #1: sending task result to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,860 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2] - checking task ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,861 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=c2a1cb67-6602-48b1-85bf-914887b44a05] - start to send task result to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,861 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,861 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=13d25962-cc41-4d1f-b591-9712f8dad70d] - start to send task result to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,861 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,861 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937] - start to send task result to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,862 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,862 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job] - got result from client site-3 for task: name=run_algorithm, id=c2a1cb67-6602-48b1-85bf-914887b44a05\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,862 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=01ff5afb-adc5-4814-93ff-60de220be502] - start to send task result to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,862 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,862 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2] - start to send task result to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,862 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job] - got result from client site-2 for task: name=run_algorithm, id=13d25962-cc41-4d1f-b591-9712f8dad70d\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,863 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,863 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=c2a1cb67-6602-48b1-85bf-914887b44a05] - finished processing client result by controller\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,863 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job] - got result from client site-1 for task: name=run_algorithm, id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,863 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-3   task_id:c2a1cb67-6602-48b1-85bf-914887b44a05\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,863 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job] - got result from client site-4 for task: name=run_algorithm, id=01ff5afb-adc5-4814-93ff-60de220be502\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,864 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job] - got result from client site-5 for task: name=run_algorithm, id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,864 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=13d25962-cc41-4d1f-b591-9712f8dad70d] - finished processing client result by controller\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,864 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-2   task_id:13d25962-cc41-4d1f-b591-9712f8dad70d\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,864 - Communicator - INFO -  SubmitUpdate size: 613B (613 Bytes). time: 0.003372 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,864 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=c2a1cb67-6602-48b1-85bf-914887b44a05] - task result sent to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,864 - ClientTaskWorker - INFO - Finished one task run for client: site-3 interval: 2 task_processed: True\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,864 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937] - finished processing client result by controller\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,864 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-1   task_id:d87f7a9d-bd7a-489a-8e9a-1084ba7e4937\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,864 - Communicator - INFO -  SubmitUpdate size: 613B (613 Bytes). time: 0.003169 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,865 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=13d25962-cc41-4d1f-b591-9712f8dad70d] - task result sent to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,865 - ClientTaskWorker - INFO - Finished one task run for client: site-2 interval: 2 task_processed: True\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,865 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=01ff5afb-adc5-4814-93ff-60de220be502] - finished processing client result by controller\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,865 - Communicator - INFO -  SubmitUpdate size: 613B (613 Bytes). time: 0.003251 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,865 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-4   task_id:01ff5afb-adc5-4814-93ff-60de220be502\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,865 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937] - task result sent to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,865 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2] - finished processing client result by controller\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,865 - ClientTaskWorker - INFO - Finished one task run for client: site-1 interval: 2 task_processed: True\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,865 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-5   task_id:07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,865 - Communicator - INFO -  SubmitUpdate size: 613B (613 Bytes). time: 0.003074 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,866 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=01ff5afb-adc5-4814-93ff-60de220be502] - task result sent to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,866 - ClientTaskWorker - INFO - Finished one task run for client: site-4 interval: 2 task_processed: True\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,866 - Communicator - INFO -  SubmitUpdate size: 613B (613 Bytes). time: 0.003156 seconds\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,866 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2] - task result sent to server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,866 - ClientTaskWorker - INFO - Finished one task run for client: site-5 interval: 2 task_processed: True\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:19,888 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task run_algorithm exit with status TaskCompletionStatus.OK\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:20,089 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - Workflow: controller finalizing ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:20,089 - P2PAlgorithmController - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - P2PAlgorithmController stopped\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:20,090 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - ABOUT_TO_END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:20,092 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:20,093 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:20,093 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:20,093 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:20,093 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:20,094 - ReliableMessage - INFO - ReliableMessage is shutdown\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:20,094 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:20,094 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:20,094 - ObjectStreamer - INFO - Stream Runer is Shut Down\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:20,094 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - Server runner finished.\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,706 - SimulatorServer - INFO - Server app stopped.\n",
       "\n",
       "\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:33,949 - ReliableMessage - INFO - shutdown reliable message monitor\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,067 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,068 - GetTaskCommand - INFO - return task to client.  client_name: site-3  task_name: __end_run__   task_id:   sharable_header_task_id: \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,070 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,070 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,071 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,072 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,072 - GetTaskCommand - INFO - return task to client.  client_name: site-2  task_name: __end_run__   task_id:   sharable_header_task_id: \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,072 - GetTaskCommand - INFO - return task to client.  client_name: site-4  task_name: __end_run__   task_id:   sharable_header_task_id: \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,073 - GetTaskCommand - INFO - return task to client.  client_name: site-5  task_name: __end_run__   task_id:   sharable_header_task_id: \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,073 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,073 - GetTaskCommand - INFO - return task to client.  client_name: site-1  task_name: __end_run__   task_id:   sharable_header_task_id: \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,073 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - server asked to end the run\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,074 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - started end-run events sequence\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,074 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n",
-      "\u001b[33m2025-01-31 10:43:34,075 - Communicator - WARNING - Failed to get_task from simulator_server server. Will try it again.\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,075 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,075 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,076 - FederatedClient - INFO - pull_task completed. Task name:None Status:False \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,076 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,076 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - started end-run events sequence\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,077 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,077 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,077 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,077 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - server asked to end the run\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,077 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,078 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - started end-run events sequence\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,078 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n",
-      "\u001b[33m2025-01-31 10:43:34,078 - Communicator - WARNING - Failed to get_task from simulator_server server. Will try it again.\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,078 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,078 - FederatedClient - INFO - pull_task completed. Task name:None Status:False \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,078 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,079 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,079 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-3 \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,079 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - server asked to end the run\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,079 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,079 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-2 \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,079 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - started end-run events sequence\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,079 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n",
-      "\u001b[33m2025-01-31 10:43:34,079 - Cell - WARNING - Receiving unknown req_id='a9ad8558-922d-4a2d-8b68-4c2d6e450e28', discarded: 'a9ad8558-922d-4a2d-8b68-4c2d6e450e28' headers: {'cn__return_code': 'ok', 'cn__req_id': '', 'cn__msg_type': 'req', 'sm__ri': 'a9ad8558-922d-4a2d-8b68-4c2d6e450e28', 'sm__pe': 'fobs', 'cn__payload_len': 459, 'sm__ch': 'return_only', 'sm__tp': 'server_command:get_task', 'sm__sz': 459, 'sm__id': 1738360030169108, 'sm__dt': 2, 'sm__sq': 0, 'sm__os': 0, 'sm__op': True, 'cn__reply_expected': False, 'cn__optional': True, 'cn__secure': False, 'cn__topic': 'sm__DATA', 'cn__channel': 'sm__STREAM', 'cn__destination': 'site-5.simulate_job', 'cn__from': 'server', 'cn__to': 'site-5.simulate_job', 'cn__origin': 'server.simulate_job', 'cn__route': [['server.simulate_job', 1738320214.076976], ['server', 1738320214.0770261], ('site-5.simulate_job', 1738320214.0791261)], 'cn__send_time': 1738320214.077028}\u001b[0m\n",
-      "\u001b[33m2025-01-31 10:43:34,079 - Cell - WARNING - Receiving unknown req_id='9e1feaab-50af-4e97-a33e-ae25ae7c7878', discarded: '9e1feaab-50af-4e97-a33e-ae25ae7c7878' headers: {'cn__return_code': 'ok', 'cn__req_id': '', 'cn__msg_type': 'req', 'sm__ri': '9e1feaab-50af-4e97-a33e-ae25ae7c7878', 'sm__pe': 'fobs', 'cn__payload_len': 459, 'sm__ch': 'return_only', 'sm__tp': 'server_command:get_task', 'sm__sz': 459, 'sm__id': 1738360030169109, 'sm__dt': 2, 'sm__sq': 0, 'sm__os': 0, 'sm__op': True, 'cn__reply_expected': False, 'cn__optional': True, 'cn__secure': False, 'cn__topic': 'sm__DATA', 'cn__channel': 'sm__STREAM', 'cn__destination': 'site-2.simulate_job', 'cn__from': 'server', 'cn__to': 'site-2.simulate_job', 'cn__origin': 'server.simulate_job', 'cn__route': [['server.simulate_job', 1738320214.078249], ['server', 1738320214.078298], ('site-2.simulate_job', 1738320214.0791411)], 'cn__send_time': 1738320214.0783}\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,079 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,079 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - started end-run events sequence\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,080 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,080 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,080 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,080 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,080 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-1 \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,080 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,080 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,080 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 39848\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,081 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,081 - conn_manager - INFO - Connection [CN00008 Not Connected] is closed PID: 39829\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,081 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-4 \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,081 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 39847\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,081 - conn_manager - INFO - Connection [CN00011 Not Connected] is closed PID: 39829\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,081 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-5 \u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,082 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 39846\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,082 - conn_manager - INFO - Connection [CN00010 Not Connected] is closed PID: 39829\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,083 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 39849\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,083 - conn_manager - INFO - Connection [CN00012 Not Connected] is closed PID: 39829\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,083 - FederatedClient - INFO - Shutting down client run: site-1\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,084 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 39850\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,084 - conn_manager - INFO - Connection [CN00009 Not Connected] is closed PID: 39829\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,084 - FederatedClient - INFO - Shutting down client run: site-2\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,084 - FederatedClient - INFO - Shutting down client run: site-3\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,085 - FederatedClient - INFO - Shutting down client run: site-4\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,085 - FederatedClient - INFO - Shutting down client run: site-5\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,085 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - asked to abort - triggered abort_signal to stop the RUN\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,400 - hci - INFO - Admin Server localhost on Port 57865 shutdown!\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,400 - SimulatorServer - INFO - shutting down server\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,400 - SimulatorServer - INFO - canceling sync locks\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:34,400 - SimulatorServer - INFO - server off\u001b[0m\n",
-      "\u001b[38m2025-01-31 10:43:37,873 - MPM - INFO - MPM: Good Bye!\u001b[0m\n"
+      "\u001b[38m2025-01-31 19:25:21,727 - ReliableMessage - INFO - shutdown reliable message monitor\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,868 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,868 - GetTaskCommand - INFO - return task to client.  client_name: site-5  task_name: __end_run__   task_id:   sharable_header_task_id: \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,869 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,869 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,869 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - server asked to end the run\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,869 - GetTaskCommand - INFO - return task to client.  client_name: site-3  task_name: __end_run__   task_id:   sharable_header_task_id: \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,869 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - started end-run events sequence\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,869 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,869 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,870 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,870 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,870 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,870 - GetTaskCommand - INFO - return task to client.  client_name: site-1  task_name: __end_run__   task_id:   sharable_header_task_id: \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,870 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,870 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - server asked to end the run\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,870 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - started end-run events sequence\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,870 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-5 \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,870 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,871 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,871 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,871 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,871 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,871 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-3 \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,871 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - server asked to end the run\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,872 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,872 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - started end-run events sequence\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,872 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,872 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,872 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 2298\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,872 - GetTaskCommand - INFO - return task to client.  client_name: site-2  task_name: __end_run__   task_id:   sharable_header_task_id: \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,872 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,872 - conn_manager - INFO - Connection [CN00008 Not Connected] is closed PID: 2282\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,872 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,872 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-1 \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,872 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 2296\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,873 - conn_manager - INFO - Connection [CN00011 Not Connected] is closed PID: 2282\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,873 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,873 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,873 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - server asked to end the run\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,873 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - started end-run events sequence\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,874 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,874 - GetTaskCommand - INFO - return task to client.  client_name: site-4  task_name: __end_run__   task_id:   sharable_header_task_id: \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,874 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,874 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 2294\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,874 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,874 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,874 - conn_manager - INFO - Connection [CN00009 Not Connected] is closed PID: 2282\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,874 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-2 \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,874 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,874 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - server asked to end the run\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,875 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - started end-run events sequence\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,875 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,875 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,875 - conn_manager - INFO - Connection [CN00010 Not Connected] is closed PID: 2282\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,875 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 2295\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,875 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,875 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,876 - FederatedClient - INFO - Shutting down client run: site-1\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,876 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-4 \u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,876 - FederatedClient - INFO - Shutting down client run: site-2\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,876 - FederatedClient - INFO - Shutting down client run: site-3\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,876 - FederatedClient - INFO - Shutting down client run: site-4\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,877 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 2297\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,877 - conn_manager - INFO - Connection [CN00012 Not Connected] is closed PID: 2282\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,877 - FederatedClient - INFO - Shutting down client run: site-5\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:21,877 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - asked to abort - triggered abort_signal to stop the RUN\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:22,159 - hci - INFO - Admin Server localhost on Port 50297 shutdown!\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:22,160 - SimulatorServer - INFO - shutting down server\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:22,161 - SimulatorServer - INFO - canceling sync locks\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:22,161 - SimulatorServer - INFO - server off\u001b[0m\n",
+      "\u001b[38m2025-01-31 19:25:25,607 - MPM - INFO - MPM: Good Bye!\u001b[0m\n"
      ]
     }
    ],
@@ -665,27 +659,25 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 8,
    "metadata": {},
    "outputs": [
     {
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "/var/folders/82/970ljrw529v0chx2svm8gwwr0000gp/T/ipykernel_39797/4202699194.py:6: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n",
-      "  f\"site-{i+1}\": torch.load(f\"tmp/runs/consensus/site-{i+1}/value_sequence.pt\") for i in range(num_clients)\n",
-      "/Users/ffarina/Documents/code/NVFlare/nvflare/app_opt/p2p/utils/topology.py:37: UserWarning: Casting complex values to real discards the imaginary part (Triggered internally at /Users/runner/work/pytorch/pytorch/pytorch/aten/src/ATen/native/Copy.cpp:308.)\n",
-      "  idx = eigenvalues.float().argsort(descending=True)\n"
+      "/var/folders/82/970ljrw529v0chx2svm8gwwr0000gp/T/ipykernel_2247/4202699194.py:6: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n",
+      "  f\"site-{i+1}\": torch.load(f\"tmp/runs/consensus/site-{i+1}/value_sequence.pt\") for i in range(num_clients)\n"
      ]
     },
     {
      "data": {
       "text/html": [
-       "
Consensus value: 0.47792279720306396\n",
+       "
Consensus value: 0.5452268123626709\n",
        "
\n" ], "text/plain": [ - "Consensus value: \u001b[1;36m0.47792279720306396\u001b[0m\n" + "Consensus value: \u001b[1;36m0.5452268123626709\u001b[0m\n" ] }, "metadata": {}, @@ -714,12 +706,12 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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yQIm+TtLF1kJPKStkS/pUi0BorwX6ZItwcI777yjggAJPk9GxoqRxrDyN83Ly1Pj33z88ccq4PUlgZgEQxKcyXNkjBwZM+bQoUOqBkZqTCSolhomaSckQbacSwmY5XMl50m6HBOFXMj67RA1kq69ssjjvqSbZMuWLYN2L/U4evSoa/z48a6UlBTVrfass86qtJ9gXXvFggULXD169FDP69y5s+oiHKxr79atW10XXnihKzo6Wj3m6eZbVddP6crbpUsXl8lkcqWnp7vuuusu1/Hjx/3KSBfS7t27VzrOmnRrFTabzfXUU0+prqPyOnKeJk+e7NdF9nS79oqioiLXAw884GrWrJl6HenC+uKLL/p1YfWQrstnn3226nKblJSk3uPChQu9j69YscJ17rnnqvMo+/vLX/7i7cbt6SZbm3PgcdNNN6l9DB06NOjjX375patnz56uqKgoV5s2bVzTpk1Txxr4twvs2it27dql9ivvSf6Wjz76qHpPgccsfv75Z9fo0aNdycnJqry8h+uuu861aNEib9fthx56yNWrVy9XfHy8+rvI7ddff73G75WoLunkP6EPgYiIiIg0bDNCREREYcVghIiIiMKKwQgRERGFFYMRIiIiCisGI0RERBRWDEaIiIgorBrFoGcykqKMbCgDCjWmOTCIiIgimcvlUoPsyaCDgROJNrpgRAIRmVSKiIiIGp8DBw6oUX8bdTDiGUpb3owMZ0xEREQNX2FhoapMONmUGI0mGPGkZiQQYTBCRETUuFTXxIINWImIiCisah2MyBTWMuukNEaRSOeLL76o9jlLly5Fnz591OyZMqvmBx98cKrHS0RERJEejJSUlKgpp1977bUald+zZw+uvPJKNf33hg0b1HTft912G7777rtTOV4iIiI6w9S6zcjll1+ulpp688030bZtW8yYMUPd79q1K3744Qe8/PLLGD58eG1fnogIkd5V0m63w+FwhPtQiGAwGGA0Gk972I16b8C6cuVKDB061G+bBCFSQ1KViooKtfi2xiUiinRWqxVHjhxBaWlpuA+FyCsmJgaZmZkwm81osMFIVlYW0tPT/bbJfQkwysrKEB0dXek5zz//PJ566qn6PjQiokZDBn+UtLf8EpU2e/LFz0EgKdy1dBIg5+TkqM9mx44dTzqwWaPr2jt58mRMnDixUj9lIqJIJV/6EpDI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pNIIrGwzQkREFEoMRiqlaRiMEBERhRKDEQ+maYiIiMKCwUilrr1swEpERBRKDEY82LWXiIgoLBiMeLDNCBERUVgwGBFOB2Av125zOHgiIqKQYjDi23hVsGaEiIgopBiM+AYjOj1gtIT7aIiIiCIKgxHf9iKSotHpwn00REREEYXBiODoq0RERGHDYMQvGGG3XiIiolBjMCJsrBkhIiIKFwYjfkPBMxghIiIKNQYjfkPBMxghIiIKNQYjgkPBExERhQ2DEb+h4DlJHhERUagxGPFN05hYM0JERBRqDEYE0zRERERhw2BEME1DREQUNgxG/Lr2smaEiIgo1BiMCA4HT0REFDYMRgSDESIiorBhMOLXZoTBCBERUagxGBHs2ktERBQ2DEb8uvayZoSIiCjUGIwIpmmIiIjChsGIYNdeIiKisGEw4nL59KbhoGdEREShxmDEViYRiXabw8ETERGFHIMRT3sRwTQNERFR4whGXnvtNbRp0wZRUVEYMGAAVq9eXWXZd955BxdccAGSkpLUMnTo0JOWD1tPGmM0oDeE+2iIiIgiTq2DkU8++QQTJ07E1KlTsX79evTq1QvDhw9HdnZ20PJLly7FmDFjsGTJEqxcuRItW7bEsGHDcOjQITSoMUaYoiEiIgoLncslLThrTmpCzjnnHMyaNUvddzqdKsC455578Mgjj1T7fIfDoWpI5Pljx46t0WsWFhYiMTERBQUFSEhIQJ06uBZ4dwjQpBVw/691u28iIqIIVljD63etakasVivWrVunUi3eHej16r7UetREaWkpbDYbmjZtWmWZiooK9QZ8l3pP05g4xggREVE41CoYyc3NVTUb6enpftvlflZWVo328fDDD6NZs2Z+AU2g559/XkVSnkVqXuo/TcNghIiI6IzvTfPCCy/g448/xty5c1Xj16pMnjxZVel4lgMHDtTfQXnHGGGbESIionAw1qZwSkoKDAYDjh496rdd7mdkZJz0uf/3f/+ngpH//e9/6Nmz50nLWiwWtYSEjQOeERERNZqaEbPZjL59+2LRokXebdKAVe4PHDiwyudNnz4df/3rXzF//nz069cPDQqHgiciImo8NSNCuvWOGzdOBRX9+/fHK6+8gpKSEowfP149Lj1kmjdvrtp9iGnTpmHKlCn46KOP1NgknrYlcXFxagk7du0lIiJqXMHI9ddfj5yc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", "text/plain": [ "
" ] From 89df8608ab15c30b72f17b962bba813d27eee009 Mon Sep 17 00:00:00 2001 From: Holger Roth Date: Fri, 31 Jan 2025 14:51:18 -0500 Subject: [PATCH 11/15] test locally --- .../1-consensus/README.md | 4 ++- .../1-consensus/consensus.png | Bin 0 -> 26714 bytes .../1-consensus/launcher.py | 7 +---- .../2-two_moons/dgd_results.png | Bin 76368 -> 63688 bytes .../2-two_moons/gt_results.png | Bin 75513 -> 63835 bytes .../2-two_moons/gtadam_results.png | Bin 45749 -> 38833 bytes nvflare/app_opt/p2p/executors/consensus.py | 5 ++-- .../executors/distributed_gradient_descent.py | 24 +++++------------- 8 files changed, 13 insertions(+), 27 deletions(-) create mode 100644 examples/advanced/distributed_optimization/1-consensus/consensus.png diff --git a/examples/advanced/distributed_optimization/1-consensus/README.md b/examples/advanced/distributed_optimization/1-consensus/README.md index 114105c67b..1ae35540f2 100644 --- a/examples/advanced/distributed_optimization/1-consensus/README.md +++ b/examples/advanced/distributed_optimization/1-consensus/README.md @@ -1,2 +1,4 @@ # Consensus algorithm -In this example we show how to run the consensus algorithm. You can find a detailed walkthrough in the [tutorial](tutorial.ipynb) or you can just run the provided [script](launcher.py) via `python launcher.py`. \ No newline at end of file +In this example we show how to run the consensus algorithm. You can find a detailed walkthrough in the [tutorial](tutorial.ipynb) or you can just run the provided [script](launcher.py) via `python launcher.py`. + +![dgd](consensus.png) diff --git a/examples/advanced/distributed_optimization/1-consensus/consensus.png b/examples/advanced/distributed_optimization/1-consensus/consensus.png new file mode 100644 index 0000000000000000000000000000000000000000..a8bac4f57514e04cfd645afeef2dbb204b418100 GIT binary patch literal 26714 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 GUHK0@vyDdp literal 0 HcmV?d00001 diff --git a/examples/advanced/distributed_optimization/1-consensus/launcher.py b/examples/advanced/distributed_optimization/1-consensus/launcher.py index ffd2bd6a6d..65f1eb5094 100644 --- a/examples/advanced/distributed_optimization/1-consensus/launcher.py +++ b/examples/advanced/distributed_optimization/1-consensus/launcher.py @@ -22,11 +22,6 @@ from nvflare.app_opt.p2p.utils.config_generator import generate_random_network -class CustomConsensusExecutor(ConsensusExecutor): - def __init__(self): - super().__init__(initial_value=random.randint(0, 10)) - - if __name__ == "__main__": # Create job job = FedJob(name="consensus") @@ -42,7 +37,7 @@ def __init__(self): # Add clients for i in range(num_clients): - executor = CustomConsensusExecutor() + executor = ConsensusExecutor(random.randint(0, 10)) job.to(executor, f"site-{i + 1}") # run diff --git a/examples/advanced/distributed_optimization/2-two_moons/dgd_results.png b/examples/advanced/distributed_optimization/2-two_moons/dgd_results.png index 555aa9f3c7729cbd66eb8f64a6790e0c3fc1322d..0f95fc8d8529baffcaec2ad6545ce7d863415b37 100644 GIT binary patch literal 63688 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 literal 76368 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

9PU=u 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 diff --git a/examples/advanced/distributed_optimization/2-two_moons/gt_results.png b/examples/advanced/distributed_optimization/2-two_moons/gt_results.png index 8f086af3119cd006a435c269db1f0b2776f3d978..ab32aaa6a7e68a365c8dac92f17679f7c4c99344 100644 GIT binary patch literal 63835 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�vA_`^cR)&PT86%Jrcg%^t0!QgSiJD~A6KVREExeoc=yDDDJbk# zlWFad3Ys&)(v>uwUO8sq16NjHL^PCyCA+?O^7w~hi{8s;@pM(gsGW~|+O3`_zfE$D*kMP`9K20e0=AQ)of*8M4eJ0LAYCUR?($)2=U`$r3mVb910OM2r%P(^ z%iqDFYX9h&;G5iE`=09W)`F`43fW3P3Eno|JL6fK?`KGS5>xQ)SB3`w9tE#Qt?z$NentDAmi%i>;1Io6tM=9?WZ63Q zD%lac*~W+;cr}v+5b(OyUs6!hjDG+UbX( z_`e?yX@wIT3bQ%hIP6Viq_7zW>CuMuMi1_#J1aI;5^>uSYE~LBFW4w`0kAMEa`IKX zi%(P5^_TM*t547ow>ROe+5laI@QX}VeA$rm`E`f4u?)(wL}vJ)cF6TkZw_mRS_KEU z;2Zz+Bq%LoI?hw`?Vr?af>lt&{lQfu?i(sZ#z<+$od62>svnX~ThVnIuel^8$g_ zG^vY3J0xr~t=c3Kp->S~)K+}&Oigy14J>imyZTIFl2Y-8BbM=EWnMZ&=DA^za32PS zeQUsw@*q54yTOzPxen@XyZk=I`(OuAjwC9ukD?Rd{eK>O-Rn`oliZF3fEO5W$dW?_ z!}xba8=wNk696dkeXfn-Dnwlw%5S$^tNL&mOp(%0(JF zF_E2$tGBSYBcG91y1m!u>W0h^Zot#C>*8vcm5y((_@7R@q&$whh{!6nJj)QRwZpO> zXjVEpb5+HJY+)x_Hnhk_2j&~DXMr#ZKy++aDJUV3lChj20tXCLx$i zhss-u^eV@q@V%hnZoj3~Gv8GO64@~e86zZ!cQjU31i)JHh3H?s0XTi({D6a10eH#Vfh>*zUgSxk^Zrp`eA?XT~`f7}(3&2MR!LDEj4n0|uq&o-;BY4jANQG|*p zA*IXdu9u z$kQ?HI)ukT1|sxC=YbYmh|J9j6p&?o%=19#<*hXoy#n#NxMh5odKV2iI-Im$jL_OU z2Stya6RiYBba_UN&x1<15FWl6LK&cKV%N)Ja~#o$st3WdmX-EYSfh}lb0oz*%2sp= zT$vv`qKUOlgvQ89#4kB@Uh*8XFnt?e!Qir5){aTzBzhTJ1GeISIH!=@Lr-|GRH*6! z=WpRE$JD>>g8n@tplSRb@4Bm&&C)^+-wuT{i7IL7vGDg8T@9`*QRJ=K9~z3v+896y zi#KJ}(wVLS63778ZrhZNum(xwi`6Z~p;Wd*K~1xt%fOs?pUeHH9}hG{6*>Jc4*=4o z&y7EJcOD!6DeOfV{Rb%tc<~=} ztMo()?-gQ7A4LFzKB2w)WMs#O2hJ~?TGX@lf!#ZzpKLPpI?T6d+W_(j9TU@WUfw@r zq$jkiN=oJp+rax}=)~MmYLI~5Pu8woPUCSWoWqjVU73e<$uCOJ)brjJU0ZO9DB#FN zeTN>~#@i;cdd+C8J;NY5^Ll+%?b7+JTK6?+8%ME!=On`xa3yDmvWCxmI~9$1S>N$F z{YnOs^2e|^HUa;Br649@rem%%J>o~HAR!7xma!acDIUOIPP*e@xWw-|JzV~qli@VN zyU%H@SL=Xg{}Fi*F3$So4m$;l)yxp zAa4vmq;p$opz)?5?3d}afO4Ay`}zt0NfS0E?A%#qz(dDiPRAxbT_FIN9Jq|zlaer) zPSKK21Ip`w%{~{pX4{e}m=;&jj!5tGWN*Ipz-~SM_Ss1XTjEzid<5~m?%jDKbtC$+ zM+1rPe|-8*B+*B^^OFq&l^bE0iG_rpFBxY~z`x~W02|VKl7C;B#)XQ7@J5h@_y$=q zvKiXBCQ~xEr2N3{`^{k7wNBbf$`20w%AXDcpSR4ZoM-#BSHDtarRD0v*==-!ZWj>F zZ<10K&nkamgnx6kUV1Llj!E&xDoEO+TwLUS%sB^myCwiy(McTwq)g~U;(9ksmBdTG zuddZCbWCx+Z(Z$Oiq_ho-Fk9@jh7aj8*yahXv0ob1%3LopzQzSbDG3=RnWoQU(Ah$ z-rVVp+A}}Vxg@l9k1xQlSOb~m^=+R^Y$#5c0%{SFPd8_sOMPg26opkMbp>(0)N!HD z12y^s6(cQS$*j%!(lPgt=QLf%CFrkWR|_zq~e$766u&LfqkqznE?o!1`0e>{_mo+W@cUpavr`kO`%%sifo|MNq)@98%)s7!IDrR^G4Cp z^ZEieOIft7q0Ti+?kF%&g{bHAw_NrLyrFJ&o;ALt(sZ0=Aou~O7O6nKBXr^?F%M;* zK~sw-0!vhXn6)!6vNcxg z+nrqlHG)wq2qYomDM5uK>_CEC`WHKlz4kis!-wSoXg+M4XCL~fuk z2Jx-CwO;Hb8`e}qAU^lZ8T^=#f}Fe&_i|PD&zBF&Q1{@5Vsa9#v<)|RW)ry3ceyn8 z=<599Sfw14^*3BUH1L2m)CtDgTfMRQV%>I5$Kd0gO(-Dj)k+W#$fNz}0XwtTaMcjs zP*i&G_E)5gq*m(r-1!;=MT@2UkjeCnsA%WB1c6BZFA~5ESvu@|~V$y;novDM!?4GOoWXpt> z8ghz@kpO_g*IL|vU<;hsPx18hof5X|h@bnMP(9%?*M*8$+>J-QQ1mJ)q?q#9aSz7? zzB)upMGOR{&o`>5wgHDq#ilOBZw~NI4rgF1uf?0D`v;Ml*n#Z+|kn`6vLapwCm8bFwRT0_BZ3EC^ z%x-y(S628Lih|5TJ!YOXnp|lR3(#<6xZU{;AD|%UV7I#UNaDcO@`FCbR!%p0vwj+svQ8Hjv}y(;DH*DovaD zo}!h?KgfBA(b9@*qtL9ph~X@CYu`mW1htclSX+?l9$ovHceb%&>f#c@1&g~#Nf6nr2syCjS<=zlZ5Ka(! zm-D*WEcZM)yCI3=fkxBS@n=L(>r^(^<`&JUa+{A81t|@rWCHADVQz+-Pk+|+^DW=R z65Y)D_u^eprxGt$EeV1R$ZhNuS ziP01VoEgj$PkJidDn+g3biZlptG~H5JPoy&4ie_m1R`$kcV=_tQkBM0t4L1yH04o~(UGtri6^b3tjBmd!3YWw%X0t8wH-pnTLir_gN zpL$;mZr>{w!OToniFZI>w-+*VhQm^vo&SY+nf;ohZ=ZI=tYZJH%DEItgvnZL6&>)B zcbUxOE_;x%q&QLD==KP-4{Bc%d&GYer2lR%+I-QdY!NG3SFgcR`Ufzu&S- z&HXW?T7`r6zD^&8qr}B^(=@Jy+Gapk<{G&wP$#uNV5f8I{(H8O#Q}@%m%9LOY&~!? z^%l{<4kuM`X~RV~`xjG~%#vHNp>r^bm=~9x0T;tbAX%jXHz#$&x-ns@KfD*6Bs~M3 z`gaR)*Gba|*ZOO(p6tu$4+&e-c{z!Naf7>C~Do^(^Frb@dZeGb2QshvezP31Uduv5Z~X_!NZs@yAe#p zpoMQ<8&&p3E4@B{V7j&)7nPh%hV1S=1N2BJi;>6E^XsW!tRZ|~u+n>9C#Q4vIXFxts3vJ#`#J-uaj=haFbSsdf$9f>K_rQLdN_@%#7>I>-qDna`zS{^ zgBFVVL;=gvR60LY-l3cTbEzd)4!5I$Bh%L$rMR-T8oji5o9M^|2wXTm**eot=&vKb<3xkQn4SS|u zH*TI%Fd;KDK~Qabl8ngwBodM=jN!2;ty{0Am=?yqMQbEJfEhw`wc;?kA!=nsZ*6U@ z_`nXiTdrx@osAT);CQ**GJR~3p7B?=S&g|{s~^1Cu}jldbE1MGatKTa6u)CwAe8l; z>dVFH^hFJkg+@>CA$T>SXjsGGcU%ys&o{WC0TohjU~gOohA>i_w6w9B&tSEavW)uS zL{URerL4>PL7JUCrTk!~tC1_&u{1X5{2R7=4?Rn~is*YHoqo9bLFCw4XC-*4ywKB4 z8_;6&-WD)SR^(3jal!RZRzX1pbrZ0>5l`J!MSO%f?(J<3D9=!zM*O#B%Ul^1E^B&N zaN(v82#nGinML?V=oapg5ECnICID-SbzMF-^qG*r|9hJQ(mlDXHnMZ+exzAg zUO1Je&%ix+JM$fd;`B>|kmqQ8OU51hmgCDE`;^Br-G%k}+|g@LuoM$jt^p9+65?Ze zkY}YN@=2fG|HMrAV@0Mk<=2#}*@M@C&YdQM?!a0;*6;NwQ58Z?szC#0o|9Rgr`K8w z*uR6NbFLKi5H~5@a-5a3oG64VNLUxD(`<6w=Bcwc9$B8NU}-o>55r$5 z)Cu%aR_dH{oLl*YI=!x~Cq6+i)qehb#(;$6vV-}Mk@v$(oVgmcCXp+L zB@yKVEbP&yqxlF0JNG4d^Rg*Z=*nS&#KzK}V}>SI_H#?>9n;uSbjrjt>Y@z+!n6en zM}d+38IVR3xpNfYO7uPVM`C7XZg;bVtf4O@&jU74@q*Gx#Il!QPd{Mo-QfZRH7F$` z87sGa#BO+Q-h(6Idm(l*E1B*_4HV50iEK73EEMhxo5$w78rDpUO+;pCap}ST^9CCV zFAT{Py84)&@$zn#0qt8}*yxUdFEe`43q`};Ntl*ncjgs7`m8@|)(m{#aMnf1Crh%# zOFxBis3t*!A~G&E?sBL${qXVdceKWqa?BNK@)6NC-tkdU4L>pXupyFzr$oz)uSD!P zwKK2K!L+C>c5rQzI)Us{RgS-r&r02NY6Htzepo|BQ&EnQq^cGd5(4Y# zzvDi7z9`4K36!<_9D|CJ8tiqY(Yhwch^-2Vueq zs#=y(`_EQd8+kAw>squBO7xALX2)HbQAfK@Aba8t*1nMdqTw+0y_G79Xi5O%d2k(* z<4F@oD>vD6tB|zX1WSNk(0C|+TLo*B_xHe2^v+NHMV$ujCtFA)qL$W|Egal*>T%Pw z5b8lC22&RpS90KJsQg|3Ej_%~LHcYp=oPgPT6MY5S09M5M#lg@Me-&YCn2jXYV@za zbXzkP7Wa3b79e+^5PEg5n^(Vn5&IY8zwHMwrDtA|&?y^zC<`sNdZy?ogYumg9P9;oOt?NjHm-~Jwj+()JC>qo#vnwR)26&axj3zR?n-Z5I! z;#L-HRSSIa9(<0PF9&ON;yOERVrBYrs2fuoN2Q{aGUSdv7U_>GHxmnxGcs`fps!sd zpVgoqG4G)v7N}V4R8&M^o)rzo!1sv)Ca5;WfAINtb869q#dJ4?r0qPFFQlNW* zeMiG!HByT23*1zRdWvQPLN5see?yLH{qtE~NeMC}35JaHqVoTS8Y<hBoC>4+yy057i4-Z&fIqzV zq8uR+VFZb^%vR>i)`hPx@oMQ%;!y@cI|UTO`&2vovP;bKv)Eg!mJ3I5d&%*<%+ z@&aVdu{*rAR2Y#3@Xc-Y^%^hBjSg8)R@`aEjg8|jknpz6$~RX8E(JcVv zv|YGd{y@zo|FP$ml!s8Jf$%2))f)(mG7(8m`~dA7CK$~g_8Q!A$K5Z=8h6N;d=W;1ZYu! zTSw=wxvYguI3^_YN6xAih{NC1qgW|WWH&twQCCwbk%dQ}-3vKUi?3_o`dHi;Eu^tJ zzr)9x20X^mmTwS|BE-}!an=_ZstG~7g;t1#y*83TGx#fH%lSYjjlhQOjl5@Ex8 zzhh&I8tbm@tC|HpY~*;Piq0FLlQ7qvM7OML>|1=j_jdDh1NvcsQWH>NQzVNR9=@fd z+*kKl4`JR}1CgLq0}mJP20-)LhYbxQZamh4)_-FeVtp)I?vIk_x+Ak3XW7g4oJzv> zfmZxx?xB0L8yzxpEG`O29rxkGCNy3C^mcA8KMRWa2DOCM3idRdBFzX+@q>UQi zKpvgMDpShXwso&2VSQe?e3pQ97^vu&*Hq9V_buORo3AMIi9nraE&A9fPfxg_<&FFC z6ZxJldc~PjbCs2vuCvF#6Pl-az(%uUAPM)SJ5PIK#Dj?37w!`>sS~HByGxidID9#f zO7|U*CrfH{h7KgPP}|FFYgrh0qDjky4i7St$PYa})Ee;70{b@rvZ`NxU%izi4wEqS zAh?3Ng%s~x1^1BXf`p!5ySa~**apW3Q*(tf4ARVtdVQ@(&N~lE*~V|ETy`fW8L?E9 zO|Y|JLyZ>ec{WGh8ks0S%>sTg6gQy6{=3@V(UD!VT&F+h9C8kmIT>Ik%J=osjvevmzlR6c@P6cO z7gBgZo}Eu*kcE!;l)pY32{pA8ZYryX4qZPjRH1vcvf}uf76z!U2MI6PIBF0X`lErq zaduNHH!~i<7BDf-@IS9!2p+|FiYaA8@7M!yh|^%O$G14hmMwCynv+idd5I80q`EGN zBKWhitJJ>#CRS5ji?`KRK~@y8>?2Q3x0PgS4pb71L-!YFQr~y;XpK}7CxJ358)>n+ zDz(1OtYmmt39kTR-7)|PUB&c9Du>rB9SdqPczgk4&(%tq#EoWbgM-a}c@9Jv?)G`m zXz};fQQ|hGvV8}}h{CPtPfi%*fQSd=n6cqg?ZSqJn|GwZJ_W{ZPT2%~!D3Vk`ultpR7|hNHbdUkSEr)e4$o!BZM+>31f+djgFI>}9 zkgG_liox&a{gSE(&L1KAP>ovMzt*3N7N5~cD^5`iPU@tocUP|%C0odwwp2%uBNEAadg5=149N8O8xow{tDda=I3IfH+KJT*LWJj(RmFK7p) z95!O=Jzh_*3DS0)`0`YUk5!;u`T=tnmQQ=lIUy#DOAbI}nx1&WhMLO8%e4ctXh*Fy z=}&S^B4>S%8c!DK8<^a^qrt{*DKg^bi7K-V5rkU!VkUN!HE>OuqibOLccR z`nPJVkW~XQNHP1J_^i?K4_*T>N}Q^fT+S~g zf~`oRh+EIX=M*D_?>g9D?e+~cG(sB6RWhD+CeVB@sRYTp8XneU=`n$jT9=O zkN%|{3L_odGyuH9Pg${Ix1=CulG{?{U)%PbLfM-Jyip#9!> zY3Ja_t2Pou|CO09)XOPh!^54S&|G5=vC3%Au!@BUN1CZd?Cx1J zl7*R}?IV(&{`OPI$BXsbMN(z!Lza3@7g7;*X~r7G)%(4-#t!y}iKf8rLV#=taf^bd z>a7kAH!O&o$Zr(C?6DfIl*hLJ;ZkI?W!ifq5Sg5>(+g&9V|PHLwqA>ii(Z!)5CM2mavxl5pVh}ki9l%QF6+0~ z&S2Zz2(z%2Ro|@AbD(I1pqPAHNa81Xv053Jhg%ID{$;bL+1c2IZz_A@1qTLvrZfmob^>`y$7Wj#@Lw+WOt^nz*vER5aeb0%t(g$uRF1iup&@|Y@oWNgrM z6JgB3CVXeXDS1Ojhf^?OMolsTTIt}@N7knOUcBX~hBHYE`B;d-B&_hSKKeso@@9WsF^7{K=acS==}(0 zp2}$DqozgU#no;RJ2D57<~t{Dx!mX`#K+e?e~-YV;5gx5v;=@5RSIm^-kBnr1>VbUtfhKBL&0uAnE zg8*k2%^YC%Kj{K`=a{JWPpggnK2Yxa-0Deu)sFQ<6R(QjoSTl1KZA`#G*&5YU;ngX z(6vrn8r;3EC|1sRYY|{)kyO04&78X`Se!QUfk)s9!oRkCD!k^q5;a#gd`*+ z?pyYwQvHW!>IIh4Gmm2jc8w10-jnIMM8h@Af2a@c%j*~TEV4SxCfok5O+L0A&R8B= z`VHO|w`_l~)d3?aE=-kOdOQ<|PdJFZ^5N6~YZiGxDb*a;ITuLPkN zz@z8aujV5*=k99=_FLv#EedLE?tOajUV_AOBIZ6%oTVh#;zMw81Ii)kue;k0((SLv z4T9+35<3I*ZoE;i2G2)ojj!Cy9{kL+wo9$s$OhFCL5Rrn!?#;qffiqXC{f6A>D43g zuzohu6ZxThu|(lR0W%nvUVA2mNJ;P|p#R~INBip4iIDe=(Q2C~9X&nN%I-iVjC z_vHK%miX#>ZjebS&g%4?925Nu9k0INj;V%%Sl#g!BHk)A9u+c^qhQOnV_VhcZBc!E zo*vI6@u%U;;xjdE=$E`KgxAnlyJZ8;MWG$`jEoFIQc}UvwRlYN2?EYAs_h;^EoR1c zg8Gip7)-edZ=6pnlV87?9WP<^?oZ7g_>r>q@I9*WvS<+r$yB=8O95)>oT3>mI|Uu* z$@Zp}8dz>A>8}JAW6qP5%f6eWegfi%&0Ww;@q@t|8^&AwM|Ly7@ZbJug2J-}&T%jz zB}a6ZT#6cqY!`1OWpyx|#F>0%Nd&cDGcLrPi_^x@t20(URHS{bx69|Ut|ZdSO+1! zMQH6-5jdMcg6{mM0blRio4g$m^l(U6)BC@#T(uKfBu0FLhT)x$2$(p{k9;c7ugPoh zx6_kbsRANViEdDGVFHfdWkSZy<+RAEM3xaLw@t)N>BL!>XevURer?JP9EMPi>aJVA z1bk8LolmAlj8T~J$k#DW3Ob0LNt@aQjjqV37B{7rsCOrpOZA4%ft-EH#>TLpyhHQ-0aq z;3F>`6^Xu1^oI+qHC3E5xmz~RbJs`BZKe;@dL;z<%COAKgKV02j$0l5r#a~hj&YsH z^nVa0r}97;Lh#;3-VeeP)^MGU9JU%<+8nLqNANluq{rQZA}@}d>OV;0JrDW`s{LR6 z-eDuP0b{QS3A1Y>L%yPr#O5G2pZ{o1HZuED7>mic>qX{sLM=PYu&1r8(8F)8@o7TzQWRINcJ(jseeUKP zJ3_UY;G_GYRmR#lAG;r~EB(pf;0g_|V=yl_{@%gbc8sIM?Xj(%40>S8YCL1_-@{&Y zeQLYFw&^f{D#h#_9Pf8Vb<_yaA4=E2RSO<4U*6Lpy6#@PZC_v_JyPn!tW*GQDxFfx$eRNnPvv^#Kcq9cp?&7j2V8KAJX}WIb-#v%;anIy7cAYPj6s?9*4oXhK7W%0pk&0+*e2Lan~9 zob4h06JbTqJ3CE#?PERrU$P%K-yzfNfDmWs!+R2WPtE5{%L@zNaHJjBcTmv$BR5?q z0O9enVimF+EBdaO&}!WmJByZxU`Ol}oV>)3rl{5JA?dV{rnl6(3;f*orX~!%&Rz`> zOwmgj_v}cXSBXvye;Z=RW`iz27+N#~A<<5O%oO)VwXOu|-*L&%AUgdbm$pdH(tY1| zNCy3AVEuYHqziGsPUB8Acpx;6&0pxsON0EoqKY7A8b8e^YM=dpD;|Ul#iS4kDa!I@ zv0eqVN1`}=*U_2)NsiMplcy-s1l%tx!psR9mP~h5vTo^qrPr4gA6KvLb@|=Hm5cmR zh%)pG+iRF|*D@qwO7|yEG>QKFi1YlCQx8ZL#>B+5&2q{Dh6eZbLP4kRIr{d`#{%KQ zlRd~TOBG{3hb)@JQ&VO z!5G>4bR0Vl{l-*?E_wKdUZYuteHNRc-EtgAaWn_l?#_0p&7FW=OPW(o>|#|ih&-zh zHw#;aV;iQdv61NNYMZJG{lE;=xOg_=!M{A{%rtQ{f57vW^YiFoq;x!M&cBkfsl3 zSKfwb>;d;`?Ko?eoKU&>qFoVYH7Tj!W{!WPvrF)mTOEJL#kV5YtAeJ_%cK$MQIr#L z){wi^1dXBEmr&q(`C>rlqRi}}{E-#34HiSVfW*|MyR0mHSa|qibRb@TduN1=A z^xJx}v4R{6N9^Y*T%D~meePz2t+oQch$2_kH>>&GuPIvHU!y+Gi?6I&m-q6Qw6-ql zrr3RQ--4qF$#i;s6@B^DYj4EDSMI4L6E!3YQMvc>frdI@eMw86j?f%Fcg55;OOC{~Ni?^u?az?C@WZl&Z|4}0-B^mscP ztbm(DqV*`rxLKc6;p_u+d!nkVxi2p-JNH~)h4c0v78e)Q^+o)Gtz`!PY-bi?5$2yu z7dLQ#(sJ%slB@b&RACd)uKwcpb5xMYzT=xBA6pW0sw_V_%xCf-86gG zuJu0^ylbA6@-D|RDk^ZbeFBEDjL-tTfh6HF)dvYc9V+}l7;}tVED96ZbGt~gyYM4~ zP$2Dr93m@&{Jo1nw{h8>%&~ckFeWaJ)Ec+ry1t489y-Ju9*#xTA4RaOOd67K5iQFi z^#ej@wd0ij#iVpUP3bQLsilIdQ?14B; z@ipM2upw#cE3AM z+OTDLp)9hnq%(PVie|q~rcZn$7 zF^suueSEv3l3qB*9RFpLyuJDp^Q^xy_4i*r%^|o4gcaePE=9go=@>fen62>fPRoJ* zUFLwXc(Rs28rl@SF-gXjvC>DJ85&X2LlIk?bCVei%^&BUZMs~vb@m!r?WFrFo1n6` z#xn)a7|KV9ct_ChRz*C(X(bte(JqiIXFTFXUiE!sh2;2J683jl*UNB~+EWSVdP~h- z5ocCRg{l(ZE=5UYalV{|>PAPMbm!%@#w zI))7HHBH}%tt{Q}Bx{u4ij{ay>)RW9M9$9{K{rdXpYVsO6J4&Ck!dXYwN1Gl92{OX zk->*^+&1ZY{9PAfukw`fkjG776*)Ya(T{d4?EwwdX=*1OxT-3!l^G9M{m*ngA2-L< ztVcl_-Y^81lBbwj`{V`{;Jh)yjy?AP2fQ|h0;$!KvbGws)>>smAnv7_0OHLMA3N711e>ki}LZPFM05d5uU zS6gYLgmtn^+bAf54L57${H-^GXx44E$y#B&AKZ0P4c3|gknfCA{ndj0gzD&rS_ za{>vUTanAbZ9C+1F>L`%rF~!W0p1rtxWR+y_6YbggCu)bx;)($8}N zj7xaeu{;KOb|Dw))E1=&)`;}F#;>Kn($*$Rs{(fD>5sy51RfEX`QwfZXo(Ngie8sl z(u@<%J{vqj-S*dwm=UuU``}VsPGy_D+dQ4@nKix%JA9W>iEs-!jE}_pZSl`O18J?`RmBM z;+}3#?#4DCgkosSGnlIQ&fz>^ANid6f~t*|JS@-%6(d3Ts_(@}%LnxA51|$%*9QF+JeKP$M=W$smwFC&QW`L$fxIg(HIoztNPWNu^5S=z)Vw zD69P$P%X->ojTmYj+7f;UiQ=OpaX322Oug8dCxdz9L{R@f^}$4`KcS`Q|&Wi=`VN# z6EZ0m4c~>YZirfB(6M_QIW3f0hbN_mXTf`TE0YP0vlN}RX zsV=u8um06I^b`4Q%5uUq>tJ-#gS;`DKl z4mlSs$OYd~5x3-@>^6Kaa)V-a&q7(wK^L!{3H zI6dW!gM_5x<6-uCbM_N4qbFEzibhQTfdxSA7E# ziA^4SR2tG)(iFX~D$}pu5eWcI2_E{e_vh&y(uppVd>kmv$Bb%5isKXM-C0N6gLni7 z^HHdFT%Q2#WENG;`JiH|2SiMdA3{eDN~%NxkY|-|J!RuUluih^o_7N;D8iJI;j3{# z3bCXYJH^Vva#~;IH*%Yw@RT?Rg(VVoxt#;WuLEuH0s?@y9sA78!(quDRxS6C{Gefr zaOEOs>Le645clRRbiZiorrJywnWYW8+Uq)hckyXf={IRPF4pZi52tx`z{>$7OyV!r z(-HgJQahDX%BaHNerNG=?7)G}PpaSknAM*{0bN*EktXvpVq>85dgodSTV{|XhZ~>f zpR2Cy&6O4;vSN9)N9rGT62D|19~kf6dzMzHFweh|z%m7wZRWjSP>)fZ#Rw7i_!)1q zZogUVGb)lnrGncP&s@dz-s*tW0Kds23u@LQe1qHd#<#cTmqjn3^#`;0w)4vS1B%Ga zTrAKp#>qReS}t?_m3Tl1DUmS`f8ZL2<)o;$^~HDZcRlicGe(SJ-JeerNz@=}E@x5J z&W(;sH}Le;nvOB*vkN46;S^b7q6ULuqBHqse|NXDc1$8e!>up<*MNET%{>8-@RtK@ zf0}=qaw|bsS}$l9%2nK|H$w~`X;*F=iN{`0Fv)iZR6d4|yYnSZrApV`b@BVc8kNxA z{-o#F%$9z)Bbm1|&WRJ1Zgw}Mt5pA(Dhj?hmxq?{gn6NSbX*QJ@q3X3%+4axZ7d26 zJyC27;EL@N7|xqNEPTBF)Bb{0)ixg8C5UB~5TFlLc6gs)tt28@l*i;y9>60L25qHuVed1E={T-ovLt(5dCiB87q zQ_WIdppr)V@VY`7D-mrPe%2RTzJErcrg=!B-jE=vJiL;q2iOmCc0X}`j4j7acH{mr zvI$;fmBMB(&h+7RJyIYi{j9h?c%p8Ok}v0vP!cyV&NADns+YcX%+Y5afmekHe?8NLlRsHf47om?04{5zOFI*tQh>shj~dPI`T~sih?zC^IU=XRkO7vS zP&;f_)~QwhLUe)V6uS5c?lek0k)Y}Y)0=kj>^|CzPp~hybXzxqJxasyFHG|>>)a2+ zn66|zLgPN)184lJXJn&gq(VO`6=NEKmw6qqr60et8%bs*NDjJjCfI1UL)Q^py4?^& z9g;wz6F9vhQO|u*5)&KyE4vY}=|yb~Uko*F*bk|Ev1KRn``b}ZKFLv7+6>HGZn_Q~ z8W0?|U=~Y;1Qb$N>Or+I;NY;K_9`!f3u+I@B6J|);DE*0o#p7YCe$mH7p(57n_vS7 zh7bhyc&>xY$rDSOIo`~5$2U1GO*Vc2rVJyG$$Y&#bgtQ@=q$Y)*KV^vcFG^g&jNd) z>KX5Gx-r0@?Hpdn7RZw+Uc)o%=uQJ@&aMCmjlQM2^(2irwvk5b&aODH$40`P^}fYV zw`nQvQD&let!5#!I33bBL3Vi*hzG`$3`QLFXHyXiaR^^f6MpcXt7yo)G4s3IHi7WY zmGsY@QX4-kJ2_{5h2}$uk0hUII97edqwEe!CPZm0tlsEC9vUG&*Ajpo3EFC$HB~=b z_H2G4>vw1@K#%1w*!8<`8UM*WXc zCYJ&U@KAexh`J`X-9+F@@t4Po{+gRWDVXW$>D$X9Nr(4OUW|aIecw&Ti(fe)U0C=n$Zs}JswKYN3mMo*`QI@VVv;f7M1to1b^i^ZC z<8g~KcJk)<*b($_p4O3hao^hWj-0i)ySk0%-wFUpo?!g9X{ci;3jErUb~M-5tMO-Y zNUjD{_y$xmE5DRnA-GS!>c8=ig|*CUN6;dbSxDbK#+yNI9FxOMq;eU86nwA(C=Z4I zqW{`(*CZg^X^*EiT`{`JtNBc|;=L~HitH}ug`>EE8YlUTFr%FYdS<7}CD1~l;ic<^W_%F*@!>oMI%otVhyAt+V|ISD&vN&wicwVHsE5B#(j0VwWK=Pd4`UVnx~U z*yqQ|Eks*O*Y|7@eGKK*5ORao7d(tmyNLs$gmh$Rn8w3YJjIlyO$%n$CUs!2*u-p9 zs3w0qp>C)Uu5_)%(^-DLLI8u^+2sYrJH(}J(Of4l!U*}mb=aJ?h23B+KuEP+q85p$ zr<+aM)XktUC)q&eBd}5bd%N@lL4=hhFK=;`k!2@(goJL9^N1B{j(ya^tGcRXGsdS9 zyC9p{Ewd6$LJ=+r2#q$K|7MMC=OZ8> z=%@Z;UY*%6&yz9m6ioF912obxMny$QjE|`xdpQ9~M3dWbyn1#c4o0kYK3w!fVo8hn zY*0({@0^JDPN7+z5(vif@_l%N!>fUal{CIB_Eb4TN-SNMo0s?VYmV(mOgtuJ!QVUg z|4D8uC@S)fX=t5#TQTn+mR5Sms^f#`{vSL_^VL2NNoz#~{NYJ5Z=scNjgLuwjBfhW z33*uD^I#e|jxt78ohNn$?SfTJ@L9~X)MibZd950S|2z`xVkKALY89lEQi3^Qln?B>UJ zZ=S71u~yy&NHEj^L8|Hcqb2Dc1XV3Hnj_Tf8lyd9>yBkmEB>!f7!`Gr^v9n%0A6aSl- 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 literal 45749 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

Dw9f+n&w-SaX$%AIf1w8HvRaI;64jTrk&h&Ve-m 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 Date: Fri, 31 Jan 2025 21:24:33 +0000 Subject: [PATCH 12/15] select device in executors --- .../2-two_moons/utils.py | 7 +-- .../executors/distributed_gradient_descent.py | 39 +++++++++++--- .../p2p/executors/gradient_tracking.py | 53 ++++++++++++------- nvflare/app_opt/p2p/executors/gtadam.py | 6 +-- nvflare/app_opt/p2p/utils/metrics.py | 18 +++---- nvflare/app_opt/p2p/utils/utils.py | 9 ++++ 6 files changed, 88 insertions(+), 44 deletions(-) create mode 100644 nvflare/app_opt/p2p/utils/utils.py diff --git a/examples/advanced/distributed_optimization/2-two_moons/utils.py b/examples/advanced/distributed_optimization/2-two_moons/utils.py index 02eccf6cd3..ecd6baf6bd 100644 --- a/examples/advanced/distributed_optimization/2-two_moons/utils.py +++ b/examples/advanced/distributed_optimization/2-two_moons/utils.py @@ -31,7 +31,7 @@ def __getitem__(self, idx): def get_dataloaders(data_seed:int): - X, y = make_moons(n_samples=100, noise=0.1, random_state=data_seed) + X, y = make_moons(n_samples=128, noise=0.1, random_state=data_seed) X_train = torch.from_numpy(X).float() y_train = torch.from_numpy(y).long() @@ -45,7 +45,7 @@ def get_dataloaders(data_seed:int): test_dataset = TwoMoonsDataset(X_test, y_test) train_dataloader = DataLoader(train_dataset, batch_size=64, shuffle=True) - test_dataloader = DataLoader(test_dataset, batch_size=64) + test_dataloader = DataLoader(test_dataset, batch_size=20) return train_dataloader, test_dataloader @@ -100,4 +100,5 @@ def plot_results(job, num_clients): axs[1].set_title("Evolution of Test Loss") plt.tight_layout() - plt.savefig(f"{job}_results.png") \ No newline at end of file + plt.savefig(f"{job}_results.png") + plt.show() \ No newline at end of file diff --git a/nvflare/app_opt/p2p/executors/distributed_gradient_descent.py b/nvflare/app_opt/p2p/executors/distributed_gradient_descent.py index 10f1373565..f9fb1c12b0 100644 --- a/nvflare/app_opt/p2p/executors/distributed_gradient_descent.py +++ b/nvflare/app_opt/p2p/executors/distributed_gradient_descent.py @@ -19,6 +19,7 @@ from nvflare.apis.dxo import from_shareable from nvflare.app_opt.p2p.executors.sync_executor import SyncAlgorithmExecutor from nvflare.app_opt.p2p.utils.metrics import compute_loss_over_dataset +from nvflare.app_opt.p2p.utils.utils import get_device class DGDExecutor(SyncAlgorithmExecutor): @@ -61,8 +62,9 @@ def __init__( val_dataloader: torch.utils.data.DataLoader | None = None, ): super().__init__() - self.model = model - self.loss = loss + self.device = get_device() + self.model = model.to(self.device) + self.loss = loss.to(self.device) self.train_dataloader = train_dataloader self.test_dataloader = test_dataloader self.val_dataloader = val_dataloader @@ -82,37 +84,54 @@ def run_algorithm(self, fl_ctx, shareable, abort_signal): try: data, label = next(iter_dataloader) + data, label = data.to(self.device), label.to(self.device) except StopIteration: # 3. store metrics current_time = time.time() - start_time self.train_loss_sequence.append( ( current_time, - compute_loss_over_dataset(self.model, self.loss, self.train_dataloader), + compute_loss_over_dataset( + self.model, + self.loss, + self.train_dataloader, + device=self.device, + ), ) ) self.test_loss_sequence.append( ( current_time, - compute_loss_over_dataset(self.model, self.loss, self.test_dataloader), + compute_loss_over_dataset( + self.model, + self.loss, + self.test_dataloader, + device=self.device, + ), ) ) # restart after an epoch iter_dataloader = iter(self.train_dataloader) data, label = next(iter_dataloader) + data, label = data.to(self.device), label.to(self.device) # run algorithm step # 1. exchange values with torch.no_grad(): - self._exchange_values(fl_ctx, value=self.model.parameters(), iteration=iteration) + self._exchange_values( + fl_ctx, value=self.model.parameters(), iteration=iteration + ) # compute consensus value for idx, param in enumerate(self.model.parameters()): if param.requires_grad: param.mul_(self._weight) for neighbor in self.neighbors: + neighbor_param = self.neighbors_values[iteration][ + neighbor.id + ][idx].to(self.device) param.add_( - self.neighbors_values[iteration][neighbor.id][idx], + neighbor_param, alpha=neighbor.weight, ) # 2. update current value @@ -139,8 +158,12 @@ def _pre_algorithm_run(self, fl_ctx, shareable, abort_signal): self._iterations = from_shareable(shareable).data["iterations"] self._stepsize = from_shareable(shareable).data["stepsize"] - init_train_loss = compute_loss_over_dataset(self.model, self.loss, self.train_dataloader) - init_test_loss = compute_loss_over_dataset(self.model, self.loss, self.test_dataloader) + init_train_loss = compute_loss_over_dataset( + self.model, self.loss, self.train_dataloader, device=self.device + ) + init_test_loss = compute_loss_over_dataset( + self.model, self.loss, self.test_dataloader, device=self.device + ) self.train_loss_sequence.append((0, init_train_loss)) self.test_loss_sequence.append((0, init_test_loss)) diff --git a/nvflare/app_opt/p2p/executors/gradient_tracking.py b/nvflare/app_opt/p2p/executors/gradient_tracking.py index 58061faa6d..8272ee1d34 100644 --- a/nvflare/app_opt/p2p/executors/gradient_tracking.py +++ b/nvflare/app_opt/p2p/executors/gradient_tracking.py @@ -19,6 +19,7 @@ from nvflare.apis.dxo import from_shareable from nvflare.app_opt.p2p.executors.sync_executor import SyncAlgorithmExecutor from nvflare.app_opt.p2p.utils.metrics import compute_loss_over_dataset +from nvflare.app_opt.p2p.utils.utils import get_device class GTExecutor(SyncAlgorithmExecutor): @@ -28,8 +29,8 @@ class GTExecutor(SyncAlgorithmExecutor): at each iteration. The model parameters are updated based on the neighbors' parameters and local gradient descent steps. The executor also tracks and records training, validation and test losses over time. - The number of iterations and the learning rate must be provided by the controller when asing to run the algorithm. - They can be set in the extra parameters of the controller's config with the "iterations" and "stepsize" keys. + The number of iterations and the learning rate must be provided by the controller when asing to run the algorithm. + They can be set in the extra parameters of the controller's config with the "iterations" and "stepsize" keys. Note: Subclasses must implement the __init__ method to initialize the model, loss function, and data loaders. @@ -50,6 +51,7 @@ class GTExecutor(SyncAlgorithmExecutor): train_loss_sequence (list[tuple]): Records of training loss over time. test_loss_sequence (list[tuple]): Records of testing loss over time. """ + @abstractmethod def __init__( self, @@ -60,8 +62,9 @@ def __init__( val_dataloader: torch.utils.data.DataLoader | None = None, ): super().__init__() - self.model = model - self.loss = loss + self.device = get_device() + self.model = model.to(self.device) + self.loss = loss.to(self.device) self.train_dataloader = train_dataloader self.test_dataloader = test_dataloader self.val_dataloader = val_dataloader @@ -81,6 +84,7 @@ def run_algorithm(self, fl_ctx, shareable, abort_signal): try: data, label = next(iter_dataloader) + data, label = data.to(self.device), label.to(self.device) except StopIteration: # 3. store metrics current_time = time.time() - start_time @@ -88,7 +92,7 @@ def run_algorithm(self, fl_ctx, shareable, abort_signal): ( current_time, compute_loss_over_dataset( - self.model, self.loss, self.train_dataloader + self.model, self.loss, self.train_dataloader, self.device ), ) ) @@ -96,13 +100,14 @@ def run_algorithm(self, fl_ctx, shareable, abort_signal): ( current_time, compute_loss_over_dataset( - self.model, self.loss, self.test_dataloader + self.model, self.loss, self.test_dataloader, self.device ), ) ) # restart after an epoch iter_dataloader = iter(self.train_dataloader) data, label = next(iter_dataloader) + data, label = data.to(self.device), label.to(self.device) # run algorithm step with torch.no_grad(): @@ -121,10 +126,11 @@ def run_algorithm(self, fl_ctx, shareable, abort_signal): if param.requires_grad: param.mul_(self._weight) for neighbor in self.neighbors: + neighbor_param = self.neighbors_values[iteration][ + neighbor.id + ]["parameters"][idx].to(self.device) param.add_( - self.neighbors_values[iteration][neighbor.id][ - "parameters" - ][idx], + neighbor_param, alpha=neighbor.weight, ) @@ -136,10 +142,11 @@ def run_algorithm(self, fl_ctx, shareable, abort_signal): for idx, tracker in enumerate(iter(self.tracker)): tracker.mul_(self._weight) for neighbor in self.neighbors: + neighbor_tracker = self.neighbors_values[iteration][ + neighbor.id + ]["tracker"][idx].to(self.device) tracker.add_( - self.neighbors_values[iteration][neighbor.id]["tracker"][ - idx - ], + neighbor_tracker, alpha=neighbor.weight, ) @@ -149,13 +156,15 @@ def run_algorithm(self, fl_ctx, shareable, abort_signal): loss = self.loss(pred, label) loss.backward() - gradient = [param.grad for param in self.model.parameters()] + gradient = [param.grad.clone() for param in self.model.parameters()] # - c. update tracker - for i in range(len(self.tracker)): - self.tracker[i] += gradient[i] - self.old_gradient[i] + with torch.no_grad(): + for i in range(len(self.tracker)): + self.tracker[i].add_(gradient[i], alpha=1.0) + self.tracker[i].sub_(self.old_gradient[i], alpha=1.0) - self.old_gradient = gradient + self.old_gradient = [g.clone() for g in gradient] # 4. free memory that's no longer needed del self.neighbors_values[iteration] @@ -183,10 +192,10 @@ def _pre_algorithm_run(self, fl_ctx, shareable, abort_signal): self._stepsize = data["stepsize"] init_train_loss = compute_loss_over_dataset( - self.model, self.loss, self.train_dataloader + self.model, self.loss, self.train_dataloader, self.device ) init_test_loss = compute_loss_over_dataset( - self.model, self.loss, self.test_dataloader + self.model, self.loss, self.test_dataloader, self.device ) self.train_loss_sequence.append((0, init_train_loss)) @@ -194,9 +203,13 @@ def _pre_algorithm_run(self, fl_ctx, shareable, abort_signal): # initialize tracker self.old_gradient = [ - torch.zeros_like(param) for param in self.model.parameters() + torch.zeros_like(param, device=self.device) + for param in self.model.parameters() + ] + self.tracker = [ + torch.zeros_like(param, device=self.device) + for param in self.model.parameters() ] - self.tracker = [torch.zeros_like(param) for param in self.model.parameters()] def _post_algorithm_run(self, *args, **kwargs): torch.save(torch.tensor(self.train_loss_sequence), "train_loss_sequence.pt") diff --git a/nvflare/app_opt/p2p/executors/gtadam.py b/nvflare/app_opt/p2p/executors/gtadam.py index 4383bf41a8..868c39479f 100644 --- a/nvflare/app_opt/p2p/executors/gtadam.py +++ b/nvflare/app_opt/p2p/executors/gtadam.py @@ -54,9 +54,9 @@ def _pre_algorithm_run(self, fl_ctx, shareable, abort_signal): self.beta1 = data["beta1"] self.beta2 = data["beta2"] self.epsilon = data["epsilon"] - self.G = torch.tensor(1e6) - self.m = [torch.zeros_like(param) for param in self.model.parameters()] - self.v = [torch.zeros_like(param) for param in self.model.parameters()] + self.G = torch.tensor(1e6, device=self.device) + self.m = [torch.zeros_like(param, device=self.device) for param in self.model.parameters()] + self.v = [torch.zeros_like(param, device=self.device) for param in self.model.parameters()] def _update_local_state(self, stepsize): for i in range(len(self.tracker)): diff --git a/nvflare/app_opt/p2p/utils/metrics.py b/nvflare/app_opt/p2p/utils/metrics.py index 7f9b1ee74c..f50240a439 100644 --- a/nvflare/app_opt/p2p/utils/metrics.py +++ b/nvflare/app_opt/p2p/utils/metrics.py @@ -17,6 +17,7 @@ def compute_loss_over_dataset( model: torch.nn.Module | None = None, loss: torch.nn.modules.loss._Loss | None = None, dataloader: torch.utils.data.DataLoader | None = None, + device: torch.device | None = None, ) -> float: """ Compute the average loss over a dataset. @@ -25,6 +26,7 @@ def compute_loss_over_dataset( model: The model to use for predictions. loss: The loss function to use. dataloader: The dataloader for the dataset. + device: The device to use for computation. Returns: The average loss over the dataset. @@ -33,22 +35,18 @@ def compute_loss_over_dataset( if model is None or loss is None or dataloader is None: raise ValueError("All arguments (model, loss, dataloader) must be provided.") + model.eval() epoch_loss = 0 - total_samples = 0 with torch.no_grad(): # Iterate over the dataloader for x, y in dataloader: + # Move data to the specified device + x, y = x.to(device), y.to(device) # Make predictions pred = model(x) # Compute the loss ls = loss(pred, y) - # Accumulate the loss and total samples - epoch_loss += ls.item() # Get the scalar value of the loss - total_samples += 1 - - # Check if there are any samples in the dataset - if total_samples == 0: - raise ValueError("The dataset is empty.") - + # Accumulate the loss + epoch_loss += ls.item() * x.size(0) # Return the average loss - return epoch_loss / total_samples + return epoch_loss / len(dataloader.dataset) diff --git a/nvflare/app_opt/p2p/utils/utils.py b/nvflare/app_opt/p2p/utils/utils.py new file mode 100644 index 0000000000..a82bc6d05d --- /dev/null +++ b/nvflare/app_opt/p2p/utils/utils.py @@ -0,0 +1,9 @@ +import torch + +def get_device(): + if torch.cuda.is_available(): + return torch.device("cuda") + elif torch.backends.mps.is_available(): + return torch.device("mps") + else: + return torch.device("cpu") \ No newline at end of file From 2b09b0581295bf8fc07308c8dde36f5a88fe9fb1 Mon Sep 17 00:00:00 2001 From: Francesco Farina Date: Mon, 3 Feb 2025 10:15:59 +0000 Subject: [PATCH 13/15] renaming + parametric timout --- .../distributed_optimization/1-consensus/launcher.py | 4 ++-- .../1-consensus/tutorial.ipynb | 4 ++-- .../2-two_moons/launcher_dgd.py | 4 ++-- .../2-two_moons/launcher_gt.py | 4 ++-- .../2-two_moons/launcher_gtadam.py | 4 ++-- .../distributed_optimization/3-mnist/launcher_dgd.py | 4 ++-- .../distributed_optimization/3-mnist/launcher_gt.py | 4 ++-- .../3-mnist/launcher_gtadam.py | 4 ++-- nvflare/app_opt/p2p/controllers/__init__.py | 2 +- .../{p2p_controller.py => dist_opt_controller.py} | 9 ++++----- nvflare/app_opt/p2p/executors/__init__.py | 2 +- ...ase_p2p_executor.py => base_dist_opt_executor.py} | 8 ++++---- nvflare/app_opt/p2p/executors/sync_executor.py | 12 ++++++++---- 13 files changed, 34 insertions(+), 31 deletions(-) rename nvflare/app_opt/p2p/controllers/{p2p_controller.py => dist_opt_controller.py} (90%) rename nvflare/app_opt/p2p/executors/{base_p2p_executor.py => base_dist_opt_executor.py} (95%) diff --git a/examples/advanced/distributed_optimization/1-consensus/launcher.py b/examples/advanced/distributed_optimization/1-consensus/launcher.py index 65f1eb5094..4c7190ad3e 100644 --- a/examples/advanced/distributed_optimization/1-consensus/launcher.py +++ b/examples/advanced/distributed_optimization/1-consensus/launcher.py @@ -16,7 +16,7 @@ import matplotlib.pyplot as plt from nvflare.job_config.api import FedJob -from nvflare.app_opt.p2p.controllers import P2PAlgorithmController +from nvflare.app_opt.p2p.controllers import DistOptController from nvflare.app_opt.p2p.executors import ConsensusExecutor from nvflare.app_opt.p2p.types import Config from nvflare.app_opt.p2p.utils.config_generator import generate_random_network @@ -32,7 +32,7 @@ config = Config(network=network, extra={"iterations": 50}) # send controller to server - controller = P2PAlgorithmController(config=config) + controller = DistOptController(config=config) job.to_server(controller) # Add clients diff --git a/examples/advanced/distributed_optimization/1-consensus/tutorial.ipynb b/examples/advanced/distributed_optimization/1-consensus/tutorial.ipynb index 337562308e..2b0cbdd52e 100644 --- a/examples/advanced/distributed_optimization/1-consensus/tutorial.ipynb +++ b/examples/advanced/distributed_optimization/1-consensus/tutorial.ipynb @@ -157,13 +157,13 @@ "source": [ "from nvflare.job_config.api import FedJob\n", "from nvflare.app_opt.p2p.executors import ConsensusExecutor\n", - "from nvflare.app_opt.p2p.controllers import P2PAlgorithmController\n", + "from nvflare.app_opt.p2p.controllers import DistOptController\n", "\n", "# Create job\n", "job = FedJob(name=\"consensus\")\n", "\n", "# send controller to server\n", - "controller = P2PAlgorithmController(config=config)\n", + "controller = DistOptController(config=config)\n", "job.to_server(controller)\n", "\n", "# Add clients\n", diff --git a/examples/advanced/distributed_optimization/2-two_moons/launcher_dgd.py b/examples/advanced/distributed_optimization/2-two_moons/launcher_dgd.py index 5651f9ff95..49e1d99211 100644 --- a/examples/advanced/distributed_optimization/2-two_moons/launcher_dgd.py +++ b/examples/advanced/distributed_optimization/2-two_moons/launcher_dgd.py @@ -15,7 +15,7 @@ from config import ITERATIONS, NUM_CLIENTS, STEPSIZE from utils import NeuralNetwork, get_dataloaders, plot_results -from nvflare.app_opt.p2p.controllers import P2PAlgorithmController +from nvflare.app_opt.p2p.controllers import DistOptController from nvflare.app_opt.p2p.executors import DGDExecutor from nvflare.app_opt.p2p.types import Config from nvflare.app_opt.p2p.utils.config_generator import generate_random_network @@ -47,7 +47,7 @@ def __init__(self, data_seed: int | None = None): ) # send controller to server - controller = P2PAlgorithmController(config=config) + controller = DistOptController(config=config) job.to_server(controller) # Add clients diff --git a/examples/advanced/distributed_optimization/2-two_moons/launcher_gt.py b/examples/advanced/distributed_optimization/2-two_moons/launcher_gt.py index 5d233f23d8..19b93d6e9e 100644 --- a/examples/advanced/distributed_optimization/2-two_moons/launcher_gt.py +++ b/examples/advanced/distributed_optimization/2-two_moons/launcher_gt.py @@ -15,7 +15,7 @@ from config import ITERATIONS, NUM_CLIENTS, STEPSIZE from utils import NeuralNetwork, get_dataloaders, plot_results -from nvflare.app_opt.p2p.controllers import P2PAlgorithmController +from nvflare.app_opt.p2p.controllers import DistOptController from nvflare.app_opt.p2p.executors import GTExecutor from nvflare.app_opt.p2p.types import Config from nvflare.app_opt.p2p.utils.config_generator import generate_random_network @@ -46,7 +46,7 @@ def __init__(self, data_seed: int | None = None): ) # send controller to server - controller = P2PAlgorithmController(config=config) + controller = DistOptController(config=config) job.to_server(controller) # Add clients diff --git a/examples/advanced/distributed_optimization/2-two_moons/launcher_gtadam.py b/examples/advanced/distributed_optimization/2-two_moons/launcher_gtadam.py index ca2cc7b5cd..bbd4821498 100644 --- a/examples/advanced/distributed_optimization/2-two_moons/launcher_gtadam.py +++ b/examples/advanced/distributed_optimization/2-two_moons/launcher_gtadam.py @@ -15,7 +15,7 @@ from config import ITERATIONS, NUM_CLIENTS, STEPSIZE from utils import NeuralNetwork, get_dataloaders, plot_results -from nvflare.app_opt.p2p.controllers import P2PAlgorithmController +from nvflare.app_opt.p2p.controllers import DistOptController from nvflare.app_opt.p2p.executors import GTADAMExecutor from nvflare.app_opt.p2p.types import Config from nvflare.app_opt.p2p.utils.config_generator import generate_random_network @@ -52,7 +52,7 @@ def __init__(self, data_seed: int | None = None): ) # send controller to server - controller = P2PAlgorithmController(config=config) + controller = DistOptController(config=config) job.to_server(controller) # Add clients diff --git a/examples/advanced/distributed_optimization/3-mnist/launcher_dgd.py b/examples/advanced/distributed_optimization/3-mnist/launcher_dgd.py index f7ad73d169..59fdfd1c9c 100644 --- a/examples/advanced/distributed_optimization/3-mnist/launcher_dgd.py +++ b/examples/advanced/distributed_optimization/3-mnist/launcher_dgd.py @@ -15,7 +15,7 @@ from config import ITERATIONS, NUM_CLIENTS, STEPSIZE from utils import NeuralNetwork, get_dataloaders, plot_results -from nvflare.app_opt.p2p.controllers import P2PAlgorithmController +from nvflare.app_opt.p2p.controllers import DistOptController from nvflare.app_opt.p2p.executors import DGDExecutor from nvflare.app_opt.p2p.types import Config from nvflare.app_opt.p2p.utils.config_generator import generate_random_network @@ -46,7 +46,7 @@ def __init__(self, data_chunk: int | None = None): ) # send controller to server - controller = P2PAlgorithmController(config=config) + controller = DistOptController(config=config) job.to_server(controller) # Add clients diff --git a/examples/advanced/distributed_optimization/3-mnist/launcher_gt.py b/examples/advanced/distributed_optimization/3-mnist/launcher_gt.py index dbacfac2ab..593f617578 100644 --- a/examples/advanced/distributed_optimization/3-mnist/launcher_gt.py +++ b/examples/advanced/distributed_optimization/3-mnist/launcher_gt.py @@ -15,7 +15,7 @@ from config import ITERATIONS, NUM_CLIENTS, STEPSIZE from utils import NeuralNetwork, get_dataloaders, plot_results -from nvflare.app_opt.p2p.controllers import P2PAlgorithmController +from nvflare.app_opt.p2p.controllers import DistOptController from nvflare.app_opt.p2p.executors import GTExecutor from nvflare.app_opt.p2p.types import Config from nvflare.app_opt.p2p.utils.config_generator import generate_random_network @@ -43,7 +43,7 @@ def __init__(self, data_chunk: int | None = None): config = Config(network=network, extra={"iterations": ITERATIONS, "stepsize": STEPSIZE}) # send controller to server - controller = P2PAlgorithmController(config=config) + controller = DistOptController(config=config) job.to_server(controller) # Add clients diff --git a/examples/advanced/distributed_optimization/3-mnist/launcher_gtadam.py b/examples/advanced/distributed_optimization/3-mnist/launcher_gtadam.py index ea0a81f052..5824d80af2 100644 --- a/examples/advanced/distributed_optimization/3-mnist/launcher_gtadam.py +++ b/examples/advanced/distributed_optimization/3-mnist/launcher_gtadam.py @@ -15,7 +15,7 @@ from config import ITERATIONS, NUM_CLIENTS, STEPSIZE from utils import NeuralNetwork, get_dataloaders, plot_results -from nvflare.app_opt.p2p.controllers import P2PAlgorithmController +from nvflare.app_opt.p2p.controllers import DistOptController from nvflare.app_opt.p2p.executors import GTADAMExecutor from nvflare.app_opt.p2p.types import Config from nvflare.app_opt.p2p.utils.config_generator import generate_random_network @@ -52,7 +52,7 @@ def __init__(self, data_chunk: int | None = None): ) # send controller to server - controller = P2PAlgorithmController(config=config) + controller = DistOptController(config=config) job.to_server(controller) # Add clients diff --git a/nvflare/app_opt/p2p/controllers/__init__.py b/nvflare/app_opt/p2p/controllers/__init__.py index 9aefb0e937..9ebd02eda7 100644 --- a/nvflare/app_opt/p2p/controllers/__init__.py +++ b/nvflare/app_opt/p2p/controllers/__init__.py @@ -11,4 +11,4 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -from .p2p_controller import P2PAlgorithmController # noqa \ No newline at end of file +from .dist_opt_controller import DistOptController # noqa \ No newline at end of file diff --git a/nvflare/app_opt/p2p/controllers/p2p_controller.py b/nvflare/app_opt/p2p/controllers/dist_opt_controller.py similarity index 90% rename from nvflare/app_opt/p2p/controllers/p2p_controller.py rename to nvflare/app_opt/p2p/controllers/dist_opt_controller.py index bfbced41c1..e46c077987 100644 --- a/nvflare/app_opt/p2p/controllers/p2p_controller.py +++ b/nvflare/app_opt/p2p/controllers/dist_opt_controller.py @@ -19,12 +19,11 @@ from nvflare.app_opt.p2p.types import Config -class P2PAlgorithmController(Controller): - """Controller for running a peer-to-peer (P2P) algorithm on a network. +class DistOptController(Controller): + """Controller for running a peer-to-peer distributed optimization algorithm on a network. - This controller manages the execution of a P2P algorithm by configuring - each client with its neighbors and initiating the algorithm execution across - the network. + This controller manages the execution of a distributed optimization algorithm by configuring + each client with its neighbors and initiating the algorithm execution across the network. Args: config (Config): The P2P network configuration containing node and neighbor information. diff --git a/nvflare/app_opt/p2p/executors/__init__.py b/nvflare/app_opt/p2p/executors/__init__.py index 1d1aca0bd0..3907373056 100644 --- a/nvflare/app_opt/p2p/executors/__init__.py +++ b/nvflare/app_opt/p2p/executors/__init__.py @@ -11,7 +11,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -from .base_p2p_executor import BaseP2PAlgorithmExecutor # noqa +from .base_dist_opt_executor import BaseDistOptExecutor # noqa from .sync_executor import SyncAlgorithmExecutor # noqa from .consensus import ConsensusExecutor # noqa from .distributed_gradient_descent import DGDExecutor # noqa diff --git a/nvflare/app_opt/p2p/executors/base_p2p_executor.py b/nvflare/app_opt/p2p/executors/base_dist_opt_executor.py similarity index 95% rename from nvflare/app_opt/p2p/executors/base_p2p_executor.py rename to nvflare/app_opt/p2p/executors/base_dist_opt_executor.py index 6929ed675b..20338b0f46 100644 --- a/nvflare/app_opt/p2p/executors/base_p2p_executor.py +++ b/nvflare/app_opt/p2p/executors/base_dist_opt_executor.py @@ -24,11 +24,11 @@ from nvflare.app_opt.p2p.types import LocalConfig, Neighbor -class BaseP2PAlgorithmExecutor(Executor, ABC): - """Base class for peer-to-peer (P2P) algorithm executors. +class BaseDistOptExecutor(Executor, ABC): + """Base class for peer-to-peer distributed optimization algorithm executors. - This class provides the foundational structure for executors that run P2P algorithms - in a distributed/federated setting. It handles the configuration of the local network, + This class provides the foundational structure for executors that run P2P distributed + optimization algorithms. It handles the configuration of the local network, execution flow based on tasks, and interaction with neighboring clients. Attributes: diff --git a/nvflare/app_opt/p2p/executors/sync_executor.py b/nvflare/app_opt/p2p/executors/sync_executor.py index 72002b33f2..ed40b4fdf2 100644 --- a/nvflare/app_opt/p2p/executors/sync_executor.py +++ b/nvflare/app_opt/p2p/executors/sync_executor.py @@ -19,27 +19,31 @@ from nvflare.apis.fl_constant import ReturnCode from nvflare.apis.fl_context import FLContext from nvflare.apis.shareable import Shareable, make_reply -from nvflare.app_opt.p2p.executors.base_p2p_executor import BaseP2PAlgorithmExecutor +from nvflare.app_opt.p2p.executors.base_dist_opt_executor import BaseDistOptExecutor -class SyncAlgorithmExecutor(BaseP2PAlgorithmExecutor): +class SyncAlgorithmExecutor(BaseDistOptExecutor): """An executor to implement synchronous peer-to-peer (P2P) algorithms. This executor extends the BaseP2PAlgorithmExecutor to support synchronous execution of P2P algorithms. It manages the exchange of values with neighboring clients and ensures synchronization at each iteration. + Args: + sync_timeout (int): The timeout for waiting for values from neighbors. Defaults to 10 seconds. + Attributes: neighbors_values (defaultdict): A dictionary to store values received from neighbors, keyed by iteration and neighbor ID. sync_waiter (threading.Event): An event to synchronize the exchange of values. lock (threading.Lock): A lock to manage concurrent access to shared data structures. """ - def __init__(self): + def __init__(self, sync_timeout: int = 10): super().__init__() self.neighbors_values = defaultdict(dict) + self.sync_timeout = sync_timeout self.sync_waiter = threading.Event() self.lock = threading.Lock() @@ -81,7 +85,7 @@ def _exchange_values(self, fl_ctx: FLContext, value: any, iteration: int): if len(self.neighbors_values[iteration]) < len(self.neighbors): # wait for all neighbors to send their values for the current iteration # if not received after timeout, abort the job - if not self.sync_waiter.wait(timeout=10): + if not self.sync_waiter.wait(timeout=self.sync_timeout): self.system_panic("failed to receive values from all neighbors", fl_ctx) return From 4611c9157bc4ea337d41b6ab3b8b3acd34b3ddc9 Mon Sep 17 00:00:00 2001 From: Francesco Farina Date: Mon, 3 Feb 2025 10:51:33 +0000 Subject: [PATCH 14/15] rerun experiments --- .../1-consensus/tutorial.ipynb | 962 +++++++++--------- .../2-two_moons/dgd_results.png | Bin 63688 -> 49949 bytes .../2-two_moons/gt_results.png | Bin 63835 -> 50080 bytes .../2-two_moons/gtadam_results.png | Bin 38833 -> 32604 bytes .../2-two_moons/utils.py | 10 +- .../distributed_optimization/3-mnist/utils.py | 3 +- 6 files changed, 489 insertions(+), 486 deletions(-) diff --git a/examples/advanced/distributed_optimization/1-consensus/tutorial.ipynb b/examples/advanced/distributed_optimization/1-consensus/tutorial.ipynb index 2b0cbdd52e..1085f5da7f 100644 --- a/examples/advanced/distributed_optimization/1-consensus/tutorial.ipynb +++ b/examples/advanced/distributed_optimization/1-consensus/tutorial.ipynb @@ -68,29 +68,29 @@ "

Config(\n",
        "    network=Network(\n",
        "        nodes=[\n",
-       "            Node(id='site-1', neighbors=[Neighbor(id='site-4', weight=0.3333333432674408)]),\n",
        "            Node(\n",
-       "                id='site-2',\n",
+       "                id='site-1',\n",
        "                neighbors=[\n",
-       "                    Neighbor(id='site-3', weight=0.3333333432674408),\n",
-       "                    Neighbor(id='site-5', weight=0.3333333432674408)\n",
+       "                    Neighbor(id='site-2', weight=0.3333333432674408),\n",
+       "                    Neighbor(id='site-4', weight=0.3333333432674408)\n",
        "                ]\n",
        "            ),\n",
-       "            Node(id='site-3', neighbors=[Neighbor(id='site-2', weight=0.3333333432674408)]),\n",
+       "            Node(id='site-2', neighbors=[Neighbor(id='site-1', weight=0.3333333432674408)]),\n",
        "            Node(\n",
-       "                id='site-4',\n",
+       "                id='site-3',\n",
        "                neighbors=[\n",
-       "                    Neighbor(id='site-1', weight=0.3333333432674408),\n",
+       "                    Neighbor(id='site-4', weight=0.3333333432674408),\n",
        "                    Neighbor(id='site-5', weight=0.3333333432674408)\n",
        "                ]\n",
        "            ),\n",
        "            Node(\n",
-       "                id='site-5',\n",
+       "                id='site-4',\n",
        "                neighbors=[\n",
-       "                    Neighbor(id='site-2', weight=0.3333333432674408),\n",
-       "                    Neighbor(id='site-4', weight=0.3333333432674408)\n",
+       "                    Neighbor(id='site-1', weight=0.3333333432674408),\n",
+       "                    Neighbor(id='site-3', weight=0.3333333432674408)\n",
        "                ]\n",
-       "            )\n",
+       "            ),\n",
+       "            Node(id='site-5', neighbors=[Neighbor(id='site-3', weight=0.3333333432674408)])\n",
        "        ]\n",
        "    ),\n",
        "    extra={'iterations': 50}\n",
@@ -101,29 +101,29 @@
        "\u001b[1;35mConfig\u001b[0m\u001b[1m(\u001b[0m\n",
        "    \u001b[33mnetwork\u001b[0m=\u001b[1;35mNetwork\u001b[0m\u001b[1m(\u001b[0m\n",
        "        \u001b[33mnodes\u001b[0m=\u001b[1m[\u001b[0m\n",
-       "            \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-1'\u001b[0m, \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-4'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m\u001b[1m]\u001b[0m\u001b[1m)\u001b[0m,\n",
        "            \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\n",
-       "                \u001b[33mid\u001b[0m=\u001b[32m'site-2'\u001b[0m,\n",
+       "                \u001b[33mid\u001b[0m=\u001b[32m'site-1'\u001b[0m,\n",
        "                \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\n",
-       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-3'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m,\n",
-       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-5'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m\n",
+       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-2'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m,\n",
+       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-4'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m\n",
        "                \u001b[1m]\u001b[0m\n",
        "            \u001b[1m)\u001b[0m,\n",
-       "            \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-3'\u001b[0m, \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-2'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m\u001b[1m]\u001b[0m\u001b[1m)\u001b[0m,\n",
+       "            \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-2'\u001b[0m, \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-1'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m\u001b[1m]\u001b[0m\u001b[1m)\u001b[0m,\n",
        "            \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\n",
-       "                \u001b[33mid\u001b[0m=\u001b[32m'site-4'\u001b[0m,\n",
+       "                \u001b[33mid\u001b[0m=\u001b[32m'site-3'\u001b[0m,\n",
        "                \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\n",
-       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-1'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m,\n",
+       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-4'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m,\n",
        "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-5'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m\n",
        "                \u001b[1m]\u001b[0m\n",
        "            \u001b[1m)\u001b[0m,\n",
        "            \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\n",
-       "                \u001b[33mid\u001b[0m=\u001b[32m'site-5'\u001b[0m,\n",
+       "                \u001b[33mid\u001b[0m=\u001b[32m'site-4'\u001b[0m,\n",
        "                \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\n",
-       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-2'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m,\n",
-       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-4'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m\n",
+       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-1'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m,\n",
+       "                    \u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-3'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m\n",
        "                \u001b[1m]\u001b[0m\n",
-       "            \u001b[1m)\u001b[0m\n",
+       "            \u001b[1m)\u001b[0m,\n",
+       "            \u001b[1;35mNode\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-5'\u001b[0m, \u001b[33mneighbors\u001b[0m=\u001b[1m[\u001b[0m\u001b[1;35mNeighbor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mid\u001b[0m=\u001b[32m'site-3'\u001b[0m, \u001b[33mweight\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.3333333432674408\u001b[0m\u001b[1m)\u001b[0m\u001b[1m]\u001b[0m\u001b[1m)\u001b[0m\n",
        "        \u001b[1m]\u001b[0m\n",
        "    \u001b[1m)\u001b[0m,\n",
        "    \u001b[33mextra\u001b[0m=\u001b[1m{\u001b[0m\u001b[32m'iterations'\u001b[0m: \u001b[1;36m50\u001b[0m\u001b[1m}\u001b[0m\n",
@@ -188,459 +188,459 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "\u001b[38m2025-01-31 19:25:08,949 - SimulatorRunner - INFO - Create the Simulator Server.\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:08,950 - CoreCell - INFO - server: creating listener on tcp://0:50296\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,065 - CoreCell - INFO - server: created backbone external listener for tcp://0:50296\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,065 - ConnectorManager - INFO - 2282: Try start_listener Listener resources: {'secure': False, 'host': 'localhost'}\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,066 - conn_manager - INFO - Connector [CH00002 PASSIVE tcp://0:56944] is starting\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,571 - CoreCell - INFO - server: created backbone internal listener for tcp://localhost:56944\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,573 - conn_manager - INFO - Connector [CH00001 PASSIVE tcp://0:50296] is starting\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,575 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,575 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,576 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,577 - SimulatorServer - INFO - max_reg_duration=60.0\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,633 - hci - INFO - Starting Admin Server localhost on Port 50297\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,633 - SimulatorRunner - INFO - Deploy the Apps.\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,667 - SimulatorRunner - INFO - Create the simulate clients.\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,667 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,668 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,673 - Communicator - INFO - Trying to register with server ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,674 - ClientManager - INFO - authenticated client site-1: client_fqcn='site-1'\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,674 - ClientManager - INFO - Client: New client site-1@192.168.0.251 joined. Sent token: aa94d95a-7ab7-4fd4-b5e7-c63bec545ad0.  Total clients: 1\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,674 - Communicator - INFO - register RC: ok\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,674 - FederatedClient - INFO - Successfully registered client:site-1 for project simulator_server. Token:aa94d95a-7ab7-4fd4-b5e7-c63bec545ad0 SSID:\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,674 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,674 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,674 - Communicator - INFO - Trying to register with server ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,675 - ClientManager - INFO - authenticated client site-2: client_fqcn='site-2'\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,675 - ClientManager - INFO - Client: New client site-2@192.168.0.251 joined. Sent token: 11cddf2b-425e-4fa3-8bab-54604d5740b1.  Total clients: 2\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,675 - Communicator - INFO - register RC: ok\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,675 - FederatedClient - INFO - Successfully registered client:site-2 for project simulator_server. Token:11cddf2b-425e-4fa3-8bab-54604d5740b1 SSID:\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,675 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,675 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,675 - Communicator - INFO - Trying to register with server ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,676 - ClientManager - INFO - authenticated client site-3: client_fqcn='site-3'\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,676 - ClientManager - INFO - Client: New client site-3@192.168.0.251 joined. Sent token: 8c2cb4f1-d813-416e-b80f-cdb358d07eb2.  Total clients: 3\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,676 - Communicator - INFO - register RC: ok\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,676 - FederatedClient - INFO - Successfully registered client:site-3 for project simulator_server. Token:8c2cb4f1-d813-416e-b80f-cdb358d07eb2 SSID:\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,676 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,676 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,676 - Communicator - INFO - Trying to register with server ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,677 - ClientManager - INFO - authenticated client site-4: client_fqcn='site-4'\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,677 - ClientManager - INFO - Client: New client site-4@192.168.0.251 joined. Sent token: 299ee1b8-90a4-472c-8de2-f583a724ef83.  Total clients: 4\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,677 - Communicator - INFO - register RC: ok\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,677 - FederatedClient - INFO - Successfully registered client:site-4 for project simulator_server. Token:299ee1b8-90a4-472c-8de2-f583a724ef83 SSID:\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,677 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,677 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,677 - Communicator - INFO - Trying to register with server ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,678 - ClientManager - INFO - authenticated client site-5: client_fqcn='site-5'\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,678 - ClientManager - INFO - Client: New client site-5@192.168.0.251 joined. Sent token: f93d8156-d096-4b6f-b5a4-5685d65d9291.  Total clients: 5\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,678 - Communicator - INFO - register RC: ok\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,678 - FederatedClient - INFO - Successfully registered client:site-5 for project simulator_server. Token:f93d8156-d096-4b6f-b5a4-5685d65d9291 SSID:\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,678 - SimulatorRunner - INFO - Set the client status ready.\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,678 - SimulatorRunner - INFO - Deploy and start the Server App.\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,678 - Cell - INFO - Register blob CB for channel='server_command', topic='*'\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,678 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,678 - ServerCommandAgent - INFO - ServerCommandAgent cell register_request_cb: server.simulate_job\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,688 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,688 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,688 - AuxRunner - INFO - registered aux handler for topic __sync_runner__\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,688 - AuxRunner - INFO - registered aux handler for topic __job_heartbeat__\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,688 - AuxRunner - INFO - registered aux handler for topic __task_check__\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,688 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,688 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,688 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,689 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job] - Server runner starting ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,689 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,689 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job] - starting workflow controller () ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,689 - P2PAlgorithmController - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - P2PAlgorithmController started\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,689 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - Workflow controller () started\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:09,689 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:10,684 - SimulatorClientRunner - INFO - Start the clients run simulation.\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:11,686 - SimulatorClientRunner - INFO - Simulate Run client: site-1 on GPU group: None\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:11,687 - SimulatorClientRunner - INFO - Simulate Run client: site-2 on GPU group: None\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:11,688 - SimulatorClientRunner - INFO - Simulate Run client: site-3 on GPU group: None\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:11,689 - SimulatorClientRunner - INFO - Simulate Run client: site-4 on GPU group: None\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:11,691 - SimulatorClientRunner - INFO - Simulate Run client: site-5 on GPU group: None\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,725 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,726 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,726 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,728 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,728 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,791 - CoreCell - INFO - site-5.simulate_job: created backbone external connector to tcp://localhost:50296\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,791 - CoreCell - INFO - site-4.simulate_job: created backbone external connector to tcp://localhost:50296\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,791 - CoreCell - INFO - site-2.simulate_job: created backbone external connector to tcp://localhost:50296\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,791 - CoreCell - INFO - site-3.simulate_job: created backbone external connector to tcp://localhost:50296\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,791 - CoreCell - INFO - site-1.simulate_job: created backbone external connector to tcp://localhost:50296\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,792 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:50296] is starting\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,792 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:50296] is starting\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,792 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:50296] is starting\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,792 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:50296] is starting\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,792 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:50296] is starting\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,793 - conn_manager - INFO - Connection [CN00002 127.0.0.1:50323 => 127.0.0.1:50296] is created: PID: 2298\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,793 - conn_manager - INFO - Connection [CN00002 127.0.0.1:50322 => 127.0.0.1:50296] is created: PID: 2294\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,793 - conn_manager - INFO - Connection [CN00002 127.0.0.1:50326 => 127.0.0.1:50296] is created: PID: 2295\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,793 - conn_manager - INFO - Connection [CN00002 127.0.0.1:50325 => 127.0.0.1:50296] is created: PID: 2296\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,793 - conn_manager - INFO - Connection [CN00002 127.0.0.1:50324 => 127.0.0.1:50296] is created: PID: 2297\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,793 - conn_manager - INFO - Connection [CN00008 127.0.0.1:50296 <= 127.0.0.1:50323] is created: PID: 2282\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,794 - conn_manager - INFO - Connection [CN00009 127.0.0.1:50296 <= 127.0.0.1:50322] is created: PID: 2282\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,794 - conn_manager - INFO - Connection [CN00010 127.0.0.1:50296 <= 127.0.0.1:50326] is created: PID: 2282\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,794 - conn_manager - INFO - Connection [CN00011 127.0.0.1:50296 <= 127.0.0.1:50325] is created: PID: 2282\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,795 - conn_manager - INFO - Connection [CN00012 127.0.0.1:50296 <= 127.0.0.1:50324] is created: PID: 2282\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,896 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,897 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,897 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,897 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,897 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,897 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,897 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,898 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,898 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:12,898 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,639 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,639 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,639 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,640 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,640 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,640 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,640 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,640 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:13,641 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,157 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - synced to Server Runner in 0.513002872467041 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,157 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,157 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,157 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,158 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,158 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - synced to Server Runner in 0.5145540237426758 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,158 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,158 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - client runner started\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,158 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,158 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-3\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,158 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,158 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,158 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - synced to Server Runner in 0.515538215637207 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,159 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - synced to Server Runner in 0.5153059959411621 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,159 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,159 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,159 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,159 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - synced to Server Runner in 0.5155537128448486 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,159 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,159 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,159 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - client runner started\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,159 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,159 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,159 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,159 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-1\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,159 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,159 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,159 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,160 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,160 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,160 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - client runner started\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,160 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,160 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-2\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,160 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,160 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - client runner started\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,160 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-5\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,160 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,161 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,161 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - client runner started\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,161 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-4\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,161 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=config, task_id=e20ea295-ee1b-414e-a0ac-cf038aff2e98] - assigned task to client site-1: name=config, id=e20ea295-ee1b-414e-a0ac-cf038aff2e98\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,162 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=config, task_id=e20ea295-ee1b-414e-a0ac-cf038aff2e98] - sent task assignment to client. client_name:site-1 task_id:e20ea295-ee1b-414e-a0ac-cf038aff2e98\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,163 - GetTaskCommand - INFO - return task to client.  client_name: site-1  task_name: config   task_id: e20ea295-ee1b-414e-a0ac-cf038aff2e98  sharable_header_task_id: e20ea295-ee1b-414e-a0ac-cf038aff2e98\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,164 - Communicator - INFO - Received from simulator_server server. getTask: config size: 701B (701 Bytes) time: 0.004675 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,164 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,165 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=e20ea295-ee1b-414e-a0ac-cf038aff2e98\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,165 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=e20ea295-ee1b-414e-a0ac-cf038aff2e98] - invoking task executor ConsensusExecutor\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,165 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=e20ea295-ee1b-414e-a0ac-cf038aff2e98] - finished processing task\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,165 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=e20ea295-ee1b-414e-a0ac-cf038aff2e98] - try #1: sending task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,166 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=e20ea295-ee1b-414e-a0ac-cf038aff2e98] - checking task ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,168 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=e20ea295-ee1b-414e-a0ac-cf038aff2e98] - start to send task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,168 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,169 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job] - got result from client site-1 for task: name=config, id=e20ea295-ee1b-414e-a0ac-cf038aff2e98\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,169 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=e20ea295-ee1b-414e-a0ac-cf038aff2e98] - finished processing client result by controller\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,169 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-1   task_id:e20ea295-ee1b-414e-a0ac-cf038aff2e98\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,170 - Communicator - INFO -  SubmitUpdate size: 606B (606 Bytes). time: 0.001849 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,170 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=e20ea295-ee1b-414e-a0ac-cf038aff2e98] - task result sent to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,170 - ClientTaskWorker - INFO - Finished one task run for client: site-1 interval: 2 task_processed: True\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,170 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,373 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,671 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=config, task_id=6137abaa-7a6b-41fa-bf99-75691d0552d4] - assigned task to client site-2: name=config, id=6137abaa-7a6b-41fa-bf99-75691d0552d4\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,672 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=config, task_id=6137abaa-7a6b-41fa-bf99-75691d0552d4] - sent task assignment to client. client_name:site-2 task_id:6137abaa-7a6b-41fa-bf99-75691d0552d4\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,673 - GetTaskCommand - INFO - return task to client.  client_name: site-2  task_name: config   task_id: 6137abaa-7a6b-41fa-bf99-75691d0552d4  sharable_header_task_id: 6137abaa-7a6b-41fa-bf99-75691d0552d4\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,675 - Communicator - INFO - Received from simulator_server server. getTask: config size: 728B (728 Bytes) time: 0.005403 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,675 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,676 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=6137abaa-7a6b-41fa-bf99-75691d0552d4\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,676 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6137abaa-7a6b-41fa-bf99-75691d0552d4] - invoking task executor ConsensusExecutor\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,676 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6137abaa-7a6b-41fa-bf99-75691d0552d4] - finished processing task\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,676 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6137abaa-7a6b-41fa-bf99-75691d0552d4] - try #1: sending task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,677 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6137abaa-7a6b-41fa-bf99-75691d0552d4] - checking task ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,679 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6137abaa-7a6b-41fa-bf99-75691d0552d4] - start to send task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,680 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,680 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job] - got result from client site-2 for task: name=config, id=6137abaa-7a6b-41fa-bf99-75691d0552d4\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,681 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=6137abaa-7a6b-41fa-bf99-75691d0552d4] - finished processing client result by controller\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,681 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-2   task_id:6137abaa-7a6b-41fa-bf99-75691d0552d4\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,682 - Communicator - INFO -  SubmitUpdate size: 606B (606 Bytes). time: 0.001925 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,682 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=6137abaa-7a6b-41fa-bf99-75691d0552d4] - task result sent to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,682 - ClientTaskWorker - INFO - Finished one task run for client: site-2 interval: 2 task_processed: True\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,780 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:14,780 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:15,173 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=config, task_id=8023ae42-9d50-4551-b941-996930fd80c2] - assigned task to client site-3: name=config, id=8023ae42-9d50-4551-b941-996930fd80c2\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:15,174 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=config, task_id=8023ae42-9d50-4551-b941-996930fd80c2] - sent task assignment to client. client_name:site-3 task_id:8023ae42-9d50-4551-b941-996930fd80c2\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:15,175 - GetTaskCommand - INFO - return task to client.  client_name: site-3  task_name: config   task_id: 8023ae42-9d50-4551-b941-996930fd80c2  sharable_header_task_id: 8023ae42-9d50-4551-b941-996930fd80c2\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:15,177 - Communicator - INFO - Received from simulator_server server. getTask: config size: 701B (701 Bytes) time: 0.008376 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:15,178 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:15,178 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=8023ae42-9d50-4551-b941-996930fd80c2\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:15,179 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8023ae42-9d50-4551-b941-996930fd80c2] - invoking task executor ConsensusExecutor\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:15,179 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8023ae42-9d50-4551-b941-996930fd80c2] - finished processing task\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:15,180 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8023ae42-9d50-4551-b941-996930fd80c2] - try #1: sending task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:15,180 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8023ae42-9d50-4551-b941-996930fd80c2] - checking task ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:15,187 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8023ae42-9d50-4551-b941-996930fd80c2] - start to send task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:15,188 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:15,189 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job] - got result from client site-3 for task: name=config, id=8023ae42-9d50-4551-b941-996930fd80c2\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:15,189 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=8023ae42-9d50-4551-b941-996930fd80c2] - finished processing client result by controller\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:15,190 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-3   task_id:8023ae42-9d50-4551-b941-996930fd80c2\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:15,191 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:15,191 - Communicator - INFO -  SubmitUpdate size: 606B (606 Bytes). time: 0.002746 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:15,191 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8023ae42-9d50-4551-b941-996930fd80c2] - task result sent to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:15,191 - ClientTaskWorker - INFO - Finished one task run for client: site-3 interval: 2 task_processed: True\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:15,390 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,191 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=config, task_id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408] - assigned task to client site-4: name=config, id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,191 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=config, task_id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408] - sent task assignment to client. client_name:site-4 task_id:8ebcd861-20ac-49a2-8af1-59c6f1dc0408\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,191 - GetTaskCommand - INFO - return task to client.  client_name: site-4  task_name: config   task_id: 8ebcd861-20ac-49a2-8af1-59c6f1dc0408  sharable_header_task_id: 8ebcd861-20ac-49a2-8af1-59c6f1dc0408\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,192 - Communicator - INFO - Received from simulator_server server. getTask: config size: 728B (728 Bytes) time: 0.002734 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,193 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,193 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,193 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408] - invoking task executor ConsensusExecutor\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,193 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408] - finished processing task\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,193 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408] - try #1: sending task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,194 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408] - checking task ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,196 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408] - start to send task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,196 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,197 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job] - got result from client site-4 for task: name=config, id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,197 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408] - finished processing client result by controller\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,198 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-4   task_id:8ebcd861-20ac-49a2-8af1-59c6f1dc0408\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,199 - Communicator - INFO -  SubmitUpdate size: 606B (606 Bytes). time: 0.002651 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,199 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=8ebcd861-20ac-49a2-8af1-59c6f1dc0408] - task result sent to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,199 - ClientTaskWorker - INFO - Finished one task run for client: site-4 interval: 2 task_processed: True\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,230 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,429 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,707 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=config, task_id=418f0f0d-8540-424d-a432-566d8a4c96bf] - assigned task to client site-5: name=config, id=418f0f0d-8540-424d-a432-566d8a4c96bf\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,709 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=config, task_id=418f0f0d-8540-424d-a432-566d8a4c96bf] - sent task assignment to client. client_name:site-5 task_id:418f0f0d-8540-424d-a432-566d8a4c96bf\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,710 - GetTaskCommand - INFO - return task to client.  client_name: site-5  task_name: config   task_id: 418f0f0d-8540-424d-a432-566d8a4c96bf  sharable_header_task_id: 418f0f0d-8540-424d-a432-566d8a4c96bf\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,712 - Communicator - INFO - Received from simulator_server server. getTask: config size: 728B (728 Bytes) time: 0.011580 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,712 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,712 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=418f0f0d-8540-424d-a432-566d8a4c96bf\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,713 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=418f0f0d-8540-424d-a432-566d8a4c96bf] - invoking task executor ConsensusExecutor\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,714 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=418f0f0d-8540-424d-a432-566d8a4c96bf] - finished processing task\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,714 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=418f0f0d-8540-424d-a432-566d8a4c96bf] - try #1: sending task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,714 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=418f0f0d-8540-424d-a432-566d8a4c96bf] - checking task ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,719 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=418f0f0d-8540-424d-a432-566d8a4c96bf] - start to send task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,719 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,721 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job] - got result from client site-5 for task: name=config, id=418f0f0d-8540-424d-a432-566d8a4c96bf\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,721 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=418f0f0d-8540-424d-a432-566d8a4c96bf] - finished processing client result by controller\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,721 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-5   task_id:418f0f0d-8540-424d-a432-566d8a4c96bf\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,722 - Communicator - INFO -  SubmitUpdate size: 606B (606 Bytes). time: 0.003091 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,722 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=418f0f0d-8540-424d-a432-566d8a4c96bf] - task result sent to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,723 - ClientTaskWorker - INFO - Finished one task run for client: site-5 interval: 2 task_processed: True\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,838 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:17,840 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task run_algorithm\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:18,218 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=run_algorithm, task_id=c2a1cb67-6602-48b1-85bf-914887b44a05] - assigned task to client site-3: name=run_algorithm, id=c2a1cb67-6602-48b1-85bf-914887b44a05\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:18,218 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=run_algorithm, task_id=c2a1cb67-6602-48b1-85bf-914887b44a05] - sent task assignment to client. client_name:site-3 task_id:c2a1cb67-6602-48b1-85bf-914887b44a05\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:18,219 - GetTaskCommand - INFO - return task to client.  client_name: site-3  task_name: run_algorithm   task_id: c2a1cb67-6602-48b1-85bf-914887b44a05  sharable_header_task_id: c2a1cb67-6602-48b1-85bf-914887b44a05\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:18,221 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.006713 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:18,221 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:18,221 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=c2a1cb67-6602-48b1-85bf-914887b44a05\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:18,222 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=c2a1cb67-6602-48b1-85bf-914887b44a05] - invoking task executor ConsensusExecutor\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,204 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=run_algorithm, task_id=01ff5afb-adc5-4814-93ff-60de220be502] - assigned task to client site-4: name=run_algorithm, id=01ff5afb-adc5-4814-93ff-60de220be502\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,205 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=run_algorithm, task_id=01ff5afb-adc5-4814-93ff-60de220be502] - sent task assignment to client. client_name:site-4 task_id:01ff5afb-adc5-4814-93ff-60de220be502\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,205 - GetTaskCommand - INFO - return task to client.  client_name: site-4  task_name: run_algorithm   task_id: 01ff5afb-adc5-4814-93ff-60de220be502  sharable_header_task_id: 01ff5afb-adc5-4814-93ff-60de220be502\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,206 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=run_algorithm, task_id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937] - assigned task to client site-1: name=run_algorithm, id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,206 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.003966 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,206 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=run_algorithm, task_id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937] - sent task assignment to client. client_name:site-1 task_id:d87f7a9d-bd7a-489a-8e9a-1084ba7e4937\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,207 - GetTaskCommand - INFO - return task to client.  client_name: site-1  task_name: run_algorithm   task_id: d87f7a9d-bd7a-489a-8e9a-1084ba7e4937  sharable_header_task_id: d87f7a9d-bd7a-489a-8e9a-1084ba7e4937\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,207 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,207 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=01ff5afb-adc5-4814-93ff-60de220be502\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,207 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=01ff5afb-adc5-4814-93ff-60de220be502] - invoking task executor ConsensusExecutor\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,207 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.005148 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,208 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,208 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,208 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937] - invoking task executor ConsensusExecutor\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,717 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=run_algorithm, task_id=13d25962-cc41-4d1f-b591-9712f8dad70d] - assigned task to client site-2: name=run_algorithm, id=13d25962-cc41-4d1f-b591-9712f8dad70d\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,718 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=run_algorithm, task_id=13d25962-cc41-4d1f-b591-9712f8dad70d] - sent task assignment to client. client_name:site-2 task_id:13d25962-cc41-4d1f-b591-9712f8dad70d\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,718 - GetTaskCommand - INFO - return task to client.  client_name: site-2  task_name: run_algorithm   task_id: 13d25962-cc41-4d1f-b591-9712f8dad70d  sharable_header_task_id: 13d25962-cc41-4d1f-b591-9712f8dad70d\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,719 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.002432 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,719 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,719 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=13d25962-cc41-4d1f-b591-9712f8dad70d\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,719 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=13d25962-cc41-4d1f-b591-9712f8dad70d] - invoking task executor ConsensusExecutor\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,729 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=run_algorithm, task_id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2] - assigned task to client site-5: name=run_algorithm, id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,730 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=run_algorithm, task_id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2] - sent task assignment to client. client_name:site-5 task_id:07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,730 - GetTaskCommand - INFO - return task to client.  client_name: site-5  task_name: run_algorithm   task_id: 07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2  sharable_header_task_id: 07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,730 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.001971 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,731 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,731 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,731 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2] - invoking task executor ConsensusExecutor\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,858 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=c2a1cb67-6602-48b1-85bf-914887b44a05] - finished processing task\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,858 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937] - finished processing task\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,858 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=c2a1cb67-6602-48b1-85bf-914887b44a05] - try #1: sending task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,858 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=c2a1cb67-6602-48b1-85bf-914887b44a05] - checking task ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,858 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=13d25962-cc41-4d1f-b591-9712f8dad70d] - finished processing task\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,859 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937] - try #1: sending task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,859 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=13d25962-cc41-4d1f-b591-9712f8dad70d] - try #1: sending task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,859 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=13d25962-cc41-4d1f-b591-9712f8dad70d] - checking task ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,859 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937] - checking task ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,860 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=01ff5afb-adc5-4814-93ff-60de220be502] - finished processing task\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,860 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=01ff5afb-adc5-4814-93ff-60de220be502] - try #1: sending task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,860 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2] - finished processing task\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,860 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=01ff5afb-adc5-4814-93ff-60de220be502] - checking task ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,860 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2] - try #1: sending task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,860 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2] - checking task ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,861 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=c2a1cb67-6602-48b1-85bf-914887b44a05] - start to send task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,861 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,861 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=13d25962-cc41-4d1f-b591-9712f8dad70d] - start to send task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,861 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,861 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937] - start to send task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,862 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,862 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job] - got result from client site-3 for task: name=run_algorithm, id=c2a1cb67-6602-48b1-85bf-914887b44a05\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,862 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=01ff5afb-adc5-4814-93ff-60de220be502] - start to send task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,862 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,862 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2] - start to send task result to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,862 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job] - got result from client site-2 for task: name=run_algorithm, id=13d25962-cc41-4d1f-b591-9712f8dad70d\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,863 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,863 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=c2a1cb67-6602-48b1-85bf-914887b44a05] - finished processing client result by controller\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,863 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job] - got result from client site-1 for task: name=run_algorithm, id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,863 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-3   task_id:c2a1cb67-6602-48b1-85bf-914887b44a05\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,863 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job] - got result from client site-4 for task: name=run_algorithm, id=01ff5afb-adc5-4814-93ff-60de220be502\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,864 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job] - got result from client site-5 for task: name=run_algorithm, id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,864 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=13d25962-cc41-4d1f-b591-9712f8dad70d] - finished processing client result by controller\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,864 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-2   task_id:13d25962-cc41-4d1f-b591-9712f8dad70d\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,864 - Communicator - INFO -  SubmitUpdate size: 613B (613 Bytes). time: 0.003372 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,864 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=c2a1cb67-6602-48b1-85bf-914887b44a05] - task result sent to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,864 - ClientTaskWorker - INFO - Finished one task run for client: site-3 interval: 2 task_processed: True\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,864 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937] - finished processing client result by controller\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,864 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-1   task_id:d87f7a9d-bd7a-489a-8e9a-1084ba7e4937\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,864 - Communicator - INFO -  SubmitUpdate size: 613B (613 Bytes). time: 0.003169 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,865 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=13d25962-cc41-4d1f-b591-9712f8dad70d] - task result sent to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,865 - ClientTaskWorker - INFO - Finished one task run for client: site-2 interval: 2 task_processed: True\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,865 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=01ff5afb-adc5-4814-93ff-60de220be502] - finished processing client result by controller\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,865 - Communicator - INFO -  SubmitUpdate size: 613B (613 Bytes). time: 0.003251 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,865 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-4   task_id:01ff5afb-adc5-4814-93ff-60de220be502\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,865 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=d87f7a9d-bd7a-489a-8e9a-1084ba7e4937] - task result sent to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,865 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2] - finished processing client result by controller\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,865 - ClientTaskWorker - INFO - Finished one task run for client: site-1 interval: 2 task_processed: True\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,865 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-5   task_id:07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,865 - Communicator - INFO -  SubmitUpdate size: 613B (613 Bytes). time: 0.003074 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,866 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=01ff5afb-adc5-4814-93ff-60de220be502] - task result sent to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,866 - ClientTaskWorker - INFO - Finished one task run for client: site-4 interval: 2 task_processed: True\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,866 - Communicator - INFO -  SubmitUpdate size: 613B (613 Bytes). time: 0.003156 seconds\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,866 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=07c4a4c8-0ad5-44e1-9315-f1d1278f7cc2] - task result sent to server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,866 - ClientTaskWorker - INFO - Finished one task run for client: site-5 interval: 2 task_processed: True\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:19,888 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task run_algorithm exit with status TaskCompletionStatus.OK\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:20,089 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - Workflow: controller finalizing ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:20,089 - P2PAlgorithmController - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - P2PAlgorithmController stopped\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:20,090 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - ABOUT_TO_END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:20,092 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:20,093 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:20,093 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:20,093 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:20,093 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:20,094 - ReliableMessage - INFO - ReliableMessage is shutdown\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:20,094 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:20,094 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:20,094 - ObjectStreamer - INFO - Stream Runer is Shut Down\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:20,094 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - Server runner finished.\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,706 - SimulatorServer - INFO - Server app stopped.\n",
+      "\u001b[38m2025-02-03 10:22:52,438 - SimulatorRunner - INFO - Create the Simulator Server.\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:52,439 - CoreCell - INFO - server: creating listener on tcp://0:55189\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:52,633 - CoreCell - INFO - server: created backbone external listener for tcp://0:55189\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:52,633 - ConnectorManager - INFO - 15299: Try start_listener Listener resources: {'secure': False, 'host': 'localhost'}\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:52,634 - conn_manager - INFO - Connector [CH00002 PASSIVE tcp://0:16697] is starting\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,139 - CoreCell - INFO - server: created backbone internal listener for tcp://localhost:16697\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,139 - conn_manager - INFO - Connector [CH00001 PASSIVE tcp://0:55189] is starting\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,140 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,140 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,141 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,141 - SimulatorServer - INFO - max_reg_duration=60.0\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,188 - hci - INFO - Starting Admin Server localhost on Port 55190\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,188 - SimulatorRunner - INFO - Deploy the Apps.\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,230 - SimulatorRunner - INFO - Create the simulate clients.\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,231 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,231 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,237 - Communicator - INFO - Trying to register with server ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,238 - ClientManager - INFO - authenticated client site-1: client_fqcn='site-1'\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,238 - ClientManager - INFO - Client: New client site-1@192.168.0.251 joined. Sent token: 4118e4ff-7abe-4afa-9d1c-f60a8ce067f3.  Total clients: 1\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,238 - Communicator - INFO - register RC: ok\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,238 - FederatedClient - INFO - Successfully registered client:site-1 for project simulator_server. Token:4118e4ff-7abe-4afa-9d1c-f60a8ce067f3 SSID:\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,239 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,239 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,239 - Communicator - INFO - Trying to register with server ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,240 - ClientManager - INFO - authenticated client site-2: client_fqcn='site-2'\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,240 - ClientManager - INFO - Client: New client site-2@192.168.0.251 joined. Sent token: 94cc054d-13c8-4ab1-b1c4-61fa33f6753d.  Total clients: 2\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,240 - Communicator - INFO - register RC: ok\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,240 - FederatedClient - INFO - Successfully registered client:site-2 for project simulator_server. Token:94cc054d-13c8-4ab1-b1c4-61fa33f6753d SSID:\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,241 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,241 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,241 - Communicator - INFO - Trying to register with server ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,242 - ClientManager - INFO - authenticated client site-3: client_fqcn='site-3'\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,242 - ClientManager - INFO - Client: New client site-3@192.168.0.251 joined. Sent token: c4764ab1-0ca6-478a-a3a0-0d24c4ea3c4e.  Total clients: 3\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,242 - Communicator - INFO - register RC: ok\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,242 - FederatedClient - INFO - Successfully registered client:site-3 for project simulator_server. Token:c4764ab1-0ca6-478a-a3a0-0d24c4ea3c4e SSID:\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,242 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,242 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,243 - Communicator - INFO - Trying to register with server ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,243 - ClientManager - INFO - authenticated client site-4: client_fqcn='site-4'\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,243 - ClientManager - INFO - Client: New client site-4@192.168.0.251 joined. Sent token: a3ff8cfc-05f9-4fbd-9afa-590652798c7e.  Total clients: 4\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,243 - Communicator - INFO - register RC: ok\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,243 - FederatedClient - INFO - Successfully registered client:site-4 for project simulator_server. Token:a3ff8cfc-05f9-4fbd-9afa-590652798c7e SSID:\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,243 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,243 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,243 - Communicator - INFO - Trying to register with server ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,244 - ClientManager - INFO - authenticated client site-5: client_fqcn='site-5'\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,244 - ClientManager - INFO - Client: New client site-5@192.168.0.251 joined. Sent token: ea899d30-af22-4660-bab5-c8b6e18d62fe.  Total clients: 5\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,244 - Communicator - INFO - register RC: ok\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,244 - FederatedClient - INFO - Successfully registered client:site-5 for project simulator_server. Token:ea899d30-af22-4660-bab5-c8b6e18d62fe SSID:\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,244 - SimulatorRunner - INFO - Set the client status ready.\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,244 - SimulatorRunner - INFO - Deploy and start the Server App.\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,244 - Cell - INFO - Register blob CB for channel='server_command', topic='*'\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,244 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,244 - ServerCommandAgent - INFO - ServerCommandAgent cell register_request_cb: server.simulate_job\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,258 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,258 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,259 - AuxRunner - INFO - registered aux handler for topic __sync_runner__\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,259 - AuxRunner - INFO - registered aux handler for topic __job_heartbeat__\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,259 - AuxRunner - INFO - registered aux handler for topic __task_check__\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,259 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,259 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,259 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,259 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job] - Server runner starting ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,259 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,260 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job] - starting workflow controller () ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,260 - DistOptController - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - P2PAlgorithmController started\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,260 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - Workflow controller () started\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:53,260 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:54,247 - SimulatorClientRunner - INFO - Start the clients run simulation.\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:55,250 - SimulatorClientRunner - INFO - Simulate Run client: site-1 on GPU group: None\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:55,250 - SimulatorClientRunner - INFO - Simulate Run client: site-2 on GPU group: None\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:55,250 - SimulatorClientRunner - INFO - Simulate Run client: site-3 on GPU group: None\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:55,255 - SimulatorClientRunner - INFO - Simulate Run client: site-4 on GPU group: None\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:55,261 - SimulatorClientRunner - INFO - Simulate Run client: site-5 on GPU group: None\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,278 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,279 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,279 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,280 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,283 - ClientTaskWorker - INFO - ClientTaskWorker started to run\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,365 - CoreCell - INFO - site-4.simulate_job: created backbone external connector to tcp://localhost:55189\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,365 - CoreCell - INFO - site-3.simulate_job: created backbone external connector to tcp://localhost:55189\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,366 - CoreCell - INFO - site-5.simulate_job: created backbone external connector to tcp://localhost:55189\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,366 - CoreCell - INFO - site-2.simulate_job: created backbone external connector to tcp://localhost:55189\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,366 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:55189] is starting\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,366 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:55189] is starting\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,366 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:55189] is starting\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,366 - CoreCell - INFO - site-1.simulate_job: created backbone external connector to tcp://localhost:55189\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,366 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:55189] is starting\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,366 - conn_manager - INFO - Connector [CH00001 ACTIVE tcp://localhost:55189] is starting\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,367 - conn_manager - INFO - Connection [CN00002 127.0.0.1:55217 => 127.0.0.1:55189] is created: PID: 15317\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,367 - conn_manager - INFO - Connection [CN00002 127.0.0.1:55214 => 127.0.0.1:55189] is created: PID: 15316\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,367 - conn_manager - INFO - Connection [CN00002 127.0.0.1:55218 => 127.0.0.1:55189] is created: PID: 15319\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,367 - conn_manager - INFO - Connection [CN00002 127.0.0.1:55215 => 127.0.0.1:55189] is created: PID: 15318\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,367 - conn_manager - INFO - Connection [CN00002 127.0.0.1:55216 => 127.0.0.1:55189] is created: PID: 15320\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,368 - conn_manager - INFO - Connection [CN00008 127.0.0.1:55189 <= 127.0.0.1:55217] is created: PID: 15299\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,369 - conn_manager - INFO - Connection [CN00009 127.0.0.1:55189 <= 127.0.0.1:55214] is created: PID: 15299\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,369 - conn_manager - INFO - Connection [CN00010 127.0.0.1:55189 <= 127.0.0.1:55218] is created: PID: 15299\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,369 - conn_manager - INFO - Connection [CN00011 127.0.0.1:55189 <= 127.0.0.1:55215] is created: PID: 15299\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,370 - conn_manager - INFO - Connection [CN00012 127.0.0.1:55189 <= 127.0.0.1:55216] is created: PID: 15299\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,468 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,468 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,469 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,469 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,470 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,471 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,471 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,471 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,471 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:56,471 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,322 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,322 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,322 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,322 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,322 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Request\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,322 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,322 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,322 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,322 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,322 - AuxRunner - INFO - registered aux handler for topic ObjectStreamer.Abort\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,323 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,323 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,323 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,323 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,323 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,323 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,323 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,323 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,323 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,323 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,323 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,323 - AuxRunner - INFO - registered aux handler for topic __end_run__\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,323 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,323 - AuxRunner - INFO - registered aux handler for topic __do_task__\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,323 - Cell - INFO - Register blob CB for channel='aux_communication', topic='*'\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,831 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - synced to Server Runner in 0.506201982498169 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,832 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,832 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,832 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - synced to Server Runner in 0.5069057941436768 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,832 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,832 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,832 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,832 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,832 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,832 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,832 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - client runner started\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,832 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - synced to Server Runner in 0.5071201324462891 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,832 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-5\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,832 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,832 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,832 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,832 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,832 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - client runner started\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,833 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,833 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-4\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,833 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,833 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,833 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - client runner started\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,833 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-3\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,833 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - synced to Server Runner in 0.5078608989715576 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,833 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,833 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - synced to Server Runner in 0.5078649520874023 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,833 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,833 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REQUEST\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,833 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,834 - AuxRunner - INFO - registered aux handler for topic RM.RELIABLE_REPLY\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,834 - ReliableMessage - INFO - enabled reliable message: max_request_workers=20 query_interval=2.0\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,834 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,834 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,834 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - client runner started\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,834 - AuxRunner - INFO - registered aux handler for topic send_value\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,834 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-2\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,834 - AuxRunner - INFO - registered aux handler for topic fed.event\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,834 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - client runner started\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,834 - ClientTaskWorker - INFO - Initialize ClientRunner for client: site-1\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,836 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=config, task_id=58b0e0a5-eae9-4c65-b3ce-38d620cfc39c] - assigned task to client site-1: name=config, id=58b0e0a5-eae9-4c65-b3ce-38d620cfc39c\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,837 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=config, task_id=58b0e0a5-eae9-4c65-b3ce-38d620cfc39c] - sent task assignment to client. client_name:site-1 task_id:58b0e0a5-eae9-4c65-b3ce-38d620cfc39c\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,837 - GetTaskCommand - INFO - return task to client.  client_name: site-1  task_name: config   task_id: 58b0e0a5-eae9-4c65-b3ce-38d620cfc39c  sharable_header_task_id: 58b0e0a5-eae9-4c65-b3ce-38d620cfc39c\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,838 - Communicator - INFO - Received from simulator_server server. getTask: config size: 728B (728 Bytes) time: 0.003995 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,838 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,838 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=58b0e0a5-eae9-4c65-b3ce-38d620cfc39c\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,839 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=58b0e0a5-eae9-4c65-b3ce-38d620cfc39c] - invoking task executor ConsensusExecutor\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,839 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=58b0e0a5-eae9-4c65-b3ce-38d620cfc39c] - finished processing task\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,839 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=58b0e0a5-eae9-4c65-b3ce-38d620cfc39c] - try #1: sending task result to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,839 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=58b0e0a5-eae9-4c65-b3ce-38d620cfc39c] - checking task ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,841 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=58b0e0a5-eae9-4c65-b3ce-38d620cfc39c] - start to send task result to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,841 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,842 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job] - got result from client site-1 for task: name=config, id=58b0e0a5-eae9-4c65-b3ce-38d620cfc39c\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,842 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=58b0e0a5-eae9-4c65-b3ce-38d620cfc39c] - finished processing client result by controller\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,842 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-1   task_id:58b0e0a5-eae9-4c65-b3ce-38d620cfc39c\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,842 - Communicator - INFO -  SubmitUpdate size: 606B (606 Bytes). time: 0.001474 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,842 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=58b0e0a5-eae9-4c65-b3ce-38d620cfc39c] - task result sent to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,843 - ClientTaskWorker - INFO - Finished one task run for client: site-1 interval: 2 task_processed: True\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,942 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:57,944 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,348 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=config, task_id=3b6a97b5-7ef4-4b0e-bff4-f305bfa6e69e] - assigned task to client site-2: name=config, id=3b6a97b5-7ef4-4b0e-bff4-f305bfa6e69e\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,348 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=config, task_id=3b6a97b5-7ef4-4b0e-bff4-f305bfa6e69e] - sent task assignment to client. client_name:site-2 task_id:3b6a97b5-7ef4-4b0e-bff4-f305bfa6e69e\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,349 - GetTaskCommand - INFO - return task to client.  client_name: site-2  task_name: config   task_id: 3b6a97b5-7ef4-4b0e-bff4-f305bfa6e69e  sharable_header_task_id: 3b6a97b5-7ef4-4b0e-bff4-f305bfa6e69e\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,351 - Communicator - INFO - Received from simulator_server server. getTask: config size: 701B (701 Bytes) time: 0.009205 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,352 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,352 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=3b6a97b5-7ef4-4b0e-bff4-f305bfa6e69e\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,352 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=3b6a97b5-7ef4-4b0e-bff4-f305bfa6e69e] - invoking task executor ConsensusExecutor\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,353 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=3b6a97b5-7ef4-4b0e-bff4-f305bfa6e69e] - finished processing task\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,353 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=3b6a97b5-7ef4-4b0e-bff4-f305bfa6e69e] - try #1: sending task result to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,353 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=3b6a97b5-7ef4-4b0e-bff4-f305bfa6e69e] - checking task ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,358 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=3b6a97b5-7ef4-4b0e-bff4-f305bfa6e69e] - start to send task result to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,358 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,359 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job] - got result from client site-2 for task: name=config, id=3b6a97b5-7ef4-4b0e-bff4-f305bfa6e69e\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,360 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=3b6a97b5-7ef4-4b0e-bff4-f305bfa6e69e] - finished processing client result by controller\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,360 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-2   task_id:3b6a97b5-7ef4-4b0e-bff4-f305bfa6e69e\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,361 - Communicator - INFO -  SubmitUpdate size: 606B (606 Bytes). time: 0.002935 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,361 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=3b6a97b5-7ef4-4b0e-bff4-f305bfa6e69e] - task result sent to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,361 - ClientTaskWorker - INFO - Finished one task run for client: site-2 interval: 2 task_processed: True\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,552 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,553 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,852 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=config, task_id=60862047-5450-4653-a6a9-5ba74fa83953] - assigned task to client site-3: name=config, id=60862047-5450-4653-a6a9-5ba74fa83953\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,854 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=config, task_id=60862047-5450-4653-a6a9-5ba74fa83953] - sent task assignment to client. client_name:site-3 task_id:60862047-5450-4653-a6a9-5ba74fa83953\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,855 - GetTaskCommand - INFO - return task to client.  client_name: site-3  task_name: config   task_id: 60862047-5450-4653-a6a9-5ba74fa83953  sharable_header_task_id: 60862047-5450-4653-a6a9-5ba74fa83953\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,858 - Communicator - INFO - Received from simulator_server server. getTask: config size: 728B (728 Bytes) time: 0.009255 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,859 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,859 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=60862047-5450-4653-a6a9-5ba74fa83953\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,859 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=60862047-5450-4653-a6a9-5ba74fa83953] - invoking task executor ConsensusExecutor\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,860 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=60862047-5450-4653-a6a9-5ba74fa83953] - finished processing task\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,860 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=60862047-5450-4653-a6a9-5ba74fa83953] - try #1: sending task result to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,860 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=60862047-5450-4653-a6a9-5ba74fa83953] - checking task ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,866 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=60862047-5450-4653-a6a9-5ba74fa83953] - start to send task result to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,866 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,868 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job] - got result from client site-3 for task: name=config, id=60862047-5450-4653-a6a9-5ba74fa83953\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,868 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=60862047-5450-4653-a6a9-5ba74fa83953] - finished processing client result by controller\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,868 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-3   task_id:60862047-5450-4653-a6a9-5ba74fa83953\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,869 - Communicator - INFO -  SubmitUpdate size: 606B (606 Bytes). time: 0.003179 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,870 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=60862047-5450-4653-a6a9-5ba74fa83953] - task result sent to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,870 - ClientTaskWorker - INFO - Finished one task run for client: site-3 interval: 2 task_processed: True\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,959 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:22:58,962 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:00,864 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=config, task_id=06c011e8-6aee-4711-8593-c7812434da85] - assigned task to client site-4: name=config, id=06c011e8-6aee-4711-8593-c7812434da85\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:00,864 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=config, task_id=06c011e8-6aee-4711-8593-c7812434da85] - sent task assignment to client. client_name:site-4 task_id:06c011e8-6aee-4711-8593-c7812434da85\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:00,865 - GetTaskCommand - INFO - return task to client.  client_name: site-4  task_name: config   task_id: 06c011e8-6aee-4711-8593-c7812434da85  sharable_header_task_id: 06c011e8-6aee-4711-8593-c7812434da85\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:00,866 - Communicator - INFO - Received from simulator_server server. getTask: config size: 728B (728 Bytes) time: 0.003766 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:00,866 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:00,866 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=06c011e8-6aee-4711-8593-c7812434da85\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:00,867 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=06c011e8-6aee-4711-8593-c7812434da85] - invoking task executor ConsensusExecutor\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:00,867 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=06c011e8-6aee-4711-8593-c7812434da85] - finished processing task\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:00,867 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=06c011e8-6aee-4711-8593-c7812434da85] - try #1: sending task result to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:00,867 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=06c011e8-6aee-4711-8593-c7812434da85] - checking task ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:00,870 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=06c011e8-6aee-4711-8593-c7812434da85] - start to send task result to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:00,870 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:00,871 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job] - got result from client site-4 for task: name=config, id=06c011e8-6aee-4711-8593-c7812434da85\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:00,871 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=06c011e8-6aee-4711-8593-c7812434da85] - finished processing client result by controller\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:00,871 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-4   task_id:06c011e8-6aee-4711-8593-c7812434da85\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:00,872 - Communicator - INFO -  SubmitUpdate size: 606B (606 Bytes). time: 0.002201 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:00,872 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=06c011e8-6aee-4711-8593-c7812434da85] - task result sent to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:00,873 - ClientTaskWorker - INFO - Finished one task run for client: site-4 interval: 2 task_processed: True\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:00,995 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,003 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task config\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,372 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=config, task_id=346019d9-5f73-4e6e-807d-b27d2b99e45d] - assigned task to client site-5: name=config, id=346019d9-5f73-4e6e-807d-b27d2b99e45d\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,373 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=config, task_id=346019d9-5f73-4e6e-807d-b27d2b99e45d] - sent task assignment to client. client_name:site-5 task_id:346019d9-5f73-4e6e-807d-b27d2b99e45d\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,373 - GetTaskCommand - INFO - return task to client.  client_name: site-5  task_name: config   task_id: 346019d9-5f73-4e6e-807d-b27d2b99e45d  sharable_header_task_id: 346019d9-5f73-4e6e-807d-b27d2b99e45d\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,378 - Communicator - INFO - Received from simulator_server server. getTask: config size: 701B (701 Bytes) time: 0.008450 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,378 - FederatedClient - INFO - pull_task completed. Task name:config Status:True \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,379 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=config, id=346019d9-5f73-4e6e-807d-b27d2b99e45d\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,380 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=346019d9-5f73-4e6e-807d-b27d2b99e45d] - invoking task executor ConsensusExecutor\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,380 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=346019d9-5f73-4e6e-807d-b27d2b99e45d] - finished processing task\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,381 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=346019d9-5f73-4e6e-807d-b27d2b99e45d] - try #1: sending task result to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,381 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=346019d9-5f73-4e6e-807d-b27d2b99e45d] - checking task ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,386 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=346019d9-5f73-4e6e-807d-b27d2b99e45d] - start to send task result to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,386 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,388 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job] - got result from client site-5 for task: name=config, id=346019d9-5f73-4e6e-807d-b27d2b99e45d\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,389 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, peer_rc=OK, task_name=config, task_id=346019d9-5f73-4e6e-807d-b27d2b99e45d] - finished processing client result by controller\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,389 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-5   task_id:346019d9-5f73-4e6e-807d-b27d2b99e45d\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,390 - Communicator - INFO -  SubmitUpdate size: 606B (606 Bytes). time: 0.004067 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,390 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=config, task_id=346019d9-5f73-4e6e-807d-b27d2b99e45d] - task result sent to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,391 - ClientTaskWorker - INFO - Finished one task run for client: site-5 interval: 2 task_processed: True\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,403 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task config exit with status TaskCompletionStatus.OK\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,406 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - scheduled task run_algorithm\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,884 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=run_algorithm, task_id=37ae4da3-16fd-4e8c-b7d6-c95eaef20469] - assigned task to client site-3: name=run_algorithm, id=37ae4da3-16fd-4e8c-b7d6-c95eaef20469\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,884 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, task_name=run_algorithm, task_id=37ae4da3-16fd-4e8c-b7d6-c95eaef20469] - sent task assignment to client. client_name:site-3 task_id:37ae4da3-16fd-4e8c-b7d6-c95eaef20469\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,885 - GetTaskCommand - INFO - return task to client.  client_name: site-3  task_name: run_algorithm   task_id: 37ae4da3-16fd-4e8c-b7d6-c95eaef20469  sharable_header_task_id: 37ae4da3-16fd-4e8c-b7d6-c95eaef20469\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,888 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.006691 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,888 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,889 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=37ae4da3-16fd-4e8c-b7d6-c95eaef20469\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:01,889 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=37ae4da3-16fd-4e8c-b7d6-c95eaef20469] - invoking task executor ConsensusExecutor\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:02,873 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=run_algorithm, task_id=117b3e94-ce69-49af-9188-61f141252bc4] - assigned task to client site-1: name=run_algorithm, id=117b3e94-ce69-49af-9188-61f141252bc4\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:02,874 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, task_name=run_algorithm, task_id=117b3e94-ce69-49af-9188-61f141252bc4] - sent task assignment to client. client_name:site-1 task_id:117b3e94-ce69-49af-9188-61f141252bc4\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:02,875 - GetTaskCommand - INFO - return task to client.  client_name: site-1  task_name: run_algorithm   task_id: 117b3e94-ce69-49af-9188-61f141252bc4  sharable_header_task_id: 117b3e94-ce69-49af-9188-61f141252bc4\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:02,876 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.006367 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:02,877 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:02,877 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=run_algorithm, task_id=035682b1-7197-4165-8faf-dbbb1c151a97] - assigned task to client site-4: name=run_algorithm, id=035682b1-7197-4165-8faf-dbbb1c151a97\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:02,877 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=117b3e94-ce69-49af-9188-61f141252bc4\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:02,878 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, task_name=run_algorithm, task_id=035682b1-7197-4165-8faf-dbbb1c151a97] - sent task assignment to client. client_name:site-4 task_id:035682b1-7197-4165-8faf-dbbb1c151a97\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:02,879 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=117b3e94-ce69-49af-9188-61f141252bc4] - invoking task executor ConsensusExecutor\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:02,879 - GetTaskCommand - INFO - return task to client.  client_name: site-4  task_name: run_algorithm   task_id: 035682b1-7197-4165-8faf-dbbb1c151a97  sharable_header_task_id: 035682b1-7197-4165-8faf-dbbb1c151a97\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:02,881 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.005837 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:02,882 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:02,882 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=035682b1-7197-4165-8faf-dbbb1c151a97\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:02,884 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=035682b1-7197-4165-8faf-dbbb1c151a97] - invoking task executor ConsensusExecutor\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,394 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=run_algorithm, task_id=0117fb75-76e2-4e60-8f23-3adee42b0a38] - assigned task to client site-2: name=run_algorithm, id=0117fb75-76e2-4e60-8f23-3adee42b0a38\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,395 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, task_name=run_algorithm, task_id=0117fb75-76e2-4e60-8f23-3adee42b0a38] - sent task assignment to client. client_name:site-2 task_id:0117fb75-76e2-4e60-8f23-3adee42b0a38\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,395 - GetTaskCommand - INFO - return task to client.  client_name: site-2  task_name: run_algorithm   task_id: 0117fb75-76e2-4e60-8f23-3adee42b0a38  sharable_header_task_id: 0117fb75-76e2-4e60-8f23-3adee42b0a38\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,398 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.007840 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,398 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=run_algorithm, task_id=2a786117-6736-4998-97cc-27b5afe05547] - assigned task to client site-5: name=run_algorithm, id=2a786117-6736-4998-97cc-27b5afe05547\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,399 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,399 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, task_name=run_algorithm, task_id=2a786117-6736-4998-97cc-27b5afe05547] - sent task assignment to client. client_name:site-5 task_id:2a786117-6736-4998-97cc-27b5afe05547\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,399 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=0117fb75-76e2-4e60-8f23-3adee42b0a38\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,399 - GetTaskCommand - INFO - return task to client.  client_name: site-5  task_name: run_algorithm   task_id: 2a786117-6736-4998-97cc-27b5afe05547  sharable_header_task_id: 2a786117-6736-4998-97cc-27b5afe05547\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,399 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=0117fb75-76e2-4e60-8f23-3adee42b0a38] - invoking task executor ConsensusExecutor\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,401 - Communicator - INFO - Received from simulator_server server. getTask: run_algorithm size: 689B (689 Bytes) time: 0.005055 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,401 - FederatedClient - INFO - pull_task completed. Task name:run_algorithm Status:True \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,402 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - got task assignment: name=run_algorithm, id=2a786117-6736-4998-97cc-27b5afe05547\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,402 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=2a786117-6736-4998-97cc-27b5afe05547] - invoking task executor ConsensusExecutor\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,563 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=2a786117-6736-4998-97cc-27b5afe05547] - finished processing task\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,562 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=0117fb75-76e2-4e60-8f23-3adee42b0a38] - finished processing task\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,563 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=37ae4da3-16fd-4e8c-b7d6-c95eaef20469] - finished processing task\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,562 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=035682b1-7197-4165-8faf-dbbb1c151a97] - finished processing task\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,562 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=117b3e94-ce69-49af-9188-61f141252bc4] - finished processing task\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,563 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=035682b1-7197-4165-8faf-dbbb1c151a97] - try #1: sending task result to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,563 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=37ae4da3-16fd-4e8c-b7d6-c95eaef20469] - try #1: sending task result to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,563 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=0117fb75-76e2-4e60-8f23-3adee42b0a38] - try #1: sending task result to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,563 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=035682b1-7197-4165-8faf-dbbb1c151a97] - checking task ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,563 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=37ae4da3-16fd-4e8c-b7d6-c95eaef20469] - checking task ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,563 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=0117fb75-76e2-4e60-8f23-3adee42b0a38] - checking task ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,563 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=2a786117-6736-4998-97cc-27b5afe05547] - try #1: sending task result to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,563 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=117b3e94-ce69-49af-9188-61f141252bc4] - try #1: sending task result to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,563 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=117b3e94-ce69-49af-9188-61f141252bc4] - checking task ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,563 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=2a786117-6736-4998-97cc-27b5afe05547] - checking task ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,565 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=117b3e94-ce69-49af-9188-61f141252bc4] - start to send task result to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,565 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,567 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=37ae4da3-16fd-4e8c-b7d6-c95eaef20469] - start to send task result to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,567 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,567 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=0117fb75-76e2-4e60-8f23-3adee42b0a38] - start to send task result to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,567 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,567 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job] - got result from client site-1 for task: name=run_algorithm, id=117b3e94-ce69-49af-9188-61f141252bc4\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,568 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=117b3e94-ce69-49af-9188-61f141252bc4] - finished processing client result by controller\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,568 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=2a786117-6736-4998-97cc-27b5afe05547] - start to send task result to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,568 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=035682b1-7197-4165-8faf-dbbb1c151a97] - start to send task result to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,568 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,568 - FederatedClient - INFO - Starting to push execute result.\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,568 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-1   task_id:117b3e94-ce69-49af-9188-61f141252bc4\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,568 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job] - got result from client site-3 for task: name=run_algorithm, id=37ae4da3-16fd-4e8c-b7d6-c95eaef20469\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,569 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job] - got result from client site-2 for task: name=run_algorithm, id=0117fb75-76e2-4e60-8f23-3adee42b0a38\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,569 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=37ae4da3-16fd-4e8c-b7d6-c95eaef20469] - finished processing client result by controller\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,569 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-3   task_id:37ae4da3-16fd-4e8c-b7d6-c95eaef20469\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,570 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=0117fb75-76e2-4e60-8f23-3adee42b0a38] - finished processing client result by controller\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,570 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-2   task_id:0117fb75-76e2-4e60-8f23-3adee42b0a38\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,570 - Communicator - INFO -  SubmitUpdate size: 613B (613 Bytes). time: 0.004786 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,570 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=117b3e94-ce69-49af-9188-61f141252bc4] - task result sent to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,570 - ClientTaskWorker - INFO - Finished one task run for client: site-1 interval: 2 task_processed: True\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,571 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job] - got result from client site-5 for task: name=run_algorithm, id=2a786117-6736-4998-97cc-27b5afe05547\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,571 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=2a786117-6736-4998-97cc-27b5afe05547] - finished processing client result by controller\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,571 - Communicator - INFO -  SubmitUpdate size: 613B (613 Bytes). time: 0.003910 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,571 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-5   task_id:2a786117-6736-4998-97cc-27b5afe05547\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,571 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=37ae4da3-16fd-4e8c-b7d6-c95eaef20469] - task result sent to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,571 - ClientTaskWorker - INFO - Finished one task run for client: site-3 interval: 2 task_processed: True\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,571 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job] - got result from client site-4 for task: name=run_algorithm, id=035682b1-7197-4165-8faf-dbbb1c151a97\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,572 - Communicator - INFO -  SubmitUpdate size: 613B (613 Bytes). time: 0.004425 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,572 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job, peer_rc=OK, task_name=run_algorithm, task_id=035682b1-7197-4165-8faf-dbbb1c151a97] - finished processing client result by controller\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,572 - SubmitUpdateCommand - INFO - submit_update process. client_name:site-4   task_id:035682b1-7197-4165-8faf-dbbb1c151a97\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,572 - Communicator - INFO -  SubmitUpdate size: 613B (613 Bytes). time: 0.003643 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,572 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=0117fb75-76e2-4e60-8f23-3adee42b0a38] - task result sent to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,572 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=2a786117-6736-4998-97cc-27b5afe05547] - task result sent to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,572 - ClientTaskWorker - INFO - Finished one task run for client: site-2 interval: 2 task_processed: True\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,572 - ClientTaskWorker - INFO - Finished one task run for client: site-5 interval: 2 task_processed: True\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,572 - Communicator - INFO -  SubmitUpdate size: 613B (613 Bytes). time: 0.004091 seconds\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,572 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job, task_name=run_algorithm, task_id=035682b1-7197-4165-8faf-dbbb1c151a97] - task result sent to server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,572 - ClientTaskWorker - INFO - Finished one task run for client: site-4 interval: 2 task_processed: True\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,640 - WFCommServer - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - task run_algorithm exit with status TaskCompletionStatus.OK\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,840 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - Workflow: controller finalizing ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,841 - DistOptController - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - P2PAlgorithmController stopped\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,842 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - ABOUT_TO_END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,845 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,845 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,846 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,846 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,847 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,847 - ReliableMessage - INFO - ReliableMessage is shutdown\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,847 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,847 - ObjectStreamer - INFO - Stream Runer is Shut Down\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,847 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - received request from Server to end current RUN\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:03,848 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - Server runner finished.\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,281 - SimulatorServer - INFO - Server app stopped.\n",
       "\n",
       "\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,727 - ReliableMessage - INFO - shutdown reliable message monitor\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,868 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,868 - GetTaskCommand - INFO - return task to client.  client_name: site-5  task_name: __end_run__   task_id:   sharable_header_task_id: \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,869 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,869 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,869 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - server asked to end the run\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,869 - GetTaskCommand - INFO - return task to client.  client_name: site-3  task_name: __end_run__   task_id:   sharable_header_task_id: \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,869 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - started end-run events sequence\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,869 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,869 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,870 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,870 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,870 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,870 - GetTaskCommand - INFO - return task to client.  client_name: site-1  task_name: __end_run__   task_id:   sharable_header_task_id: \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,870 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,870 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - server asked to end the run\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,870 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - started end-run events sequence\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,870 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-5 \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,870 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,871 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,871 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,871 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,871 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,871 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-3 \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,871 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - server asked to end the run\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,872 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,872 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - started end-run events sequence\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,872 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,872 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,872 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 2298\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,872 - GetTaskCommand - INFO - return task to client.  client_name: site-2  task_name: __end_run__   task_id:   sharable_header_task_id: \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,872 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,872 - conn_manager - INFO - Connection [CN00008 Not Connected] is closed PID: 2282\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,872 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,872 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-1 \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,872 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 2296\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,873 - conn_manager - INFO - Connection [CN00011 Not Connected] is closed PID: 2282\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,873 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,873 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,873 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - server asked to end the run\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,873 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - started end-run events sequence\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,874 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,874 - GetTaskCommand - INFO - return task to client.  client_name: site-4  task_name: __end_run__   task_id:   sharable_header_task_id: \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,874 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,874 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 2294\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,874 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,874 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,874 - conn_manager - INFO - Connection [CN00009 Not Connected] is closed PID: 2282\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,874 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-2 \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,874 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,874 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - server asked to end the run\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,875 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - started end-run events sequence\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,875 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,875 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,875 - conn_manager - INFO - Connection [CN00010 Not Connected] is closed PID: 2282\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,875 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 2295\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,875 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - END_RUN fired\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,875 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,876 - FederatedClient - INFO - Shutting down client run: site-1\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,876 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-4 \u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,876 - FederatedClient - INFO - Shutting down client run: site-2\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,876 - FederatedClient - INFO - Shutting down client run: site-3\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,876 - FederatedClient - INFO - Shutting down client run: site-4\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,877 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 2297\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,877 - conn_manager - INFO - Connection [CN00012 Not Connected] is closed PID: 2282\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,877 - FederatedClient - INFO - Shutting down client run: site-5\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:21,877 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - asked to abort - triggered abort_signal to stop the RUN\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:22,159 - hci - INFO - Admin Server localhost on Port 50297 shutdown!\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:22,160 - SimulatorServer - INFO - shutting down server\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:22,161 - SimulatorServer - INFO - canceling sync locks\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:22,161 - SimulatorServer - INFO - server off\u001b[0m\n",
-      "\u001b[38m2025-01-31 19:25:25,607 - MPM - INFO - MPM: Good Bye!\u001b[0m\n"
+      "\u001b[38m2025-02-03 10:23:05,288 - ReliableMessage - INFO - shutdown reliable message monitor\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,576 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-3, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,576 - GetTaskCommand - INFO - return task to client.  client_name: site-3  task_name: __end_run__   task_id:   sharable_header_task_id: \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,578 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-1, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,578 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,578 - ClientRunner - INFO - [identity=site-3, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - server asked to end the run\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,578 - GetTaskCommand - INFO - return task to client.  client_name: site-1  task_name: __end_run__   task_id:   sharable_header_task_id: \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,579 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - started end-run events sequence\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,579 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,579 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,579 - ClientRunner - INFO - [identity=site-3, run=simulate_job] - END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,579 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,580 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-3 \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,581 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,581 - ClientRunner - INFO - [identity=site-1, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - server asked to end the run\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,581 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - started end-run events sequence\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,581 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 15316\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,581 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-2, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,581 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,581 - GetTaskCommand - INFO - return task to client.  client_name: site-2  task_name: __end_run__   task_id:   sharable_header_task_id: \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,581 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,581 - conn_manager - INFO - Connection [CN00009 Not Connected] is closed PID: 15299\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,582 - ClientRunner - INFO - [identity=site-1, run=simulate_job] - END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,582 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,582 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-4, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,583 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-1 \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,583 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller, peer=site-5, peer_run=simulate_job] - server runner is finalizing - asked client to end the run\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,583 - GetTaskCommand - INFO - return task to client.  client_name: site-4  task_name: __end_run__   task_id:   sharable_header_task_id: \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,583 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,583 - GetTaskCommand - INFO - return task to client.  client_name: site-5  task_name: __end_run__   task_id:   sharable_header_task_id: \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,584 - ClientRunner - INFO - [identity=site-2, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - server asked to end the run\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,584 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - started end-run events sequence\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,584 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,584 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 15318\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,584 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,584 - ClientRunner - INFO - [identity=site-2, run=simulate_job] - END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,584 - conn_manager - INFO - Connection [CN00011 Not Connected] is closed PID: 15299\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,584 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,585 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,585 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-2 \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,585 - ClientRunner - INFO - [identity=site-4, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - server asked to end the run\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,585 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - started end-run events sequence\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,585 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,585 - FederatedClient - INFO - pull_task completed. Task name:__end_run__ Status:True \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,585 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,586 - ClientRunner - INFO - [identity=site-5, run=simulate_job, peer=simulator_server, peer_run=simulate_job] - server asked to end the run\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,586 - ClientRunner - INFO - [identity=site-4, run=simulate_job] - END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,586 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - started end-run events sequence\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,586 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,586 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - ABOUT_TO_END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,586 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 15317\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,586 - conn_manager - INFO - Connection [CN00008 Not Connected] is closed PID: 15299\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,586 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - Firing CHECK_END_RUN_READINESS ...\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,586 - ClientRunner - INFO - [identity=site-5, run=simulate_job] - END_RUN fired\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,586 - ClientTaskWorker - INFO - End the Simulator run.\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,586 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-4 \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,587 - ClientTaskWorker - INFO - Clean up ClientRunner for : site-5 \u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,587 - FederatedClient - INFO - Shutting down client run: site-1\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,587 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 15320\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,588 - conn_manager - INFO - Connection [CN00012 Not Connected] is closed PID: 15299\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,588 - FederatedClient - INFO - Shutting down client run: site-2\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,588 - conn_manager - INFO - Connection [CN00002 Not Connected] is closed PID: 15319\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,588 - conn_manager - INFO - Connection [CN00010 Not Connected] is closed PID: 15299\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,588 - FederatedClient - INFO - Shutting down client run: site-3\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,588 - FederatedClient - INFO - Shutting down client run: site-4\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,589 - FederatedClient - INFO - Shutting down client run: site-5\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,589 - ServerRunner - INFO - [identity=simulator_server, run=simulate_job, wf=controller] - asked to abort - triggered abort_signal to stop the RUN\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,714 - hci - INFO - Admin Server localhost on Port 55190 shutdown!\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,715 - SimulatorServer - INFO - shutting down server\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,715 - SimulatorServer - INFO - canceling sync locks\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:05,715 - SimulatorServer - INFO - server off\u001b[0m\n",
+      "\u001b[38m2025-02-03 10:23:09,171 - MPM - INFO - MPM: Good Bye!\u001b[0m\n"
      ]
     }
    ],
@@ -659,25 +659,27 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 5,
    "metadata": {},
    "outputs": [
     {
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "/var/folders/82/970ljrw529v0chx2svm8gwwr0000gp/T/ipykernel_2247/4202699194.py:6: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n",
-      "  f\"site-{i+1}\": torch.load(f\"tmp/runs/consensus/site-{i+1}/value_sequence.pt\") for i in range(num_clients)\n"
+      "/var/folders/82/970ljrw529v0chx2svm8gwwr0000gp/T/ipykernel_15268/4202699194.py:6: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n",
+      "  f\"site-{i+1}\": torch.load(f\"tmp/runs/consensus/site-{i+1}/value_sequence.pt\") for i in range(num_clients)\n",
+      "/Users/ffarina/Documents/code/NVFlare/nvflare/app_opt/p2p/utils/topology.py:37: UserWarning: Casting complex values to real discards the imaginary part (Triggered internally at /Users/runner/work/pytorch/pytorch/pytorch/aten/src/ATen/native/Copy.cpp:308.)\n",
+      "  idx = eigenvalues.float().argsort(descending=True)\n"
      ]
     },
     {
      "data": {
       "text/html": [
-       "
Consensus value: 0.5452268123626709\n",
+       "
Consensus value: 0.2560408115386963\n",
        "
\n" ], "text/plain": [ - "Consensus value: \u001b[1;36m0.5452268123626709\u001b[0m\n" + "Consensus value: \u001b[1;36m0.2560408115386963\u001b[0m\n" ] }, "metadata": {}, @@ -706,12 +708,12 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 6, "metadata": {}, "outputs": [ { "data": { - "image/png": "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yQIm+TtLF1kJPKStkS/pUi0BorwX6ZItwcI777yjggAJPk9GxoqRxrDyN83Ly1Pj33z88ccq4PUlgZgEQxKcyXNkjBwZM+bQoUOqBkZqTCSolhomaSckQbacSwmY5XMl50m6HBOFXMj67RA1kq69ssjjvqSbZMuWLYN2L/U4evSoa/z48a6UlBTVrfass86qtJ9gXXvFggULXD169FDP69y5s+oiHKxr79atW10XXnihKzo6Wj3m6eZbVddP6crbpUsXl8lkcqWnp7vuuusu1/Hjx/3KSBfS7t27VzrOmnRrFTabzfXUU0+prqPyOnKeJk+e7NdF9nS79oqioiLXAw884GrWrJl6HenC+uKLL/p1YfWQrstnn3226nKblJSk3uPChQu9j69YscJ17rnnqvMo+/vLX/7i7cbt6SZbm3PgcdNNN6l9DB06NOjjX375patnz56uqKgoV5s2bVzTpk1Txxr4twvs2it27dql9ivvSf6Wjz76qHpPgccsfv75Z9fo0aNdycnJqry8h+uuu861aNEib9fthx56yNWrVy9XfHy8+rvI7ddff73G75WoLunkP6EPgYiIiIg0bDNCREREYcVghIiIiMKKwQgRERGFFYMRIiIiCisGI0RERBRWDEaIiIgorBrFoGcykqKMbCgDCjWmOTCIiIgimcvlUoPsyaCDgROJNrpgRAIRmVSKiIiIGp8DBw6oUX8bdTDiGUpb3owMZ0xEREQNX2FhoapMONmUGI0mGPGkZiQQYTBCRETUuFTXxIINWImIiCisah2MyBTWMuukNEaRSOeLL76o9jlLly5Fnz591OyZMqvmBx98cKrHS0RERJEejJSUlKgpp1977bUald+zZw+uvPJKNf33hg0b1HTft912G7777rtTOV4iIiI6w9S6zcjll1+ulpp688030bZtW8yYMUPd79q1K3744Qe8/PLLGD58eG1fnogIkd5V0m63w+FwhPtQiGAwGGA0Gk972I16b8C6cuVKDB061G+bBCFSQ1KViooKtfi2xiUiinRWqxVHjhxBaWlpuA+FyCsmJgaZmZkwm81osMFIVlYW0tPT/bbJfQkwysrKEB0dXek5zz//PJ566qn6PjQiokZDBn+UtLf8EpU2e/LFz0EgKdy1dBIg5+TkqM9mx44dTzqwWaPr2jt58mRMnDixUj9lIqJIJV/6EpDI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pNIIrGwzQkREFEoMRiqlaRiMEBERhRKDEQ+maYiIiMKCwUilrr1swEpERBRKDEY82LWXiIgoLBiMeLDNCBERUVgwGBFOB2Av125zOHgiIqKQYjDi23hVsGaEiIgopBiM+AYjOj1gtIT7aIiIiCIKgxHf9iKSotHpwn00REREEYXBiODoq0RERGHDYMQvGGG3XiIiolBjMCJsrBkhIiIKFwYjfkPBMxghIiIKNQYjfkPBMxghIiIKNQYjgkPBExERhQ2DEb+h4DlJHhERUagxGPFN05hYM0JERBRqDEYE0zRERERhw2BEME1DREQUNgxG/Lr2smaEiIgo1BiMCA4HT0REFDYMRgSDESIiorBhMOLXZoTBCBERUagxGBHs2ktERBQ2DEb8uvayZoSIiCjUGIwIpmmIiIjChsGIYNdeIiKisGEw4nL59KbhoGdEREShxmDEViYRiXabw8ETERGFHIMRT3sRwTQNERFR4whGXnvtNbRp0wZRUVEYMGAAVq9eXWXZd955BxdccAGSkpLUMnTo0JOWD1tPGmM0oDeE+2iIiIgiTq2DkU8++QQTJ07E1KlTsX79evTq1QvDhw9HdnZ20PJLly7FmDFjsGTJEqxcuRItW7bEsGHDcOjQITSoMUaYoiEiIgoLncslLThrTmpCzjnnHMyaNUvddzqdKsC455578Mgjj1T7fIfDoWpI5Pljx46t0WsWFhYiMTERBQUFSEhIQJ06uBZ4dwjQpBVw/691u28iIqIIVljD63etakasVivWrVunUi3eHej16r7UetREaWkpbDYbmjZtWmWZiooK9QZ8l3pP05g4xggREVE41CoYyc3NVTUb6enpftvlflZWVo328fDDD6NZs2Z+AU2g559/XkVSnkVqXuo/TcNghIiI6IzvTfPCCy/g448/xty5c1Xj16pMnjxZVel4lgMHDtTfQXnHGGGbESIionAw1qZwSkoKDAYDjh496rdd7mdkZJz0uf/3f/+ngpH//e9/6Nmz50nLWiwWtYSEjQOeERERNZqaEbPZjL59+2LRokXebdKAVe4PHDiwyudNnz4df/3rXzF//nz069cPDQqHgiciImo8NSNCuvWOGzdOBRX9+/fHK6+8gpKSEowfP149Lj1kmjdvrtp9iGnTpmHKlCn46KOP1NgknrYlcXFxagk7du0lIiJqXMHI9ddfj5yc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", + "image/png": "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", "text/plain": [ "
" ] diff --git a/examples/advanced/distributed_optimization/2-two_moons/dgd_results.png b/examples/advanced/distributed_optimization/2-two_moons/dgd_results.png index 0f95fc8d8529baffcaec2ad6545ce7d863415b37..420bf7c6ca8e9379fe87f39c0692b070f535236c 100644 GIT binary patch literal 49949 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

1jXWv`ypIb=I zSPAozQG~|EoGURS_4gZMYioM|+7k)i{Q>Ef)(mul7+=EoD20UD+D<$2??S?Vj*pK! ztten2=&KrK(sGn0UU3=5d9ZqI z;zF8ro@dCkkbjdk;q(Nk7D;vfp5c`1g7gggiu>J{xl_S}*Dc5|Zm=Q=g14}&OroRr z%Bb%2*0c!Ig0WLU1Uv^Ee=+zLgDezSi-f&8H15&|Bj21c4^qkZC5Q$tsi6J&)$F5%4VAxur3q-T< z#c$s}nhRTM_0qM0GM3E8S3|3x0oHm9*C)*>MWXBQs0@C59UjZAViLk~i%i}Mp)@V# zOnTWN0SZ*PBLkBdFcpMm*k>&gSHrfOC=KYJ`0HDP#v8eHVSBWBa_A}osnX>bb|ZW( zQe-4QniWI$*0`B{`WdCtgh@RJFbeL`NuM52ufxV~$kg9X6So?BxjcP4%tz9X5-u*D z63ftV=692gE2Fh<=Wf4q>X9V?QmIKOhNhIMWM+cYv}GqXR|AFPA|iF@v<%WBD+6=VXMaOw z-EE>KlUF3T2pH*wBMicK+VbCq`U@kybS{1JPa;9%Ujyf=4g7ypGx*W=eYZOIfv+gQ z18ddLS6fN)knvjg>N=6IpLUbM;V!{Sk2 zfOqY+C6-zbvb8?B8uIPP&NuFG=ZY+`A9C2mH4to@NQ`n8Cq^N)Lc!z7N*g$cABbhe zZ{FC=(S8Me7+%mO25fqt}Ha zdOEkaw|j#`E+Rv!Sd?UwM_Z>VRXP-Wd`JwPEwdrbt@`uzO8qn!WwObm-t)p|xtTc<$7z#zMw9q{$BX8AN;37p^_-6`{Kyb)9xsfSg8~Dbo z+*%P*HYp3M2-_-|4az+QO5BYf%IN5kb?p$@{UEY%8A^+F&y#FgmO(&ubh_6aaWlL4R4nBm?#Q(H!WQI8=b{GmzS3- za-L>w0u62r?gLj200uo?FiXL6IF|3S+s0NSvDu@?p;wh&x(8TrbE36RT#xeVy9_%1 z=sSau?>y9^iDfzh#7U6$X`un_olTV1+`}Dh5+rzKz!t#tQFS-`0H9q=wem1@aF{-` zI{lz!mCWLq-4|f3)R>F8Md3fA!z(M4=~~V})7I5?L+}?QuXU*}Z>Cz(8~Q^4D+y&+ z;Z@)amL-Ppi!EYAF zaQ!z3C!6P0Rx`FA5pD}lgy1_*M(qL^C*nTYXgcd1)Z;L>r5CwfQdG8aFUwXftD$!n zQ4O*QIXO9eL$7WEGCO-WWzPoe^|VNqB}4#Ac=cdd#o5DS7|9q#;^{v>aN?KG1yu`O ztL}+(iJhYL1QdfaUFEa~wK?*HL451mK8uH}=P^Zp4GSbNntYv)=9)>%z7G6kS>yJ3 z*HT-q>XD-RY9C6|`uh8&eOgEP=7~e2ql(pE7cblXh*eC;pu-aYcXZ`Es}E&+IGbjQ zo4o5)?p&_09>w{Qd;|-npAq5N|Diim)mGVCK%+lfY!$|y9ho6_#9uc5q&3esH8oL`z%LkVM*tfI?E3`RF5-n5(l~w`E0f?P0Eq4?a5!{Yh*YG!Qm@|R zPpJazfJ8Pv*}wYQBCu)?#;_-2_<2ihkP2jyk%ZhW2rVmd1Se&n;DW)>Ibe`EptV$;(?OiVl)y4^&=YI2bPFCy}d1FYUjV1Iu* z9K+e=>fTx_X|=WY`*vEHbTvdludHkbNEB?xvl(C6)%u7nRJrkxjDz!lk|+Zl#nZG9 z_iB$e=x#f7gp$J~x9;gkNJ#iA2oXYnUx#LHSXXOofb?kP-G)BMQpb1k#E=s#N%ovq zOuT0p!GqmB{&8;5Tt+Z`oa7-O0Q|ItGvG+#{q0G|1<~wtHXcxk7EBy eC$L=@WpYDF)U4H99#Qy?r4sFf= literal 63688 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 diff --git a/examples/advanced/distributed_optimization/2-two_moons/gt_results.png b/examples/advanced/distributed_optimization/2-two_moons/gt_results.png index ab32aaa6a7e68a365c8dac92f17679f7c4c99344..86f0284f867bd16ca7998bfd922a4511d7fe87c4 100644 GIT binary patch literal 50080 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 EFMg@XJOBUy literal 63835 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⋙>^`Kl4T-%dS4=HLL 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 literal 38833 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 diff --git a/examples/advanced/distributed_optimization/2-two_moons/utils.py b/examples/advanced/distributed_optimization/2-two_moons/utils.py index ecd6baf6bd..4c56b57b4f 100644 --- a/examples/advanced/distributed_optimization/2-two_moons/utils.py +++ b/examples/advanced/distributed_optimization/2-two_moons/utils.py @@ -81,24 +81,24 @@ def plot_results(job, num_clients): for i in range(num_clients): time = train_loss[f"site-{i + 1}"][:, 0] loss = train_loss[f"site-{i + 1}"][:, 1] - axs[0].plot(time, loss, label=f"site-{i + 1}") + axs[0].plot(range(len(loss)), loss, label=f"site-{i + 1}") axs[0].legend() axs[0].set_ylim(-0.1, 1) axs[0].set_ylabel("Loss") - axs[0].set_xlabel("Time (s)") + axs[0].set_xlabel("Iteration") axs[0].set_title("Evolution of Training Loss") # Second subplot: Evolution of test loss for i in range(num_clients): time = test_loss[f"site-{i + 1}"][:, 0] loss = test_loss[f"site-{i + 1}"][:, 1] - axs[1].plot(time, loss, label=f"site-{i + 1}") + axs[1].plot(range(len(loss)), loss, label=f"site-{i + 1}") axs[1].legend() axs[1].set_ylim(-0.1, 1) axs[1].set_ylabel("Loss") - axs[1].set_xlabel("Time (s)") + axs[1].set_xlabel("Iteration") axs[1].set_title("Evolution of Test Loss") plt.tight_layout() plt.savefig(f"{job}_results.png") - plt.show() \ No newline at end of file + # plt.show() \ No newline at end of file diff --git a/examples/advanced/distributed_optimization/3-mnist/utils.py b/examples/advanced/distributed_optimization/3-mnist/utils.py index 768d53f839..15716d41d2 100644 --- a/examples/advanced/distributed_optimization/3-mnist/utils.py +++ b/examples/advanced/distributed_optimization/3-mnist/utils.py @@ -101,4 +101,5 @@ def plot_results(job, num_clients): axs[1].set_title("Evolution of Test Loss") plt.tight_layout() - plt.savefig(f"{job}_results.png") \ No newline at end of file + # plt.savefig(f"{job}_results.png") + plt.show() \ No newline at end of file From fd3b74ff4e561447e6769259dd4903174e466a3e Mon Sep 17 00:00:00 2001 From: Francesco Farina Date: Mon, 3 Feb 2025 12:58:57 +0000 Subject: [PATCH 15/15] update example README --- .../advanced/distributed_optimization/README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/examples/advanced/distributed_optimization/README.md b/examples/advanced/distributed_optimization/README.md index e74af83233..6b6aad26f7 100644 --- a/examples/advanced/distributed_optimization/README.md +++ b/examples/advanced/distributed_optimization/README.md @@ -113,7 +113,7 @@ Config( ### The controller -In NVFlare, a `Controller` is a server-side component that manages the job execution and orchestration of tasks. Here, since we're running a P2P algorithm, we'll implement a custom controller whose main job is to load and broadcast the network configuration, and initiate/terminate the execution of a P2P algorithm. Let's call it `P2PAlgorithmController`. As a subclass of `Controller`, it must implement 3 methods: +In NVFlare, a `Controller` is a server-side component that manages the job execution and orchestration of tasks. Here, since we're running a P2P algorithm, we'll implement a custom controller whose main job is to load and broadcast the network configuration, and initiate/terminate the execution of a P2P distributed optimization algorithm. Let's call it `DistOptController`. As a subclass of `Controller`, it must implement 3 methods: - `start_controller` which is called at the beginning of the run - `control_flow` defining the main control flow of the controller (in this case, broadcasting the configuration and asking clients to run the algorithm) @@ -122,7 +122,7 @@ In NVFlare, a `Controller` is a server-side component that manages the job execu ```python from nvflare.apis.impl.controller import Controller -class P2PAlgorithmController(Controller): +class DistOptController(Controller): def control_flow(self, abort_signal: Signal, fl_ctx: FLContext): # Broadcast configuration to clients @@ -143,7 +143,7 @@ We won't do anything fancy during the start and stop phase, so let's focus on th ```python from nvflare.app_opt.p2p.types import Config -class P2PAlgorithmController(Controller): +class DistOptController(Controller): def __init__( self, config: Config, @@ -167,7 +167,7 @@ from nvflare.apis.dxo import DXO, DataKind from nvflare.apis.fl_context import FLContext from nvflare.apis.signal import Signal -class P2PAlgorithmController(Controller): +class DistOptController(Controller): ... @@ -201,11 +201,11 @@ class P2PAlgorithmController(Controller): ... ``` -And that's it, our `P2PAlgorithmController` is ready. The complete implementation of the `P2PAlgorithmController` can be found in `nvflare/app_opt/p2p/controllers/base.py`. +And that's it, our `DistOptController` is ready. The complete implementation of the `DistOptController` can be found in `nvflare/app_opt/p2p/controllers/dist_opt_controller.py`. ### The executor -Now that we have our `P2PAlgorithmController`, it's time to take care of the actual execution of the algorithm at the client level - we'll build on top of the NVFlare `Executor` to do to that. +Now that we have our `DistOptController`, it's time to take care of the actual execution of the algorithm at the client level - we'll build on top of the NVFlare `Executor` to do to that. In NVFlare, an `Executor` is a client-side component that handles tasks received from the controller and executes them. For our purposes we'll need our executor to be able to do a few things: - receive the config from the server/controller @@ -409,7 +409,7 @@ class SyncAlgorithmExecutor(Executor): ... ``` -And that's all. The full implementation is in `nvflare/app_opt/p2p/executors/base.py` - note that the implementation in `nvflare.app_opt.p2p` is split between a `BaseP2PAlgorithmExecutor` and the `SyncAlgorithmExecutor`. It contains a few additional attributes (namely `self.id` and `self.client_name`) to identify the client, which are potentially useful in algorithms, and two additional methods `_pre_algorithm_run` and `_post_algorithm_run` to be overridden by each specific algorithm to execute some code before and after the algorithm execution, respectively. +And that's all. The full implementation is in `nvflare/app_opt/p2p/executors/sync_executor.py` - note that the implementation of the `SyncAlgorithmExecutor` in `nvflare.app_opt.p2p` is a subclass of `BaseDistOptExecutor`, defined in `nvflare/app_opt/p2p/executors/base_dist_opt_executor.py`. It contains a few additional attributes (namely `self.id` and `self.client_name`) to identify the client, which are potentially useful in algorithms, and two additional methods `_pre_algorithm_run` and `_post_algorithm_run` to be overridden by each specific algorithm to execute some code before and after the algorithm execution, respectively. ### An example: the `ConsensusExecutor`

XJRIdzaAg^fsi5ji=}jWaS##i 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