You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Feb 26, 2026. It is now read-only.
│ HTTP POST /update (preferred) or MQTT (fallback)│
96
-
└────┬────────────────────────────────────────┘
97
-
│
98
-
▼
99
-
┌──────────────────────┐
100
-
│ Coordinator │
101
-
│ (Collect Updates) │
102
-
└───────┬─────────────┘
103
-
│
104
-
│ k_of_n reached
105
-
▼
106
-
┌──────────────────────┐ ┌──────────────┐
107
-
│ Aggregator │──────▶│ Model Registry│
108
-
│ (FedAvg Algorithm) │ │ (HTTP Store) │
109
-
└───────────┬──────────┘ └──────┬───────┘
110
-
│ │
111
-
│ New Model │ HTTP GET
112
-
▼ ▼
113
-
┌──────────────────────────────────────┐
114
-
│ Proplets (Next Round) │
115
-
└──────────────────────────────────────┘
116
-
```
117
-
118
53
## System Components
119
54
120
55
Propeller's FML system consists of the following components that work together to enable federated learning:
@@ -301,116 +236,6 @@ SuperMQ provides the underlying MQTT messaging infrastructure that enables async
301
236
302
237
## Training Round Lifecycle
303
238
304
-
The following diagram shows the complete message flow during a federated learning round:
305
-
306
-
```text
307
-
1. Experiment Configuration
308
-
┌─────────────────────────────────────┐
309
-
│ External trigger │
310
-
│ POST /fl/experiments (to Manager) │
311
-
└──────────────┬──────────────────────┘
312
-
│
313
-
│ HTTP POST
314
-
▼
315
-
┌─────────────────────────────────────┐
316
-
│ Manager (POST /experiments to Coor)│
317
-
└──────────────┬──────────────────────┘
318
-
│
319
-
┌────────┴─────────┐
320
-
│ │
321
-
│ HTTP POST │ MQTT
322
-
▼ ▼
323
-
┌──────────┐ {domain}/{channel}/fl/rounds/start
324
-
│ Coordinator│
325
-
│ (init round)│
326
-
└─────┬──────┘
327
-
│
328
-
│ Return success to Manager
329
-
│
330
-
331
-
2. Task Distribution
332
-
│
333
-
│ MQTT (round start)
334
-
▼
335
-
┌──────────┐
336
-
│ Manager │
337
-
│(create tasks)│
338
-
└─────┬──────┘
339
-
│
340
-
│ Task start commands (MQTT)
341
-
│ m/{domain}/c/{channel}/control/manager/start
342
-
│
343
-
▼
344
-
┌─────────────────────────────────────┐
345
-
│ Proplets receive start commands │
346
-
│ Request WASM binary from Proxy │
347
-
└──────┬────────────────────────────┘
348
-
│
349
-
│ MQTT (chunked binary)
350
-
▼
351
-
┌─────────────────────────────────────┐
352
-
│ Proplets assemble and execute WASM │
353
-
└──────┬────────────────────────────┘
354
-
│
355
-
356
-
3. Task & Model Fetching
357
-
│
358
-
│ HTTP GET /task
359
-
▼
360
-
┌──────────┐
361
-
│ Coordinator│
362
-
│(return task)│
363
-
└─────┬──────┘
364
-
│
365
-
│ HTTP GET /models/{version}
366
-
▼
367
-
┌──────────┐
368
-
│Model Registry│
369
-
│(return model)│
370
-
└──────────┘
371
-
│
372
-
│ Dataset Fetch
373
-
▼
374
-
┌─────────────────────────────────────┐
375
-
│ Local Data Store │
376
-
└─────────────────────────────────────┘
377
-
│
378
-
▼
379
-
┌─────────────────────────────────────┐
380
-
│ Proplets train locally with WASM │
381
-
└──────┬────────────────────────────┘
382
-
│
383
-
384
-
4. Update Submission
385
-
│
386
-
│ HTTP POST /update (preferred)
387
-
▼
388
-
┌──────────┐
389
-
│ Coordinator│
390
-
│ (collect) │
391
-
└─────┬──────┘
392
-
│
393
-
│ k_of_n reached?
394
-
▼
395
-
┌─────────────────────────────────────┐
396
-
│ Aggregator (FedAvg) │
397
-
└──────┬────────────────────────────┘
398
-
│
399
-
│ New model
400
-
▼
401
-
┌──────────┐
402
-
│Model Registry│
403
-
│(store v{N+1})│
404
-
└─────┬──────┘
405
-
│
406
-
│ MQTT: {domain}/{channel}/fl/rounds/next
407
-
▼
408
-
┌─────────────────────────────────────┐
409
-
│ Proplets notified of new model │
410
-
│ Ready for next round │
411
-
└─────────────────────────────────────┘
412
-
```
413
-
414
239
### 1. Round Initialization
415
240
416
241
An external trigger (test script, API call, or scheduled job) sends an HTTP POST request to the Manager's `/fl/experiments` endpoint with the experiment configuration:
@@ -509,44 +334,6 @@ Propeller's FML system uses several communication patterns to coordinate distrib
509
334
510
335
### Communication Flow
511
336
512
-
Propeller combines MQTT publish-subscribe and HTTP request-response patterns in a hybrid architecture:
513
-
514
-
```text
515
-
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
516
-
│ Proplet │ │ Manager │ │ Coordinator │
517
-
│ │ │ │ │ │
518
-
│ 1. Config │────────▶│ POST /experiments │
519
-
│ (HTTP) │ HTTP │ Forward │────────▶│ POST /exp │
520
-
│ │◀────────│ │ HTTP │ │
521
-
│ │ │ │ │ │
522
-
│ 2. Task │ │ │◀────────│ Return task│
523
-
│ Request │────────▶│ │ HTTP │ (GET /task)│
524
-
│ (HTTP) │ HTTP │ │ │ │
525
-
│ │◀────────│ │ │ │
526
-
│ │ │ │ │ │
527
-
│ 3. Model │──────────────────────────────────▶│ GET /models │
528
-
│ Fetch │ │ │ HTTP │ │
529
-
│ (HTTP) │ │ │◀────────│ Return model│
530
-
│ │ │ │ │ │
531
-
│ 4. Train │ │ │ │ │
532
-
│ locally │ │ │ │ │
533
-
│ │ │ │ │ │
534
-
│ 5. Submit │──────────────────────────────────▶│ POST /update│
535
-
│ Update │ │ │ HTTP │ │
536
-
│ (HTTP) │◀────────│ │ │ │
537
-
│ │ │ │ │ │
538
-
│ 6. Notify │ │ │ │ │
539
-
│ Next Round │◀────────│ │ │──────────────▶│ MQTT
540
-
│ (MQTT) │ MQTT │ │ fl/rounds/next │
541
-
│ │ │ │ │ │
542
-
└─────────────┘ └─────────────┘ └─────────────┘
543
-
│ │ │
544
-
│ │ │
545
-
└───────────────────────┴───────────────────────┘
546
-
SuperMQ MQTT
547
-
Message Bus
548
-
```
549
-
550
337
### HTTP Endpoints
551
338
552
339
Propeller uses HTTP for synchronous, point-to-point communication where request-response semantics are needed:
0 commit comments