Skip to content

aggregate_server

AggregateServer(addr, strategy, num_clients, strategy_params={}, epochs=0)

The server processes the requests of all parties according to the usage policy.

Source code in iflearner/business/homo/aggregate_server.py
def __init__(
    self,
    addr: str,
    strategy: Union[str, StrategyServer],
    num_clients: int,
    strategy_params: Dict[str, Any] = {},
    epochs: int = 0,
) -> None:
    logger.add("log/server.log", backtrace=True, diagnose=True)
    logger.info(
        f"server address:  {addr}, strategy: {strategy}, client number: {num_clients}, epochs: {epochs}, strategy params: {strategy_params}"
    )

    if isinstance(strategy, str):
        if strategy == message_type.STRATEGY_FEDAVG:
            self._strategy_server = fedavg_server.FedavgServer(
                num_clients, epochs, False, **strategy_params
            )

        elif strategy == message_type.STRATEGY_SCAFFOLD:
            self._strategy_server = fedavg_server.FedavgServer(
                num_clients, epochs, True, **strategy_params
            )

        elif strategy == message_type.STRATEGY_FEDOPT:
            if strategy_params.get("opt") is None:
                raise Exception("expect 'opt' when you use fedopt sever")
            else:
                opt_type = strategy_params.pop("opt")
                module = import_module(
                    f"iflearner.business.homo.strategy.opt.{opt_type.lower()}"
                )
                opt_class = getattr(module, f"{opt_type}")
                opt = opt_class(**strategy_params)
                self._strategy_server = fedopt_server.FedoptServer(
                    num_clients,
                    epochs,
                    opt=opt,
                )  # type: ignore
                logger.info(
                    " ".join([f"{k}:{v}" for k, v in strategy_params.items()])
                )

        elif strategy == message_type.STRATEGY_qFEDAVG:
            self._strategy_server = qfedavg_server.qFedavgServer(
                num_clients, epochs, **strategy_params
            )  # type: ignore

        elif strategy == message_type.STRATEGY_FEDNOVA:
            self._strategy_server = fednova_server.FedNovaServer(
                num_clients, epochs, **strategy_params
            )  # type: ignore
    elif isinstance(strategy, StrategyServer):
        self._strategy_server = strategy  # type: ignore

    self._addr = addr

run()

start server

Source code in iflearner/business/homo/aggregate_server.py
def run(self) -> None:
    """start server"""

    homo_server_inst = homo_server.HomoServer(self._strategy_server)
    base_server.start_server(self._addr, homo_server_inst)