A lightweight federated learning library
Project description
🚀 NanoFed
NanoFed: Simplifying the development of privacy-preserving distributed ML models.
🌍 What is Federated Learning?
Federated Learning (FL) is a distributed machine learning paradigm that trains a global model across multiple clients (devices or organizations) without sharing their data. Instead, clients send model updates to a central server for aggregation.
Key Benefits
| 🌟 Feature | Description |
|---|---|
| 🔒 Privacy Preservation | Data stays securely on devices. |
| 🚀 Resource Efficiency | Decentralized training reduces transfer overhead. |
| 🌐 Scalable AI | Enables collaborative training environments. |
📦 Installation
Requirements
- Python
3.10+ - Dependencies installed automatically
Install with Pip
pip install nanofed
Development Installation
git clone https://github.com/camille-004/nanofed.git
cd nanofed
make install
📖 Documentation
📚 Learn how to use NanoFed in our guides and API references. 👉 Read the Docs
✨ Key Features
- 🔒 Privacy-First: Keep data on devices while training.
- 🚀 Easy-to-Use: Simple APIs with seamless PyTorch integration.
- 🔧 Flexible: Customizable aggregation strategies and extensible architecture.
- 💻 Production Ready: Robust error handling and logging.
Feature Overview
| Feature | Description |
|---|---|
| 🔒 Privacy-First | Data never leaves devices. |
| 🚀 Intuitive API | Built for developers with PyTorch support. |
| 🔧 Flexible Aggregation | Supports custom strategies. |
| 💻 Production Ready | Async communication, robust error handling. |
🔧 Quick Start
Train a model using federated learning in just a few lines of code:
import asyncio
from nanofed import HTTPClient, TorchTrainer, TrainingConfig
async def run_client(client_id: str, server_url: str):
training_config = TrainingConfig(epochs=1, batch_size=256, learning_rate=0.1)
async with HTTPClient(server_url, client_id) as client:
model_state, _ = await client.fetch_global_model()
await client.submit_update(model_state)
if __name__ == "__main__":
asyncio.run(run_client("client1", "http://localhost:8080"))
🛠️ Getting Help
Need assistance? Here are some helpful resources:
| Resource | Description |
|---|---|
| 📚 Documentation | Learn how to use NanoFed effectively. |
| 🐛 Issue Tracker | Report bugs or request features. |
| 🛠️ Source Code | Browse the NanoFed repository on GitHub. |
⚖️ License
NanoFed is licensed under the GNU General Public License (GPL-3.0). See the LICENSE file for details.
👩💻 Contributing
Contributions are welcome! We follow the Conventional Commits specification. See our contribution guidelines for detailed instructions.
Example commit message:
feat(client): add retry mechanism
🛠️ Development Roadmap
✅ Completed
Core Features for V1
- Basic client-server architecture with HTTP communication
- Simple global model management
- Basic FedAvg implementation
- Local training support
- Support for PyTorch models
- Synchronous training (all clients must complete before aggregation)
- Basic error handling and logging
🚀 Future Enhancements
Planned Features
- Advanced privacy features: Differential Privacy (DP), Secure Multiparty Computation (MPC), Homomorphic Encryption (HE)
- Asynchronous updates for faster and more flexible training
- Non-IID data handling for diverse client datasets
- Custom aggregation strategies for specific use cases
- gRPC implementation for high-performance communication
- Model compression techniques to reduce bandwidth usage
- Fault tolerance mechanisms for unreliable clients or servers
Made with ❤️ and 🧠 by Camille Dunning.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nanofed-0.1.2.tar.gz.
File metadata
- Download URL: nanofed-0.1.2.tar.gz
- Upload date:
- Size: 33.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.4 CPython/3.12.7 Linux/6.5.0-1025-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
349b8491de657f59036851d4ed5610f9af2123eef42809935105a04b04124f34
|
|
| MD5 |
4dbd3d5f7db0932e26ace6bd036a3b24
|
|
| BLAKE2b-256 |
cc74605943d644e8b5978fb804452bac5d05bf20ccafe577b029445e8c01f5e1
|
File details
Details for the file nanofed-0.1.2-py3-none-any.whl.
File metadata
- Download URL: nanofed-0.1.2-py3-none-any.whl
- Upload date:
- Size: 41.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.4 CPython/3.12.7 Linux/6.5.0-1025-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7194038ecdb6fa82982c4fd44216fa9a13acc14ef27f168f0ea7d906fc8e0c94
|
|
| MD5 |
0ceefedf4cf711e95f9a6dd14f1d5209
|
|
| BLAKE2b-256 |
bf56ed026f5cca0e8958a7adcd2047323a8ee4af0d033a8547c767bb9a821739
|