Skip to content
/ byzfl Public

ByzFL: A Python library for Byzantine-resilient federated learning, offering robust aggregators, attack simulations, and ML pipelines for distributed systems. Compatible with PyTorch and NumPy.

License

Notifications You must be signed in to change notification settings

LPD-EPFL/byzfl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ByzFL Documentation

Welcome to the official documentation of ByzFL, developed by DCL at EPFL and WIDE at INRIA Rennes!


What is ByzFL?

ByzFL is a Python library for Byzantine-resilient Federated Learning. It is fully compatible with both PyTorch tensors and NumPy arrays, making it versatile for a wide range of machine learning workflows.

Key Features

  1. Robust Aggregators and Pre-Aggregators:
    • Aggregate gradients robustly while mitigating the impact of Byzantine participants.
  2. Byzantine Attacks:
    • Simulate and evaluate different attack strategies to test resilience.
  3. Machine Learning Pipelines:
    • Train and benchmark robust aggregation schemes and attack implementations seamlessly.

The exact implementations of these modules (aggregators, attacks, and pipeline) can be found in the byzfl/ directory.


Installation

Install the ByzFL library using pip:

pip install byzfl

After installation, the library is ready to use. Here’s a quick example of how to use the TrMean robust aggregator and the SignFlipping Byzantine attack:


Quick Start Example - Using PyTorch Tensors

import byzfl
import torch

# Number of Byzantine participants
f = 1

# Honest vectors
honest_vectors = torch.tensor([[1., 2., 3.],
                               [4., 5., 6.],
                               [7., 8., 9.]])

# Initialize and apply the attack
attack = byzfl.SignFlipping()
byz_vector = attack(honest_vectors)

# Create f identical attack vectors
byz_vectors = byz_vector.repeat(f, 1)

# Concatenate honest and Byzantine vectors
all_vectors = torch.cat((honest_vectors, byz_vectors), dim=0)

# Initialize and perform robust aggregation
aggregate = byzfl.TrMean(f=f)
result = aggregate(all_vectors)
print("Aggregated result:", result)

Output:

Aggregated result: tensor([2.5000, 3.5000, 4.5000])

Quick Start Example - Using Numpy Arrays

import byzfl
import numpy as np

# Number of Byzantine participants
f = 1

# Honest vectors
honest_vectors = np.array([[1., 2., 3.],
                           [4., 5., 6.],
                           [7., 8., 9.]])

# Initialize and apply the attack
attack = byzfl.SignFlipping()
byz_vector = attack(honest_vectors)

# Create f identical attack vectors
byz_vectors = np.tile(byz_vector, (f, 1))

# Concatenate honest and Byzantine vectors
all_vectors = np.concatenate((honest_vectors, byz_vectors), axis=0)

# Initialize and perform robust aggregation
aggregate = byzfl.TrMean(f=f)
result = aggregate(all_vectors)
print("Aggregated result:", result)

Output:

Aggregated result: [2.5 3.5 4.5]

Learn More

Explore the key components of ByzFL:

  • Aggregators
    Learn about robust aggregation methods.
  • Attacks
    Discover Byzantine attack implementations.
  • Pipeline
    Build and benchmark your models.

License

ByzFL is open-source and distributed under the MIT License.

Contributions are welcome!

About

ByzFL: A Python library for Byzantine-resilient federated learning, offering robust aggregators, attack simulations, and ML pipelines for distributed systems. Compatible with PyTorch and NumPy.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages