krum 0.9.0__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.
Files changed (45) hide show
  1. krum/__init__.py +22 -0
  2. krum/orchestration/__init__.py +684 -0
  3. krum/orchestration/execution.py +274 -0
  4. krum/orchestration/hashing.py +572 -0
  5. krum/orchestration/metrics.py +498 -0
  6. krum/orchestration/storage.py +670 -0
  7. krum/orchestration/tracing.py +177 -0
  8. krum/primitives/__init__.py +6 -0
  9. krum/primitives/aggregators/__init__.py +57 -0
  10. krum/primitives/aggregators/aksel.py +74 -0
  11. krum/primitives/aggregators/average.py +48 -0
  12. krum/primitives/aggregators/brute.py +87 -0
  13. krum/primitives/aggregators/bulyan.py +117 -0
  14. krum/primitives/aggregators/geometric_median.py +99 -0
  15. krum/primitives/aggregators/krum.py +57 -0
  16. krum/primitives/aggregators/median.py +54 -0
  17. krum/primitives/aggregators/medoid.py +80 -0
  18. krum/primitives/aggregators/multikrum.py +137 -0
  19. krum/primitives/aggregators/nearest_neighbor_average.py +70 -0
  20. krum/primitives/aggregators/trimmed_mean.py +64 -0
  21. krum/primitives/attacks/__init__.py +59 -0
  22. krum/primitives/attacks/alie.py +157 -0
  23. krum/primitives/attacks/full_gradient_negation.py +86 -0
  24. krum/primitives/attacks/gaussian.py +71 -0
  25. krum/primitives/attacks/sign_flip.py +75 -0
  26. krum/primitives/attacks/small_perturbation.py +400 -0
  27. krum/primitives/data_partitioners/__init__.py +86 -0
  28. krum/primitives/data_partitioners/dirichlet.py +128 -0
  29. krum/primitives/data_partitioners/iid.py +57 -0
  30. krum/primitives/data_partitioners/mixing.py +94 -0
  31. krum/primitives/data_partitioners/per_labels.py +128 -0
  32. krum/primitives/models/__init__.py +299 -0
  33. krum/primitives/models/cnn.py +188 -0
  34. krum/primitives/models/mlp.py +122 -0
  35. krum/simulations/__init__.py +12 -0
  36. krum/simulations/centralised/__init__.py +495 -0
  37. krum/simulations/centralised/hidden_vulnerability_icml_2018.py +102 -0
  38. krum/simulations/centralised/krum_nips_2017.py +72 -0
  39. krum/simulations/decentralised/__init__.py +475 -0
  40. krum/simulations/decentralised/monna_icml_2023.py +358 -0
  41. krum-0.9.0.dist-info/METADATA +188 -0
  42. krum-0.9.0.dist-info/RECORD +45 -0
  43. krum-0.9.0.dist-info/WHEEL +5 -0
  44. krum-0.9.0.dist-info/licenses/LICENSE +21 -0
  45. krum-0.9.0.dist-info/top_level.txt +1 -0
krum/__init__.py ADDED
@@ -0,0 +1,22 @@
1
+ """Krum — Byzantine-resilient aggregation rules for distributed machine learning.
2
+
3
+ The package is organized in two layers:
4
+
5
+ * :mod:`krum.primitives.aggregators` exposes stateless, classmethod-based
6
+ Gradient Aggregation Rules (GARs).
7
+ * :mod:`krum.primitives.attacks` exposes gradient attacks that simulate Byzantine
8
+ workers when evaluating the robustness of an aggregator.
9
+ * :mod:`krum.primitives.models` provides a :class:`~krum.primitives.models.Model`
10
+ wrapper that exposes a ``torch.nn.Module``'s parameters and gradients as
11
+ zero-copy flat tensors, which is the data layout the aggregators consume.
12
+
13
+ The :mod:`krum.simulations` package ships the original training simulations
14
+ from the papers that introduced each rule.
15
+ """
16
+
17
+ from importlib.metadata import PackageNotFoundError, version
18
+
19
+ try:
20
+ __version__ = version("krum")
21
+ except PackageNotFoundError:
22
+ __version__ = "0.0.0" # Running from source without installation