Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tensorflow
GitHub Repository: tensorflow/docs-l10n
Path: blob/master/site/ko/federated/federated_core.md
38958 views

페더레읎션된 윔얎

읎 묞서는 Federated Learning(페더레읎션 학습)의 토대가 되는 믞래 TFF의 윔얎 레읎얎와 믞래의 비 학습 페더레읎션 알고늬슘을 소개합니닀.

Federated Core에 대한 간닚한 소개륌 위핎 닀음 튜토늬얌륌 읜얎 볎섞요. Ʞ볞 개념 쀑 음부륌 예제로 소개하고 간닚한 페더레읎션 평균화 알고늬슘의 구성을 닚계별로 볎여쀍니닀.

또한, 페더레읎션 학습에 Federated Core API(FC API)륌 사용하멎 읎 레읎얎륌 섀계할 때 선택한 음부 사항에 대한 쀑요한 맥띜을 읎핎할 수 있윌므로 페더레읎션 학습곌 읎믞지 분류 및 텍슀튞 생성에 ꎀ한 ꎀ렚 튜토늬얌에 익숙핎지Ʞ륌 권장합니닀.

개요

목표, 의도된 용도 및 범위

Federated Core(FC)는 분산 계산을 구현하Ʞ 위한 프로귞래밍 환겜, 슉 각각 쀑요한 처늬륌 로컬에서 수행하고 넀튞워크륌 통핎 통신하여 작업을 조정하는 여러 컎퓚터(휮대 전화, 태랔늿, 낎장 êž°êž°, 데슀크톱 컎퓚터, 섌서, 데읎터베읎슀 서버 등)륌 포핚하는 계산 환겜윌로 읎핎할 수 있습니닀.

분산읎띌는 용얎는 맀우 음반적읎며, TFF는 가능한 몚든 유형의 분산 알고늬슘을 대상윌로 하지 않윌므로 읎 프레임워크에서 표현할 수 있는 알고늬슘의 유형을 섀명하Ʞ 위핎 덜 음반적읞 용얎읞 *페더레읎션 계산(federated computation)*을 사용하Ꞟ 선혞합니닀.

완전히 공식적읞 방식윌로 페더레읎션 계산읎띌는 용얎륌 정의하는 것은 읎 묞서의 범위륌 벗얎나지만, 새로욎 분산 학습 알고늬슘을 섀명하는 연구 간행묌에서 의사 윔드로 표현될 수 있는 알고늬슘 유형윌로 생각할 수 있습니닀.

FC의 목표는 nusthell에서, 대상 닀양한 환겜에서 싀행의 닀소 유사 컎팩튞 한 의사없는 프로귞랚 로직의 추상화 유사한 의사와 같은 수쀀에서 표현하지만륌 활성화하는 것입니닀.

FC가 표현하는 알고늬슘 종류의 특징을 정의하는 핵심은 시슀템 찞가자듀의 행동읎 집합적윌로 섀명된닀는 것입니닀. 따띌서 데읎터륌 로컬로 변환하는 각 ꞰꞰ와 결곌륌 람로드캐슀팅하고 수집하거나 집계하는 쀑앙 집쀑식 윔디넀읎터륌 통핎 작업을 조정하는 ꞰꞰ에 대핮 읎알Ʞ하는 겜향읎 있습니닀.

TFF는 닚순한 큎띌읎얞튞-서버 아킀텍처륌 뛰얎넘을 수 있도록 섀계되었지만, 음ꎄ 처늬(collective processing)의 개념은 Ʞ볞입니닀. 읎는 페더레읎션 학습에서의 TFF의 Ʞ원읎 큎띌읎얞튞 ꞰꞰ의 제얎 아래 유지되고 개읞 정볎 볎혞륌 위핎 쀑앙 위치로 간닚히 닀욎로드할 수 없는 잠재적윌로 쀑요한 데읎터에 대한 계산을 지원하도록 처음부터 섀계된 Ʞ술에 있Ʞ 때묞입니닀. 읎러한 시슀템에서 각 큎띌읎얞튞는 시슀템의 결곌(몚든 찞가자에게 음반적윌로 가치가 있는 결곌)륌 계산하는 데 데읎터 및 처늬 능력을 제공하지만, 각 큎띌읎얞튞의 개읞 정볎 및 익명성을 유지하Ʞ 위핎 녞력합니닀.

따띌서 분산 컎퓚팅을 위한 대부분의 프레임워크는 개별 찞가자의 ꎀ점, 슉 개별 지점 간 메시지 교환 수쀀에서 수신 및 발신 메시지륌 통한 찞가자의 로컬 상태 전환의 상혞 의졎성 ꎀ점에서 처늬륌 표현하도록 섀계된 반멎, TFF의 Federated Core는 전역 시슀템 찚원의 ꎀ점에서 시슀템의 동작을 섀명하도록 섀계되었습니닀(예륌 듀얎, MapReduce와 유사).

따띌서 음반적읞 용도의 분산 프레임워크는 구성 요소로서 볎낎Ʞ 및 받Ʞ와 같은 연산을 제공할 수 있지만, FC는 간닚한 분산 프로토윜을 캡슐화하는 tff.federated_sum, tff.federated_reduce 또는 tff.federated_broadcast와 같은 구성 요소륌 제공합니닀.

ì–žì–Ž

Python 읞터페읎슀

TFF 페더레읎션 계산을 표현하Ʞ 위핎 낎부 얞얎륌 사용하며, 얞얎의 구묞은 computation.proto에서 직렬화 표현에 의핎 정의됩니닀. FC API 사용자는 음반적윌로 읎 얞얎와 직접 상혞 작용할 필요가 없습니닀. 귞볎닀는 계산을 정의하는 방법윌로 얞얎륌 래핑하는 Python API(tff 넀임슀페읎슀)륌 제공합니닀.

특히, TFF는 tff.federated_computation곌 같은 Python 핚수 데윔레읎터륌 제공하여 데윔레읎팅된 핚수의 볞묞을 추적하고 TFF의 얞얎로 페더레읎션 계산 녌늬의 직렬화된 표현을 생성합니닀. tff.federated_computation윌로 데윔레읎팅된 핚수는 읎러한 직렬화된 표현의 캐늬얎 역할을 하며, 캐늬얎륌 닀륞 계산 볞묞에 구성 요소로 포핚하거나 혞출될 때 요청 시 싀행할 수 있습니닀.

여Ʞ에 한 가지 예제가 있습니닀. 더 많은 예제는 사용자 정의 알고늬슘 튜토늬얌에서 찟을 수 있습니닀.

@tff.federated_computation(tff.type_at_clients(tf.float32)) def get_average_temperature(sensor_readings): return tff.federated_mean(sensor_readings)

슉시 몚드가 아닌 TensorFlow에 익숙한 독자는 TensorFlow 귞래프륌 정의하는 Python 윔드 섹션에서 tf.add 또는 tf.reduce_sum곌 같은 핚수륌 사용하는 Python 윔드륌 작성하는 것곌 유사하닀는 것을 알게 될 것입니닀. 윔드는 Python윌로 Ʞ술적윌로 표현되었지만, ê·ž 아래에 tf.Graph의 직렬화 표현을 구성하는 것읎 목적읎며, TensorFlow 런타임에 의핎 낎부적윌로 싀행되는 것은 Python 윔드가 아닌 귞래프입니닀. 마찬가지로, tff.federated_mean을 get_average_temperature로 표시되는 페더레읎션 계산에 federated op륌 삜입하는 것윌로 생각할 수 있습니닀.

FC에서 얞얎륌 정의하는 읎유 쀑 음부는 위에서 얞꞉했듯읎 페더레읎션 계산읎 분산 집닚 동작을 지정하므로 동작의 녌늬가 로컬읎 아니띌는 사싀곌 ꎀ렚읎 있습니닀. 예륌 듀얎, TFF는 넀튞워크의 닀륞 위치에 졎재할 수 있는 연산자, 입력 및 출력을 제공합니닀.

따띌서 분산성의 개념을 포착하는 얞얎와 유형 시슀템읎 필요합니닀.

유형 시슀템

Federated Core는 닀음 유형의 범죌륌 제공합니닀. 읎듀 유형을 섀명할 때 펞늬한 유형읎나 계산 및 연산자의 유형을 섀명하는 간닚한 표Ʞ법을 소개할 뿐만 아니띌 유형 생성자륌 안낎합니닀.

첫짞, Ʞ졎 죌류 얞얎에서 볌 수 있는 유형곌 개념적윌로 유사한 유형의 범죌는 닀음곌 같습니닀.

  • 텐서 유형(tff.TensorType): TensorFlow에서와 마찬가지로 dtype곌 shape읎 있습니닀. 유음한 찚읎점은 읎 유형의 객첎는 TensorFlow 귞래프에서 TensorFlow ops의 출력을 나타낮는 Python의 tf.Tensor 읞슀턎슀로 제한되지 않윌며, 예륌 듀얎 분산 집계 프로토윜의 출력윌로 생성될 수 있는 데읎터의 닚위륌 포핚할 수 있닀는 것입니닀. 따띌서 TFF 텐서 유형은 닚순히 Python 또는 TensorFlow에서 핎당 유형의 구첎적읞 묌늬적 표현의 추상 버전입니닀.

    TFF의 TensorTypes는 TensorFlow볎닀 형상(shape)의 (정적) 처늬가 더 엄격할 수 있습니닀. 예륌 듀얎, TFF의 유형 시슀템은 순위륌 알 수 없는 텐서륌 동음한 dtype의 닀륞 텐서로부터 할당할 수 있는 대상윌로 췚꞉합니닀. 하지만 읎는 순위가 고정된 텐서에는 할당할 수 없습니닀. 읎 처늬는 TFF가 유횚한 것윌로 받아듀읎는 계산읎 더 엄격핎지는 대가로 특정 런타임 였류(예: 순위륌 알 수 없는 텐서륌 잘못된 수의 요소가 있는 형상윌로 변겜하렀는 시도)륌 방지합니닀.

    텐서 유형의 간닚한 표Ʞ법은 dtype 또는 dtype[shape]입니닀. 예륌 듀얎, int32 및 int32[10]은 각각 정수 및 int 벡터의 유형입니닀.

  • 시퀀슀 유형(tff.SequenceType): TensorFlow에서 tf.data.Dataset의 구첎적 개념에 핎당하는 TFF의 추상화입니닀. 시퀀슀의 요소는 순찚적읞 방식윌로 소비될 수 있윌며 복잡한 유형을 포핚할 수 있습니닀.

    시퀀슀 유형의 간닚한 표현은 T*읎며, T는 요소의 유형입니닀. 예륌 듀얎, int32*는 정수 시퀀슀륌 나타냅니닀.

  • 명명된 튜플 유형(tff.StructType): 읎늄읎 있거나 읎늄읎 지정되지 않은, 사전 정의된 수의 특정 유형의 요소륌 갖는 튜플 및 사전곌 유사한 구조륌 구성하는 TFF의 방법입니닀. 쀑요한 것은 TFF의 명명된 튜플 개념은 Python의 읞수 튜플곌 같은 추상 요소, 슉 전부는 아니지만 음부는 읎늄읎 지정되고, 음부는 위치와 ꎀ렚된 요소의 몚음을 포핚합니닀.

    명명된 튜플의 간닚한 표Ʞ법은 <n_1=T_1, ..., n_k=T_k>입니닀. n_k는 선택적 요소 읎늄읎고, T_k는 요소 유형입니닀. 예륌 듀얎, <int32,int32>는 명명되지 않은 정수 쌍에 대한 간닚한 표Ʞ법읎고, <X=float32,Y=float32>는 평멎의 점을 나타낌 수 있는 X와 Y띌는 읎늄의 부동 소수점 쌍에 대한 간닚한 표Ʞ법입니닀. 튜플은 쀑첩될 수 있고 닀륞 유형곌 혌합될 수 있습니닀. 예륌 듀얎, <X=float32,Y=float32>*는 음렚의 점에 대한 간닚한 표Ʞ법입니닀.

  • 핚수 유형(tff.FunctionType): TFF는 핚수가 음꞉ 값윌로 췚꞉되는 핚수형 프로귞래밍 프레임워크입니닀. 핚수는 최대 하나의 읞수와 정확히 하나의 결곌륌 갖습니닀.

    핚수의 간결한 표Ʞ법은 (T -> U)입니닀. T는 읞수의 유형읎고, U는 결곌의 유형읎거나 읞수가 없는 겜우(읞수 없는 핚수는 죌로 Phython 레벚에서만 졎재하는 쀑복 제거 개념읎지만), ( -> U)입니닀. 예륌 듀얎, (int32* -> int32)는 정수 시퀀슀륌 닚음 정수 값윌로 쀄읎는 핚수 유형에 대한 표Ʞ법입니닀.

닀음 유형은 TFF 계산의 분산 시슀템 잡멎을 핎결합니닀. 읎러한 개념은 닀소 TFF에 고유하므로 추가 죌석 및 예제는 사용자 정의 알고늬슘 튜토늬얌을 찞조하섞요.

  • 배치 유형: 읎 유형은 읎 유형의 상수로 생각할 수 있는 2개의 늬터럎 tff.SERVER 및 tff.CLIENTS 형식 읎왞의 공용 API에 아직 녞출되지 않은 유형입니닀. 낎부적윌로 사용되지만, 향후 늎늬슀에서는 공개 API에 도입될 예정입니닀. 읎 유형의 간닚한 표현은 placement입니닀.

    배치는 특정 역할을 수행하는 음렚의 시슀템 찞가자륌 나타냅니닀. 쎈Ʞ 늎늬슀는 큎띌읎얞튞 및 서버의 두 귞룹윌로 구성된 큎띌읎얞튞-서버 계산을 대상윌로 합니닀(후자는 싱Ꞁ톀 귞룹윌로 생각할 수 있음). 귞러나 볎닀 정교한 아킀텍처에서는 닀쀑 계잵 시슀템의 쀑간 집계Ʞ와 같읎 닀륞 유형의 집계륌 수행하거나 서버 또는 큎띌읎얞튞에서 사용하는 유형곌 닀륞 유형의 데읎터 압축/압축 핎제륌 사용하는 닀륞 역할읎 있을 수 있습니닀.

    배치의 개념을 정의하는 Ʞ볞 목적은 페더레읎션 유형을 정의하Ʞ 위한 Ʞ쎈입니닀.

  • 페더레읎션 유형(tff.FederatedType): 페더레읎션 유형의 값은 특정 배치(예: tff.SERVER 또는 tff.CLIENTS)에서 정의된 시슀템 찞가자 귞룹읎 혞슀팅하는 값입니닀. 페더레읎션 유형은 배치 값(슉, 종속 유형), 멀버 구성 요소의 유형(각 찞가자가 로컬에서 혞슀팅하는 윘텐잠의 종류) 및 몚든 찞가자가 로컬로 같은 항목을 혞슀팅하고 있는지륌 지정하는 추가 비튞 all_equal에 의핎 정의됩니닀.

    귞룹(배치) G가 각각 혞슀팅하는 유형 T의 항목(멀버 구성 요소)을 포핚하는 페더레읎션 유형의 값에 대한 간닚한 표Ʞ법은 각각 all_equal 비튞가 섀정되었거나 섀정되지 않은 T@G 또는 {T}@G입니닀.

    예륌 듀멎, 닀음곌 같습니닀.

    • {int32}@CLIENTS는 큎띌읎얞튞 ꞰꞰ당 하나씩 잠재적윌로 닀륞 정수 섞튞로 구성된 페더레읎션 값을 나타냅니닀. 넀튞워크의 여러 위치에 나타나는 여러 데읎터 항목을 포핚하는 닚음 페더레읎션 값에 대핮 읎알Ʞ하고 있습니닀. "넀튞워크" 찚원을 가진 음종의 텐서(tensor)로 생각할 수 있지만, TFF에서 페더레읎션 값의 멀버 구성 요소에 대한 임의 액섞슀륌 허용하지 않는닀는 점에서 읎 비유는 완벜하지 않습니닀.

    • {<X=float32,Y=float32>*}@CLIENTS는 페더레읎션 데읎터섞튞륌 나타낎며, 큎띌읎얞튞 ꞰꞰ당 하나의 시퀀슀읞 여러 XY 좌표 시퀀슀로 구성된 값입니닀.

    • <weights=float32[10,5],bias=float32[5]>@SERVER는 서버에서 가쀑치 및 바읎얎슀 텐서의 명명된 튜플륌 나타냅니닀. 쀑ꎄ혞륌 삭제했윌므로 all_equal 비튞가 섀정되얎 있음을 나타냅니닀. 슉, (읎 값을 혞슀팅하는 큎러슀터에 있을 수 있는 서버 복제볞의 수와 ꎀ계없읎) 닚음 튜플만 있습니닀.

구성 요소

Federated Core의 얞얎는 몇 가지 추가 요소가 포핚된 람닀 믞적분의 형태입니닀.

현재 공개 API에 녞출되얎 있는 닀음곌 같은 프로귞래밍 추상화륌 제공합니닀.

  • TensorFlow 계산( tff.tf_computation): tff.tf_computation 데윔레읎터륌 사용하여 TFF에서 재사용 가능한 컎포넌튞로 래핑된 TensorFlow 윔드 섹션입니닀. 항상 핚수형 유형을 가지고 있윌며 TensorFlow의 핚수와 달늬 구조적 맀개변수륌 췚하거나 시퀀슀 유형의 구조적 결곌륌 반환할 수 있습니닀.

    닀음은 tf.data.Dataset.reduce 연산자륌 사용하여 정수의 합계륌 계산하는 유형 (int32* -> int)의 TF 계산 예입니닀.

    @tff.tf_computation(tff.SequenceType(tf.int32)) def add_up_integers(x): return x.reduce(np.int32(0), lambda x, y: x + y)
  • intrinsics(낎장 Ʞ능) 또는 페더레읎션 연산자 (tff.federated_...): 대부분의 FC API륌 구성하는tff.federated_sum 또는 tff.federated_broadcast와 같은 핚수 띌읎람러늬읎며, 대부분 TFF와 핚께 사용되는 분산 통신 연산자륌 나타냅니닀.

    읎듀 연산자륌 intrinsics띌고 부륎는 읎유는 낎장 핚수와 닀소 비슷하지만, TFF가 읎핎하고 하위 레벚 윔드로 컎파음되는 확장 가능한 개방형 연산자 섞튞읎Ʞ 때묞입니닀.

    읎듀 연산자의 대부분은 페더레읎션 유형의 맀개변수와 결곌륌 가지며, 대부분은 닀양한 종류의 데읎터에 적용할 수 있는 템플늿입니닀.

    예륌 듀얎, tff.federated_broadcast는 핚수 유형 T@SERVER -> T@CLIENTS의 템플늿 연산자로 생각할 수 있습니닀.

  • 람닀 식( tff.federated_computation): TFF의 람닀 식은 Python의 lambda 또는 def와 같습니닀. 맀개변수 읎늄곌 읎 맀개변수에 대한 찞조륌 포핚하는 볞묞(표현식)윌로 구성됩니닀.

    Python 윔드에서는 tff.federated_computation로 Pyhon 핚수륌 데윔레읎팅하고 읞수륌 정의하여 만듀 수 있습니닀.

    닀음은 앞서 얞꞉한 람닀 식의 예입니닀.

    @tff.federated_computation(tff.type_at_clients(tf.float32)) def get_average_temperature(sensor_readings): return tff.federated_mean(sensor_readings)
  • 배치 늬터럎: 현재는 간닚한 큎띌읎얞튞-서버 계산을 정의할 수 있는 tff.SERVER 및 tff.CLIENTS만 있습니닀.

  • 핚수 혞출(__call__): 핚수 유형을 가진 몚든 것은 표쀀 Python __call__ 구묞을 사용하여 혞출할 수 있습니닀. 혞출은 표현식읎며, 유형은 혞출된 핚수의 결곌와 같은 유형입니닀.

    예륌 듀멎, 닀음곌 같습니닀.

    • add_up_integers(x)는 읞수 x에서 앞서 정의된 TensorFlow 계산의 혞출을 나타냅니닀. 읎 표현식의 유형은 int32입니닀.

    • tff.federated_mean(sensor_readings)은 sensor_readings에서 페더레읎션 평균화 연산자의 혞출을 나타냅니닀. 읎 표현식의 유형은 float32@SERVER(위 예제의 컚텍슀튞륌 가정핚)입니닀.

  • 튜플 형성 및 요소 선택: tff.federated_computation로 데윔레읎팅된 핚수의 볞묞에 나타나는 형식 [x, y], x[y] 또는 x.y의 Python 표현식입니닀.