Esta documentación está dirigida a cualquiera que esté interesado en una descripción general de alto nivel de los conceptos de los programas federados. Se asume conocimiento de TensorFlow Federated, especialmente su sistema de tipos.
Para obtener más información sobre el programa federado, consulte:
¿Qué es un programa federado?
Un programa federado es un programa que ejecuta cálculos y otra lógica de procesamiento en un entorno federado.
Más, concretamente un programa federado :
- ejecuta cálculos
- usando la lógica del programa
- con componentes específicos de la plataforma
- y componentes independientes de la plataforma
- parámetros dados establecidos por el programa
- y parámetros establecidos por el cliente
- cuando el cliente ejecuta el programa
- y podrá materializar datos en el almacenamiento de la plataforma para:
- uso en la lógica de Python
- implementar tolerancia a fallas
- y puede liberar datos al almacenamiento del cliente
La definición de estos conceptos y abstracciones permite describir las relaciones entre los componentes de un programa federado y permite que estos componentes sean propiedad de diferentes roles y sean autores de ellos. Este desacoplamiento permite a los desarrolladores componer programas federados utilizando componentes que se comparten con otros programas federados; normalmente esto significa ejecutar la misma lógica de programa en muchas plataformas diferentes.
La biblioteca de programas federados de TFF ( tff.program ) define las abstracciones necesarias para crear un programa federado y proporciona componentes independientes de la plataforma .
Componentes
<!--#include file="components.dot"-->
Los componentes de la biblioteca de programas federados de TFF están diseñados para que puedan ser propiedad de diferentes roles y ser creados por ellos.
Programa
El programa es un binario de Python que:
- define parámetros (por ejemplo, banderas)
- construye componentes específicos de la plataforma y componentes independientes de la plataforma
- ejecuta cálculos utilizando la lógica del programa en un contexto federado
Por ejemplo:
# Parameters set by the customer.
flags.DEFINE_string('output_dir', None, 'The output path.')
def main() -> None:
# Parameters set by the program.
total_rounds = 10
num_clients = 3
# Construct the platform-specific components.
context = tff.program.NativeFederatedContext(...)
data_source = tff.program.DatasetDataSource(...)
# Construct the platform-agnostic components.
summary_dir = os.path.join(FLAGS.output_dir, 'summary')
metrics_manager = tff.program.GroupingReleaseManager([
tff.program.LoggingReleaseManager(),
tff.program.TensorBoardReleaseManager(summary_dir),
])
program_state_dir = os.path.join(..., 'program_state')
program_state_manager = tff.program.FileProgramStateManager(program_state_dir)
# Define the computations.
initialize = ...
train = ...
# Execute the computations using program logic.
tff.framework.set_default_context(context)
asyncio.run(
train_federated_model(
initialize=initialize,
train=train,
data_source=data_source,
total_rounds=total_rounds,
num_clients=num_clients,
metrics_manager=metrics_manager,
program_state_manager=program_state_manager,
)
)
Parámetros
Los parámetros son las entradas al programa , estas entradas pueden ser configuradas por el cliente , si están expuestas como banderas, o pueden ser configuradas por el programa. En el ejemplo anterior, output_dir
es un parámetro establecido por el cliente , y total_rounds
y num_clients
son parámetros establecidos por el programa.
Componentes específicos de la plataforma
Los componentes específicos de la plataforma son los componentes proporcionados por una plataforma que implementa las interfaces abstractas definidas por la biblioteca de programas federados de TFF.
Componentes independientes de la plataforma
Los componentes independientes de la plataforma son los componentes proporcionados por una biblioteca (por ejemplo, TFF) que implementa las interfaces abstractas definidas por la biblioteca de programas federados de TFF.
Cálculos
Los cálculos son implementaciones de la interfaz abstracta tff.Computation
.
Por ejemplo, en la plataforma TFF puedes usar los decoradores tff.tf_computation
o tff.federated_computation
para crear un tff.framework.ConcreteComputation
:
Consulte la vida de un cálculo para obtener más información.
Lógica del programa
La lógica del programa es una función de Python que toma como entrada:
- Parámetros establecidos por el cliente y el programa.
- componentes específicos de la plataforma
- componentes independientes de la plataforma
- cálculos
y realiza algunas operaciones, que normalmente incluyen:
- ejecutando cálculos
- ejecutando la lógica de Python
- materializar datos en el almacenamiento de la plataforma para:
- uso en la lógica de Python
- implementar tolerancia a fallas
y puede producir algún resultado, que normalmente incluye:
- liberar datos al almacenamiento del cliente como métricas
Por ejemplo:
async def program_logic(
initialize: tff.Computation,
train: tff.Computation,
data_source: tff.program.FederatedDataSource,
total_rounds: int,
num_clients: int,
metrics_manager: tff.program.ReleaseManager[
tff.program.ReleasableStructure, int
],
) -> None:
state = initialize()
start_round = 1
data_iterator = data_source.iterator()
for round_number in range(1, total_rounds + 1):
train_data = data_iterator.select(num_clients)
state, metrics = train(state, train_data)
_, metrics_type = train.type_signature.result
metrics_manager.release(metrics, metrics_type, round_number)
Roles
Hay tres roles que es útil definir cuando se habla de programas federados: el cliente , la plataforma y la biblioteca . Cada uno de estos roles posee y es autor de algunos de los componentes utilizados para crear un programa federado. Sin embargo, es posible que una sola entidad o grupo cumpla múltiples funciones.
Cliente
El cliente normalmente:
- posee almacenamiento de clientes
- lanza el programa
pero puede:
- autor del programa
- Cumplir con cualquiera de las capacidades de la plataforma .
Plataforma
La plataforma normalmente:
- posee plataforma de almacenamiento
- componentes específicos de la plataforma del autor
pero puede:
- autor del programa
- Cumplir con cualquiera de las capacidades de la biblioteca .
Biblioteca
Una biblioteca normalmente:
- componentes independientes de la plataforma del autor
- cálculos de los autores
- lógica del programa de autores
Conceptos
<!--#include file="concepts.dot"-->
Hay algunos conceptos que es útil definir cuando se habla de programas federados.
Almacenamiento del cliente
El almacenamiento del cliente es un almacenamiento al que el cliente tiene acceso de lectura y escritura y al que la plataforma tiene acceso de escritura.
Almacenamiento de plataforma
El almacenamiento de plataforma es un almacenamiento al que solo la plataforma tiene acceso de lectura y escritura.
Liberar
La liberación de un valor hace que el valor esté disponible para el almacenamiento del cliente (por ejemplo, publicar el valor en un panel, registrar el valor o escribir el valor en el disco).
Materializar
La materialización de una referencia de valor hace que el valor referenciado esté disponible para el programa . A menudo es necesario materializar una referencia de valor para liberar el valor o hacer que la lógica del programa sea tolerante a fallos .
Tolerancia a fallos
La tolerancia a fallas es la capacidad de la lógica del programa para recuperarse de una falla al ejecutar un cálculo. Por ejemplo, si entrena con éxito las primeras 90 rondas de 100 y luego experimenta una falla, ¿la lógica del programa es capaz de reanudar el entrenamiento desde la ronda 91 o es necesario reiniciar el entrenamiento en la ronda 1?