차분 개인정보 보호 사용

이 가이드에서는 Flower 프레임워크에서 차분 개인정보 보호 기능을 활용하는 방법을 설명합니다. 차분 개인정보 보호에 대해 아직 익숙하지 않은 경우 :doc:`explanation-differential-privacy`를 참조하세요.

경고

Flower의 차분 개인정보 보호는 현재 프리뷰 단계에 있습니다. 민감한 데이터가 있는 프로덕션 환경에서 이러한 기능을 사용할 계획이라면 언제든지 문의하여 요구 사항을 논의하고 이러한 기능을 가장 잘 사용하는 방법에 대한 안내를 받으세요.

중앙 차등 프라이버시

This approach consists of two separate phases: clipping of the updates and adding noise to the aggregated model. For the clipping phase, Flower framework has made it possible to decide whether to perform clipping on the server side or the client side.

  • Server-side Clipping: 이 방식은 서버가 모든 클라이언트의 업데이트에 대해 균일한 클리핑을 적용하고 클리핑 값에 대한 통신 오버헤드를 줄일 수 있다는 장점이 있습니다. 하지만 모든 클라이언트에 대해 클리핑 작업을 수행해야 하기 때문에 서버의 계산 부하가 증가한다는 단점도 있습니다.

  • Client-side Clipping: 이 방식은 서버의 계산 오버헤드를 줄일 수 있다는 장점이 있습니다. 하지만 서버가 클리핑 프로세스에 대한 통제력이 떨어지기 때문에 centralized 제어가 부족하다는 단점도 있습니다.

서버 측 클리핑

For central DP with server-side clipping, there are two Strategy classes that act as wrappers around the actual Strategy instance (for example, FedAvg). The two wrapper classes are DifferentialPrivacyServerSideFixedClipping and DifferentialPrivacyServerSideAdaptiveClipping for fixed and adaptive clipping.

서버 측 클리핑

The code sample below enables the FedAvg strategy to use server-side fixed clipping using the DifferentialPrivacyServerSideFixedClipping wrapper class. The same approach can be used with DifferentialPrivacyServerSideAdaptiveClipping by adjusting the corresponding input parameters.

from flwr.server.strategy import DifferentialPrivacyClientSideFixedClipping

# Create the strategy
strategy = fl.server.strategy.FedAvg(...)

# Wrap the strategy with the DifferentialPrivacyServerSideFixedClipping wrapper
dp_strategy = DifferentialPrivacyServerSideFixedClipping(
    strategy,
    cfg.noise_multiplier,
    cfg.clipping_norm,
    cfg.num_sampled_clients,
)

클라이언트 측 클리핑

For central DP with client-side clipping, the server sends the clipping value to selected clients on each round. Clients can use existing Flower Mods to perform the clipping. Two mods are available for fixed and adaptive client-side clipping: fixedclipping_mod and adaptiveclipping_mod with corresponding server-side wrappers DifferentialPrivacyClientSideFixedClipping and DifferentialPrivacyClientSideAdaptiveClipping.

클라이언트 측 클리핑

The code sample below enables the FedAvg strategy to use differential privacy with client-side fixed clipping using both the DifferentialPrivacyClientSideFixedClipping wrapper class and, on the client, fixedclipping_mod:

from flwr.server.strategy import DifferentialPrivacyClientSideFixedClipping

# Create the strategy
strategy = fl.server.strategy.FedAvg(...)

# Wrap the strategy with the DifferentialPrivacyClientSideFixedClipping wrapper
dp_strategy = DifferentialPrivacyClientSideFixedClipping(
    strategy,
    cfg.noise_multiplier,
    cfg.clipping_norm,
    cfg.num_sampled_clients,
)

In addition to the server-side strategy wrapper, the ClientApp needs to configure the matching fixedclipping_mod to perform the client-side clipping:

from flwr.client.mod import fixedclipping_mod

# Add fixedclipping_mod to the client-side mods
app = fl.client.ClientApp(
    client_fn=client_fn,
    mods=[
        fixedclipping_mod,
    ],
)

로컬 차등 프라이버시

로컬 차분 프라이버시(DP)를 활용하고 클라이언트 모델 파라미터를 서버로 전송하기 전에 노이즈를 추가하려면 `LocalDpMod`를 사용하면 됩니다. 클리핑 노멀 값, 감도, 엡실론, 델타 등의 하이퍼파라미터를 설정해야 합니다.

로컬 DP mod

Below is a code example that shows how to use LocalDpMod:

from flwr.client.mod.localdp_mod import LocalDpMod

# Create an instance of the mod with the required params
local_dp_obj = LocalDpMod(cfg.clipping_norm, cfg.sensitivity, cfg.epsilon, cfg.delta)
# Add local_dp_obj to the client-side mods

app = fl.client.ClientApp(
    client_fn=client_fn,
    mods=[local_dp_obj],
)

여러 개의 수정자를 사용할 때는 수정자, 특히 매개변수를 수정하는 수정자의 순서가 중요하다는 점에 유의하세요. 일반적으로 차분 프라이버시(DP) 수정자는 매개변수에서 가장 마지막에 작동해야 합니다.

Privacy Engines을 사용한 로컬 훈련

클라이언트 측에서 로컬 모델을 훈련하는 동안 데이터 인스턴스 수준의 개인 정보 보호를 보장하려면 Opacus 및 TensorFlow Privacy와 같은 개인 정보 보호 엔진을 활용하는 것을 고려하세요. 이러한 엔진과 함께 Flower를 사용하는 예제는 Flower examples directory (Opacus, Tensorflow Privacy)를 참조하세요.