फ़ेडरेटेड प्रोग्राम डेवलपर गाइड

यह दस्तावेज़ीकरण ऐसे किसी भी व्यक्ति के लिए है जो फ़ेडरेटेड प्रोग्राम लॉजिक या फ़ेडरेटेड प्रोग्राम लिखने में रुचि रखता है। यह TensorFlow Federated, विशेष रूप से इसके प्रकार प्रणाली, और फ़ेडरेटेड कार्यक्रमों का ज्ञान मानता है।

प्रोग्राम तर्क

यह अनुभाग इस बात के लिए दिशानिर्देशों को परिभाषित करता है कि प्रोग्राम लॉजिक को कैसे लिखा जाना चाहिए।

अधिक जानकारी के लिए उदाहरण programming_logic.py देखें।

दस्तावेज़ प्रकार हस्ताक्षर

प्रोग्राम लॉजिक को दिए गए प्रत्येक पैरामीटर के लिए टीएफएफ प्रकार के हस्ताक्षर का दस्तावेजीकरण करें जिसमें एक प्रकार का हस्ताक्षर हो।

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.
  """

हस्ताक्षर के प्रकार की जाँच करें

प्रोग्राम लॉजिक को दिए गए प्रत्येक पैरामीटर के लिए टीएफएफ प्रकार के हस्ताक्षर (रनटाइम पर) की जांच करें जिसमें एक प्रकार का हस्ताक्षर है।

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

एनोटेशन टाइप करें

प्रोग्राम लॉजिक को दिए गए प्रत्येक tff.program.ReleaseManager पैरामीटर के लिए एक अच्छी तरह से परिभाषित पायथन प्रकार प्रदान करें

async def program_logic(
    metrics_manager: Optional[
        tff.program.ReleaseManager[tff.program.ReleasableStructure, int]
    ] = None,
    ...
) -> None:
  ...

नहीं

async def program_logic(
    metrics_manager,
    ...
) -> None:
  ...
async def program_logic(
    metrics_manager: Optional[tff.program.ReleaseManager] = None,
    ...
) -> None:
  ...

कार्यक्रम राज्य

प्रोग्राम लॉजिक की प्रोग्राम स्थिति का वर्णन करने वाली एक अच्छी तरह से परिभाषित संरचना प्रदान करें

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)

दस्तावेज़ जारी मूल्य

प्रोग्राम लॉजिक से जारी मानों का दस्तावेजीकरण करें

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`.
  """

विशिष्ट मान जारी करें

प्रोग्राम लॉजिक से आवश्यकता से अधिक मान जारी करें।

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)

नहीं

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)

अतुल्यकालिक कार्य

प्रोग्राम लॉजिक को एक एसिंक्रोनस फ़ंक्शन के रूप में परिभाषित करें । टीएफएफ के फ़ेडरेटेड प्रोग्राम लाइब्रेरी के घटक पायथन को समवर्ती रूप से निष्पादित करने के लिए एसिंकियो का उपयोग करते हैं और प्रोग्राम लॉजिक को एसिंक्रोनस फ़ंक्शन के रूप में परिभाषित करने से उन घटकों के साथ बातचीत करना आसान हो जाता है।

async def program_logic(...) -> None:
  ...

नहीं

def program_logic(...) -> None:
  ...

परीक्षण

प्रोग्राम लॉजिक के लिए यूनिट परीक्षण प्रदान करें (जैसे कि प्रोग्राम_लॉजिक_टेस्ट.py )।

कार्यक्रम

यह अनुभाग किसी प्रोग्राम को कैसे लिखा जाना चाहिए, इसके लिए दिशानिर्देशों को परिभाषित करता है।

अधिक जानकारी के लिए उदाहरण programming.py देखें.

कार्यक्रम का दस्तावेजीकरण करें

मॉड्यूल के डॉकस्ट्रिंग में ग्राहक को प्रोग्राम का विवरण दर्ज करें (उदाहरण के लिए प्रोग्राम.py ):

  • प्रोग्राम को मैन्युअल रूप से कैसे चलाएं।
  • प्रोग्राम में किस प्लेटफ़ॉर्म, संगणना और डेटा स्रोतों का उपयोग किया जाता है।
  • किसी ग्राहक को प्रोग्राम से ग्राहक संग्रहण तक जारी जानकारी तक कैसे पहुंचना चाहिए।

बहुत सारे पैरामीटर

प्रोग्राम को पैरामीटराइज़ न करें जैसे कि पैरामीटरों का परस्पर अनन्य संग्रह हो। उदाहरण के लिए, यदि foo X पर सेट किया गया है तो आपको पैरामीटर bar , baz भी सेट करने होंगे, अन्यथा ये पैरामीटर None होने चाहिए। यह इंगित करता है कि आप foo के विभिन्न मानों के लिए दो अलग-अलग प्रोग्राम बना सकते थे।

समूह पैरामीटर

कई 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)

पायथन तर्क

प्रोग्राम में तर्क (उदाहरण के लिए प्रवाह को नियंत्रित करना, गणनाओं को लागू करना, कुछ भी जिसे परीक्षण करने की आवश्यकता है) लिखें। इसके बजाय, तर्क को एक निजी लाइब्रेरी में ले जाएं जिसका परीक्षण किया जा सके या प्रोग्राम द्वारा लागू किए गए प्रोग्राम तर्क में ले जाएं।

अतुल्यकालिक कार्य

प्रोग्राम में एसिंक्रोनस फ़ंक्शंस लिखें। इसके बजाय, फ़ंक्शन को एक निजी लाइब्रेरी में ले जाएं जिसका परीक्षण किया जा सकता है या प्रोग्राम द्वारा लागू किए गए प्रोग्राम लॉजिक में ले जाएं।

परीक्षण

प्रोग्राम के लिए यूनिट परीक्षण लिखें, यदि प्रोग्राम का परीक्षण उपयोगी है तो उन परीक्षणों को एकीकरण परीक्षणों के संदर्भ में लिखें।