Flower 1.0으로 업그레이드

Flower 1.0이 출시되었습니다. 새로운 기능과 함께 Flower 1.0은 향후 성장을 위한 안정적인 기반을 제공합니다. Flower 0.19(및 다른 0.x 시리즈 릴리스)와 비교했을 때 기존 0.x 시리즈 프로젝트의 코드를 변경해야 하는 몇 가지 획기적인 변경 사항이 있습니다.

업데이트 설치

다음은 pip 또는 Poetry를 사용하여 기존 설치를 Flower 1.0으로 업데이트하는 방법입니다:

  • pip: 설치할 때 ``-U``를 추가합니다.

    • python -m pip install -U flwr``(``start_server``start_client``를 사용하는 경우)

    • python -m pip install -U 'flwr[simulation]'``(``start_simulation 사용 시)

  • Poetry: pyproject.toml``에서 ``flwr dependency을 업데이트한 다음 다시 설치하세요(``poetry 설치``를 실행하기 전에 ``rm poetry.lock``을 통해 ``poetry.lock``을 삭제하는 것을 잊지 마세요).

    • flwr = "^1.0.0"``(``start_serverstart_client 사용 시)

    • flwr = { version = "^1.0.0", extras = ["simulation"] } (start_simulation 사용 시)

필수 변경 사항

다음과 같은 주요 변경 사항에는 수동 업데이트가 필요합니다.

일반

모든 전달인자를 위치 전달인자가 아닌 키워드 전달인자로 전달합니다. 다음은 예시입니다:

  • Flower 0.19 (위치 전달인자): start_client("127.0.0.1:8080", FlowerClient())

  • Flower 1.0 (키워드 전달인자): start_client(server_address="127.0.0.1:8080", client=FlowerClient())

클라이언트

  • ``NumPyClient``의 서브클래스: ``def get_parameters(self):````def get_parameters(self, config):``로 변경합니다

  • ``클라이언트``의 서브클래스: ``def get_parameters(self):````def get_parameters(self, ins: GetParametersIns):``로 변경합니다

전략 / start_server / start_simulation

  • Dictionary 대신 ServerConfig``를 ``start_server``start_simulation``에 전달합니다. 다음은 예제입니다:

    • Flower 0.19: start_server(..., config={"num_rounds": 3, "round_timeout": 600.0}, ...)

    • Flower 1.0: start_server(..., config=flwr.server.ServerConfig(num_rounds=3, round_timeout=600.0), ...)

  • ``start_simulation``의 ``num_rounds=1``을 새로운 ``config=ServerConfig(…)``로 바꿉니다(이전 항목 참조)

  • ‘start_server`` 호출에서 force_final_distributed_eval 매개변수를 제거합니다. 모든 클라이언트에 대한 분산 평가는 마지막 훈련 라운드 후 평가를 위해 모든 클라이언트를 샘플링하도록 전략을 구성하여 활성화할 수 있습니다.

  • 매개변수/ndarray 변환 함수의 이름을 바꿉니다:

    • parameters_to_weights –> parameters_to_ndarrays

    • weights_to_parameters –> ndarrays_to_parameters

  • 전략 초기화: 전략이 fraction_fitfraction_evaluate``의 기본값에 의존하는 경우 ``fraction_fitfraction_evaluate``를 ``0.1``로 수동 설정합니다. 전략을 수동으로 생성하지 않는 프로젝트(전략 인스턴스를 전달하지 않고 ``start_server 또는 start_simulation``을 호출하여)는 이제 ``fraction_fit``fraction_evaluate``를 ``0.1``로 설정하여 FedAvg를 수동으로 초기화해야 합니다.

  • 기본 제공 전략 매개변수의 이름을 바꿉니다(예: FedAvg):

    • fraction_eval –> fraction_evaluate

    • min_eval_clients –> min_evaluate_clients

    • eval_fn –> evaluate_fn

  • rnd``의 이름을 ``server_round``로 바꿉니다. 이는 여러 메서드 함수(예: ``configure_fit, aggregate_fit, configure_evaluate, aggregate_evaluateevaluate_fn)에 영향을 미칩니다.

  • server_round``config``를 ``evaluate_fn``에 추가합니다:

    • Flower 0.19: def evaluate(parameters: NDArrays) -> Optional[Tuple[float, Dict[str, Scalar]]]:

    • Flower 1.0: def evaluate(server_round: int, parameters: NDArrays, config: Dict[str, Scalar]) -> Optional[Tuple[float, Dict[str, Scalar]]]:

사용자 정의 전략

  • 매개변수 failures``의 유형이 ``List[BaseException]``에서 ``List[Union[Tuple[ClientProxy], FitRes], BaseException]]``(``aggregate_fit``에서) ``List[Union[Tuple[ClientProxy], EvaluateRes], BaseException]]``(``aggregate_evaluate)로 변경되었습니다

  • 이제 Strategy 메서드 ``evaluate``는 현재 federated 학습/평가 라운드를 첫 번째 파라미터로 받습니다:

    • Flower 0.19: def evaluate(self, parameters: Parameters) -> Optional[Tuple[float, Dict[str, Scalar]]]:

    • Flower 1.0: def evaluate(self, server_round: int, parameters: Parameters) -> Optional[Tuple[float, Dict[str, Scalar]]]:

선택적 개선 사항

위의 필수 변경 사항과 함께 방금 가능한 여러 가지 잠재적 개선 사항이 있습니다:

  • Client 또는 ``NumPyClient``의 서브 클래스에서 “placeholder” 메서드를 제거합니다. 예를 들어 서버 측 평가를 사용하는 경우 ``evaluate``의 빈 자리 표시자 구현은 더 이상 필요하지 않습니다.

  • start_simulation``을 통해 라운드 타임아웃을 구성합니다: ``start_simulation(..., config=flwr.server.ServerConfig(num_rounds=3, round_timeout=600.0), ...)

추가 도움말

대부분의 공식 Flower code 예제 <https://github.com/adap/flower/tree/main/examples>`_는 이미 Flower 1.0으로 업데이트되어 있으며, Flower 1.0 API를 사용하기 위한 참고 자료로 사용할 있습니다. 궁금한 점이 있다면 ``플라워 슬랙 <https://flower.ai/join-slack/>`_에 가입하여 ``#questions 채널을 이용하세요.