Phase 2: Possible addition of setup step to federated simulation

Hello PETs Prize Phase 2 participants,

Challenge organizers are considering a possible addition to the evaluation API to give more flexibility to teams. We are interested in hearing whether this addition would be helpful to teams. Draft documentation is below.

Setup Functions

An optional setup step will be run before federated training and federated inference. You can make use of this step by including train_setup and/or test_setup functions in your solution_federated.py module. The setup functions are intended to make it simpler to perform initial setup between the parties, by avoiding the need for explicit communication routed via the server. For example, a setup function might generate key pairs and initialize each client’s state with the public keys of the other parties, or initialize each client’s state with a shared symmetric key.

The computation cost of the setup functions will be measured during evaluation, but their communications overhead will not be measured (because the communication they encode is not explicit). The setup function should therefore not implicitly encode significant communications between the parties.

If you use a setup function, your technical report should describe exactly what computation it performs, and what communications it encodes. Reviewers and judges will be instructed to take this description into account when evaluating the performance of your submission—for example, by reducing performance scores if the setup function has been used to hide communications costs that should have been measured during evaluation. This setup step is not provided explicit access to training or test data and should not perform any computation using the data.

The train_setup and test_setup functions should have the following function signatures.

def train_setup(server_dir: Path, client_dirs_dict: Dict[str, Path]):
    """
    Perform initial setup between parties before federated training. 

    Args:
        server_dir (Path): Path to a directory specific to the server/aggregator
            that is available over the simulation. The server can use this
            directory for saving and reloading server state. Using this 
            directory is required for the trained model to be persisted between
            training and test stages.
        client_dirs_dict (Dict[str, Path]): Dictionary of paths to the directories 
            specific to each client that is available over the simulation. Clients 
            can use these directory for saving and reloading client state. This
            dictionary is keyed by the client ID. 
    """
    ...


def test_setup(server_dir: Path, client_dirs_dict: Dict[str, Path]):
    """
    Perform initial setup between parties before federated test inference.
    """
    ...

Hi Jay,

Would setup functions be added to federated simulation? These functions can be quite helpful! (Apologies that we missed this thread earlier.)

Thank you!