โปรแกรมสหพันธรัฐ

เอกสารนี้มีไว้สำหรับทุกคนที่สนใจภาพรวมระดับสูงของแนวคิดโปรแกรมรวมศูนย์ โดยจะถือว่าความรู้เกี่ยวกับ TensorFlow Federated โดยเฉพาะระบบประเภทของมัน

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโปรแกรมแบบรวมศูนย์ โปรดดูที่:

โปรแกรมรวมศูนย์คืออะไร?

โปรแกรมแบบรวมศูนย์ คือโปรแกรมที่ดำเนินการคำนวณและตรรกะการประมวลผลอื่นๆ ในสภาพแวดล้อมแบบรวมศูนย์

เพิ่มเติม โดยเฉพาะ โปรแกรมรวมศูนย์ :

การกำหนด แนวคิด และนามธรรมเหล่านี้ทำให้สามารถอธิบายความสัมพันธ์ระหว่าง ส่วนประกอบ ของโปรแกรมแบบรวมศูนย์ และอนุญาตให้ส่วนประกอบเหล่านี้เป็นเจ้าของและสร้างโดย บทบาท ที่แตกต่างกัน การแยกส่วนนี้ช่วยให้นักพัฒนาสามารถเขียนโปรแกรมแบบรวมศูนย์โดยใช้ส่วนประกอบที่แชร์กับโปรแกรมรวมศูนย์อื่นๆ โดยทั่วไปแล้วจะหมายถึงการดำเนินการตรรกะของโปรแกรมเดียวกันบนแพลตฟอร์มที่แตกต่างกันจำนวนมาก

ไลบรารีโปรแกรมแบบรวมศูนย์ของ TFF ( tff.program ) กำหนดสิ่งที่เป็นนามธรรมที่จำเป็นในการสร้างโปรแกรมแบบรวมศูนย์ และจัดเตรียม ส่วนประกอบที่ไม่เชื่อเรื่องพระเจ้าบนแพลตฟอร์ม

ส่วนประกอบ

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

ส่วนประกอบ ของไลบรารีโปรแกรมรวมศูนย์ของ TFF ได้รับการออกแบบเพื่อให้สามารถเป็นเจ้าของและเขียนโดย บทบาท ที่แตกต่างกัน

โปรแกรม

โปรแกรม นี้เป็นไบนารี Python ที่:

  1. กำหนด พารามิเตอร์ (เช่น ธง)
  2. สร้าง ส่วนประกอบเฉพาะแพลตฟอร์ม และ ส่วนประกอบที่ไม่เชื่อเรื่องพระเจ้าแพลตฟอร์ม
  3. ดำเนิน การคำนวณ โดยใช้ ตรรกะของโปรแกรม ในบริบทแบบรวมศูนย์

ตัวอย่างเช่น:

# 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 ที่รับเป็นอินพุต:

และดำเนินการบางอย่าง ซึ่งโดยทั่วไปจะรวมถึง:

และอาจให้ผลลัพธ์บางส่วน ซึ่งโดยทั่วไปจะรวมถึง:

ตัวอย่างเช่น:

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 หรือไม่