A research project by the Temasek Laboratories @ SUTD exploring Decentralised Federated Learning (DFL) deployed physically across a cluster of NVIDIA Jetson Orin Nano edge devices.
Full setup instructions, hardware configuration, and implementation details are documented in the Wiki.
Unlike centralised Federated Learning, this project implements peer-to-peer model aggregation across edge devices — no central server required. Each Jetson node trains locally on its own data partition and selectively exchanges model updates with neighbours based on the OCD-FL (Opportunistic Communication-efficient Decentralised FL) knowledge gain framework.
Key properties:
- No single point of failure — fully decentralised topology
- Privacy-preserving — only model weights are transmitted, never raw data
- Resource-aware — peer selection accounts for data distribution differences (Earth Mover's Distance) and device computation costs
- Edge-native — designed for ARM64 Jetson hardware with CUDA acceleration
| Component | Spec |
|---|---|
| Device | NVIDIA Jetson Orin Nano Dev Kit |
| JetPack | 6.2.1 |
| CUDA | 12.6 |
| OS | Ubuntu 22.04.5 LTS |
| Storage | 128GB A2 microSD (U3/V30, A1/A2) |
sutdDFL/
└── ocdFL/ # OCD-FL algorithm implementation (see ocdFL/README.md)
The project runs inside a Docker container (sutd-dfl-jetson:v1) built on NVIDIA's JetPack-optimised PyTorch base image. The image is publicly available on GitHub Container Registry — no login required.
Pull the image on any Jetson:
docker pull ghcr.io/ngzhankang/sutd-dfl-jetson:v1Run the container:
sudo docker run --runtime nvidia --net=host -v /home/$USER/SUTD:/app sutd-dfl-jetson:v1For full Docker setup instructions including microSD configuration and NVIDIA Container Toolkit installation, see the Getting Started wiki page.
Updating the image (from any Jetson with the updated code):
# 1. Rebuild with a new version tag
sudo docker build --network=host -t sutd-dfl-jetson:v2 .
# 2. Tag for GHCR
sudo docker tag sutd-dfl-jetson:v2 ghcr.io/ngzhankang/sutd-dfl-jetson:v2
# 3. Login and push (only the pushing Jetson needs GITHUB_PAT in ~/.bashrc)
echo $GITHUB_PAT | sudo docker login ghcr.io -u ngzhankang --password-stdin
sudo docker push ghcr.io/ngzhankang/sutd-dfl-jetson:v2
# 4. Other Jetsons pull the new version (no login needed, image is public)
sudo docker pull ghcr.io/ngzhankang/sutd-dfl-jetson:v2Bump the version tag (
v2,v3etc.) with each update — avoid reusing old tags so you always know what version is running on each device.
See the Implementations wiki page for details on experiments and algorithm variants.
For the OCD-FL specific implementation, refer to ocdFL/README.md.
| Name | Role |
|---|---|
| Prof. Marie Therese Siew | Principal Investigator |
| Lucas Liew | Researcher |
| Skylar | Researcher |
| Ng Zhan Kang | Researcher |
SUTD 2025