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 :
- thực hiện tính toán
- sử dụng logic chương trình
- với các thành phần dành riêng cho nền tảng
- và các thành phần bất khả tri về nền tảng
- các thông số do chương trình thiết lập
- và các thông số do khách hàng thiết lập
- khi khách hàng chạy chương trình
- và có thể hiện thực hóa dữ liệu trong bộ lưu trữ nền tảng để:
- sử dụng trong logic Python
- thực hiện khả năng chịu lỗi
- và có thể giải phóng dữ liệu vào bộ lưu trữ của khách hàng
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:
- xác định các tham số (ví dụ: cờ)
- xây dựng các thành phần dành riêng cho nền tảng và các thành phần không xác định nền tảng
- 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_rounds
và num_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:
- các thông số do khách hàng và chương trình thiết lập
- các thành phần dành riêng cho nền tảng
- các thành phần bất khả tri về nền tảng
- tính toán
và thực hiện một số thao tác, thường bao gồm:
- thực hiện tính toán
- thực thi logic Python
- hiện thực hóa dữ liệu trong bộ lưu trữ nền tảng để:
- sử dụng trong logic Python
- thực hiện khả năng chịu lỗi
và có thể mang lại một số đầu ra, thường bao gồm:
- phát hành dữ liệu vào bộ lưu trữ của khách hàng dưới dạng số liệu
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ảng và thư 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:
- sở hữu kho lưu trữ của khách hàng
- ra mắt chương trình
nhưng có thể:
- tác giả chương trình
- thực hiện bất kỳ khả năng nào của nền tảng
Nền tảng
Nền tảng thường:
- sở hữu nền tảng lưu trữ
- các thành phần dành riêng cho nền tảng của tác giả
nhưng có thể:
- tác giả chương trình
- thực hiện bất kỳ khả năng nào của thư viện
Thư viện
Một thư viện thường:
- các thành phần bất khả tri của nền tảng tác giả
- tính toán của tác giả
- logic chương trình của tác giả
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?