Flower 1.0으로 업그레이드

참고

This guide is for users who have already worked with Flower 0.x and want to upgrade to Flower 1.0. Newer versions of Flower (1.13 and later) are based on a new architecture and not covered in this guide. After upgrading Flower 0.x projects to Flower 1.0, please refer to Upgrade to Flower 1.13 to make your project compatible with the lastest version of Flower.

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 채널을 이용하세요.