Skip to content
This repository was archived by the owner on Feb 26, 2026. It is now read-only.

Commit a7b52f1

Browse files
committed
Remove markdown diagrams
Signed-off-by: JeffMboya <jangina.mboya@gmail.com>
1 parent 35c81c5 commit a7b52f1

File tree

1 file changed

+0
-213
lines changed

1 file changed

+0
-213
lines changed

docs/fml.md

Lines changed: 0 additions & 213 deletions
Original file line numberDiff line numberDiff line change
@@ -50,71 +50,6 @@ Propeller's FML system is built on a workload-agnostic design where the core orc
5050

5151
4. **WASM-Based Training**: Training workloads execute as WebAssembly modules.
5252

53-
The following diagram illustrates the architecture and message flow of Propeller's federated learning system:
54-
55-
```text
56-
┌──────────────────────┐
57-
│ External Trigger │
58-
│ (POST /fl/experiments)│
59-
└───────────┬──────────┘
60-
61-
│ HTTP POST
62-
63-
┌──────────────────────┐
64-
│ Manager │
65-
│ (Configure + Publish)│
66-
└───────────┬──────────┘
67-
68-
┌─────────────────┼─────────────────┐
69-
│ HTTP POST │ MQTT
70-
▼ ▼
71-
┌──────────────────────┐ {domain}/{channel}/fl/rounds/start
72-
│ Coordinator │
73-
│ (HTTP + FL Logic) │
74-
└───────────┬──────────┘
75-
76-
│ Task Start Commands (MQTT)
77-
│ m/{domain}/c/{channel}/control/manager/start
78-
┌────────────┼────────────────────────────┐
79-
▼ ▼ ▼
80-
┌──────────┐ ┌──────────┐ ┌──────────┐
81-
│ Proplet 1│ │ Proplet 2│ │ Proplet 3│
82-
│ (Wasm FL)│ │ (Wasm FL)│ │ (Wasm FL)│
83-
└────┬─────┘ └────┬─────┘ └────┬─────┘
84-
│ │ │
85-
│ HTTP GET /task (from Coordinator) │
86-
▼ ▼ ▼
87-
┌──────────────────────────────────────────────┐
88-
│ Coordinator (Task Response) │
89-
└────┬────────────────────────────────────────┘
90-
91-
│ Execute WASM + Local Training
92-
93-
┌──────────────────────────────────────────────┐
94-
│ Proplet Update Submission │
95-
│ 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-
11853
## System Components
11954

12055
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
301236

302237
## Training Round Lifecycle
303238

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-
414239
### 1. Round Initialization
415240

416241
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
509334

510335
### Communication Flow
511336

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-
550337
### HTTP Endpoints
551338

552339
Propeller uses HTTP for synchronous, point-to-point communication where request-response semantics are needed:

0 commit comments

Comments
 (0)