Hugging Face와 Flower를 이용한 연합 학습

Hugging Face는 Flower 프레임워크를 통합하여 Transformer 모델에 대한 연합 학습(FL)을 구현하는 기술 가이드를 제공했습니다. 이 통합을 통해 원시 데이터를 공유할 필요 없이 여러 클라이언트에 걸쳐 사전 학습된 모델을 미세 조정할 수 있어 프라이버시와 데이터 보안이 강화됩니다.

Flower를 이용한 연합 학습 아키텍처

연합 학습은 여러 분산된 클라이언트와 중앙 서버가 협력하여 전역 모델을 학습하도록 합니다. 원시 데이터를 한 곳에 모으는 대신, 각 클라이언트는 자체 데이터로 로컬에서 모델을 학습하고 모델 파라미터만 서버에 전송합니다. 서버는 사전에 정의된 전략을 사용해 이러한 파라미터를 집계하여 전역 모델을 업데이트합니다.

제공된 구현에서는 다음 단계가 수행됩니다:

  1. 로컬 학습: 클라이언트가 자체 데이터셋을 사용해 로컬 학습을 수행합니다.
  2. 파라미터 교환: 클라이언트가 get_parameters 메서드를 통해 업데이트된 파라미터를 서버에 전송합니다.
  3. 전역 집계: 서버가 FedAvg(Federated Averaging)와 같은 전략을 사용해 모든 클라이언트의 파라미터를 평균 내어 전역 가중치를 정의합니다.
  4. 모델 배포: 서버가 set_parameters 메서드를 통해 업데이트된 전역 파라미터를 클라이언트에 다시 전달합니다.

기술 구현 세부 사항

모델 및 데이터셋

이 구현은 distilBERT(distilbert-base-uncased)를 기본 모델로 사용하며, Hugging Face의 AutoModelForSequenceClassification을 통해 이진 시퀀스 분류 작업에 로드합니다. 목표 작업은 IMDB 데이터셋에 대한 감성 분석이며, 모델은 영화 평점이 긍정적인지 부정적인지를 판별하도록 학습됩니다.

Hugging Face 워크플로우

표준 Hugging Face 파이프라인을 사용해 데이터 준비와 학습을 수행합니다:

  • 데이터 처리: datasets 라이브러리를 이용해 IMDB 데이터셋을 가져오고, AutoTokenizer로 토큰화한 뒤 PyTorch DataLoader 객체에 로드합니다.
  • 학습 루프: AdamW 옵티마이저를 사용해 표준 PyTorch 학습 루프를 구현합니다.
  • 평가: evaluate 라이브러리를 이용해 테스트 단계에서 정확도와 손실 메트릭을 계산합니다.

Flower 클라이언트(IMDBClient)

Hugging Face 모델을 Flower 프레임워크와 연결하기 위해 flwr.client.NumPyClient를 상속한 커스텀 클라이언트 클래스를 생성합니다. 이 클래스는 네 가지 핵심 메서드를 구현합니다:

  • get_parameters: 모델 파라미터를 NumPy 배열 형태로 추출해 서버에 전송합니다.
  • set_parameters: 서버로부터 받은 파라미터로 로컬 모델의 state dict를 업데이트합니다.
  • fit: 로컬 학습 함수(train)를 실행하고 업데이트된 파라미터와 사용된 샘플 수를 반환합니다.
  • evaluate: 로컬 테스트 함수(test)를 실행하고 손실 및 정확도 메트릭을 반환합니다.

서버 구성 및 집계

연합 프로세스를 조정하기 위해 Flower 서버를 특정 집계 전략과 함께 초기화합니다. 구현에서는 fl.server.strategy.FedAvg를 사용하며 fraction_fit=1.0fraction_evaluate=1.0으로 설정해 모든 클라이언트가 매 라운드마다 학습 및 평가에 참여하도록 합니다.

분산된 메트릭을 처리하기 위해 weighted_average 함수를 구현했습니다. 이 함수는 각 클라이언트가 제공한 샘플 수에 따라 메트릭에 가중치를 부여해 전역 정확도와 손실을 계산함으로써 대표적인 전역 성능 지표를 제공합니다.

프레임워크 호환성

예제는 PyTorch를 사용하지만, 가이드는 동일한 연합 학습 워크플로우를 TensorFlow로도 구현할 수 있다고 명시합니다. 또한 Flower의 시뮬레이션 기능(flwr['simulation'])을 활용하면 Google Colab과 같은 단일 환경 내에서 연합 환경을 에뮬레이션해 테스트할 수 있습니다.

Sources