본문 바로가기

데이터사이언스/federated learning

연합학습 library FederatedScope의 Event-driven Architecture

https://federatedscope.io/docs/event-driven-architecture/

 

Event-driven Architecture

The event-driven architecture used in FederatedScope.

federatedscope.io

FederatedScope 공식 문서를 바탕으로 작성된 글이다.

 

 

FedScope의 설계 철학인 Event-driven Architecture는 널리 채택된 sequential 프로세스와는 다르게 customizing에 이점을 가진다. 또한 풍부한 기능적 구성요소를 사용해 사용자의 구현을 도울 수 있고, 편리하게 멋진 기능을 확장할 수도 있다. 먼저 연합학습 과정을 이벤트-핸들러 쌍으로 보는 관점을 설명하고, 왜 이런 설계가 FedScope를 사용하기 쉽고 유연하게 만드는지 알아보자.

 

1. 이벤트-핸들러

 FedScope는 Event-driven Architecture로 구현되었다. 이는 분산 시스템에서 널리 사용되고 있으며, 최근에는 연합 학습에도 적용되고 있다. Event-driven Architecture 관점으로, 연합학습 과정은 이벤트-핸들러 쌍으로 구성될 수 있다. Client는 특정 이벤트(ex: 모델의 파라미터가 클라이언트에 브로드캐스트)가 해당 핸들러(예: 로컬 데이터로 모델 학습)를 작동시키기를 기다린다. 따라서 사용는 서버와 client의 동작을 글로벌 관점에서 순차적으로 표현하는 것이 아니라, 각각의 관점에서 독립적으로 표현할 수 있다. 그 결과 사용자가 연합학습 알고리즘을 구현하기 쉬워진다.

 

 구체적으로 FedScope의 이벤트는 두 가지 클래스로 분류할 수 있다. 하나는 메시지 전달(예:서버나 client로부터 정보 또는 요청 수신), 다른 하나는 학습을 위한 특정 조건(예: 비동기 머신 러닝 알고리즘의 타임아웃)이다. 이 두 가지 유형의 이벤트는 비동기 연합 훈련을 설명할 수 있는 충분한 표현력을 FedScope에 제공한다.

 

 FedScope는 연합학습 프로세스를 구현하기 위한 두 가지 기본 모듈, 즉 Worker, Communication 모듈로 구성된다.

 

 2. Worker 모듈


 Worker 모듈은 FL 과정에서 서버와 Client의 동작을 설명하는 데 사용된다.

 서버와 클라이언트의 동작을 연합 동작과 학습 동작으로 분류한다. 연합 동작에는 client가 서버에 참가 요청을 보내고 서버가 새로운 훈련 라운드를 시작하기 위해 모델 파라미터를 클라이언트에게 브로드캐스트하는 등 참여자 간의 다양한 메시지 교환이 포함된다. 학습 동작은 주로 클라이언트가 데이터를 기반으로 로컬 훈련을 수행하고, 서버가 클라이언트의 피드백(예: 업데이트된 모델)을 취합하여 글로벌 모델을 생성하는 등 모델을 업데이트하는 작업을 나타낸다.

 Worker 모듈은 다음과 같은 attribute를 가진다.

  •  ID: 작업자의 ID는 구분을 위해 전체 과정에서 unique하다. 기본적으로 서버에는 0을 할당하고 학습에 참여한 순서에 따라 client에 번호를 부여한다.
  • 데이터 및 모델: 각 작업자는 데이터 및 모델을 로컬에 보관한다. 연합학습 설정에 따라 데이터는 Worker 개인 공간에 저장되며 직접 공유되지 않는다. Client는 일반적으로 학습 dataset을 가지고, 로컬 테스트 dataset을 보유할 수 있으며, 서버는 글로벌 평가를 위한 dataset을 보유할 수 있다.
  • Communicator: 각 Worker는 메시지 교환을 위해 Communicator객체를 가진다. Communicator는 통신 백엔드의 낮은 수준의 세부 사항을 숨기고 작업자에게 송수신과 같은 높은 수준의 인터페이스만 노출한다.
  • Trainer/Aggregator: 학습 동작을 캡슐화하며, 데이터 및 모델에 액세스하고, 이를 업데이트할 수 있는 권한을 가진다. Trainer/Aggregator는 손실 함수, optimizer, aggregation 알고리즘과 같은 학습 세부 정보를 관리힌다. client/서버는 학습 세부 사항에 신경 쓰지 않고 높은 수준의 인터페이스(예: 학습, 평가, aggregation)만 호출하면 된다. 이러한 방식으로 학습 동작과 Worker의 연합된 동작을 분리다.

 위 attribute를 기반으로 사용자는 서버와 client의 동작을 편리하게 표현할 수 있다. 예를 들어, 사용자는 연합된 동작과 모델 아키텍처에 신경 쓰지 않고 Aggregator의 알고리즘을 커스터마이징할 수 있다.

 

Worker는 다음과 같은 상속 구조를 가진다. 

Worker # Abstract class for both client and server
├── BaseClient # Abstract class for client
│   ├── Client # An implemented client with BaseClient
│   │   ├── XXXClient # Client for a specific algorithm with minor modifications
│   │   ├── ... ...
├── BaseServer # Abstract class for server
│   ├── Server # An implemented server with BaseServer
│   │   ├── XXXServer # Server for a specific algorithm with minor modifications
│   │   ├── ... ...

 

 BaseClient를 상속받아서 완전히 새로운 클라이언트를 구현할 수 있고, 약간의 수정을 위해서는 하위 클래스인 Client를 상속받아서 새로운 클라이언트를 구현할 수 있다. 서버도 마찬가지이다.

 

 

3. Communication 모듈


연합학습 과정에서는 모델 매개변수, gradient, 종료 신호 등 다양한 유형의 정보를 참가자 간에 교환해야 한다.FedScope에서는 서버와 클라이언트 간에 교환되는 모든 정보를 메시지로 추상화한다.

 메시지는 FedScope에서 학습 과정을 설명하는 핵심 요소다. 메시지는 유형, 발신자, 수신자 및 내용물을 포함하도록 설계됐다. 사용자는 다양한 유형의 메시지,  메시지 handling funtion을 정의할 수 있다. 기본적인 연합학습에서 서버와 클라이언트는 훈련 과정에서 모델 파라미터를 교환하는 반면, 그래프 연합 학습의 경우 노드 임베딩, 인접 텐서를 참가자들 간에 공유하기도 한다. 

 또한 참가자들이 서로 메시지를 주고받을 때 사용하는 communicator는 서버와 클라이언트가 보는 블랙박스라고 할 수 있다.  communicator에서는 백엔드의 low level 구현을 숨겨 높은 수준의 인터페이스만 노출된다.

 

 FedScope에서는 독립형 모드를 위한 시뮬레이션 communicator, 분산 모드를 위한 gRPC 커뮤니케이터를 지원한다. 사용자는 도입 환경에 따라 다양한 프로토콜을 기반으로 더 많은 커뮤니케이터를 구현할 수 있다.

 

4. 구현

FedScope에서 연합학습은 메시지를 전달하는 여러 라운드로 구성된다. 일반적으로 사용자는 학습 과정에서 교환되는 메시지 유형을 추상화 해야한다. 그리고 서버와 client의 동작을 다양한 유형의 메시지를 처리하는 handling functions으로 변환해야 한다.

다음에서는 연합학습 과정을 구성하는 방법과 customize하는 방법을 더 잘 보여주기 위해 두 가지 예제를 소개한다.

Vanila FL

메시지 전달의 관점에서 본 기본적인 연합학습 과정

 만약 절차적 프로그래밍 방법을 사용한다면, 참가자들을 신중하게 조율해야 한다. 예를 들어, client가 서버에 참가 신청서를 보낸 다음 서버가 이러한 신청서를 수신하고 모델을 브로드 캐스트 한 후 ... 개발자가 FL 과정을 구현하기에는 너무 복잡해질 수 있다.

 반면에 FedScope를 사용하여 프로그래밍하는 경우, 교환되는 메시지 유형과 해당 핸들러를 추상화해야 한다: 서버는 두 가지 유형의 메시지를 처리해야한다. 1) 새 client를 학습에 참여하도록 허용,  2)aggregation을 위해 업데이트된 모델 처리client의 경우 로컬 데이터로 모델을 학습하고, 서버에서 모델을 수신할 때 업데이트된 모델을 반환한다. 마지막으로, 인스턴스화된 클라이언트가 서버에 학습을 참여한다고 알리면  연합학습이 시작될 수 있다.

 

 

customization

heterogeneous 메시지가 교환 및 처리되는 연합학습 customization

 Vanila FL과 달리, 여기서는 왼쪽 그림처럼 client가  라운드 도중에 중간 결과를 교환해야 한다. 이를 위해 절차적 프로그래밍 패러다임을 사용하는 개발자는 전체 FL 과정을 순차적으로 설명하고, 신중하게 배치한 후 새로운 동작을 절차에 추가해야 한다. 반면 FedScope에서는 client의 model을 받았을 때 handler에서 중간에 모델을 보내는 행동을 추가하고, 중간 결과를 받았을 경우의 handler를 정의해주기만 하면 된다.

 또한 FedScope는 독립형 모드와 분산 모드 모두에 대한 통합 보기를 제공하여 사용자가 시뮬레이션에서 배포로 쉽게 변경할 수 있도록 지원한다.