flwr-nightly 1.11.0.dev20240823__py3-none-any.whl → 1.12.0.dev20240906__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/app.py +0 -2
- flwr/cli/new/new.py +24 -10
- flwr/cli/new/templates/app/LICENSE.tpl +202 -0
- flwr/cli/new/templates/app/README.baseline.md.tpl +127 -0
- flwr/cli/new/templates/app/README.flowertune.md.tpl +16 -6
- flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +1 -0
- flwr/cli/new/templates/app/code/client.baseline.py.tpl +58 -0
- flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +36 -0
- flwr/cli/new/templates/app/code/flwr_tune/{client.py.tpl → client_app.py.tpl} +50 -40
- flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +32 -2
- flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -3
- flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +95 -0
- flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +83 -0
- flwr/cli/new/templates/app/code/model.baseline.py.tpl +80 -0
- flwr/cli/new/templates/app/code/server.baseline.py.tpl +46 -0
- flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +1 -0
- flwr/cli/new/templates/app/code/utils.baseline.py.tpl +1 -0
- flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +138 -0
- flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +34 -7
- flwr/cli/run/run.py +2 -2
- flwr/client/__init__.py +0 -4
- flwr/client/grpc_rere_client/client_interceptor.py +13 -4
- flwr/client/supernode/app.py +3 -1
- flwr/common/config.py +14 -11
- flwr/common/telemetry.py +36 -30
- flwr/server/__init__.py +0 -4
- flwr/server/app.py +13 -13
- flwr/server/compat/app.py +0 -5
- flwr/server/driver/grpc_driver.py +1 -3
- flwr/server/run_serverapp.py +15 -1
- flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +19 -8
- flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +11 -11
- flwr/server/superlink/state/in_memory_state.py +15 -15
- flwr/server/superlink/state/sqlite_state.py +10 -10
- flwr/server/superlink/state/state.py +8 -8
- flwr/simulation/run_simulation.py +23 -6
- flwr/superexec/__init__.py +0 -6
- flwr/superexec/app.py +3 -1
- {flwr_nightly-1.11.0.dev20240823.dist-info → flwr_nightly-1.12.0.dev20240906.dist-info}/METADATA +3 -3
- {flwr_nightly-1.11.0.dev20240823.dist-info → flwr_nightly-1.12.0.dev20240906.dist-info}/RECORD +43 -35
- flwr_nightly-1.12.0.dev20240906.dist-info/entry_points.txt +10 -0
- flwr/cli/new/templates/app/code/flwr_tune/app.py.tpl +0 -89
- flwr/cli/new/templates/app/code/flwr_tune/config.yaml.tpl +0 -34
- flwr/cli/new/templates/app/code/flwr_tune/server.py.tpl +0 -48
- flwr/cli/new/templates/app/code/flwr_tune/static_config.yaml.tpl +0 -11
- flwr_nightly-1.11.0.dev20240823.dist-info/entry_points.txt +0 -10
- {flwr_nightly-1.11.0.dev20240823.dist-info → flwr_nightly-1.12.0.dev20240906.dist-info}/LICENSE +0 -0
- {flwr_nightly-1.11.0.dev20240823.dist-info → flwr_nightly-1.12.0.dev20240906.dist-info}/WHEEL +0 -0
|
@@ -45,7 +45,7 @@ class InMemoryState(State): # pylint: disable=R0902,R0904
|
|
|
45
45
|
self.task_ins_store: Dict[UUID, TaskIns] = {}
|
|
46
46
|
self.task_res_store: Dict[UUID, TaskRes] = {}
|
|
47
47
|
|
|
48
|
-
self.
|
|
48
|
+
self.node_public_keys: Set[bytes] = set()
|
|
49
49
|
self.server_public_key: Optional[bytes] = None
|
|
50
50
|
self.server_private_key: Optional[bytes] = None
|
|
51
51
|
|
|
@@ -237,7 +237,7 @@ class InMemoryState(State): # pylint: disable=R0902,R0904
|
|
|
237
237
|
return node_id
|
|
238
238
|
|
|
239
239
|
def delete_node(self, node_id: int, public_key: Optional[bytes] = None) -> None:
|
|
240
|
-
"""Delete a
|
|
240
|
+
"""Delete a node."""
|
|
241
241
|
with self.lock:
|
|
242
242
|
if node_id not in self.node_ids:
|
|
243
243
|
raise ValueError(f"Node {node_id} not found")
|
|
@@ -254,7 +254,7 @@ class InMemoryState(State): # pylint: disable=R0902,R0904
|
|
|
254
254
|
del self.node_ids[node_id]
|
|
255
255
|
|
|
256
256
|
def get_nodes(self, run_id: int) -> Set[int]:
|
|
257
|
-
"""Return all available
|
|
257
|
+
"""Return all available nodes.
|
|
258
258
|
|
|
259
259
|
Constraints
|
|
260
260
|
-----------
|
|
@@ -271,9 +271,9 @@ class InMemoryState(State): # pylint: disable=R0902,R0904
|
|
|
271
271
|
if online_until > current_time
|
|
272
272
|
}
|
|
273
273
|
|
|
274
|
-
def get_node_id(self,
|
|
275
|
-
"""Retrieve stored `node_id` filtered by `
|
|
276
|
-
return self.public_key_to_node_id.get(
|
|
274
|
+
def get_node_id(self, node_public_key: bytes) -> Optional[int]:
|
|
275
|
+
"""Retrieve stored `node_id` filtered by `node_public_keys`."""
|
|
276
|
+
return self.public_key_to_node_id.get(node_public_key)
|
|
277
277
|
|
|
278
278
|
def create_run(
|
|
279
279
|
self,
|
|
@@ -318,19 +318,19 @@ class InMemoryState(State): # pylint: disable=R0902,R0904
|
|
|
318
318
|
"""Retrieve `server_public_key` in urlsafe bytes."""
|
|
319
319
|
return self.server_public_key
|
|
320
320
|
|
|
321
|
-
def
|
|
322
|
-
"""Store a set of `
|
|
321
|
+
def store_node_public_keys(self, public_keys: Set[bytes]) -> None:
|
|
322
|
+
"""Store a set of `node_public_keys` in state."""
|
|
323
323
|
with self.lock:
|
|
324
|
-
self.
|
|
324
|
+
self.node_public_keys = public_keys
|
|
325
325
|
|
|
326
|
-
def
|
|
327
|
-
"""Store a `
|
|
326
|
+
def store_node_public_key(self, public_key: bytes) -> None:
|
|
327
|
+
"""Store a `node_public_key` in state."""
|
|
328
328
|
with self.lock:
|
|
329
|
-
self.
|
|
329
|
+
self.node_public_keys.add(public_key)
|
|
330
330
|
|
|
331
|
-
def
|
|
332
|
-
"""Retrieve all currently stored `
|
|
333
|
-
return self.
|
|
331
|
+
def get_node_public_keys(self) -> Set[bytes]:
|
|
332
|
+
"""Retrieve all currently stored `node_public_keys` as a set."""
|
|
333
|
+
return self.node_public_keys
|
|
334
334
|
|
|
335
335
|
def get_run(self, run_id: int) -> Optional[Run]:
|
|
336
336
|
"""Retrieve information about the run with the specified `run_id`."""
|
|
@@ -569,7 +569,7 @@ class SqliteState(State): # pylint: disable=R0904
|
|
|
569
569
|
return node_id
|
|
570
570
|
|
|
571
571
|
def delete_node(self, node_id: int, public_key: Optional[bytes] = None) -> None:
|
|
572
|
-
"""Delete a
|
|
572
|
+
"""Delete a node."""
|
|
573
573
|
query = "DELETE FROM node WHERE node_id = ?"
|
|
574
574
|
params = (node_id,)
|
|
575
575
|
|
|
@@ -607,10 +607,10 @@ class SqliteState(State): # pylint: disable=R0904
|
|
|
607
607
|
result: Set[int] = {row["node_id"] for row in rows}
|
|
608
608
|
return result
|
|
609
609
|
|
|
610
|
-
def get_node_id(self,
|
|
611
|
-
"""Retrieve stored `node_id` filtered by `
|
|
610
|
+
def get_node_id(self, node_public_key: bytes) -> Optional[int]:
|
|
611
|
+
"""Retrieve stored `node_id` filtered by `node_public_keys`."""
|
|
612
612
|
query = "SELECT node_id FROM node WHERE public_key = :public_key;"
|
|
613
|
-
row = self.query(query, {"public_key":
|
|
613
|
+
row = self.query(query, {"public_key": node_public_key})
|
|
614
614
|
if len(row) > 0:
|
|
615
615
|
node_id: int = row[0]["node_id"]
|
|
616
616
|
return node_id
|
|
@@ -684,19 +684,19 @@ class SqliteState(State): # pylint: disable=R0904
|
|
|
684
684
|
public_key = None
|
|
685
685
|
return public_key
|
|
686
686
|
|
|
687
|
-
def
|
|
688
|
-
"""Store a set of `
|
|
687
|
+
def store_node_public_keys(self, public_keys: Set[bytes]) -> None:
|
|
688
|
+
"""Store a set of `node_public_keys` in state."""
|
|
689
689
|
query = "INSERT INTO public_key (public_key) VALUES (?)"
|
|
690
690
|
data = [(key,) for key in public_keys]
|
|
691
691
|
self.query(query, data)
|
|
692
692
|
|
|
693
|
-
def
|
|
694
|
-
"""Store a `
|
|
693
|
+
def store_node_public_key(self, public_key: bytes) -> None:
|
|
694
|
+
"""Store a `node_public_key` in state."""
|
|
695
695
|
query = "INSERT INTO public_key (public_key) VALUES (:public_key)"
|
|
696
696
|
self.query(query, {"public_key": public_key})
|
|
697
697
|
|
|
698
|
-
def
|
|
699
|
-
"""Retrieve all currently stored `
|
|
698
|
+
def get_node_public_keys(self) -> Set[bytes]:
|
|
699
|
+
"""Retrieve all currently stored `node_public_keys` as a set."""
|
|
700
700
|
query = "SELECT public_key FROM public_key"
|
|
701
701
|
rows = self.query(query)
|
|
702
702
|
result: Set[bytes] = {row["public_key"] for row in rows}
|
|
@@ -153,8 +153,8 @@ class State(abc.ABC): # pylint: disable=R0904
|
|
|
153
153
|
"""
|
|
154
154
|
|
|
155
155
|
@abc.abstractmethod
|
|
156
|
-
def get_node_id(self,
|
|
157
|
-
"""Retrieve stored `node_id` filtered by `
|
|
156
|
+
def get_node_id(self, node_public_key: bytes) -> Optional[int]:
|
|
157
|
+
"""Retrieve stored `node_id` filtered by `node_public_keys`."""
|
|
158
158
|
|
|
159
159
|
@abc.abstractmethod
|
|
160
160
|
def create_run(
|
|
@@ -199,16 +199,16 @@ class State(abc.ABC): # pylint: disable=R0904
|
|
|
199
199
|
"""Retrieve `server_public_key` in urlsafe bytes."""
|
|
200
200
|
|
|
201
201
|
@abc.abstractmethod
|
|
202
|
-
def
|
|
203
|
-
"""Store a set of `
|
|
202
|
+
def store_node_public_keys(self, public_keys: Set[bytes]) -> None:
|
|
203
|
+
"""Store a set of `node_public_keys` in state."""
|
|
204
204
|
|
|
205
205
|
@abc.abstractmethod
|
|
206
|
-
def
|
|
207
|
-
"""Store a `
|
|
206
|
+
def store_node_public_key(self, public_key: bytes) -> None:
|
|
207
|
+
"""Store a `node_public_key` in state."""
|
|
208
208
|
|
|
209
209
|
@abc.abstractmethod
|
|
210
|
-
def
|
|
211
|
-
"""Retrieve all currently stored `
|
|
210
|
+
def get_node_public_keys(self) -> Set[bytes]:
|
|
211
|
+
"""Retrieve all currently stored `node_public_keys` as a set."""
|
|
212
212
|
|
|
213
213
|
@abc.abstractmethod
|
|
214
214
|
def acknowledge_ping(self, node_id: int, ping_interval: float) -> bool:
|
|
@@ -109,6 +109,11 @@ def run_simulation_from_cli() -> None:
|
|
|
109
109
|
"""Run Simulation Engine from the CLI."""
|
|
110
110
|
args = _parse_args_run_simulation().parse_args()
|
|
111
111
|
|
|
112
|
+
event(
|
|
113
|
+
EventType.CLI_FLOWER_SIMULATION_ENTER,
|
|
114
|
+
event_details={"backend": args.backend, "num-supernodes": args.num_supernodes},
|
|
115
|
+
)
|
|
116
|
+
|
|
112
117
|
# Add warnings for deprecated server_app and client_app arguments
|
|
113
118
|
if args.server_app:
|
|
114
119
|
warn_deprecated_feature(
|
|
@@ -177,7 +182,9 @@ def run_simulation_from_cli() -> None:
|
|
|
177
182
|
client_app_attr = app_components["clientapp"]
|
|
178
183
|
server_app_attr = app_components["serverapp"]
|
|
179
184
|
|
|
180
|
-
override_config = parse_config_args(
|
|
185
|
+
override_config = parse_config_args(
|
|
186
|
+
[args.run_config] if args.run_config else args.run_config
|
|
187
|
+
)
|
|
181
188
|
fused_config = get_fused_config_from_dir(app_path, override_config)
|
|
182
189
|
app_dir = args.app
|
|
183
190
|
is_app = True
|
|
@@ -212,6 +219,7 @@ def run_simulation_from_cli() -> None:
|
|
|
212
219
|
verbose_logging=args.verbose,
|
|
213
220
|
server_app_run_config=fused_config,
|
|
214
221
|
is_app=is_app,
|
|
222
|
+
exit_event=EventType.CLI_FLOWER_SIMULATION_LEAVE,
|
|
215
223
|
)
|
|
216
224
|
|
|
217
225
|
|
|
@@ -265,6 +273,11 @@ def run_simulation(
|
|
|
265
273
|
When disabled, only INFO, WARNING and ERROR log messages will be shown. If
|
|
266
274
|
enabled, DEBUG-level logs will be displayed.
|
|
267
275
|
"""
|
|
276
|
+
event(
|
|
277
|
+
EventType.PYTHON_API_RUN_SIMULATION_ENTER,
|
|
278
|
+
event_details={"backend": backend_name, "num-supernodes": num_supernodes},
|
|
279
|
+
)
|
|
280
|
+
|
|
268
281
|
if enable_tf_gpu_growth:
|
|
269
282
|
warn_deprecated_feature_with_example(
|
|
270
283
|
"Passing `enable_tf_gpu_growth=True` is deprecated.",
|
|
@@ -282,6 +295,7 @@ def run_simulation(
|
|
|
282
295
|
backend_config=backend_config,
|
|
283
296
|
enable_tf_gpu_growth=enable_tf_gpu_growth,
|
|
284
297
|
verbose_logging=verbose_logging,
|
|
298
|
+
exit_event=EventType.PYTHON_API_RUN_SIMULATION_LEAVE,
|
|
285
299
|
)
|
|
286
300
|
|
|
287
301
|
|
|
@@ -365,6 +379,7 @@ def _main_loop(
|
|
|
365
379
|
is_app: bool,
|
|
366
380
|
enable_tf_gpu_growth: bool,
|
|
367
381
|
run: Run,
|
|
382
|
+
exit_event: EventType,
|
|
368
383
|
flwr_dir: Optional[str] = None,
|
|
369
384
|
client_app: Optional[ClientApp] = None,
|
|
370
385
|
client_app_attr: Optional[str] = None,
|
|
@@ -372,7 +387,7 @@ def _main_loop(
|
|
|
372
387
|
server_app_attr: Optional[str] = None,
|
|
373
388
|
server_app_run_config: Optional[UserConfig] = None,
|
|
374
389
|
) -> None:
|
|
375
|
-
"""
|
|
390
|
+
"""Start ServerApp on a separate thread, then launch Simulation Engine."""
|
|
376
391
|
# Initialize StateFactory
|
|
377
392
|
state_factory = StateFactory(":flwr-in-memory-state:")
|
|
378
393
|
|
|
@@ -380,6 +395,7 @@ def _main_loop(
|
|
|
380
395
|
# A Threading event to indicate if an exception was raised in the ServerApp thread
|
|
381
396
|
server_app_thread_has_exception = threading.Event()
|
|
382
397
|
serverapp_th = None
|
|
398
|
+
success = True
|
|
383
399
|
try:
|
|
384
400
|
# Register run
|
|
385
401
|
log(DEBUG, "Pre-registering run with id %s", run.run_id)
|
|
@@ -403,8 +419,7 @@ def _main_loop(
|
|
|
403
419
|
enable_tf_gpu_growth=enable_tf_gpu_growth,
|
|
404
420
|
)
|
|
405
421
|
|
|
406
|
-
#
|
|
407
|
-
event(EventType.RUN_SUPERLINK_ENTER)
|
|
422
|
+
# Start Simulation Engine
|
|
408
423
|
vce.start_vce(
|
|
409
424
|
num_supernodes=num_supernodes,
|
|
410
425
|
client_app_attr=client_app_attr,
|
|
@@ -422,13 +437,13 @@ def _main_loop(
|
|
|
422
437
|
except Exception as ex:
|
|
423
438
|
log(ERROR, "An exception occurred !! %s", ex)
|
|
424
439
|
log(ERROR, traceback.format_exc())
|
|
440
|
+
success = False
|
|
425
441
|
raise RuntimeError("An error was encountered. Ending simulation.") from ex
|
|
426
442
|
|
|
427
443
|
finally:
|
|
428
444
|
# Trigger stop event
|
|
429
445
|
f_stop.set()
|
|
430
|
-
|
|
431
|
-
event(EventType.RUN_SUPERLINK_LEAVE)
|
|
446
|
+
event(exit_event, event_details={"success": success})
|
|
432
447
|
if serverapp_th:
|
|
433
448
|
serverapp_th.join()
|
|
434
449
|
if server_app_thread_has_exception.is_set():
|
|
@@ -440,6 +455,7 @@ def _main_loop(
|
|
|
440
455
|
# pylint: disable=too-many-arguments,too-many-locals
|
|
441
456
|
def _run_simulation(
|
|
442
457
|
num_supernodes: int,
|
|
458
|
+
exit_event: EventType,
|
|
443
459
|
client_app: Optional[ClientApp] = None,
|
|
444
460
|
server_app: Optional[ServerApp] = None,
|
|
445
461
|
backend_name: str = "ray",
|
|
@@ -506,6 +522,7 @@ def _run_simulation(
|
|
|
506
522
|
is_app,
|
|
507
523
|
enable_tf_gpu_growth,
|
|
508
524
|
run,
|
|
525
|
+
exit_event,
|
|
509
526
|
flwr_dir,
|
|
510
527
|
client_app,
|
|
511
528
|
client_app_attr,
|
flwr/superexec/__init__.py
CHANGED
flwr/superexec/app.py
CHANGED
|
@@ -56,7 +56,9 @@ def run_superexec() -> None:
|
|
|
56
56
|
address=address,
|
|
57
57
|
executor=_load_executor(args),
|
|
58
58
|
certificates=certificates,
|
|
59
|
-
config=parse_config_args(
|
|
59
|
+
config=parse_config_args(
|
|
60
|
+
[args.executor_config] if args.executor_config else args.executor_config
|
|
61
|
+
),
|
|
60
62
|
)
|
|
61
63
|
|
|
62
64
|
grpc_servers = [superexec_server]
|
{flwr_nightly-1.11.0.dev20240823.dist-info → flwr_nightly-1.12.0.dev20240906.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: flwr-nightly
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.12.0.dev20240906
|
|
4
4
|
Summary: Flower: A Friendly Federated Learning Framework
|
|
5
5
|
Home-page: https://flower.ai
|
|
6
6
|
License: Apache-2.0
|
|
@@ -195,8 +195,8 @@ Other [examples](https://github.com/adap/flower/tree/main/examples):
|
|
|
195
195
|
- [PyTorch: From Centralized to Federated](https://github.com/adap/flower/tree/main/examples/pytorch-from-centralized-to-federated)
|
|
196
196
|
- [Vertical FL](https://github.com/adap/flower/tree/main/examples/vertical-fl)
|
|
197
197
|
- [Federated Finetuning of OpenAI's Whisper](https://github.com/adap/flower/tree/main/examples/whisper-federated-finetuning)
|
|
198
|
-
- [Federated Finetuning of Large Language Model](https://github.com/adap/flower/tree/main/examples/llm
|
|
199
|
-
- [Federated Finetuning of a Vision Transformer](https://github.com/adap/flower/tree/main/examples/vit
|
|
198
|
+
- [Federated Finetuning of Large Language Model](https://github.com/adap/flower/tree/main/examples/flowertune-llm)
|
|
199
|
+
- [Federated Finetuning of a Vision Transformer](https://github.com/adap/flower/tree/main/examples/flowertune-vit)
|
|
200
200
|
- [Advanced Flower with TensorFlow/Keras](https://github.com/adap/flower/tree/main/examples/advanced-tensorflow)
|
|
201
201
|
- [Advanced Flower with PyTorch](https://github.com/adap/flower/tree/main/examples/advanced-pytorch)
|
|
202
202
|
- Single-Machine Simulation of Federated Learning Systems ([PyTorch](https://github.com/adap/flower/tree/main/examples/simulation-pytorch)) ([Tensorflow](https://github.com/adap/flower/tree/main/examples/simulation-tensorflow))
|
{flwr_nightly-1.11.0.dev20240823.dist-info → flwr_nightly-1.12.0.dev20240906.dist-info}/RECORD
RENAMED
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
flwr/__init__.py,sha256=VmBWedrCxqmt4QvUHBLqyVEH6p7zaFMD_oCHerXHSVw,937
|
|
2
2
|
flwr/cli/__init__.py,sha256=cZJVgozlkC6Ni2Hd_FAIrqefrkCGOV18fikToq-6iLw,720
|
|
3
|
-
flwr/cli/app.py,sha256=
|
|
3
|
+
flwr/cli/app.py,sha256=v66W3QJ226JUy9y51hRwftX53R3oEKl3oOl1Xx-IwgU,1215
|
|
4
4
|
flwr/cli/build.py,sha256=YrzjnwP1A1WQnyPuxtGy4kylcPoj0lexaF99ST872VQ,5174
|
|
5
5
|
flwr/cli/config_utils.py,sha256=mDGXbcIxG14UpkUplILBYUkSk5M1LeTzZYDGNx-pFpU,7540
|
|
6
6
|
flwr/cli/example.py,sha256=1bGDYll3BXQY2kRqSN-oICqS5n1b9m0g0RvXTopXHl4,2215
|
|
7
7
|
flwr/cli/install.py,sha256=tUncrbZYRbC9QEcWSeTER16plPEoU-ERP0-nMgWiSPo,7094
|
|
8
8
|
flwr/cli/new/__init__.py,sha256=cQzK1WH4JP2awef1t2UQ2xjl1agVEz9rwutV18SWV1k,789
|
|
9
|
-
flwr/cli/new/new.py,sha256=
|
|
9
|
+
flwr/cli/new/new.py,sha256=uRC1nr22JomszfBAzQ3w4fiKrq31nxlMFquYGpPVei0,10074
|
|
10
10
|
flwr/cli/new/templates/__init__.py,sha256=4luU8RL-CK8JJCstQ_ON809W9bNTkY1l9zSaPKBkgwY,725
|
|
11
11
|
flwr/cli/new/templates/app/.gitignore.tpl,sha256=XixnHdyeMB2vwkGtGnwHqoWpH-9WChdyG0GXe57duhc,3078
|
|
12
|
-
flwr/cli/new/templates/app/
|
|
12
|
+
flwr/cli/new/templates/app/LICENSE.tpl,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
|
|
13
|
+
flwr/cli/new/templates/app/README.baseline.md.tpl,sha256=4dg2aBS-NIleVyDlxsG8m65Af6LIJ-pZA5ICjGFU5XA,9641
|
|
14
|
+
flwr/cli/new/templates/app/README.flowertune.md.tpl,sha256=lxr_RCGfiDy8QGcMVdjXsUXWM_gLf6cY7UQanGL_FFQ,3304
|
|
13
15
|
flwr/cli/new/templates/app/README.md.tpl,sha256=t7w4YFZEcJOxAnuJmNPw5-fDdIJu7PfLd8gFJDiBwwo,436
|
|
14
16
|
flwr/cli/new/templates/app/__init__.py,sha256=DU7QMY7IhMQyuwm_tja66xU0KXTWQFqzfTqwg-_NJdE,729
|
|
17
|
+
flwr/cli/new/templates/app/code/__init__.baseline.py.tpl,sha256=YkHAgppUeD2BnBoGfVB6dEvBfjuIPGsU1gw4CiUi3qA,40
|
|
15
18
|
flwr/cli/new/templates/app/code/__init__.py,sha256=EM6vfvgAILKPaPn7H1wMV1Wi01WyZCP_Eg6NxD6oWg8,736
|
|
16
19
|
flwr/cli/new/templates/app/code/__init__.py.tpl,sha256=J0Gn74E7khpLyKJVNqOPu7ev93vkcu1PZugsbxtABMw,52
|
|
20
|
+
flwr/cli/new/templates/app/code/client.baseline.py.tpl,sha256=1htktXX3jXX05r0vuG_afjS1sXGtuONW9EpiQ7vSBes,1901
|
|
17
21
|
flwr/cli/new/templates/app/code/client.huggingface.py.tpl,sha256=62wtB4k1yrDApiG-rvGlOYFuiwAVk8kqJFmyY_v8HLo,1803
|
|
18
22
|
flwr/cli/new/templates/app/code/client.jax.py.tpl,sha256=c2LDew2V8BUybZJiz1FeB3Kq4ey0Q2s0S5qNPUTNmI4,1490
|
|
19
23
|
flwr/cli/new/templates/app/code/client.mlx.py.tpl,sha256=gxipt57ldc741qwRqSWtsLQH05JODKdGMTtvoXiBzDA,2906
|
|
@@ -21,14 +25,15 @@ flwr/cli/new/templates/app/code/client.numpy.py.tpl,sha256=DMUXvQd2dr-wEn0ZrYJQh
|
|
|
21
25
|
flwr/cli/new/templates/app/code/client.pytorch.py.tpl,sha256=WczaR5avJUhfw2Grn2KEC4tDJ4voIYG-2pAy-7i2cT8,1685
|
|
22
26
|
flwr/cli/new/templates/app/code/client.sklearn.py.tpl,sha256=xW9cuKhybk5S8IeDZhbeb0DNegDIJGEYrzMKsxgc2GE,2978
|
|
23
27
|
flwr/cli/new/templates/app/code/client.tensorflow.py.tpl,sha256=u3KKf7hC9xGqOIUJXYCHJ_jiIu3aVbsC8pxVxm4yN6I,1759
|
|
28
|
+
flwr/cli/new/templates/app/code/dataset.baseline.py.tpl,sha256=jbd_exHAk2-Blu_kVutjPO6a_dkJQWb232zxSeXIZ1k,1453
|
|
24
29
|
flwr/cli/new/templates/app/code/flwr_tune/__init__.py,sha256=JgNgBtKdm1jKM9625WxappCAVUGtYAmcjKSsXJ1u3ZQ,748
|
|
25
|
-
flwr/cli/new/templates/app/code/flwr_tune/
|
|
26
|
-
flwr/cli/new/templates/app/code/flwr_tune/
|
|
27
|
-
flwr/cli/new/templates/app/code/flwr_tune/
|
|
28
|
-
flwr/cli/new/templates/app/code/flwr_tune/
|
|
29
|
-
flwr/cli/new/templates/app/code/flwr_tune/
|
|
30
|
-
flwr/cli/new/templates/app/code/
|
|
31
|
-
flwr/cli/new/templates/app/code/
|
|
30
|
+
flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl,sha256=DbotzaXzLDwplVBkJLOe5Lt5b6Yutwv9rJ69oVwyrvU,4397
|
|
31
|
+
flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl,sha256=iAujo8WubDGrz0gg_6zl-TUvkIbNRJM-VJmwKJ9tGY8,3051
|
|
32
|
+
flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl,sha256=UCLEKUpXarkz9tMFtDrxmLv6QuKe5zCimTuoopQedUM,1717
|
|
33
|
+
flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl,sha256=yMVcbfGkTPV9AV16bVdi5fTX1a6jmtszTUrvLXSosio,3305
|
|
34
|
+
flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl,sha256=BhiqRg9w1MGuU5h2_vrLhRc0oHItYzE69qX_JI411k8,2754
|
|
35
|
+
flwr/cli/new/templates/app/code/model.baseline.py.tpl,sha256=cSz6-IWsnMl7s04DW4URINiIppCIberrtE8NqK6Qz48,2571
|
|
36
|
+
flwr/cli/new/templates/app/code/server.baseline.py.tpl,sha256=outx7lDXsWS8QXKWOGOiDno6eE8WL7LBD51ZkAuC3WU,1570
|
|
32
37
|
flwr/cli/new/templates/app/code/server.huggingface.py.tpl,sha256=etpjLvGu6pVXzYQBKZp4tTbD3zm461qFo24NliKo74U,591
|
|
33
38
|
flwr/cli/new/templates/app/code/server.jax.py.tpl,sha256=pIdUH-LgWRAGWQYLlivMNf8XnDSNDe2cCuRjlxbRzys,529
|
|
34
39
|
flwr/cli/new/templates/app/code/server.mlx.py.tpl,sha256=RqiZ0k468SOlm9dcPr-fvA8xcWv4zwDCbJfBwL7P9Us,529
|
|
@@ -36,12 +41,15 @@ flwr/cli/new/templates/app/code/server.numpy.py.tpl,sha256=RqiZ0k468SOlm9dcPr-fv
|
|
|
36
41
|
flwr/cli/new/templates/app/code/server.pytorch.py.tpl,sha256=DW5c8vzXCvFeIE8YIWBhoGnSdv8Ka_e5wd3F6B3xvp8,916
|
|
37
42
|
flwr/cli/new/templates/app/code/server.sklearn.py.tpl,sha256=25Ae3kDqjDdBl8LwkDwye69nevd02Pk_e7F3SQKLdyk,624
|
|
38
43
|
flwr/cli/new/templates/app/code/server.tensorflow.py.tpl,sha256=xMhQ7AumowgLkgUilgjVK7IbpRhPjslhVJU-vID6NY8,856
|
|
44
|
+
flwr/cli/new/templates/app/code/strategy.baseline.py.tpl,sha256=YkHAgppUeD2BnBoGfVB6dEvBfjuIPGsU1gw4CiUi3qA,40
|
|
39
45
|
flwr/cli/new/templates/app/code/task.huggingface.py.tpl,sha256=G_LOeGErw-6WZAyuT01mXqR6s_BUrQYErXf_nHLujo4,3153
|
|
40
46
|
flwr/cli/new/templates/app/code/task.jax.py.tpl,sha256=F05eg149c9icRyVNdfcLyZvAXROQ7QhfifoGw_U1dsg,1530
|
|
41
47
|
flwr/cli/new/templates/app/code/task.mlx.py.tpl,sha256=jWtCULLRr_9bCIJvoTLMx037-SDl_LF8udtA1UGoXDk,2946
|
|
42
48
|
flwr/cli/new/templates/app/code/task.pytorch.py.tpl,sha256=NgbPix74X1t3ybaGjqdls30vF1i5oY3L7EQExhWhN74,3812
|
|
43
49
|
flwr/cli/new/templates/app/code/task.tensorflow.py.tpl,sha256=SKXAZdgBnPpbAbJ90Rb7oQ5ilnopBx_j_JNFoUDeEAI,1732
|
|
44
|
-
flwr/cli/new/templates/app/
|
|
50
|
+
flwr/cli/new/templates/app/code/utils.baseline.py.tpl,sha256=YkHAgppUeD2BnBoGfVB6dEvBfjuIPGsU1gw4CiUi3qA,40
|
|
51
|
+
flwr/cli/new/templates/app/pyproject.baseline.toml.tpl,sha256=4gi90W9_B1kj6rYkpvVJxhNX9Yctsv9OH6CzXP-dcE4,2666
|
|
52
|
+
flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256=pogRZLrwSfN_XH4NxDdMkhMh1O_7DP90VOoP-cP0HvI,1827
|
|
45
53
|
flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl,sha256=nD0rRUyr_Cj0TaSH8PsiaMhCwu_BuOVX4oqWfFSvOcE,765
|
|
46
54
|
flwr/cli/new/templates/app/pyproject.jax.toml.tpl,sha256=Tq6jeGcoOKzMwWWYxMVnzMcipLURHLiW69iYlD1ywMg,659
|
|
47
55
|
flwr/cli/new/templates/app/pyproject.mlx.toml.tpl,sha256=SHwYAA2qgIlOAU3Sb9BKSZcZ7O9biACg27MHexXUtDw,741
|
|
@@ -50,9 +58,9 @@ flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl,sha256=vIO1ArukTC76ogYLNmJ
|
|
|
50
58
|
flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl,sha256=jk_5teoyOVM9QdBea8J-nk10S6TKw81QZiiKB54ATF0,654
|
|
51
59
|
flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=bRIvPCPvTTI4Eo5b61Rmw8WdDw3sjcohciTXgULN5l8,702
|
|
52
60
|
flwr/cli/run/__init__.py,sha256=oCd6HmQDx-sqver1gecgx-uMA38BLTSiiKpl7RGNceg,789
|
|
53
|
-
flwr/cli/run/run.py,sha256=
|
|
61
|
+
flwr/cli/run/run.py,sha256=RI6MgLBNYxmacjQg8XMAQ7VKxbV0DkRyJTfe4GsDFuw,7979
|
|
54
62
|
flwr/cli/utils.py,sha256=l65Ul0YsSBPuypk0uorAtEDmLEYiUrzpCXi6zCg9mJ4,4506
|
|
55
|
-
flwr/client/__init__.py,sha256=
|
|
63
|
+
flwr/client/__init__.py,sha256=DGDoO0AEAfz-0CUFmLdyUUweAS64-07AOnmDfWUefK4,1192
|
|
56
64
|
flwr/client/app.py,sha256=o_2bhmlBeZATtWnAPZhL-Q1Ly0QZxc9ou4i7t0HKumE,31956
|
|
57
65
|
flwr/client/client.py,sha256=gy6WVlMUFAp8oevN4xpQPX30vPOIYGVqdbuFlTWkyG4,9080
|
|
58
66
|
flwr/client/client_app.py,sha256=WcO4r6wrdfaus__3s22D2sYjfcptdgmVujUAYdNE6HU,10393
|
|
@@ -66,7 +74,7 @@ flwr/client/grpc_adapter_client/connection.py,sha256=aOlCYasl8f2CrfcN-WrVEmvjAZF
|
|
|
66
74
|
flwr/client/grpc_client/__init__.py,sha256=LsnbqXiJhgQcB0XzAlUQgPx011Uf7Y7yabIC1HxivJ8,735
|
|
67
75
|
flwr/client/grpc_client/connection.py,sha256=czhRm23fwTgjN24Vf5nyNQ3hcb5Fo_5k-o9yZnelQCs,9362
|
|
68
76
|
flwr/client/grpc_rere_client/__init__.py,sha256=MK-oSoV3kwUEQnIwl0GN4OpiHR7eLOrMA8ikunET130,752
|
|
69
|
-
flwr/client/grpc_rere_client/client_interceptor.py,sha256=
|
|
77
|
+
flwr/client/grpc_rere_client/client_interceptor.py,sha256=wRMgrxt_IN1MNsaJdNscfMZD7jExJOL2g8yV5mC_RBc,5238
|
|
70
78
|
flwr/client/grpc_rere_client/connection.py,sha256=aiIWW9fVgJZNeZ9SjUAx5ax-3825JrjYc5E5l7XvzyM,10913
|
|
71
79
|
flwr/client/grpc_rere_client/grpc_adapter.py,sha256=Pw7Toi4wCUIEdBMyv4yKirjgW6814gFhhAmsTYmV4IM,5005
|
|
72
80
|
flwr/client/heartbeat.py,sha256=cx37mJBH8LyoIN4Lks85wtqT1mnU5GulQnr4pGCvAq0,2404
|
|
@@ -87,11 +95,11 @@ flwr/client/numpy_client.py,sha256=9rpj5OLmeeDQVzopR1My6A2VS3nkBFw6cmNcMMPYGlQ,1
|
|
|
87
95
|
flwr/client/rest_client/__init__.py,sha256=5KGlp7pjc1dhNRkKlaNtUfQmg8wrRFh9lS3P3uRS-7Q,735
|
|
88
96
|
flwr/client/rest_client/connection.py,sha256=21YNE6K6JfyZtwIftx1MGOkM78J9wb4EGGOyLS8ej0E,12767
|
|
89
97
|
flwr/client/supernode/__init__.py,sha256=SUhWOzcgXRNXk1V9UgB5-FaWukqqrOEajVUHEcPkwyQ,865
|
|
90
|
-
flwr/client/supernode/app.py,sha256=
|
|
98
|
+
flwr/client/supernode/app.py,sha256=6dWrpgMDmbWt-GFzWcANGsDdpGuCS5fb4j7dEDeVvX4,11920
|
|
91
99
|
flwr/client/typing.py,sha256=dxoTBnTMfqXr5J7G3y-uNjqxYCddvxhu89spfj4Lm2U,1048
|
|
92
100
|
flwr/common/__init__.py,sha256=TVaoFEJE158aui1TPZQiJCDZX4RNHRyI8I55VC80HhI,3901
|
|
93
101
|
flwr/common/address.py,sha256=1zvmVIAyYP6JbGkMnXuROzkYJ7aSKbJM754lC_kbh1M,3024
|
|
94
|
-
flwr/common/config.py,sha256=
|
|
102
|
+
flwr/common/config.py,sha256=TBw2sI0ZgZ3l3JrjfrcnD1mnMJbaHi_i8w68YXEgPUk,7586
|
|
95
103
|
flwr/common/constant.py,sha256=1XxuRezsr9fl3xvQNPR2kyFkwNeG_f5vZayv0PFh0kY,3012
|
|
96
104
|
flwr/common/context.py,sha256=5Bd9RCrhLkYZOVR7vr97OVhzVBHQkS1fUsYiIKTwpxU,2239
|
|
97
105
|
flwr/common/date.py,sha256=OcQuwpb2HxcblTqYm6H223ufop5UZw5N_fzalbpOVzY,891
|
|
@@ -123,7 +131,7 @@ flwr/common/secure_aggregation/quantization.py,sha256=1obYr9qneaI8r-A0F_pghrPNG9
|
|
|
123
131
|
flwr/common/secure_aggregation/secaggplus_constants.py,sha256=9MF-oQh62uD7rt9VeNB-rHf2gBLd5GL3S9OejCxmILY,2183
|
|
124
132
|
flwr/common/secure_aggregation/secaggplus_utils.py,sha256=3VssKgYF7HQIkSpROnEUoYWVt47p12PE_Rj4nYqqg04,3221
|
|
125
133
|
flwr/common/serde.py,sha256=SIKZa-TNCSWVtqx8L3aUkylN6gxK-IwXlgoukiYwYyc,29209
|
|
126
|
-
flwr/common/telemetry.py,sha256=
|
|
134
|
+
flwr/common/telemetry.py,sha256=CZeBHqaH_W-H7yo-9LE-gV7ju5gJTXZztw4tJlFZqz8,8916
|
|
127
135
|
flwr/common/typing.py,sha256=rGabiSkjFvGIHwmhDqtuu-LBvz7LVSj1vyMlNtA7VA0,5004
|
|
128
136
|
flwr/common/version.py,sha256=W1ntylR04xkCP6zeSet6sRtBn7P1cje2lOqBJgYBjJY,1349
|
|
129
137
|
flwr/proto/__init__.py,sha256=hbY7JYakwZwCkYgCNlmHdc8rtvfoJbAZLalMdc--CGc,683
|
|
@@ -184,22 +192,22 @@ flwr/proto/transport_pb2.pyi,sha256=CZvJRWTU3QWFWLXNFtyLSrSKFatIyMcy-ohzLbQ-G9c,
|
|
|
184
192
|
flwr/proto/transport_pb2_grpc.py,sha256=vLN3EHtx2aEEMCO4f1Upu-l27BPzd3-5pV-u8wPcosk,2598
|
|
185
193
|
flwr/proto/transport_pb2_grpc.pyi,sha256=AGXf8RiIiW2J5IKMlm_3qT3AzcDa4F3P5IqUjve_esA,766
|
|
186
194
|
flwr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
187
|
-
flwr/server/__init__.py,sha256=
|
|
188
|
-
flwr/server/app.py,sha256=
|
|
195
|
+
flwr/server/__init__.py,sha256=cEg1oecBu4cKB69iJCqWEylC8b5XW47bl7rQiJsdTvM,1528
|
|
196
|
+
flwr/server/app.py,sha256=QFnqrN1aeNTN-hmHt2YcqZNncAq89Qr2mlZtwITRIc4,24430
|
|
189
197
|
flwr/server/client_manager.py,sha256=T8UDSRJBVD3fyIDI7NTAA-NA7GPrMNNgH2OAF54RRxE,6127
|
|
190
198
|
flwr/server/client_proxy.py,sha256=4G-oTwhb45sfWLx2uZdcXD98IZwdTS6F88xe3akCdUg,2399
|
|
191
199
|
flwr/server/compat/__init__.py,sha256=VxnJtJyOjNFQXMNi9hIuzNlZM5n0Hj1p3aq_Pm2udw4,892
|
|
192
|
-
flwr/server/compat/app.py,sha256=
|
|
200
|
+
flwr/server/compat/app.py,sha256=5vkHHm_h-4cMthvWD1GJo1ZW3eihytjGgvsgfXUK9gA,3298
|
|
193
201
|
flwr/server/compat/app_utils.py,sha256=B9pec7LnYACzowXKZTZNu3SNS-fSaHfefwvRyAQa4Nc,3456
|
|
194
202
|
flwr/server/compat/driver_client_proxy.py,sha256=BxTDo7i89VAG2tuF4x7zogSVn2bXPMr0H2H0lERzW9c,5444
|
|
195
203
|
flwr/server/compat/legacy_context.py,sha256=wBzBcfV6YO6IQGriM_FdJ5XZfiBBEEJdS_OdAiF47dY,1804
|
|
196
204
|
flwr/server/criterion.py,sha256=ypbAexbztzGUxNen9RCHF91QeqiEQix4t4Ih3E-42MM,1061
|
|
197
205
|
flwr/server/driver/__init__.py,sha256=bikRv6CjTwSvYh7tf10gziU5o2YotOWhhftz2tr3KDc,886
|
|
198
206
|
flwr/server/driver/driver.py,sha256=NT_yaeit7_kZEIsCEqOWPID1GrVD3ywH4xZ2wtIh5lM,5217
|
|
199
|
-
flwr/server/driver/grpc_driver.py,sha256=
|
|
207
|
+
flwr/server/driver/grpc_driver.py,sha256=qrCF0hi2AlKF_8R5N_W5aKoAxd80lN1xbdLTUVtpSO0,9648
|
|
200
208
|
flwr/server/driver/inmemory_driver.py,sha256=RcK94_NtjGZ4aZDIscnU7A3Uv1u8jGx29-xcbjQvZTM,6444
|
|
201
209
|
flwr/server/history.py,sha256=bBOHKyX1eQONIsUx4EUU-UnAk1i0EbEl8ioyMq_UWQ8,5063
|
|
202
|
-
flwr/server/run_serverapp.py,sha256=
|
|
210
|
+
flwr/server/run_serverapp.py,sha256=Xw42zqNXmKGy3Fz5QjYOUS1MH7ULy2u9nad4QA8hh74,10479
|
|
203
211
|
flwr/server/server.py,sha256=PsJeh7ROKMoeLpIVrmbKoQUvdz-iqb54E4HZJanRUmM,17912
|
|
204
212
|
flwr/server/server_app.py,sha256=1hul76ospG8L_KooK_ewn1sWPNTNYLTtZMeGNOBNruA,6267
|
|
205
213
|
flwr/server/server_config.py,sha256=CZaHVAsMvGLjpWVcLPkiYxgJN4xfIyAiUrCI3fETKY4,1349
|
|
@@ -245,8 +253,8 @@ flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py,sha256=hh7ykcLMA_ymmD72eWFM
|
|
|
245
253
|
flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py,sha256=h3EhqgelegVC4EjOXH5birmAnMoCBJcP7jpHYCnHZPk,4887
|
|
246
254
|
flwr/server/superlink/fleet/grpc_bidi/grpc_server.py,sha256=DIXCYfPwm5paWq6hccReW0tB7-dTfq4vvMZ7CsiuYf4,12292
|
|
247
255
|
flwr/server/superlink/fleet/grpc_rere/__init__.py,sha256=j2hyC342am-_Hgp1g80Y3fGDzfTI6n8QOOn2PyWf4eg,758
|
|
248
|
-
flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=
|
|
249
|
-
flwr/server/superlink/fleet/grpc_rere/server_interceptor.py,sha256=
|
|
256
|
+
flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=bgoLQEhahVHjdlRDk_58zyKFeMOziiPUXSbYMhOxybY,4757
|
|
257
|
+
flwr/server/superlink/fleet/grpc_rere/server_interceptor.py,sha256=paUSrLADNsMdN0anHdbEeGDvI_SMWjAkFSiP3SA-hx8,7933
|
|
250
258
|
flwr/server/superlink/fleet/message_handler/__init__.py,sha256=h8oLD7uo5lKICPy0rRdKRjTYe62u8PKkT_fA4xF5JPA,731
|
|
251
259
|
flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=9qDDPwj3txHPo2dNaWQiO3UpGno5Zm9IMhJXnAPZbqg,4439
|
|
252
260
|
flwr/server/superlink/fleet/rest_rere/__init__.py,sha256=5jbYbAn75sGv-gBwOPDySE0kz96F6dTYLeMrGqNi4lM,735
|
|
@@ -257,9 +265,9 @@ flwr/server/superlink/fleet/vce/backend/backend.py,sha256=YugFH_XYclqmq07er5ne1D
|
|
|
257
265
|
flwr/server/superlink/fleet/vce/backend/raybackend.py,sha256=GkeaSe7uXg2iIgKiZNTCwM3TAwYEzuJnr9mA8-vg4hM,6793
|
|
258
266
|
flwr/server/superlink/fleet/vce/vce_api.py,sha256=lTQ2WycKK4-w22EPoJJz1qn73j9ZTwBlNz2cla2Zv0Q,12653
|
|
259
267
|
flwr/server/superlink/state/__init__.py,sha256=Gj2OTFLXvA-mAjBvwuKDM3rDrVaQPcIoybSa2uskMTE,1003
|
|
260
|
-
flwr/server/superlink/state/in_memory_state.py,sha256=
|
|
261
|
-
flwr/server/superlink/state/sqlite_state.py,sha256=
|
|
262
|
-
flwr/server/superlink/state/state.py,sha256=
|
|
268
|
+
flwr/server/superlink/state/in_memory_state.py,sha256=eNXOVt3HhJOYxkbYRNWEudCaNrYj2B7tOU9xgKbM2Ag,13166
|
|
269
|
+
flwr/server/superlink/state/sqlite_state.py,sha256=Mxb1QLFca9xFtnKgeu1XCe2kFzKGWmpnI-eRMa6-QSE,29395
|
|
270
|
+
flwr/server/superlink/state/state.py,sha256=0DPFJcIGJMMYh3fIGGKSjDswl_HxL57tVYMYdB3TJxI,8138
|
|
263
271
|
flwr/server/superlink/state/state_factory.py,sha256=Fo8pBQ1WWrVJK5TOEPZ_zgJE69_mfTGjTO6czh6571o,2021
|
|
264
272
|
flwr/server/superlink/state/utils.py,sha256=155ngcaSePy7nD8X4LHgpuVok6fcH5_CPNRiFAbLWDA,2407
|
|
265
273
|
flwr/server/typing.py,sha256=5kaRLZuxTEse9A0g7aVna2VhYxU3wTq1f3d3mtw7kXs,1019
|
|
@@ -278,16 +286,16 @@ flwr/simulation/ray_transport/__init__.py,sha256=wzcEEwUUlulnXsg6raCA1nGpP3LlAQD
|
|
|
278
286
|
flwr/simulation/ray_transport/ray_actor.py,sha256=3j0HgzjrlYjnzdTRy8aA4Nf6VoUvxi1hGRQkGSU5z6c,19020
|
|
279
287
|
flwr/simulation/ray_transport/ray_client_proxy.py,sha256=0abIsU0VBk9rNJZOKHIyzYGy3ZnWBgqYocX_oct1EP0,7307
|
|
280
288
|
flwr/simulation/ray_transport/utils.py,sha256=TYdtfg1P9VfTdLMOJlifInGpxWHYs9UfUqIv2wfkRLA,2392
|
|
281
|
-
flwr/simulation/run_simulation.py,sha256=
|
|
282
|
-
flwr/superexec/__init__.py,sha256=
|
|
283
|
-
flwr/superexec/app.py,sha256=
|
|
289
|
+
flwr/simulation/run_simulation.py,sha256=TjkgoSh_FGiFmyJ9g45S-uh4nh16scm4GDo-5J8k2gI,22279
|
|
290
|
+
flwr/superexec/__init__.py,sha256=fcj366jh4RFby_vDwLroU4kepzqbnJgseZD_jUr_Mko,715
|
|
291
|
+
flwr/superexec/app.py,sha256=gH25dr7FL9IWODSOtP0-r59iuOKDeSXLLPxpEAL50BM,6561
|
|
284
292
|
flwr/superexec/deployment.py,sha256=1qhztkcZDjaSbicligbXGqn49gbpN271rTlEVAnNuWw,6283
|
|
285
293
|
flwr/superexec/exec_grpc.py,sha256=PhqGoZEpTMxSQmUSV8Wgtzb1Za_pHJ-adZqo5RYnDyE,1942
|
|
286
294
|
flwr/superexec/exec_servicer.py,sha256=jl0aKVjm0PLQABcTL5c3jdSIzb0Z6hpVOtrAn4Ob7ts,2323
|
|
287
295
|
flwr/superexec/executor.py,sha256=k_adivto6R2U82DADOHNvdtobehBYreRek1gOEBIQnQ,2318
|
|
288
296
|
flwr/superexec/simulation.py,sha256=J6pw-RqCSiUed8I_3MasZH4tl57ZmDebPAHNnbb0-vE,7420
|
|
289
|
-
flwr_nightly-1.
|
|
290
|
-
flwr_nightly-1.
|
|
291
|
-
flwr_nightly-1.
|
|
292
|
-
flwr_nightly-1.
|
|
293
|
-
flwr_nightly-1.
|
|
297
|
+
flwr_nightly-1.12.0.dev20240906.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
298
|
+
flwr_nightly-1.12.0.dev20240906.dist-info/METADATA,sha256=RfiJcTSp6n6SwM0xjGoYSbkR1mHFqc-G6obT8A7gE8M,15703
|
|
299
|
+
flwr_nightly-1.12.0.dev20240906.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
300
|
+
flwr_nightly-1.12.0.dev20240906.dist-info/entry_points.txt,sha256=WUCbqhLEOzjx_lyATIM0-f0e8kOVaQjzwOvyOxHrMhs,434
|
|
301
|
+
flwr_nightly-1.12.0.dev20240906.dist-info/RECORD,,
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
[console_scripts]
|
|
2
|
+
flower-client-app=flwr.client.supernode:run_client_app
|
|
3
|
+
flower-server-app=flwr.server.run_serverapp:run_server_app
|
|
4
|
+
flower-simulation=flwr.simulation.run_simulation:run_simulation_from_cli
|
|
5
|
+
flower-superexec=flwr.superexec.app:run_superexec
|
|
6
|
+
flower-superlink=flwr.server.app:run_superlink
|
|
7
|
+
flower-supernode=flwr.client.supernode.app:run_supernode
|
|
8
|
+
flwr=flwr.cli.app:app
|
|
9
|
+
flwr-clientapp=flwr.client.clientapp:flwr_clientapp
|
|
10
|
+
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
"""$project_name: A Flower / FlowerTune app."""
|
|
2
|
-
|
|
3
|
-
import os
|
|
4
|
-
import warnings
|
|
5
|
-
from datetime import datetime
|
|
6
|
-
|
|
7
|
-
from flwr_datasets import FederatedDataset
|
|
8
|
-
from hydra import compose, initialize
|
|
9
|
-
from hydra.utils import instantiate
|
|
10
|
-
|
|
11
|
-
from flwr.client import ClientApp
|
|
12
|
-
from flwr.common import Context, ndarrays_to_parameters
|
|
13
|
-
from flwr.server import ServerApp, ServerAppComponents, ServerConfig
|
|
14
|
-
|
|
15
|
-
from $import_name.client_app import gen_client_fn, get_parameters
|
|
16
|
-
from $import_name.dataset import get_tokenizer_and_data_collator_and_propt_formatting
|
|
17
|
-
from $import_name.models import get_model
|
|
18
|
-
from $import_name.server_app import fit_weighted_average, get_evaluate_fn, get_on_fit_config
|
|
19
|
-
|
|
20
|
-
# Avoid warnings
|
|
21
|
-
warnings.filterwarnings("ignore", category=UserWarning)
|
|
22
|
-
os.environ["TOKENIZERS_PARALLELISM"] = "true"
|
|
23
|
-
os.environ["RAY_DISABLE_DOCKER_CPU_WARNING"] = "1"
|
|
24
|
-
|
|
25
|
-
# Initialise regular config
|
|
26
|
-
with initialize(config_path="conf", version_base="1.1"):
|
|
27
|
-
cfg = compose(config_name="config")
|
|
28
|
-
|
|
29
|
-
# Initialise static config
|
|
30
|
-
with initialize(config_path="conf", version_base="1.1"):
|
|
31
|
-
cfg_static = compose(config_name="static_config")
|
|
32
|
-
|
|
33
|
-
cfg.train.num_rounds = cfg_static.num_rounds
|
|
34
|
-
|
|
35
|
-
# Create output directory given current timestamp
|
|
36
|
-
current_time = datetime.now()
|
|
37
|
-
folder_name = current_time.strftime("%Y-%m-%d_%H-%M-%S")
|
|
38
|
-
save_path = os.path.join(os.getcwd(), f"results/{folder_name}")
|
|
39
|
-
os.makedirs(save_path, exist_ok=True)
|
|
40
|
-
|
|
41
|
-
# Partition dataset and get dataloaders
|
|
42
|
-
partitioner = instantiate(cfg_static.partitioner)
|
|
43
|
-
fds = FederatedDataset(
|
|
44
|
-
dataset=cfg_static.dataset.name, partitioners={"train": partitioner}
|
|
45
|
-
)
|
|
46
|
-
(
|
|
47
|
-
tokenizer,
|
|
48
|
-
data_collator,
|
|
49
|
-
formatting_prompts_func,
|
|
50
|
-
) = get_tokenizer_and_data_collator_and_propt_formatting(cfg.model.name)
|
|
51
|
-
|
|
52
|
-
# ClientApp for Flower Next
|
|
53
|
-
client = ClientApp(
|
|
54
|
-
client_fn=gen_client_fn(
|
|
55
|
-
fds,
|
|
56
|
-
tokenizer,
|
|
57
|
-
formatting_prompts_func,
|
|
58
|
-
data_collator,
|
|
59
|
-
cfg.model,
|
|
60
|
-
cfg.train,
|
|
61
|
-
save_path,
|
|
62
|
-
),
|
|
63
|
-
)
|
|
64
|
-
|
|
65
|
-
# Get initial model weights
|
|
66
|
-
init_model = get_model(cfg.model)
|
|
67
|
-
init_model_parameters = get_parameters(init_model)
|
|
68
|
-
init_model_parameters = ndarrays_to_parameters(init_model_parameters)
|
|
69
|
-
|
|
70
|
-
def server_fn(context: Context):
|
|
71
|
-
# Instantiate strategy according to config. Here we pass other arguments
|
|
72
|
-
# that are only defined at runtime.
|
|
73
|
-
strategy = instantiate(
|
|
74
|
-
cfg.strategy,
|
|
75
|
-
on_fit_config_fn=get_on_fit_config(),
|
|
76
|
-
fit_metrics_aggregation_fn=fit_weighted_average,
|
|
77
|
-
initial_parameters=init_model_parameters,
|
|
78
|
-
evaluate_fn=get_evaluate_fn(
|
|
79
|
-
cfg.model, cfg.train.save_every_round, cfg_static.num_rounds, save_path
|
|
80
|
-
),
|
|
81
|
-
)
|
|
82
|
-
|
|
83
|
-
config = ServerConfig(num_rounds=cfg_static.num_rounds)
|
|
84
|
-
|
|
85
|
-
return ServerAppComponents(strategy=strategy, config=config)
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
# ServerApp for Flower Next
|
|
89
|
-
server = ServerApp(server_fn=server_fn)
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# Federated Instruction Tuning
|
|
2
|
-
---
|
|
3
|
-
model:
|
|
4
|
-
name: "mistralai/Mistral-7B-v0.3"
|
|
5
|
-
quantization: 4 # 8 or 4 if you want to do quantization with BitsAndBytes
|
|
6
|
-
gradient_checkpointing: True
|
|
7
|
-
lora:
|
|
8
|
-
peft_lora_r: 32
|
|
9
|
-
peft_lora_alpha: 64
|
|
10
|
-
|
|
11
|
-
train:
|
|
12
|
-
num_rounds: null
|
|
13
|
-
save_every_round: 5
|
|
14
|
-
learning_rate_max: 5e-5
|
|
15
|
-
learning_rate_min: 1e-6
|
|
16
|
-
seq_length: 512
|
|
17
|
-
training_arguments:
|
|
18
|
-
output_dir: null # to be set by hydra
|
|
19
|
-
learning_rate: null # to be set by the client
|
|
20
|
-
per_device_train_batch_size: 16
|
|
21
|
-
gradient_accumulation_steps: 1
|
|
22
|
-
logging_steps: 10
|
|
23
|
-
num_train_epochs: 3
|
|
24
|
-
max_steps: 10
|
|
25
|
-
report_to: null
|
|
26
|
-
save_steps: 1000
|
|
27
|
-
save_total_limit: 10
|
|
28
|
-
gradient_checkpointing: True
|
|
29
|
-
lr_scheduler_type: "constant"
|
|
30
|
-
|
|
31
|
-
strategy:
|
|
32
|
-
_target_: flwr.server.strategy.FedAvg
|
|
33
|
-
fraction_fit: $fraction_fit
|
|
34
|
-
fraction_evaluate: 0.0 # no client evaluation
|