전략 사용하기#

Flower는 Strategy abstraction를 통해 학습 과정을 완전히 사용자 정의할 수 있습니다. 핵심 프레임워크에는 여러 가지 기본 제공 전략이 제공됩니다.

서버 측에서 Flower가 학습 과정을 조율하는 방식을 사용자 지정하는 방법에는 세 가지가 있습니다:

  • 기존 전략(예: FedAvg)을 사용합니다

  • 콜백 함수로 기존 전략 사용자 지정

  • 새로운 전략 구현

기존 전략 사용#

Flower에는 여러 가지 인기 있는 연합 학습 전략이 기본으로 제공됩니다. 기본 제공 전략은 다음과 같이 인스턴스화할 수 있습니다:

import flwr as fl

strategy = fl.server.strategy.FedAvg()
fl.server.start_server(config=fl.server.ServerConfig(num_rounds=3), strategy=strategy)

이렇게 하면 모든 매개변수가 기본값으로 유지된 전략이 생성되어 start_server 함수에 전달됩니다. 일반적으로 인스턴스화 중에 몇 가지 매개변수를 조정하는 것이 좋습니다:

import flwr as fl

strategy = fl.server.strategy.FedAvg(
    fraction_fit=0.1,  # Sample 10% of available clients for the next round
    min_fit_clients=10,  # Minimum number of clients to be sampled for the next round
    min_available_clients=80,  # Minimum number of clients that need to be connected to the server before a training round can start
)
fl.server.start_server(config=fl.server.ServerConfig(num_rounds=3), strategy=strategy)

콜백 함수로 기존 전략 사용자 지정#

기존 전략은 동작을 사용자 지정하는 여러 가지 방법을 제공합니다. 콜백 함수를 사용하면 전략이 실행 중에 사용자가 제공한 코드를 호출할 수 있습니다.

클라이언트 적합성 및 클라이언트 평가 구성#

서버는 매 라운드마다 새로운 설정 값을 클라이언트에 전달하기 위해 on_fit_config_fn`에 함수를 제공할 있습니다. 제공된 함수는 전략에 의해 호출되며 클라이언트에 전송될 구성 쌍의 dictionary를 반환해야 합니다. 연합 학습의 라운드 동안 임의의 구성 dictionary인 :code:`client.fitclient.evaluate 함수를 반환해야 합니다.

import flwr as fl

def get_on_fit_config_fn() -> Callable[[int], Dict[str, str]]:
    """Return a function which returns training configurations."""

    def fit_config(server_round: int) -> Dict[str, str]:
        """Return a configuration with static batch size and (local) epochs."""
        config = {
            "learning_rate": str(0.001),
            "batch_size": str(32),
        }
        return config

    return fit_config

strategy = fl.server.strategy.FedAvg(
    fraction_fit=0.1,
    min_fit_clients=10,
    min_available_clients=80,
    on_fit_config_fn=get_on_fit_config_fn(),
)
fl.server.start_server(config=fl.server.ServerConfig(num_rounds=3), strategy=strategy)

The on_fit_config_fn can be used to pass arbitrary configuration values from server to client, and potentially change these values each round, for example, to adjust the learning rate. The client will receive the dictionary returned by the on_fit_config_fn in its own client.fit() function.

:code:`on_fit_config_fn`과 유사하게, :code:`client.evaluate()`로 전송되는 구성을 사용자 지정하는 :code:`on_evaluate_config_fn`도 있습니다

서버 측 평가 구성#

서버 측 평가는 :code:`evaluate_fn`에 평가 함수를 전달하여 활성화할 수 있습니다.

새로운 전략 구현#

완전한 사용자 지정 전략을 작성하는 것은 조금 더 복잡하지만 유연성이 가장 뛰어납니다. 자세한 내용은 Implementing Strategies 가이드를 참조하세요.