Tài liệu này dành cho bất kỳ ai quan tâm đến việc tạo ra logic chương trình liên kết hoặc 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ó và các chương trình liên kết .
Logic chương trình
Phần này xác định các hướng dẫn về cách viết logic chương trình .
Xem ví dụ về chương trình_logic.py để biết thêm thông tin.
Chữ ký loại tài liệu
Ghi lại chữ ký loại TFF cho từng tham số được cung cấp cho logic chương trình có chữ ký loại.
async def program_logic(
train: tff.Computation,
data_source: tff.program.FederatedDataSource,
...
) -> None:
"""Trains a federated model for some number of rounds.
The following types signatures are required:
1. `train`: `(<S@SERVER, D@CLIENTS> -> <S@SERVER, M@SERVER>)`
2. `data_source`: `D@CLIENTS`
Where:
* `S`: The server state.
* `M`: The train metrics.
* `D`: The train client data.
"""
Kiểm tra chữ ký loại
Hãy kiểm tra chữ ký loại TFF (trong thời gian chạy) cho từng tham số được cung cấp cho logic chương trình có chữ ký loại.
def _check_program_logic_type_signatures(
train: tff.Computation,
data_source: tff.program.FederatedDataSource,
...
) -> None:
...
async def program_logic(
train: tff.Computation,
data_source: tff.program.FederatedDataSource,
...
) -> None:
_check_program_logic_type_signatures(
train=train,
data_source=data_source,
)
...
Loại chú thích
Cung cấp loại Python được xác định rõ ràng cho từng tham số tff.program.ReleaseManager
được cung cấp cho logic chương trình.
async def program_logic(
metrics_manager: Optional[
tff.program.ReleaseManager[tff.program.ReleasableStructure, int]
] = None,
...
) -> None:
...
Không
async def program_logic(
metrics_manager,
...
) -> None:
...
async def program_logic(
metrics_manager: Optional[tff.program.ReleaseManager] = None,
...
) -> None:
...
Trạng thái chương trình
Cung cấp cấu trúc được xác định rõ ràng mô tả trạng thái chương trình của logic chương trình.
class _ProgramState(NamedTuple):
state: object
round_num: int
async def program_loic(...) -> None:
initial_state = ...
# Load the program state
if program_state_manager is not None:
structure = _ProgramState(initial_state, round_num=0)
program_state, version = await program_state_manager.load_latest(structure)
else:
program_state = None
version = 0
# Assign state and round_num
if program_state is not None:
state = program_state.state
start_round = program_state.round_num + 1
else:
state = initial_state
start_round = 1
for round_num in range(start_round, ...):
state, _ = train(state, ...)
# Save the program state
program_state = _ProgramState(state, round_num)
version = version + 1
program_state_manager.save(program_state, version)
Giá trị phát hành tài liệu
Ghi lại các giá trị được giải phóng từ logic chương trình.
async def program_logic(
metrics_manager: Optional[tff.program.ReleaseManager] = None,
...
) -> None:
"""Trains a federated model for some number of rounds.
Each round, `loss` is released to the `metrics_manager`.
"""
Phát hành các giá trị cụ thể
Không giải phóng nhiều giá trị từ logic chương trình hơn mức cần thiết.
async def program_logic(...) -> None:
for round_number in range(...):
state, metrics = train(state, ...)
_, metrics_type = train.type_signature.result
loss = metrics['loss']
loss_type = metrics_type['loss']
metrics_manager.release(loss, loss_type, round_number)
Không
async def program_loic(...) -> None:
for round_number in range(...):
state, metrics = train(state, ...)
_, metrics_type = train.type_signature.result
metrics_manager.release(metrics, metrics_type, round_number)
Hàm không đồng bộ
Hãy xác định logic chương trình là một hàm không đồng bộ . Các thành phần của thư viện chương trình liên kết của TFF sử dụng asyncio để thực thi Python đồng thời và xác định logic chương trình là một hàm không đồng bộ giúp tương tác với các thành phần đó dễ dàng hơn.
async def program_logic(...) -> None:
...
Không
def program_logic(...) -> None:
...
Kiểm tra
Cung cấp các bài kiểm tra đơn vị cho logic chương trình (ví dụ: chương trình_logic_test.py ).
Chương trình
Phần này xác định các hướng dẫn về cách soạn thảo một chương trình .
Xem ví dụ về chương trình.py để biết thêm thông tin.
Tài liệu chương trình
Ghi lại thông tin chi tiết của chương trình cho khách hàng trong chuỗi tài liệu của mô-đun (ví dụ: program.py ):
- Cách chạy chương trình theo cách thủ công.
- Nền tảng, tính toán và nguồn dữ liệu nào được sử dụng trong chương trình.
- Khách hàng nên truy cập thông tin được phát hành từ chương trình như thế nào vào bộ nhớ của khách hàng.
Quá nhiều thông số
Đừng tham số hóa chương trình sao cho có các tập hợp tham số loại trừ lẫn nhau. Ví dụ: nếu foo
được đặt thành X
thì bạn cũng được yêu cầu đặt tham số bar
, baz
, nếu không thì các tham số này phải là None
. Điều này cho thấy rằng bạn có thể đã tạo hai chương trình khác nhau cho các giá trị khác nhau của foo
.
Thông số nhóm
Sử dụng proto để xác định các tham số có liên quan nhưng phức tạp hoặc dài dòng thay vì xác định nhiều FLAGS (go/absl.flags).
with tf.io.gfile.GFile(config_path) as f: proto = text_format.Parse(f.read(), vizier_pb2.StudyConfig()) return pyvizier.StudyConfig.from_proto(proto)
Logic Python
Không viết logic (ví dụ: luồng điều khiển, gọi tính toán, bất kỳ thứ gì cần kiểm tra) trong chương trình. Thay vào đó, hãy di chuyển logic vào một thư viện riêng có thể được kiểm tra hoặc vào logic chương trình mà chương trình gọi ra.
Hàm không đồng bộ
Không viết các hàm không đồng bộ trong chương trình. Thay vào đó, hãy di chuyển hàm vào một thư viện riêng có thể được kiểm tra hoặc vào logic chương trình mà chương trình gọi ra.
Kiểm tra
Đừng viết các bài kiểm tra đơn vị cho chương trình, nếu việc kiểm tra chương trình hữu ích, hãy viết những bài kiểm tra đó dưới dạng kiểm tra tích hợp.