เอกสารนี้มีไว้สำหรับทุกคนที่สนใจภาพรวมระดับสูงของแนวคิดโปรแกรมรวมศูนย์ โดยจะถือว่าความรู้เกี่ยวกับ TensorFlow Federated โดยเฉพาะระบบประเภทของมัน
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโปรแกรมแบบรวมศูนย์ โปรดดูที่:
โปรแกรมรวมศูนย์คืออะไร?
โปรแกรมแบบรวมศูนย์ คือโปรแกรมที่ดำเนินการคำนวณและตรรกะการประมวลผลอื่นๆ ในสภาพแวดล้อมแบบรวมศูนย์
เพิ่มเติม โดยเฉพาะ โปรแกรมรวมศูนย์ :
- ดำเนิน การคำนวณ
- โดยใช้ ลอจิกของโปรแกรม
- ด้วย ส่วนประกอบเฉพาะแพลตฟอร์ม
- และ ส่วนประกอบที่ไม่เชื่อเรื่องแพลตฟอร์ม
- พารามิเตอร์ ที่กำหนดโดย โปรแกรม
- และ พารามิเตอร์ ที่ ลูกค้า กำหนด
- เมื่อ ลูกค้า รัน โปรแกรม
- และอาจแปลงข้อมูล ให้เป็นรูปธรรม ใน ที่จัดเก็บแพลตฟอร์ม เพื่อ:
- ใช้ในลอจิก Python
- ใช้ ความทนทานต่อความผิดพลาด
- และอาจ เผยแพร่ ข้อมูลไปยัง ที่เก็บข้อมูลของลูกค้า
การกำหนด แนวคิด และนามธรรมเหล่านี้ทำให้สามารถอธิบายความสัมพันธ์ระหว่าง ส่วนประกอบ ของโปรแกรมแบบรวมศูนย์ และอนุญาตให้ส่วนประกอบเหล่านี้เป็นเจ้าของและสร้างโดย บทบาท ที่แตกต่างกัน การแยกส่วนนี้ช่วยให้นักพัฒนาสามารถเขียนโปรแกรมแบบรวมศูนย์โดยใช้ส่วนประกอบที่แชร์กับโปรแกรมรวมศูนย์อื่นๆ โดยทั่วไปแล้วจะหมายถึงการดำเนินการตรรกะของโปรแกรมเดียวกันบนแพลตฟอร์มที่แตกต่างกันจำนวนมาก
ไลบรารีโปรแกรมแบบรวมศูนย์ของ TFF ( tff.program ) กำหนดสิ่งที่เป็นนามธรรมที่จำเป็นในการสร้างโปรแกรมแบบรวมศูนย์ และจัดเตรียม ส่วนประกอบที่ไม่เชื่อเรื่องพระเจ้าบนแพลตฟอร์ม
ส่วนประกอบ
<!--#include file="components.dot"-->
ส่วนประกอบ ของไลบรารีโปรแกรมรวมศูนย์ของ TFF ได้รับการออกแบบเพื่อให้สามารถเป็นเจ้าของและเขียนโดย บทบาท ที่แตกต่างกัน
โปรแกรม
โปรแกรม นี้เป็นไบนารี Python ที่:
- กำหนด พารามิเตอร์ (เช่น ธง)
- สร้าง ส่วนประกอบเฉพาะแพลตฟอร์ม และ ส่วนประกอบที่ไม่เชื่อเรื่องพระเจ้าแพลตฟอร์ม
- ดำเนิน การคำนวณ โดยใช้ ตรรกะของโปรแกรม ในบริบทแบบรวมศูนย์
ตัวอย่างเช่น:
# 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 ที่รับเป็นอินพุต:
- พารามิเตอร์ ที่กำหนดโดย ลูกค้า และ โปรแกรม
- ส่วนประกอบเฉพาะแพลตฟอร์ม
- ส่วนประกอบที่ไม่เชื่อเรื่องแพลตฟอร์ม
- การคำนวณ
และดำเนินการบางอย่าง ซึ่งโดยทั่วไปจะรวมถึง:
- ดำเนิน การคำนวณ
- ดำเนินการตรรกะ Python
- จัดทำข้อมูล ให้เป็นรูปธรรม ใน การจัดเก็บข้อมูลแพลตฟอร์ม เพื่อ:
- ใช้ในลอจิก 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 หรือไม่