Эта документация предназначена для всех, кто заинтересован в общем обзоре концепций интегрированных программ. Предполагается знание TensorFlow Federated, особенно его системы типов.
Для получения дополнительной информации о федеративной программе см.:
Что такое федеративная программа?
Федеративная программа — это программа, которая выполняет вычисления и другую логику обработки в федеративной среде.
Более конкретно, федеративная программа :
- выполняет вычисления
- используя программную логику
- с компонентами, специфичными для платформы
- и независимые от платформы компоненты
- заданные программой параметры
- и параметры, заданные заказчиком
- когда клиент запускает программу
- и может материализовать данные в хранилище платформы для:
- использовать в логике Python
- реализовать отказоустойчивость
- и может передавать данные в хранилище клиентов
Определение этих концепций и абстракций позволяет описывать отношения между компонентами объединенной программы и позволяет различным ролям владеть этими компонентами и создавать их. Такое разделение позволяет разработчикам составлять объединенную программу, используя компоненты, которые используются совместно с другими объединенными программами. Обычно это означает выполнение одной и той же логики программы на многих разных платформах.
Библиотека интегрированных программ TFF ( tff.program ) определяет абстракции, необходимые для создания интегрированной программы, и предоставляет компоненты, независимые от платформы .
Компоненты
<!--#include file="components.dot"-->
Компоненты библиотеки интегрированных программ TFF спроектированы таким образом, что ими могут владеть и создаваться разные роли .
Программа
Программа представляет собой двоичный файл Python, который:
- определяет параметры (например, флаги)
- создает компоненты, специфичные для платформы , и компоненты, независимые от платформы.
- выполняет вычисления с использованием программной логики в объединенном контексте
Например:
# 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,
)
)
Параметры
Параметры являются входными данными для программы . Эти входные данные могут быть установлены клиентом , если они представлены как флаги, или они могут быть установлены программой. В приведенном выше примере output_dir
— это параметр, который задается клиентом , а total_rounds
и num_clients
— это параметры, установленные программой.
Компоненты, специфичные для платформы
Компоненты, специфичные для платформы, — это компоненты, предоставляемые платформой , реализующие абстрактные интерфейсы, определенные библиотекой интегрированных программ TFF.
Платформо-независимые компоненты
Независимые от платформы компоненты — это компоненты, предоставляемые библиотекой (например, TFF), реализующие абстрактные интерфейсы, определенные библиотекой интегрированных программ TFF.
Вычисления
Вычисления являются реализациями абстрактного интерфейса tff.Computation
.
Например, на платформе TFF вы можете использовать декораторы tff.tensorflow.computation
или tff.federated_computation
для создания tff.framework.ConcreteComputation
:
См. «Жизнь вычислений» для получения дополнительной информации.
Программная логика
Логика программы представляет собой функцию Python, которая принимает на вход:
- параметры, заданные заказчиком и программой
- компоненты, специфичные для платформы
- Платформо-независимые компоненты
- вычисления
и выполняет некоторые операции, которые обычно включают в себя:
- выполнение вычислений
- выполнение логики Python
- материализация данных в хранилище платформы для:
- использовать в логике Python
- реализовать отказоустойчивость
и может дать некоторый результат, который обычно включает в себя:
- передача данных в хранилище клиентов в виде показателей
Например:
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)
Роли
При обсуждении интегрированных программ полезно определить три роли : клиент , платформа и библиотека . Каждая из этих ролей владеет и является автором некоторых компонентов , используемых для создания интегрированной программы. Однако одна организация или группа могут выполнять несколько ролей.
Клиент
Клиент обычно:
- владеет клиентским хранилищем
- запускает программу
но может:
Платформа
Платформа обычно:
- владеет хранилищем платформы
- авторы компонентов, специфичных для платформы
но может:
- автор программы
- реализовать любые возможности библиотеки
Библиотека
Библиотека обычно:
- авторы платформо-независимых компонентов
- расчеты авторов
- логика авторской программы
Концепции
<!--#include file="concepts.dot"-->
Есть несколько понятий , которые полезно определить при обсуждении федеративных программ.
Хранилище клиентов
Хранилище клиента — это хранилище, к которому клиент имеет доступ на чтение и запись, а платформа имеет доступ на запись.
Платформа хранения
Хранилище платформы — это хранилище, к которому только платформа имеет доступ для чтения и записи.
Выпускать
Освобождение значения делает значение доступным в хранилище клиента (например, публикация значения на информационной панели, регистрация значения или запись значения на диск).
Материализовать
Материализация ссылки на значение делает указанное значение доступным для программы . Часто материализация ссылки на значение требуется для освобождения значения или для обеспечения отказоустойчивости логики программы .
Отказоустойчивость
Отказоустойчивость — это способность логики программы восстанавливаться после сбоя при выполнении вычислений. Например, если вы успешно тренируетесь в первых 90 раундах из 100, а затем испытываете неудачу, способна ли логика программы возобновить тренировку с 91 раунда или тренировку необходимо начинать заново с 1 раунда?