flwr-nightly 1.10.0.dev20240713__py3-none-any.whl → 1.10.0.dev20240715__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of flwr-nightly might be problematic. Click here for more details.
- flwr/cli/build.py +1 -1
- flwr/cli/config_utils.py +15 -15
- flwr/cli/install.py +1 -1
- flwr/cli/new/templates/app/code/server.hf.py.tpl +13 -11
- flwr/cli/new/templates/app/code/server.jax.py.tpl +12 -8
- flwr/cli/new/templates/app/code/server.mlx.py.tpl +8 -7
- flwr/cli/new/templates/app/code/server.numpy.py.tpl +12 -8
- flwr/cli/new/templates/app/code/server.pytorch.py.tpl +13 -14
- flwr/cli/new/templates/app/code/server.sklearn.py.tpl +13 -10
- flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +13 -13
- flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +6 -12
- flwr/cli/new/templates/app/pyproject.hf.toml.tpl +6 -9
- flwr/cli/new/templates/app/pyproject.jax.toml.tpl +8 -5
- flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +6 -9
- flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +6 -9
- flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +6 -9
- flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +6 -9
- flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +6 -9
- flwr/cli/run/run.py +98 -57
- flwr/client/supernode/app.py +25 -14
- flwr/common/config.py +1 -1
- flwr/server/run_serverapp.py +1 -1
- flwr/server/superlink/fleet/vce/vce_api.py +45 -28
- flwr/simulation/run_simulation.py +42 -25
- flwr/superexec/app.py +11 -5
- flwr/superexec/deployment.py +85 -21
- flwr/superexec/exec_grpc.py +5 -2
- flwr/superexec/executor.py +18 -1
- flwr/superexec/simulation.py +157 -0
- {flwr_nightly-1.10.0.dev20240713.dist-info → flwr_nightly-1.10.0.dev20240715.dist-info}/METADATA +1 -1
- {flwr_nightly-1.10.0.dev20240713.dist-info → flwr_nightly-1.10.0.dev20240715.dist-info}/RECORD +34 -33
- {flwr_nightly-1.10.0.dev20240713.dist-info → flwr_nightly-1.10.0.dev20240715.dist-info}/LICENSE +0 -0
- {flwr_nightly-1.10.0.dev20240713.dist-info → flwr_nightly-1.10.0.dev20240715.dist-info}/WHEEL +0 -0
- {flwr_nightly-1.10.0.dev20240713.dist-info → flwr_nightly-1.10.0.dev20240715.dist-info}/entry_points.txt +0 -0
flwr/superexec/deployment.py
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
import subprocess
|
|
18
18
|
import sys
|
|
19
19
|
from logging import ERROR, INFO
|
|
20
|
+
from pathlib import Path
|
|
20
21
|
from typing import Dict, Optional
|
|
21
22
|
|
|
22
23
|
from typing_extensions import override
|
|
@@ -33,25 +34,73 @@ from .executor import Executor, RunTracker
|
|
|
33
34
|
|
|
34
35
|
|
|
35
36
|
class DeploymentEngine(Executor):
|
|
36
|
-
"""Deployment engine executor.
|
|
37
|
+
"""Deployment engine executor.
|
|
38
|
+
|
|
39
|
+
Parameters
|
|
40
|
+
----------
|
|
41
|
+
superlink: str (default: "0.0.0.0:9091")
|
|
42
|
+
Address of the SuperLink to connect to.
|
|
43
|
+
root_certificates: Optional[str] (default: None)
|
|
44
|
+
Specifies the path to the PEM-encoded root certificate file for
|
|
45
|
+
establishing secure HTTPS connections.
|
|
46
|
+
flwr_dir: Optional[str] (default: None)
|
|
47
|
+
The path containing installed Flower Apps.
|
|
48
|
+
"""
|
|
37
49
|
|
|
38
50
|
def __init__(
|
|
39
51
|
self,
|
|
40
|
-
|
|
41
|
-
root_certificates: Optional[
|
|
52
|
+
superlink: str = DEFAULT_SERVER_ADDRESS_DRIVER,
|
|
53
|
+
root_certificates: Optional[str] = None,
|
|
54
|
+
flwr_dir: Optional[str] = None,
|
|
42
55
|
) -> None:
|
|
43
|
-
self.
|
|
44
|
-
|
|
56
|
+
self.superlink = superlink
|
|
57
|
+
if root_certificates is None:
|
|
58
|
+
self.root_certificates = None
|
|
59
|
+
self.root_certificates_bytes = None
|
|
60
|
+
else:
|
|
61
|
+
self.root_certificates = root_certificates
|
|
62
|
+
self.root_certificates_bytes = Path(root_certificates).read_bytes()
|
|
63
|
+
self.flwr_dir = flwr_dir
|
|
45
64
|
self.stub: Optional[DriverStub] = None
|
|
46
65
|
|
|
66
|
+
@override
|
|
67
|
+
def set_config(
|
|
68
|
+
self,
|
|
69
|
+
config: Dict[str, str],
|
|
70
|
+
) -> None:
|
|
71
|
+
"""Set executor config arguments.
|
|
72
|
+
|
|
73
|
+
Parameters
|
|
74
|
+
----------
|
|
75
|
+
config : Dict[str, str]
|
|
76
|
+
A dictionary for configuration values.
|
|
77
|
+
Supported configuration key/value pairs:
|
|
78
|
+
- "superlink": str
|
|
79
|
+
The address of the SuperLink Driver API.
|
|
80
|
+
- "root-certificates": str
|
|
81
|
+
The path to the root certificates.
|
|
82
|
+
- "flwr-dir": str
|
|
83
|
+
The path to the Flower directory.
|
|
84
|
+
"""
|
|
85
|
+
if not config:
|
|
86
|
+
return
|
|
87
|
+
if superlink_address := config.get("superlink"):
|
|
88
|
+
self.superlink = superlink_address
|
|
89
|
+
if root_certificates := config.get("root-certificates"):
|
|
90
|
+
self.root_certificates = root_certificates
|
|
91
|
+
self.root_certificates_bytes = Path(root_certificates).read_bytes()
|
|
92
|
+
if flwr_dir := config.get("flwr-dir"):
|
|
93
|
+
self.flwr_dir = flwr_dir
|
|
94
|
+
|
|
47
95
|
def _connect(self) -> None:
|
|
48
|
-
if self.stub is None:
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
96
|
+
if self.stub is not None:
|
|
97
|
+
return
|
|
98
|
+
channel = create_channel(
|
|
99
|
+
server_address=self.superlink,
|
|
100
|
+
insecure=(self.root_certificates_bytes is None),
|
|
101
|
+
root_certificates=self.root_certificates_bytes,
|
|
102
|
+
)
|
|
103
|
+
self.stub = DriverStub(channel)
|
|
55
104
|
|
|
56
105
|
def _create_run(
|
|
57
106
|
self,
|
|
@@ -74,7 +123,9 @@ class DeploymentEngine(Executor):
|
|
|
74
123
|
|
|
75
124
|
@override
|
|
76
125
|
def start_run(
|
|
77
|
-
self,
|
|
126
|
+
self,
|
|
127
|
+
fab_file: bytes,
|
|
128
|
+
override_config: Dict[str, str],
|
|
78
129
|
) -> Optional[RunTracker]:
|
|
79
130
|
"""Start run using the Flower Deployment Engine."""
|
|
80
131
|
try:
|
|
@@ -84,7 +135,7 @@ class DeploymentEngine(Executor):
|
|
|
84
135
|
|
|
85
136
|
# Install FAB Python package
|
|
86
137
|
subprocess.check_call(
|
|
87
|
-
[sys.executable, "-m", "pip", "install", str(fab_path)],
|
|
138
|
+
[sys.executable, "-m", "pip", "install", "--no-deps", str(fab_path)],
|
|
88
139
|
stdout=subprocess.DEVNULL,
|
|
89
140
|
stderr=subprocess.DEVNULL,
|
|
90
141
|
)
|
|
@@ -93,14 +144,27 @@ class DeploymentEngine(Executor):
|
|
|
93
144
|
run_id: int = self._create_run(fab_id, fab_version, override_config)
|
|
94
145
|
log(INFO, "Created run %s", str(run_id))
|
|
95
146
|
|
|
96
|
-
|
|
147
|
+
command = [
|
|
148
|
+
"flower-server-app",
|
|
149
|
+
"--run-id",
|
|
150
|
+
str(run_id),
|
|
151
|
+
"--superlink",
|
|
152
|
+
str(self.superlink),
|
|
153
|
+
]
|
|
154
|
+
|
|
155
|
+
if self.flwr_dir:
|
|
156
|
+
command.append("--flwr-dir")
|
|
157
|
+
command.append(self.flwr_dir)
|
|
158
|
+
|
|
159
|
+
if self.root_certificates is None:
|
|
160
|
+
command.append("--insecure")
|
|
161
|
+
else:
|
|
162
|
+
command.append("--root-certificates")
|
|
163
|
+
command.append(self.root_certificates)
|
|
164
|
+
|
|
165
|
+
# Execute the command
|
|
97
166
|
proc = subprocess.Popen( # pylint: disable=consider-using-with
|
|
98
|
-
|
|
99
|
-
"flower-server-app",
|
|
100
|
-
"--run-id",
|
|
101
|
-
str(run_id),
|
|
102
|
-
"--insecure",
|
|
103
|
-
],
|
|
167
|
+
command,
|
|
104
168
|
stdout=subprocess.PIPE,
|
|
105
169
|
stderr=subprocess.PIPE,
|
|
106
170
|
text=True,
|
flwr/superexec/exec_grpc.py
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"""SuperExec gRPC API."""
|
|
16
16
|
|
|
17
17
|
from logging import INFO
|
|
18
|
-
from typing import Optional, Tuple
|
|
18
|
+
from typing import Dict, Optional, Tuple
|
|
19
19
|
|
|
20
20
|
import grpc
|
|
21
21
|
|
|
@@ -32,8 +32,11 @@ def run_superexec_api_grpc(
|
|
|
32
32
|
address: str,
|
|
33
33
|
executor: Executor,
|
|
34
34
|
certificates: Optional[Tuple[bytes, bytes, bytes]],
|
|
35
|
+
config: Dict[str, str],
|
|
35
36
|
) -> grpc.Server:
|
|
36
37
|
"""Run SuperExec API (gRPC, request-response)."""
|
|
38
|
+
executor.set_config(config)
|
|
39
|
+
|
|
37
40
|
exec_servicer: grpc.Server = ExecServicer(
|
|
38
41
|
executor=executor,
|
|
39
42
|
)
|
|
@@ -45,7 +48,7 @@ def run_superexec_api_grpc(
|
|
|
45
48
|
certificates=certificates,
|
|
46
49
|
)
|
|
47
50
|
|
|
48
|
-
log(INFO, "Flower
|
|
51
|
+
log(INFO, "Starting Flower SuperExec gRPC server on %s", address)
|
|
49
52
|
superexec_grpc_server.start()
|
|
50
53
|
|
|
51
54
|
return superexec_grpc_server
|
flwr/superexec/executor.py
CHANGED
|
@@ -31,9 +31,24 @@ class RunTracker:
|
|
|
31
31
|
class Executor(ABC):
|
|
32
32
|
"""Execute and monitor a Flower run."""
|
|
33
33
|
|
|
34
|
+
@abstractmethod
|
|
35
|
+
def set_config(
|
|
36
|
+
self,
|
|
37
|
+
config: Dict[str, str],
|
|
38
|
+
) -> None:
|
|
39
|
+
"""Register provided config as class attributes.
|
|
40
|
+
|
|
41
|
+
Parameters
|
|
42
|
+
----------
|
|
43
|
+
config : Optional[Dict[str, str]]
|
|
44
|
+
A dictionary for configuration values.
|
|
45
|
+
"""
|
|
46
|
+
|
|
34
47
|
@abstractmethod
|
|
35
48
|
def start_run(
|
|
36
|
-
self,
|
|
49
|
+
self,
|
|
50
|
+
fab_file: bytes,
|
|
51
|
+
override_config: Dict[str, str],
|
|
37
52
|
) -> Optional[RunTracker]:
|
|
38
53
|
"""Start a run using the given Flower FAB ID and version.
|
|
39
54
|
|
|
@@ -44,6 +59,8 @@ class Executor(ABC):
|
|
|
44
59
|
----------
|
|
45
60
|
fab_file : bytes
|
|
46
61
|
The Flower App Bundle file bytes.
|
|
62
|
+
override_config: Dict[str, str]
|
|
63
|
+
The config overrides dict sent by the user (using `flwr run`).
|
|
47
64
|
|
|
48
65
|
Returns
|
|
49
66
|
-------
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# Copyright 2024 Flower Labs GmbH. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
# ==============================================================================
|
|
15
|
+
"""Simulation engine executor."""
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
import subprocess
|
|
19
|
+
import sys
|
|
20
|
+
from logging import ERROR, INFO, WARN
|
|
21
|
+
from typing import Dict, Optional
|
|
22
|
+
|
|
23
|
+
from typing_extensions import override
|
|
24
|
+
|
|
25
|
+
from flwr.cli.config_utils import load_and_validate
|
|
26
|
+
from flwr.cli.install import install_from_fab
|
|
27
|
+
from flwr.common.constant import RUN_ID_NUM_BYTES
|
|
28
|
+
from flwr.common.logger import log
|
|
29
|
+
from flwr.server.superlink.state.utils import generate_rand_int_from_bytes
|
|
30
|
+
|
|
31
|
+
from .executor import Executor, RunTracker
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class SimulationEngine(Executor):
|
|
35
|
+
"""Simulation engine executor.
|
|
36
|
+
|
|
37
|
+
Parameters
|
|
38
|
+
----------
|
|
39
|
+
num_supernodes: Opitonal[str] (default: None)
|
|
40
|
+
Total number of nodes to involve in the simulation.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
def __init__(
|
|
44
|
+
self,
|
|
45
|
+
num_supernodes: Optional[str] = None,
|
|
46
|
+
) -> None:
|
|
47
|
+
self.num_supernodes = num_supernodes
|
|
48
|
+
|
|
49
|
+
@override
|
|
50
|
+
def set_config(
|
|
51
|
+
self,
|
|
52
|
+
config: Dict[str, str],
|
|
53
|
+
) -> None:
|
|
54
|
+
"""Set executor config arguments.
|
|
55
|
+
|
|
56
|
+
Parameters
|
|
57
|
+
----------
|
|
58
|
+
config : Dict[str, str]
|
|
59
|
+
A dictionary for configuration values.
|
|
60
|
+
Supported configuration key/value pairs:
|
|
61
|
+
- "num-supernodes": str
|
|
62
|
+
Number of nodes to register for the simulation.
|
|
63
|
+
"""
|
|
64
|
+
if not config:
|
|
65
|
+
return
|
|
66
|
+
if num_supernodes := config.get("num-supernodes"):
|
|
67
|
+
self.num_supernodes = num_supernodes
|
|
68
|
+
|
|
69
|
+
# Validate config
|
|
70
|
+
if self.num_supernodes is None:
|
|
71
|
+
log(
|
|
72
|
+
ERROR,
|
|
73
|
+
"To start a run with the simulation plugin, please specify "
|
|
74
|
+
"the number of SuperNodes. This can be done by using the "
|
|
75
|
+
"`--executor-config` argument when launching the SuperExec.",
|
|
76
|
+
)
|
|
77
|
+
raise ValueError("`num-supernodes` must not be `None`")
|
|
78
|
+
|
|
79
|
+
@override
|
|
80
|
+
def start_run(
|
|
81
|
+
self, fab_file: bytes, override_config: Dict[str, str]
|
|
82
|
+
) -> Optional[RunTracker]:
|
|
83
|
+
"""Start run using the Flower Simulation Engine."""
|
|
84
|
+
try:
|
|
85
|
+
if override_config:
|
|
86
|
+
raise ValueError(
|
|
87
|
+
"Overriding the run config is not yet supported with the "
|
|
88
|
+
"simulation executor.",
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
# Install FAB to flwr dir
|
|
92
|
+
fab_path = install_from_fab(fab_file, None, True)
|
|
93
|
+
|
|
94
|
+
# Install FAB Python package
|
|
95
|
+
subprocess.check_call(
|
|
96
|
+
[sys.executable, "-m", "pip", "install", "--no-deps", str(fab_path)],
|
|
97
|
+
stdout=subprocess.DEVNULL,
|
|
98
|
+
stderr=subprocess.DEVNULL,
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
# Load and validate config
|
|
102
|
+
config, errors, warnings = load_and_validate(fab_path / "pyproject.toml")
|
|
103
|
+
if errors:
|
|
104
|
+
raise ValueError(errors)
|
|
105
|
+
|
|
106
|
+
if warnings:
|
|
107
|
+
log(WARN, warnings)
|
|
108
|
+
|
|
109
|
+
if config is None:
|
|
110
|
+
raise ValueError(
|
|
111
|
+
"Config extracted from FAB's pyproject.toml is not valid"
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
# Get ClientApp and SeverApp components
|
|
115
|
+
flower_components = config["tool"]["flwr"]["components"]
|
|
116
|
+
clientapp = flower_components["clientapp"]
|
|
117
|
+
serverapp = flower_components["serverapp"]
|
|
118
|
+
|
|
119
|
+
# In Simulation there is no SuperLink, still we create a run_id
|
|
120
|
+
run_id = generate_rand_int_from_bytes(RUN_ID_NUM_BYTES)
|
|
121
|
+
log(INFO, "Created run %s", str(run_id))
|
|
122
|
+
|
|
123
|
+
# Prepare commnand
|
|
124
|
+
command = [
|
|
125
|
+
"flower-simulation",
|
|
126
|
+
"--client-app",
|
|
127
|
+
f"{clientapp}",
|
|
128
|
+
"--server-app",
|
|
129
|
+
f"{serverapp}",
|
|
130
|
+
"--num-supernodes",
|
|
131
|
+
f"{self.num_supernodes}",
|
|
132
|
+
"--run-id",
|
|
133
|
+
str(run_id),
|
|
134
|
+
]
|
|
135
|
+
|
|
136
|
+
# Start Simulation
|
|
137
|
+
proc = subprocess.Popen( # pylint: disable=consider-using-with
|
|
138
|
+
command,
|
|
139
|
+
stdout=subprocess.PIPE,
|
|
140
|
+
stderr=subprocess.PIPE,
|
|
141
|
+
text=True,
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
log(INFO, "Started run %s", str(run_id))
|
|
145
|
+
|
|
146
|
+
return RunTracker(
|
|
147
|
+
run_id=run_id,
|
|
148
|
+
proc=proc,
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
# pylint: disable-next=broad-except
|
|
152
|
+
except Exception as e:
|
|
153
|
+
log(ERROR, "Could not start run: %s", str(e))
|
|
154
|
+
return None
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
executor = SimulationEngine()
|
{flwr_nightly-1.10.0.dev20240713.dist-info → flwr_nightly-1.10.0.dev20240715.dist-info}/RECORD
RENAMED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
flwr/__init__.py,sha256=VmBWedrCxqmt4QvUHBLqyVEH6p7zaFMD_oCHerXHSVw,937
|
|
2
2
|
flwr/cli/__init__.py,sha256=cZJVgozlkC6Ni2Hd_FAIrqefrkCGOV18fikToq-6iLw,720
|
|
3
3
|
flwr/cli/app.py,sha256=FBcSrE35ll88VE11ib67qgsJe2GYDN25UswV9-cYcX8,1267
|
|
4
|
-
flwr/cli/build.py,sha256=
|
|
5
|
-
flwr/cli/config_utils.py,sha256=
|
|
4
|
+
flwr/cli/build.py,sha256=otFX_fKyMKFDQun9ku7VLK5S5vfmrCFmxxkvgKTa9QQ,4743
|
|
5
|
+
flwr/cli/config_utils.py,sha256=bLkKx4irCvjMX2NU81Oax6OWJUPkjQqHefK_HqD9NgA,6587
|
|
6
6
|
flwr/cli/example.py,sha256=1bGDYll3BXQY2kRqSN-oICqS5n1b9m0g0RvXTopXHl4,2215
|
|
7
|
-
flwr/cli/install.py,sha256=
|
|
7
|
+
flwr/cli/install.py,sha256=ve2Bimhxq-p7dXsWkzoGuto3uVcA356DeKCMlgHIL9k,6585
|
|
8
8
|
flwr/cli/new/__init__.py,sha256=cQzK1WH4JP2awef1t2UQ2xjl1agVEz9rwutV18SWV1k,789
|
|
9
9
|
flwr/cli/new/new.py,sha256=vSLxyWOtD33U8mTGeqOhw5OjeDpFStekAVLUH9GJq6k,9432
|
|
10
10
|
flwr/cli/new/templates/__init__.py,sha256=4luU8RL-CK8JJCstQ_ON809W9bNTkY1l9zSaPKBkgwY,725
|
|
@@ -29,28 +29,28 @@ flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl,sha256=kPG4AIXQfNNHZGYC
|
|
|
29
29
|
flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl,sha256=cEq9ZWM3zImJVceNtxHC_bYBLE8OChK0BdjpWs5Wz-0,1881
|
|
30
30
|
flwr/cli/new/templates/app/code/flwr_tune/server.py.tpl,sha256=Z_JC7-YdjCnnUJPKILwT5Iqc70byJpthbye8RsQp9L0,1548
|
|
31
31
|
flwr/cli/new/templates/app/code/flwr_tune/static_config.yaml.tpl,sha256=cBPpBVN_N7p4T2a3rqChlngmE0dB_jveOLHesNcEHvs,268
|
|
32
|
-
flwr/cli/new/templates/app/code/server.hf.py.tpl,sha256=
|
|
33
|
-
flwr/cli/new/templates/app/code/server.jax.py.tpl,sha256=
|
|
34
|
-
flwr/cli/new/templates/app/code/server.mlx.py.tpl,sha256=
|
|
35
|
-
flwr/cli/new/templates/app/code/server.numpy.py.tpl,sha256=
|
|
36
|
-
flwr/cli/new/templates/app/code/server.pytorch.py.tpl,sha256=
|
|
37
|
-
flwr/cli/new/templates/app/code/server.sklearn.py.tpl,sha256=
|
|
38
|
-
flwr/cli/new/templates/app/code/server.tensorflow.py.tpl,sha256=
|
|
32
|
+
flwr/cli/new/templates/app/code/server.hf.py.tpl,sha256=BQmQy7UR8B1mNojUaTNVM4ci1pdKCk1Znw4bH_3nE1c,510
|
|
33
|
+
flwr/cli/new/templates/app/code/server.jax.py.tpl,sha256=stWCaIZCqdw-RnLtpa7hdz24JaiG65z2OSTB1yz6NdA,427
|
|
34
|
+
flwr/cli/new/templates/app/code/server.mlx.py.tpl,sha256=P1Odp3SYl0CQt5tX4fcrY4nxOBOejOMMerRvbrOq-KA,427
|
|
35
|
+
flwr/cli/new/templates/app/code/server.numpy.py.tpl,sha256=oZ_KBcvv0NRINjCKbwNCnSz7xcquDRQEgSh7yOEWZ5E,429
|
|
36
|
+
flwr/cli/new/templates/app/code/server.pytorch.py.tpl,sha256=wcekFyR4qMc3zfi39_AmSps8ahL_NpIzfvfI5iKj_vE,744
|
|
37
|
+
flwr/cli/new/templates/app/code/server.sklearn.py.tpl,sha256=SmlGeCnpPlfx0x0P3RgO2jPlablovp0ugMDcPDgXVmk,531
|
|
38
|
+
flwr/cli/new/templates/app/code/server.tensorflow.py.tpl,sha256=DHTIcUzA0XbtUVWvZ8LYABpzwdubsyxkNk42OiWG7vs,762
|
|
39
39
|
flwr/cli/new/templates/app/code/task.hf.py.tpl,sha256=B5CrA7L5PSOWnluYoAAL7LCeKvP8t-Rhwt6t2ZTYP3g,2873
|
|
40
40
|
flwr/cli/new/templates/app/code/task.jax.py.tpl,sha256=u4o3V019EH79szOw2xzVeC5r9xgQiayPi9ZTIopV2TA,1519
|
|
41
41
|
flwr/cli/new/templates/app/code/task.mlx.py.tpl,sha256=nrfZ1aGOs_ayb70j7XdAmwFYa-rN10d9GIMIKLzctUE,2614
|
|
42
42
|
flwr/cli/new/templates/app/code/task.pytorch.py.tpl,sha256=TU4uNtJ9wtxeVvoHD3_K89EFWmrIvdECdASzRX-4Uvk,3694
|
|
43
43
|
flwr/cli/new/templates/app/code/task.tensorflow.py.tpl,sha256=cPOUUS07QbblT9PGFucwu9lY1clRA4-W4DQGA7cpcao,1044
|
|
44
|
-
flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256=
|
|
45
|
-
flwr/cli/new/templates/app/pyproject.hf.toml.tpl,sha256=
|
|
46
|
-
flwr/cli/new/templates/app/pyproject.jax.toml.tpl,sha256=
|
|
47
|
-
flwr/cli/new/templates/app/pyproject.mlx.toml.tpl,sha256=
|
|
48
|
-
flwr/cli/new/templates/app/pyproject.numpy.toml.tpl,sha256=
|
|
49
|
-
flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl,sha256=
|
|
50
|
-
flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl,sha256=
|
|
51
|
-
flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=
|
|
44
|
+
flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256=7BojTJ1ePuRTANNcNBqLY7jgehvbRRawXJFiQhExYWk,742
|
|
45
|
+
flwr/cli/new/templates/app/pyproject.hf.toml.tpl,sha256=NSXJ9qxjjuumg84bX8y7spoKaVHm9DUjofYBGbCBPDc,714
|
|
46
|
+
flwr/cli/new/templates/app/pyproject.jax.toml.tpl,sha256=iIdKwB_FEA2oVtL8uSOj43uredcbRpEzy-rnEzCv-UM,606
|
|
47
|
+
flwr/cli/new/templates/app/pyproject.mlx.toml.tpl,sha256=rq1mERo0-PFJHbIX7tv0B_uzhvnbrqXKkC7j93aGvjE,623
|
|
48
|
+
flwr/cli/new/templates/app/pyproject.numpy.toml.tpl,sha256=C6XuAL9eJzp0SiDGOEQJQvW4qyrzEmiJRCwOKxq8xq4,561
|
|
49
|
+
flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl,sha256=ApZ8sHILExQE20pVjA03_dI_wO-oHtg_C8qXVHzFU3g,630
|
|
50
|
+
flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl,sha256=5-dv9fD-omZA9Y4qXX1_Hcaei_Lh5-p4jdTKvWafU7M,610
|
|
51
|
+
flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=md9I4C86ZRF7p50hZhF5bw0Aax7vu_bvEldoaAkU5Uk,609
|
|
52
52
|
flwr/cli/run/__init__.py,sha256=oCd6HmQDx-sqver1gecgx-uMA38BLTSiiKpl7RGNceg,789
|
|
53
|
-
flwr/cli/run/run.py,sha256=
|
|
53
|
+
flwr/cli/run/run.py,sha256=PW_b1EprTB5NZyx0hAWWPFtpGR9tM7WJ9tlmDahU8J4,6818
|
|
54
54
|
flwr/cli/utils.py,sha256=l65Ul0YsSBPuypk0uorAtEDmLEYiUrzpCXi6zCg9mJ4,4506
|
|
55
55
|
flwr/client/__init__.py,sha256=wzJZsYJIHf_8-PMzvfbinyzzjgh1UP1vLrAw2_yEbKI,1345
|
|
56
56
|
flwr/client/app.py,sha256=5v5EsA1zbViJAp998dCVRXvsyigZ-x3JEIKQ_fLeA48,26102
|
|
@@ -83,11 +83,11 @@ flwr/client/numpy_client.py,sha256=u76GWAdHmJM88Agm2EgLQSvO8Jnk225mJTk-_TmPjFE,1
|
|
|
83
83
|
flwr/client/rest_client/__init__.py,sha256=5KGlp7pjc1dhNRkKlaNtUfQmg8wrRFh9lS3P3uRS-7Q,735
|
|
84
84
|
flwr/client/rest_client/connection.py,sha256=aY_UzrNyE8g-xPAK_POZZZ93mERHTe-pOhNP-uZ8GyU,12147
|
|
85
85
|
flwr/client/supernode/__init__.py,sha256=SUhWOzcgXRNXk1V9UgB5-FaWukqqrOEajVUHEcPkwyQ,865
|
|
86
|
-
flwr/client/supernode/app.py,sha256=
|
|
86
|
+
flwr/client/supernode/app.py,sha256=LMJiuodmTUOAQ9MEbl4V2HjwBVJquJ9lZI38RGBh15Q,15598
|
|
87
87
|
flwr/client/typing.py,sha256=dxoTBnTMfqXr5J7G3y-uNjqxYCddvxhu89spfj4Lm2U,1048
|
|
88
88
|
flwr/common/__init__.py,sha256=4cBLNNnNTwHDnL_HCxhU5ILCSZ6fYh3A_aMBtlvHTVw,3721
|
|
89
89
|
flwr/common/address.py,sha256=wRu1Luezx1PWadwV9OA_KNko01oVvbRnPqfzaDn8QOk,1882
|
|
90
|
-
flwr/common/config.py,sha256=
|
|
90
|
+
flwr/common/config.py,sha256=W8EEfey1IHytkdXII3fTExc3uFxNm_Ysf35inG3cTkg,5000
|
|
91
91
|
flwr/common/constant.py,sha256=1XxuRezsr9fl3xvQNPR2kyFkwNeG_f5vZayv0PFh0kY,3012
|
|
92
92
|
flwr/common/context.py,sha256=CQt4uzCDvCIr2WdkrWq0obAz92k2_ucXGrWtBZCxP_M,2256
|
|
93
93
|
flwr/common/date.py,sha256=OcQuwpb2HxcblTqYm6H223ufop5UZw5N_fzalbpOVzY,891
|
|
@@ -187,7 +187,7 @@ flwr/server/driver/driver.py,sha256=NT_yaeit7_kZEIsCEqOWPID1GrVD3ywH4xZ2wtIh5lM,
|
|
|
187
187
|
flwr/server/driver/grpc_driver.py,sha256=4Azmzq4RWzcLbOqBBEF-I78krWVWZ6bT0U42S25zMvY,9659
|
|
188
188
|
flwr/server/driver/inmemory_driver.py,sha256=RcK94_NtjGZ4aZDIscnU7A3Uv1u8jGx29-xcbjQvZTM,6444
|
|
189
189
|
flwr/server/history.py,sha256=bBOHKyX1eQONIsUx4EUU-UnAk1i0EbEl8ioyMq_UWQ8,5063
|
|
190
|
-
flwr/server/run_serverapp.py,sha256=
|
|
190
|
+
flwr/server/run_serverapp.py,sha256=PkQy67LRxKr1dqH--VUOLtrgLw8JVFVNNr0hFqiINh0,9492
|
|
191
191
|
flwr/server/server.py,sha256=wsXsxMZ9SQ0B42nBnUlcV83NJPycgrgg5bFwcQ4BYBE,17821
|
|
192
192
|
flwr/server/server_app.py,sha256=1hul76ospG8L_KooK_ewn1sWPNTNYLTtZMeGNOBNruA,6267
|
|
193
193
|
flwr/server/server_config.py,sha256=CZaHVAsMvGLjpWVcLPkiYxgJN4xfIyAiUrCI3fETKY4,1349
|
|
@@ -239,7 +239,7 @@ flwr/server/superlink/fleet/vce/__init__.py,sha256=36MHKiefnJeyjwMQzVUK4m06Ojon3
|
|
|
239
239
|
flwr/server/superlink/fleet/vce/backend/__init__.py,sha256=oBIzmnrSSRvH_H0vRGEGWhWzQQwqe3zn6e13RsNwlIY,1466
|
|
240
240
|
flwr/server/superlink/fleet/vce/backend/backend.py,sha256=iG3KSIY7DzNfcxmuLfTs7VdQJnqPCvvn5DFkTWKG5lI,2227
|
|
241
241
|
flwr/server/superlink/fleet/vce/backend/raybackend.py,sha256=SnjZ1WOcrfMZNgiDdTHcFeXJqrY7UHx8kvO62mqU9S4,7489
|
|
242
|
-
flwr/server/superlink/fleet/vce/vce_api.py,sha256=
|
|
242
|
+
flwr/server/superlink/fleet/vce/vce_api.py,sha256=GVPxAgFR-K-hfWOphsZo-PFGmkLze4eytrLaE6TV6l8,12632
|
|
243
243
|
flwr/server/superlink/state/__init__.py,sha256=Gj2OTFLXvA-mAjBvwuKDM3rDrVaQPcIoybSa2uskMTE,1003
|
|
244
244
|
flwr/server/superlink/state/in_memory_state.py,sha256=fb-f4RGiqXON0DC7aSEMNuNIjH406BhBYrNNX5Kza2g,13061
|
|
245
245
|
flwr/server/superlink/state/sqlite_state.py,sha256=dO374mTkvhWQSiwbqwUXVnAYHev-j2mHaX9v8wFmmMA,29044
|
|
@@ -262,15 +262,16 @@ flwr/simulation/ray_transport/__init__.py,sha256=wzcEEwUUlulnXsg6raCA1nGpP3LlAQD
|
|
|
262
262
|
flwr/simulation/ray_transport/ray_actor.py,sha256=3j0HgzjrlYjnzdTRy8aA4Nf6VoUvxi1hGRQkGSU5z6c,19020
|
|
263
263
|
flwr/simulation/ray_transport/ray_client_proxy.py,sha256=4KWWGSnfEBe3aGc0Ln5_1yRcZ52wKmOA7gXJKkMglvM,7302
|
|
264
264
|
flwr/simulation/ray_transport/utils.py,sha256=TYdtfg1P9VfTdLMOJlifInGpxWHYs9UfUqIv2wfkRLA,2392
|
|
265
|
-
flwr/simulation/run_simulation.py,sha256=
|
|
265
|
+
flwr/simulation/run_simulation.py,sha256=wjN1spmdEmNZn06LDiuih1k3HHFKkHCKPbq-DieKw3A,17742
|
|
266
266
|
flwr/superexec/__init__.py,sha256=9h94ogLxi6eJ3bUuJYq3E3pApThSabTPiSmPAGlTkHE,800
|
|
267
|
-
flwr/superexec/app.py,sha256=
|
|
268
|
-
flwr/superexec/deployment.py,sha256=
|
|
269
|
-
flwr/superexec/exec_grpc.py,sha256=
|
|
267
|
+
flwr/superexec/app.py,sha256=Zh9I64XfCoghWoT1k2DKDrcVCXIGOpw03v0WKCOg-mg,6402
|
|
268
|
+
flwr/superexec/deployment.py,sha256=o_FYkB_vamBPjeVpPbqvzr4kBYID26sXVDrLO3Ac4R0,6130
|
|
269
|
+
flwr/superexec/exec_grpc.py,sha256=vYbZyV89MuvYDH1XzVYHkKmGfOcU6FWh8rTcIJk2TIQ,1910
|
|
270
270
|
flwr/superexec/exec_servicer.py,sha256=4R1f_9v0vly_bXpIYaXAeV1tO5LAy1AYygGGGNZmlQk,2194
|
|
271
|
-
flwr/superexec/executor.py,sha256=
|
|
272
|
-
|
|
273
|
-
flwr_nightly-1.10.0.
|
|
274
|
-
flwr_nightly-1.10.0.
|
|
275
|
-
flwr_nightly-1.10.0.
|
|
276
|
-
flwr_nightly-1.10.0.
|
|
271
|
+
flwr/superexec/executor.py,sha256=5ua0AU2cfisyD79dosP-POF3w0FRH2I5Wko_PPKLWqU,2153
|
|
272
|
+
flwr/superexec/simulation.py,sha256=flYwBU9lL3WV2jfGgp6bCjRNRlxmZ-ajkEHXab6HSug,5104
|
|
273
|
+
flwr_nightly-1.10.0.dev20240715.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
274
|
+
flwr_nightly-1.10.0.dev20240715.dist-info/METADATA,sha256=23pOsDu0OCNNq2lJKcXgdhg__CcotuXHOKOYTO9js04,15632
|
|
275
|
+
flwr_nightly-1.10.0.dev20240715.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
276
|
+
flwr_nightly-1.10.0.dev20240715.dist-info/entry_points.txt,sha256=7qBQcA-bDGDxnJmLd9FYqglFQubjCNqyg9M8a-lukps,336
|
|
277
|
+
flwr_nightly-1.10.0.dev20240715.dist-info/RECORD,,
|
{flwr_nightly-1.10.0.dev20240713.dist-info → flwr_nightly-1.10.0.dev20240715.dist-info}/LICENSE
RENAMED
|
File without changes
|
{flwr_nightly-1.10.0.dev20240713.dist-info → flwr_nightly-1.10.0.dev20240715.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|