flwr-nightly 1.11.0.dev20240824__tar.gz → 1.11.0.dev20240827__tar.gz

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.

Files changed (295) hide show
  1. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/PKG-INFO +2 -2
  2. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/README.md +1 -1
  3. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/pyproject.toml +1 -1
  4. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/app.py +0 -2
  5. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/new.py +6 -10
  6. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +16 -6
  7. flwr_nightly-1.11.0.dev20240824/src/py/flwr/cli/new/templates/app/code/flwr_tune/client.py.tpl → flwr_nightly-1.11.0.dev20240827/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +50 -40
  8. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +32 -2
  9. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -3
  10. flwr_nightly-1.11.0.dev20240827/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +95 -0
  11. flwr_nightly-1.11.0.dev20240827/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +83 -0
  12. flwr_nightly-1.11.0.dev20240827/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +66 -0
  13. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/run/run.py +2 -2
  14. flwr_nightly-1.11.0.dev20240824/src/py/flwr/cli/new/templates/app/code/flwr_tune/app.py.tpl +0 -89
  15. flwr_nightly-1.11.0.dev20240824/src/py/flwr/cli/new/templates/app/code/flwr_tune/config.yaml.tpl +0 -34
  16. flwr_nightly-1.11.0.dev20240824/src/py/flwr/cli/new/templates/app/code/flwr_tune/server.py.tpl +0 -48
  17. flwr_nightly-1.11.0.dev20240824/src/py/flwr/cli/new/templates/app/code/flwr_tune/static_config.yaml.tpl +0 -11
  18. flwr_nightly-1.11.0.dev20240824/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -39
  19. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/LICENSE +0 -0
  20. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/__init__.py +0 -0
  21. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/__init__.py +0 -0
  22. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/build.py +0 -0
  23. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/config_utils.py +0 -0
  24. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/example.py +0 -0
  25. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/install.py +0 -0
  26. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/__init__.py +0 -0
  27. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  28. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  29. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  30. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  31. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  32. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  33. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  34. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  35. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  36. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  37. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  38. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  39. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  40. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  41. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  42. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  43. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  44. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  45. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  46. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  47. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  48. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  49. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  50. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  51. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  52. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  53. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  54. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  55. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  56. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  57. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  58. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  59. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  60. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/run/__init__.py +0 -0
  61. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/cli/utils.py +0 -0
  62. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/__init__.py +0 -0
  63. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/app.py +0 -0
  64. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/client.py +0 -0
  65. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/client_app.py +0 -0
  66. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/clientapp/__init__.py +0 -0
  67. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/clientapp/app.py +0 -0
  68. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  69. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/clientapp/utils.py +0 -0
  70. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  71. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  72. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  73. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  74. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/grpc_client/connection.py +0 -0
  75. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  76. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  77. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  78. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  79. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/heartbeat.py +0 -0
  80. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/message_handler/__init__.py +0 -0
  81. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  82. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  83. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/mod/__init__.py +0 -0
  84. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  85. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/mod/comms_mods.py +0 -0
  86. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  87. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  88. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  89. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  90. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/mod/utils.py +0 -0
  91. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/node_state.py +0 -0
  92. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/node_state_tests.py +0 -0
  93. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/numpy_client.py +0 -0
  94. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/rest_client/__init__.py +0 -0
  95. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/rest_client/connection.py +0 -0
  96. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/supernode/__init__.py +0 -0
  97. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/supernode/app.py +0 -0
  98. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/client/typing.py +0 -0
  99. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/__init__.py +0 -0
  100. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/address.py +0 -0
  101. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/config.py +0 -0
  102. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/constant.py +0 -0
  103. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/context.py +0 -0
  104. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/date.py +0 -0
  105. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/differential_privacy.py +0 -0
  106. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  107. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/dp.py +0 -0
  108. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/exit_handlers.py +0 -0
  109. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/grpc.py +0 -0
  110. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/logger.py +0 -0
  111. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/message.py +0 -0
  112. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/object_ref.py +0 -0
  113. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/parameter.py +0 -0
  114. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/pyproject.py +0 -0
  115. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/record/__init__.py +0 -0
  116. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/record/configsrecord.py +0 -0
  117. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/record/conversion_utils.py +0 -0
  118. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/record/metricsrecord.py +0 -0
  119. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/record/parametersrecord.py +0 -0
  120. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/record/recordset.py +0 -0
  121. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/record/typeddict.py +0 -0
  122. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/recordset_compat.py +0 -0
  123. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/retry_invoker.py +0 -0
  124. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  125. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  126. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  127. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  128. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  129. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  130. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  131. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  132. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/serde.py +0 -0
  133. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/telemetry.py +0 -0
  134. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/typing.py +0 -0
  135. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/common/version.py +0 -0
  136. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/__init__.py +0 -0
  137. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/clientappio_pb2.py +0 -0
  138. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
  139. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  140. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  141. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/common_pb2.py +0 -0
  142. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/common_pb2.pyi +0 -0
  143. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
  144. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
  145. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/driver_pb2.py +0 -0
  146. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/driver_pb2.pyi +0 -0
  147. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
  148. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
  149. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/error_pb2.py +0 -0
  150. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/error_pb2.pyi +0 -0
  151. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  152. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  153. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/exec_pb2.py +0 -0
  154. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/exec_pb2.pyi +0 -0
  155. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  156. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  157. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/fab_pb2.py +0 -0
  158. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  159. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  160. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  161. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/fleet_pb2.py +0 -0
  162. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  163. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  164. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  165. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  166. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  167. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  168. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  169. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/message_pb2.py +0 -0
  170. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/message_pb2.pyi +0 -0
  171. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  172. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  173. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/node_pb2.py +0 -0
  174. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/node_pb2.pyi +0 -0
  175. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  176. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  177. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/recordset_pb2.py +0 -0
  178. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  179. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  180. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  181. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/run_pb2.py +0 -0
  182. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/run_pb2.pyi +0 -0
  183. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  184. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  185. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/task_pb2.py +0 -0
  186. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/task_pb2.pyi +0 -0
  187. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  188. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  189. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/transport_pb2.py +0 -0
  190. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  191. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  192. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  193. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/py.typed +0 -0
  194. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/__init__.py +0 -0
  195. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/app.py +0 -0
  196. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/client_manager.py +0 -0
  197. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/client_proxy.py +0 -0
  198. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/compat/__init__.py +0 -0
  199. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/compat/app.py +0 -0
  200. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/compat/app_utils.py +0 -0
  201. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  202. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/compat/legacy_context.py +0 -0
  203. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/criterion.py +0 -0
  204. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/driver/__init__.py +0 -0
  205. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/driver/driver.py +0 -0
  206. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/driver/grpc_driver.py +0 -0
  207. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
  208. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/history.py +0 -0
  209. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/run_serverapp.py +0 -0
  210. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/server.py +0 -0
  211. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/server_app.py +0 -0
  212. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/server_config.py +0 -0
  213. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/serverapp_components.py +0 -0
  214. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/__init__.py +0 -0
  215. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/aggregate.py +0 -0
  216. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/bulyan.py +0 -0
  217. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  218. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  219. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  220. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  221. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  222. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  223. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/fedadam.py +0 -0
  224. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/fedavg.py +0 -0
  225. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  226. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  227. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  228. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/fedopt.py +0 -0
  229. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/fedprox.py +0 -0
  230. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  231. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  232. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  233. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  234. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  235. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/krum.py +0 -0
  236. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  237. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/strategy/strategy.py +0 -0
  238. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/__init__.py +0 -0
  239. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  240. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
  241. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/driver/driver_servicer.py +0 -0
  242. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  243. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  244. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
  245. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  246. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  247. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  248. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  249. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  250. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  251. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  252. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  253. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  254. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  255. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  256. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  257. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  258. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  259. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  260. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  261. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  262. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  263. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  264. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  265. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  266. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/state/__init__.py +0 -0
  267. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/state/in_memory_state.py +0 -0
  268. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/state/sqlite_state.py +0 -0
  269. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/state/state.py +0 -0
  270. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
  271. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/superlink/state/utils.py +0 -0
  272. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/typing.py +0 -0
  273. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/utils/__init__.py +0 -0
  274. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/utils/tensorboard.py +0 -0
  275. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/utils/validator.py +0 -0
  276. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/workflow/__init__.py +0 -0
  277. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/workflow/constant.py +0 -0
  278. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  279. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  280. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  281. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  282. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/simulation/__init__.py +0 -0
  283. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/simulation/app.py +0 -0
  284. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  285. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  286. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  287. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  288. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/simulation/run_simulation.py +0 -0
  289. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/superexec/__init__.py +0 -0
  290. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/superexec/app.py +0 -0
  291. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/superexec/deployment.py +0 -0
  292. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/superexec/exec_grpc.py +0 -0
  293. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/superexec/exec_servicer.py +0 -0
  294. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/superexec/executor.py +0 -0
  295. {flwr_nightly-1.11.0.dev20240824 → flwr_nightly-1.11.0.dev20240827}/src/py/flwr/superexec/simulation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.11.0.dev20240824
3
+ Version: 1.11.0.dev20240827
4
4
  Summary: Flower: A Friendly Federated Learning Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -195,7 +195,7 @@ 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-flowertune)
198
+ - [Federated Finetuning of Large Language Model](https://github.com/adap/flower/tree/main/examples/flowertune-llm)
199
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)
@@ -143,7 +143,7 @@ Other [examples](https://github.com/adap/flower/tree/main/examples):
143
143
  - [PyTorch: From Centralized to Federated](https://github.com/adap/flower/tree/main/examples/pytorch-from-centralized-to-federated)
144
144
  - [Vertical FL](https://github.com/adap/flower/tree/main/examples/vertical-fl)
145
145
  - [Federated Finetuning of OpenAI's Whisper](https://github.com/adap/flower/tree/main/examples/whisper-federated-finetuning)
146
- - [Federated Finetuning of Large Language Model](https://github.com/adap/flower/tree/main/examples/llm-flowertune)
146
+ - [Federated Finetuning of Large Language Model](https://github.com/adap/flower/tree/main/examples/flowertune-llm)
147
147
  - [Federated Finetuning of a Vision Transformer](https://github.com/adap/flower/tree/main/examples/flowertune-vit)
148
148
  - [Advanced Flower with TensorFlow/Keras](https://github.com/adap/flower/tree/main/examples/advanced-tensorflow)
149
149
  - [Advanced Flower with PyTorch](https://github.com/adap/flower/tree/main/examples/advanced-pytorch)
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "flwr-nightly"
7
- version = "1.11.0.dev20240824"
7
+ version = "1.11.0.dev20240827"
8
8
  description = "Flower: A Friendly Federated Learning Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -18,7 +18,6 @@ import typer
18
18
  from typer.main import get_command
19
19
 
20
20
  from .build import build
21
- from .example import example
22
21
  from .install import install
23
22
  from .new import new
24
23
  from .run import run
@@ -33,7 +32,6 @@ app = typer.Typer(
33
32
  )
34
33
 
35
34
  app.command()(new)
36
- app.command()(example)
37
35
  app.command()(run)
38
36
  app.command()(build)
39
37
  app.command()(install)
@@ -187,24 +187,20 @@ def new(
187
187
  "pyproject.toml": {"template": f"app/pyproject.{framework_str}.toml.tpl"},
188
188
  "README.md": {"template": f"app/README.{framework_str}.md.tpl"},
189
189
  f"{import_name}/__init__.py": {"template": "app/code/__init__.py.tpl"},
190
- f"{import_name}/server.py": {
191
- "template": "app/code/flwr_tune/server.py.tpl"
190
+ f"{import_name}/server_app.py": {
191
+ "template": "app/code/flwr_tune/server_app.py.tpl"
192
192
  },
193
- f"{import_name}/client.py": {
194
- "template": "app/code/flwr_tune/client.py.tpl"
193
+ f"{import_name}/client_app.py": {
194
+ "template": "app/code/flwr_tune/client_app.py.tpl"
195
195
  },
196
- f"{import_name}/app.py": {"template": "app/code/flwr_tune/app.py.tpl"},
197
196
  f"{import_name}/models.py": {
198
197
  "template": "app/code/flwr_tune/models.py.tpl"
199
198
  },
200
199
  f"{import_name}/dataset.py": {
201
200
  "template": "app/code/flwr_tune/dataset.py.tpl"
202
201
  },
203
- f"{import_name}/conf/config.yaml": {
204
- "template": "app/code/flwr_tune/config.yaml.tpl"
205
- },
206
- f"{import_name}/conf/static_config.yaml": {
207
- "template": "app/code/flwr_tune/static_config.yaml.tpl"
202
+ f"{import_name}/strategy.py": {
203
+ "template": "app/code/flwr_tune/strategy.py.tpl"
208
204
  },
209
205
  }
210
206
 
@@ -23,10 +23,12 @@ pip install -e .
23
23
 
24
24
  ## Experimental setup
25
25
 
26
- The dataset is partitioned into $num_clients shards with IID fashion serving as clients.
27
- We randomly sample $fraction_fit clients to be available for each round,
28
- and the federated fine-tuning lasts for `200` rounds.
29
- All settings are defined in `$project_name/conf/static_config.yaml`, which is not allowed to be modified for fair competition if you plan to participated in the [LLM leaderboard](https://flower.ai/benchmarks/llm-leaderboard).
26
+ The dataset is divided into $num_clients partitions in an IID fashion, a partition is assigned to each ClientApp.
27
+ We randomly sample a fraction ($fraction_fit) of the total nodes to participate in each round, for a total of `200` rounds.
28
+ All settings are defined in `pyproject.toml`.
29
+
30
+ > [!IMPORTANT]
31
+ > Please note that `[tool.flwr.app.config.static]` and `options.num-supernodes` under `[tool.flwr.federations.local-simulation]` are not allowed to be modified for fair competition if you plan to participated in the [LLM leaderboard](https://flower.ai/benchmarks/llm-leaderboard).
30
32
 
31
33
 
32
34
  ## Running the challenge
@@ -39,7 +41,7 @@ huggingface-cli login
39
41
  ```
40
42
 
41
43
  Run the challenge with default config values.
42
- The configs are in `$project_name/conf/config.yaml` and `$project_name/conf/static_config.yaml`, and are loaded automatically.
44
+ The configs are defined in `[tool.flwr.app.config]` entry of `pyproject.toml`, and are loaded automatically.
43
45
 
44
46
  ```bash
45
47
  flwr run
@@ -53,4 +55,12 @@ We use Mistral-7B model with 4-bit quantization as default. The estimated VRAM c
53
55
  | :--------: | :--------: | :--------: | :--------: | :--------: |
54
56
  | VRAM | ~25.50 GB | ~17.30 GB | ~22.80 GB | ~17.40 GB |
55
57
 
56
- You can adjust the CPU/GPU resources you assign to each of the clients based on your device, which is specified with `flower.engine.simulation` in `pyproject.toml`.
58
+ You can adjust the CPU/GPU resources you assign to each of the clients based on your device, which are specified with `options.backend.clientapp-cpus` and `options.backend.clientapp-gpus` under `[tool.flwr.federations.local-simulation]` entry in `pyproject.toml`.
59
+
60
+
61
+ ## Model saving
62
+
63
+ The global PEFT model checkpoints are saved every 5 rounds after aggregation on the sever side as default, which can be specified with `train.save-every-round` under [tool.flwr.app.config] entry in `pyproject.toml`.
64
+
65
+ > [!NOTE]
66
+ > Please provide the last PEFT checkpoint if you plan to participated in the [LLM leaderboard](https://flower.ai/benchmarks/llm-leaderboard).
@@ -1,20 +1,32 @@
1
1
  """$project_name: A Flower / FlowerTune app."""
2
2
 
3
+ import os
4
+ import warnings
3
5
  from collections import OrderedDict
4
- from typing import Callable, Dict, Tuple
6
+ from typing import Dict, Tuple
5
7
 
6
8
  import torch
9
+ from flwr.client import ClientApp, NumPyClient
10
+ from flwr.common import Context
11
+ from flwr.common.config import unflatten_dict
12
+ from flwr.common.typing import NDArrays, Scalar
7
13
  from omegaconf import DictConfig
8
14
  from peft import get_peft_model_state_dict, set_peft_model_state_dict
9
15
  from transformers import TrainingArguments
10
16
  from trl import SFTTrainer
11
17
 
12
- from flwr.client import NumPyClient
13
- from flwr.common import Context
14
- from flwr.common.typing import NDArrays, Scalar
15
- from $import_name.dataset import reformat
18
+ from $import_name.dataset import (
19
+ get_tokenizer_and_data_collator_and_propt_formatting,
20
+ load_data,
21
+ replace_keys,
22
+ )
16
23
  from $import_name.models import cosine_annealing, get_model
17
24
 
25
+ # Avoid warnings
26
+ os.environ["TOKENIZERS_PARALLELISM"] = "true"
27
+ os.environ["RAY_DISABLE_DOCKER_CPU_WARNING"] = "1"
28
+ warnings.filterwarnings("ignore", category=UserWarning)
29
+
18
30
 
19
31
  # pylint: disable=too-many-arguments
20
32
  # pylint: disable=too-many-instance-attributes
@@ -29,7 +41,7 @@ class FlowerClient(NumPyClient):
29
41
  tokenizer,
30
42
  formatting_prompts_func,
31
43
  data_collator,
32
- save_path,
44
+ num_rounds,
33
45
  ): # pylint: disable=too-many-arguments
34
46
  self.device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
35
47
  self.train_cfg = train_cfg
@@ -37,13 +49,12 @@ class FlowerClient(NumPyClient):
37
49
  self.tokenizer = tokenizer
38
50
  self.formatting_prompts_func = formatting_prompts_func
39
51
  self.data_collator = data_collator
40
- self.save_path = save_path
52
+ self.num_rounds = num_rounds
53
+ self.trainset = trainset
41
54
 
42
55
  # instantiate model
43
56
  self.model = get_model(model_cfg)
44
57
 
45
- self.trainset = trainset
46
-
47
58
  def fit(
48
59
  self, parameters: NDArrays, config: Dict[str, Scalar]
49
60
  ) -> Tuple[NDArrays, int, Dict]:
@@ -52,13 +63,13 @@ class FlowerClient(NumPyClient):
52
63
 
53
64
  new_lr = cosine_annealing(
54
65
  int(config["current_round"]),
55
- self.train_cfg.num_rounds,
66
+ self.num_rounds,
56
67
  self.train_cfg.learning_rate_max,
57
68
  self.train_cfg.learning_rate_min,
58
69
  )
59
70
 
60
71
  self.training_argumnets.learning_rate = new_lr
61
- self.training_argumnets.output_dir = self.save_path
72
+ self.training_argumnets.output_dir = config["save_path"]
62
73
 
63
74
  # Construct trainer
64
75
  trainer = SFTTrainer(
@@ -95,32 +106,31 @@ def get_parameters(model) -> NDArrays:
95
106
  return [val.cpu().numpy() for _, val in state_dict.items()]
96
107
 
97
108
 
98
- def gen_client_fn(
99
- fds,
100
- tokenizer,
101
- formatting_prompts_func,
102
- data_collator,
103
- model_cfg: DictConfig,
104
- train_cfg: DictConfig,
105
- save_path: str,
106
- ) -> Callable[[Context], FlowerClient]: # pylint: disable=too-many-arguments
107
- """Generate the client function that creates the Flower Clients."""
108
-
109
- def client_fn(context: Context) -> FlowerClient:
110
- """Create a Flower client representing a single organization."""
111
- # Let's get the partition corresponding to the i-th client
112
- partition_id = context.node_config["partition-id"]
113
- client_trainset = fds.load_partition(partition_id, "train")
114
- client_trainset = reformat(client_trainset, llm_task="$llm_challenge_str")
115
-
116
- return FlowerClient(
117
- model_cfg,
118
- train_cfg,
119
- client_trainset,
120
- tokenizer,
121
- formatting_prompts_func,
122
- data_collator,
123
- save_path,
124
- ).to_client()
125
-
126
- return client_fn
109
+ def client_fn(context: Context) -> FlowerClient:
110
+ """Create a Flower client representing a single organization."""
111
+ partition_id = context.node_config["partition-id"]
112
+ num_partitions = context.node_config["num-partitions"]
113
+ num_rounds = context.run_config["num-server-rounds"]
114
+ cfg = DictConfig(replace_keys(unflatten_dict(context.run_config)))
115
+
116
+ # Let's get the client partition
117
+ client_trainset = load_data(partition_id, num_partitions, cfg.static.dataset.name)
118
+ (
119
+ tokenizer,
120
+ data_collator,
121
+ formatting_prompts_func,
122
+ ) = get_tokenizer_and_data_collator_and_propt_formatting(cfg.model.name)
123
+
124
+ return FlowerClient(
125
+ cfg.model,
126
+ cfg.train,
127
+ client_trainset,
128
+ tokenizer,
129
+ formatting_prompts_func,
130
+ data_collator,
131
+ num_rounds,
132
+ ).to_client()
133
+
134
+
135
+ # Flower ClientApp
136
+ app = ClientApp(client_fn)
@@ -1,8 +1,12 @@
1
1
  """$project_name: A Flower / FlowerTune app."""
2
2
 
3
+ from flwr_datasets import FederatedDataset
4
+ from flwr_datasets.partitioner import IidPartitioner
3
5
  from transformers import AutoTokenizer
4
6
  from trl import DataCollatorForCompletionOnlyLM
5
7
 
8
+ FDS = None # Cache FederatedDataset
9
+
6
10
 
7
11
  def formatting_prompts_func(example):
8
12
  """Construct prompts."""
@@ -24,7 +28,6 @@ def formatting_prompts_func(example):
24
28
 
25
29
  def get_tokenizer_and_data_collator_and_propt_formatting(model_name: str):
26
30
  """Get tokenizer, data_collator and prompt formatting."""
27
- # From: https://huggingface.co/docs/trl/en/sft_trainer
28
31
  tokenizer = AutoTokenizer.from_pretrained(
29
32
  model_name, use_fast=True, padding_side="right"
30
33
  )
@@ -49,9 +52,36 @@ def formatting(dataset):
49
52
  def reformat(dataset, llm_task):
50
53
  """Reformat datasets."""
51
54
  dataset = dataset.rename_column("output", "response")
52
- if llm_task == "finance" or llm_task == "code":
55
+ if llm_task in ["finance", "code"]:
53
56
  dataset = dataset.map(formatting, remove_columns=["input"])
54
57
  if llm_task == "medical":
55
58
  dataset = dataset.remove_columns(["instruction"])
56
59
  dataset = dataset.rename_column("input", "instruction")
57
60
  return dataset
61
+
62
+
63
+ def load_data(partition_id: int, num_partitions: int, dataset_name: str):
64
+ """Load partition data."""
65
+ # Only initialize `FederatedDataset` once
66
+ global FDS
67
+ if FDS is None:
68
+ partitioner = IidPartitioner(num_partitions=num_partitions)
69
+ FDS = FederatedDataset(
70
+ dataset=dataset_name,
71
+ partitioners={"train": partitioner},
72
+ )
73
+ client_trainset = FDS.load_partition(partition_id, "train")
74
+ client_trainset = reformat(client_trainset, llm_task="generalnlp")
75
+ return client_trainset
76
+
77
+
78
+ def replace_keys(input_dict, match="-", target="_"):
79
+ """Recursively replace match string with target string in dictionary keys."""
80
+ new_dict = {}
81
+ for key, value in input_dict.items():
82
+ new_key = key.replace(match, target)
83
+ if isinstance(value, dict):
84
+ new_dict[new_key] = replace_keys(value, match, target)
85
+ else:
86
+ new_dict[new_key] = value
87
+ return new_dict
@@ -22,9 +22,6 @@ def cosine_annealing(
22
22
 
23
23
  def get_model(model_cfg: DictConfig):
24
24
  """Load model with appropriate quantization config and other optimizations.
25
-
26
- Please refer to this example for `peft + BitsAndBytes`:
27
- https://github.com/huggingface/peft/blob/main/examples/fp4_finetuning/finetune_fp4_opt_bnb_peft.py
28
25
  """
29
26
  if model_cfg.quantization == 4:
30
27
  quantization_config = BitsAndBytesConfig(load_in_4bit=True)
@@ -0,0 +1,95 @@
1
+ """$project_name: A Flower / FlowerTune app."""
2
+
3
+ import os
4
+ from datetime import datetime
5
+
6
+ from flwr.common import Context, ndarrays_to_parameters
7
+ from flwr.common.config import unflatten_dict
8
+ from flwr.server import ServerApp, ServerAppComponents, ServerConfig
9
+ from omegaconf import DictConfig
10
+
11
+ from $import_name.client_app import get_parameters, set_parameters
12
+ from $import_name.models import get_model
13
+ from $import_name.dataset import replace_keys
14
+ from $import_name.strategy import FlowerTuneLlm
15
+
16
+
17
+ # Get function that will be executed by the strategy's evaluate() method
18
+ # Here we use it to save global model checkpoints
19
+ def get_evaluate_fn(model_cfg, save_every_round, total_round, save_path):
20
+ """Return an evaluation function for saving global model."""
21
+
22
+ def evaluate(server_round: int, parameters, config):
23
+ # Save model
24
+ if server_round != 0 and (
25
+ server_round == total_round or server_round % save_every_round == 0
26
+ ):
27
+ # Init model
28
+ model = get_model(model_cfg)
29
+ set_parameters(model, parameters)
30
+
31
+ model.save_pretrained(f"{save_path}/peft_{server_round}")
32
+
33
+ return 0.0, {}
34
+
35
+ return evaluate
36
+
37
+
38
+ def get_on_fit_config(save_path):
39
+ """Return a function that will be used to construct the config that the
40
+ client's fit() method will receive."""
41
+
42
+ def fit_config_fn(server_round: int):
43
+ fit_config = {}
44
+ fit_config["current_round"] = server_round
45
+ fit_config["save_path"] = save_path
46
+ return fit_config
47
+
48
+ return fit_config_fn
49
+
50
+
51
+ def fit_weighted_average(metrics):
52
+ """Aggregate (federated) evaluation metrics."""
53
+ # Multiply accuracy of each client by number of examples used
54
+ losses = [num_examples * m["train_loss"] for num_examples, m in metrics]
55
+ examples = [num_examples for num_examples, _ in metrics]
56
+
57
+ # Aggregate and return custom metric (weighted average)
58
+ return {"train_loss": sum(losses) / sum(examples)}
59
+
60
+
61
+ def server_fn(context: Context):
62
+ """Construct components that set the ServerApp behaviour."""
63
+ # Create output directory given current timestamp
64
+ current_time = datetime.now()
65
+ folder_name = current_time.strftime("%Y-%m-%d_%H-%M-%S")
66
+ save_path = os.path.join(os.getcwd(), f"results/{folder_name}")
67
+ os.makedirs(save_path, exist_ok=True)
68
+
69
+ # Read from config
70
+ num_rounds = context.run_config["num-server-rounds"]
71
+ cfg = DictConfig(replace_keys(unflatten_dict(context.run_config)))
72
+
73
+ # Get initial model weights
74
+ init_model = get_model(cfg.model)
75
+ init_model_parameters = get_parameters(init_model)
76
+ init_model_parameters = ndarrays_to_parameters(init_model_parameters)
77
+
78
+ # Define strategy
79
+ strategy = FlowerTuneLlm(
80
+ fraction_fit=cfg.strategy.fraction_fit,
81
+ fraction_evaluate=cfg.strategy.fraction_evaluate,
82
+ on_fit_config_fn=get_on_fit_config(save_path),
83
+ fit_metrics_aggregation_fn=fit_weighted_average,
84
+ initial_parameters=init_model_parameters,
85
+ evaluate_fn=get_evaluate_fn(
86
+ cfg.model, cfg.train.save_every_round, num_rounds, save_path
87
+ ),
88
+ )
89
+ config = ServerConfig(num_rounds=num_rounds)
90
+
91
+ return ServerAppComponents(strategy=strategy, config=config)
92
+
93
+
94
+ # Flower ServerApp
95
+ app = ServerApp(server_fn=server_fn)
@@ -0,0 +1,83 @@
1
+ """$project_name: A Flower / FlowerTune app."""
2
+
3
+ from io import BytesIO
4
+ from logging import INFO, WARN
5
+ from typing import List, Tuple, Union
6
+
7
+ from flwr.common import FitIns, FitRes, Parameters, log, parameters_to_ndarrays
8
+ from flwr.server.client_manager import ClientManager
9
+ from flwr.server.client_proxy import ClientProxy
10
+ from flwr.server.strategy import FedAvg
11
+
12
+
13
+ class FlowerTuneLlm(FedAvg):
14
+ """Customised FedAvg strategy implementation.
15
+
16
+ This class behaves just like FedAvg but also tracks the communication
17
+ costs associated with `fit` over FL rounds.
18
+ """
19
+ def __init__(self, **kwargs):
20
+ super().__init__(**kwargs)
21
+ self.comm_tracker = CommunicationTracker()
22
+
23
+ def configure_fit(
24
+ self, server_round: int, parameters: Parameters, client_manager: ClientManager
25
+ ):
26
+ """Configure the next round of training."""
27
+ return_clients = super().configure_fit(server_round, parameters, client_manager)
28
+
29
+ # Test communication costs
30
+ fit_ins_list = [fit_ins for _, fit_ins in return_clients]
31
+ self.comm_tracker.track(fit_ins_list)
32
+
33
+ return return_clients
34
+
35
+ def aggregate_fit(
36
+ self,
37
+ server_round: int,
38
+ results: List[Tuple[ClientProxy, FitRes]],
39
+ failures: List[Union[Tuple[ClientProxy, FitRes], BaseException]],
40
+ ):
41
+ """Aggregate fit results using weighted average."""
42
+ # Test communication costs
43
+ fit_res_list = [fit_res for _, fit_res in results]
44
+ self.comm_tracker.track(fit_res_list)
45
+
46
+ parameters_aggregated, metrics_aggregated = super().aggregate_fit(
47
+ server_round, results, failures
48
+ )
49
+
50
+ return parameters_aggregated, metrics_aggregated
51
+
52
+
53
+ class CommunicationTracker:
54
+ """Communication costs tracker over FL rounds."""
55
+ def __init__(self):
56
+ self.curr_comm_cost = 0.0
57
+
58
+ @staticmethod
59
+ def _compute_bytes(parameters):
60
+ return sum([BytesIO(t).getbuffer().nbytes for t in parameters.tensors])
61
+
62
+ def track(self, fit_list: List[Union[FitIns, FitRes]]):
63
+ size_bytes_list = [
64
+ self._compute_bytes(fit_ele.parameters)
65
+ for fit_ele in fit_list
66
+ ]
67
+ comm_cost = sum(size_bytes_list) / 1024**2
68
+
69
+ self.curr_comm_cost += comm_cost
70
+ log(
71
+ INFO,
72
+ "Communication budget: used %.2f MB (+%.2f MB this round) / 200,000 MB",
73
+ self.curr_comm_cost,
74
+ comm_cost,
75
+ )
76
+
77
+ if self.curr_comm_cost > 2e5:
78
+ log(
79
+ WARN,
80
+ "The accumulated communication cost has exceeded 200,000 MB. "
81
+ "Please consider reducing it if you plan to participate "
82
+ "FlowerTune LLM Leaderboard.",
83
+ )
@@ -0,0 +1,66 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "$package_name"
7
+ version = "1.0.0"
8
+ description = ""
9
+ license = "Apache-2.0"
10
+ dependencies = [
11
+ "flwr[simulation]>=1.10.0",
12
+ "flwr-datasets>=0.3.0",
13
+ "trl==0.8.1",
14
+ "bitsandbytes==0.43.0",
15
+ "scipy==1.13.0",
16
+ "peft==0.6.2",
17
+ "transformers==4.39.3",
18
+ "sentencepiece==0.2.0",
19
+ "omegaconf==2.3.0",
20
+ ]
21
+
22
+ [tool.hatch.build.targets.wheel]
23
+ packages = ["."]
24
+
25
+ [tool.flwr.app]
26
+ publisher = "$username"
27
+
28
+ [tool.flwr.app.components]
29
+ serverapp = "$import_name.server_app:app"
30
+ clientapp = "$import_name.client_app:app"
31
+
32
+ [tool.flwr.app.config]
33
+ model.name = "mistralai/Mistral-7B-v0.3"
34
+ model.quantization = 4
35
+ model.gradient-checkpointing = true
36
+ model.lora.peft-lora-r = 32
37
+ model.lora.peft-lora-alpha = 64
38
+ train.save-every-round = 5
39
+ train.learning-rate-max = 5e-5
40
+ train.learning-rate-min = 1e-6
41
+ train.seq-length = 512
42
+ train.training-arguments.output-dir = ""
43
+ train.training-arguments.learning-rate = ""
44
+ train.training-arguments.per-device-train-batch-size = 16
45
+ train.training-arguments.gradient-accumulation-steps = 1
46
+ train.training-arguments.logging-steps = 10
47
+ train.training-arguments.num-train-epochs = 3
48
+ train.training-arguments.max-steps = 10
49
+ train.training-arguments.save-steps = 1000
50
+ train.training-arguments.save-total-limit = 10
51
+ train.training-arguments.gradient-checkpointing = true
52
+ train.training-arguments.lr-scheduler-type = "constant"
53
+ strategy.fraction-fit = $fraction_fit
54
+ strategy.fraction-evaluate = 0.0
55
+ num-server-rounds = 200
56
+
57
+ [tool.flwr.app.config.static]
58
+ dataset.name = "$dataset_name"
59
+
60
+ [tool.flwr.federations]
61
+ default = "local-simulation"
62
+
63
+ [tool.flwr.federations.local-simulation]
64
+ options.num-supernodes = $num_clients
65
+ options.backend.client-resources.num-cpus = 6
66
+ options.backend.client-resources.num-gpus = 1.0
@@ -124,14 +124,14 @@ def run(
124
124
 
125
125
 
126
126
  def _run_with_superexec(
127
- app: Optional[Path],
127
+ app: Path,
128
128
  federation_config: Dict[str, Any],
129
129
  config_overrides: Optional[List[str]],
130
130
  ) -> None:
131
131
 
132
132
  insecure_str = federation_config.get("insecure")
133
133
  if root_certificates := federation_config.get("root-certificates"):
134
- root_certificates_bytes = Path(root_certificates).read_bytes()
134
+ root_certificates_bytes = (app / root_certificates).read_bytes()
135
135
  if insecure := bool(insecure_str):
136
136
  typer.secho(
137
137
  "❌ `root_certificates` were provided but the `insecure` parameter"