start_simulation#

start_simulation(*, client_fn: ~typing.Callable[[str], ~flwr.client.client.Client], num_clients: int | None = None, clients_ids: ~typing.List[str] | None = None, client_resources: ~typing.Dict[str, float] | None = None, server: ~flwr.server.server.Server | None = None, config: ~flwr.server.server_config.ServerConfig | None = None, strategy: ~flwr.server.strategy.strategy.Strategy | None = None, client_manager: ~flwr.server.client_manager.ClientManager | None = None, ray_init_args: ~typing.Dict[str, ~typing.Any] | None = None, keep_initialised: bool | None = False, actor_type: ~typing.Type[~flwr.simulation.ray_transport.ray_actor.VirtualClientEngineActor] = <flwr.simulation.ray_transport.ray_actor.ActorClass(ClientAppActor) object>, actor_kwargs: ~typing.Dict[str, ~typing.Any] | None = None, actor_scheduling: str | ~ray.util.scheduling_strategies.NodeAffinitySchedulingStrategy = 'DEFAULT') History[source]#

Start a Ray-based Flower simulation server.

Parameters:
  • client_fn (ClientFn) – A function creating client instances. The function must take a single str argument called cid. It should return a single client instance of type Client. Note that the created client instances are ephemeral and will often be destroyed after a single method invocation. Since client instances are not long-lived, they should not attempt to carry state over method invocations. Any state required by the instance (model, dataset, hyperparameters, …) should be (re-)created in either the call to client_fn or the call to any of the client methods (e.g., load evaluation data in the evaluate method itself).

  • num_clients (Optional[int]) – The total number of clients in this simulation. This must be set if clients_ids is not set and vice-versa.

  • clients_ids (Optional[List[str]]) – List client_id`s for each client. This is only required if `num_clients is not set. Setting both num_clients and clients_ids with len(clients_ids) not equal to num_clients generates an error.

  • client_resources (Optional[Dict[str, float]] (default: {“num_cpus”: 1, “num_gpus”: 0.0})) – CPU and GPU resources for a single client. Supported keys are num_cpus and num_gpus. To understand the GPU utilization caused by num_gpus, as well as using custom resources, please consult the Ray documentation.

  • server (Optional[flwr.server.Server] (default: None).) – An implementation of the abstract base class flwr.server.Server. If no instance is provided, then start_server will create one.

  • config (ServerConfig (default: None).) – Currently supported values are num_rounds (int, default: 1) and round_timeout in seconds (float, default: None).

  • strategy (Optional[flwr.server.Strategy] (default: None)) – An implementation of the abstract base class flwr.server.Strategy. If no strategy is provided, then start_server will use flwr.server.strategy.FedAvg.

  • client_manager (Optional[flwr.server.ClientManager] (default: None)) – An implementation of the abstract base class flwr.server.ClientManager. If no implementation is provided, then start_simulation will use flwr.server.client_manager.SimpleClientManager.

  • ray_init_args (Optional[Dict[str, Any]] (default: None)) –

    Optional dictionary containing arguments for the call to ray.init. If ray_init_args is None (the default), Ray will be initialized with the following default args:

    { “ignore_reinit_error”: True, “include_dashboard”: False }

    An empty dictionary can be used (ray_init_args={}) to prevent any arguments from being passed to ray.init.

  • keep_initialised (Optional[bool] (default: False)) – Set to True to prevent ray.shutdown() in case ray.is_initialized()=True.

  • actor_type (VirtualClientEngineActor (default: ClientAppActor)) – Optionally specify the type of actor to use. The actor object, which persists throughout the simulation, will be the process in charge of executing a ClientApp wrapping input argument client_fn.

  • actor_kwargs (Optional[Dict[str, Any]] (default: None)) – If you want to create your own Actor classes, you might need to pass some input argument. You can use this dictionary for such purpose.

  • actor_scheduling (Optional[Union[str, NodeAffinitySchedulingStrategy]]) – (default: “DEFAULT”) Optional string (“DEFAULT” or “SPREAD”) for the VCE to choose in which node the actor is placed. If you are an advanced user needed more control you can use lower-level scheduling strategies to pin actors to specific compute nodes (e.g. via NodeAffinitySchedulingStrategy). Please note this is an advanced feature. For all details, please refer to the Ray documentation: https://docs.ray.io/en/latest/ray-core/scheduling/index.html

Returns:

hist – Object containing metrics from training.

Return type:

flwr.server.history.History