Chương trình liên kết

Tài liệu này dành cho những ai quan tâm đến tổng quan cấp cao về các khái niệm chương trình liên kết. Nó giả định kiến ​​thức về TensorFlow Federated, đặc biệt là hệ thống kiểu của nó.

Để biết thêm thông tin về chương trình liên kết, hãy xem:

Chương trình liên kết là gì?

Chương trình liên kết là chương trình thực hiện các phép tính và xử lý logic khác trong môi trường liên kết.

Hơn nữa, cụ thể là một chương trình liên kết :

Việc xác định các khái niệm và khái niệm trừu tượng này giúp mô tả mối quan hệ giữa các thành phần của một chương trình liên kết và cho phép các thành phần này được sở hữu và tác giả bởi các vai trò khác nhau. Việc tách rời này cho phép các nhà phát triển soạn chương trình liên kết bằng cách sử dụng các thành phần được chia sẻ với các chương trình liên kết khác, điều này thường có nghĩa là thực thi cùng một logic chương trình trên nhiều nền tảng khác nhau.

Thư viện chương trình liên kết của TFF ( tff.program ) xác định các khái niệm trừu tượng cần thiết để tạo một chương trình liên kết và cung cấp các thành phần không phụ thuộc vào nền tảng .

Linh kiện

<!--#include file="components.dot"-->

Các thành phần của thư viện chương trình liên kết của TFF được thiết kế sao cho chúng có thể được sở hữu và tác giả bởi các vai trò khác nhau.

Chương trình

Chương trình này là một tệp nhị phân Python:

  1. xác định các tham số (ví dụ: cờ)
  2. xây dựng các thành phần dành riêng cho nền tảngcác thành phần không xác định nền tảng
  3. thực hiện các phép tính bằng cách sử dụng logic chương trình trong ngữ cảnh liên kết

Ví dụ:

# 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,
      )
  )

Thông số

Các tham số là đầu vào của chương trình , những đầu vào này có thể do khách hàng đặt nếu chúng được hiển thị dưới dạng cờ hoặc chúng có thể được đặt bởi chương trình. Trong ví dụ trên, output_dir là tham số do khách hàng đặt, còn total_roundsnum_clients là các tham số do chương trình đặt.

Các thành phần dành riêng cho nền tảng

Các thành phần dành riêng cho nền tảng là các thành phần được cung cấp bởi một nền tảng triển khai các giao diện trừu tượng được xác định bởi thư viện chương trình liên kết của TFF.

Các thành phần bất khả tri của nền tảng

Các thành phần không xác định nền tảng là các thành phần được cung cấp bởi một thư viện (ví dụ: TFF) triển khai các giao diện trừu tượng được xác định bởi thư viện chương trình liên kết của TFF.

Tính toán

Các tính toán là việc triển khai giao diện trừu tượng tff.Computation .

Ví dụ: trong nền tảng TFF, bạn có thể sử dụng trình trang trí tff.tensorflow.computation hoặc tff.federated_computation để tạo tff.framework.ConcreteComputation :

Xem cuộc sống của một tính toán để biết thêm thông tin.

Logic chương trình

Logic chương trình là một hàm Python lấy làm đầu vào:

và thực hiện một số thao tác, thường bao gồm:

và có thể mang lại một số đầu ra, thường bao gồm:

Ví dụ:

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)

Vai trò

Có ba vai trò hữu ích để xác định khi thảo luận về các chương trình liên kết: khách hàng , nền tảngthư viện . Mỗi vai trò này sở hữu và tạo ra một số thành phần được sử dụng để tạo chương trình liên kết. Tuy nhiên, một thực thể hoặc một nhóm có thể thực hiện nhiều vai trò.

Khách hàng

Khách hàng thường:

nhưng có thể:

Nền tảng

Nền tảng thường:

nhưng có thể:

Thư viện

Một thư viện thường:

Khái niệm

<!--#include file="concepts.dot"-->

Có một số khái niệm hữu ích để xác định khi thảo luận về các chương trình liên kết.

Lưu trữ khách hàng

Bộ nhớ của khách hàng là bộ nhớ mà khách hàng có quyền truy cập đọc và ghi và nền tảng có quyền truy cập ghi.

Lưu trữ nền tảng

Bộ lưu trữ nền tảng là bộ lưu trữ mà chỉ nền tảng mới có quyền truy cập đọc và ghi.

Giải phóng

Việc phát hành một giá trị sẽ làm cho giá trị đó có sẵn trong bộ nhớ của khách hàng (ví dụ: xuất bản giá trị lên bảng thông tin, ghi nhật ký giá trị hoặc ghi giá trị vào đĩa).

Hiện thực hóa

Việc cụ thể hóa một tham chiếu giá trị làm cho giá trị được tham chiếu có sẵn cho chương trình . Thông thường, việc cụ thể hóa một tham chiếu giá trị là cần thiết để giải phóng giá trị hoặc để tạo ra khả năng chịu lỗi logic chương trình .

Dung sai lỗi

Khả năng chịu lỗi là khả năng logic của chương trình phục hồi sau lỗi khi thực hiện tính toán. Ví dụ: nếu bạn huấn luyện thành công 90 vòng đầu tiên trong số 100 vòng và sau đó gặp lỗi, logic chương trình có khả năng tiếp tục huấn luyện từ vòng 91 hay cần phải bắt đầu lại quá trình huấn luyện ở vòng 1?