nvflare.edge.assessors.buff_device_manager module

class BuffDeviceManager(device_selection_size: int, initial_min_client_num: int = 1, min_hole_to_fill: int = 1, device_reuse: bool = True, device_sampling_strategy: str = 'balanced')[source]

Bases: DeviceManager

Initialize the BuffDeviceManager. BuffDeviceManager is responsible for managing the selection of devices for model training. It maintains a list of available devices, tracks the current selection, and refills the selection as needed. The device_selection_size determines how many “concurrent” devices can be selected for the training session. The min_hole_to_fill determines how many empty slots should be created before refilling.

  • An empty slot is created when any device reports its update back.

  • To fill a slot, a new device is selected from the available device pool.

The device_reuse flag indicates whether devices can be reused across different model versions, if False, we will always select new devices when filling holes. :param device_selection_size: Number of devices to select for each model update round. :type device_selection_size: int :param initial_min_client_num: Minimum number of clients to have at the beginning. This can be useful for initial model dispatch. :type initial_min_client_num: int :param min_hole_to_fill: Minimum number of empty slots in device selection before refilling. Defaults to 1 - once received an update, immediately sample a new device and send the current task to it. :type min_hole_to_fill: int :param device_reuse: Whether to allow reusing devices across different model versions. Defaults to True. :type device_reuse: bool :param device_sampling_strategy: Strategy for sampling devices when filling selection. Defaults to “balanced”.

  • “balanced”: try to balance the usage of devices across clients.

  • “random”: randomly select devices from the available pool.

fill_selection(current_model_version: int, fl_ctx) None[source]

Fill the device selection sampled from available devices. update self.current_selection

Parameters:
  • current_model_version (int) – Current version of the model

  • fl_ctx – FLContext object

  • Returns – none

get_active_model_versions(fl_ctx) Set[int][source]

Get the active model versions that is associated with the current selection.

Parameters:

fl_ctx – FLContext object

Returns:

Set of active model versions

has_enough_devices_and_clients(fl_ctx) bool[source]

Check if there are enough devices and clients available to start task distribution.

Parameters:

fl_ctx – FLContext object

Returns:

True if there are enough devices and clients to start task distribution, False otherwise

Return type:

bool

remove_devices_from_selection(devices: Set[str], fl_ctx) None[source]

Remove devices from the current selection. update self.current_selection

Parameters:
  • devices – Set of devices to remove

  • fl_ctx – FLContext object

  • Returns – none

remove_devices_from_used(devices: Set[str], fl_ctx) None[source]

Remove devices from the used device set. update self.used_devices

Parameters:
  • devices – Set of devices to remove

  • fl_ctx – FLContext object

  • Returns – none

should_fill_selection(fl_ctx) bool[source]

Determine if it is time to fill the device selection.

Parameters:

fl_ctx – FLContext object

Returns:

True if it’s time to fill the selection, False otherwise

Return type:

bool

update_available_devices(devices: Dict, fl_ctx) None[source]

Update the list of available devices. modify self.available_devices with devices input

Parameters:
  • devices (Dict) – Dictionary of available devices to add

  • fl_ctx – FLContext object

  • Returns – none