Skip to main content

Hierarchical Quantum-Distributed Ensemble Learning Framework

Project description

HQDE - Hierarchical Quantum-Distributed Ensemble Learning

Python 3.9+ PyTorch Ray License: MIT Version

A production-ready framework for distributed ensemble learning with quantum-inspired algorithms and adaptive quantization.

HQDE combines quantum-inspired algorithms with distributed computing to deliver superior machine learning performance with significantly reduced memory usage and training time.

Table of Contents


Key Features

Feature Description
Up to 17x Faster Training Ray-based stateful actors with zero-copy data sharing
4x Memory Reduction Adaptive 4-16 bit quantization based on weight importance
FedAvg Weight Aggregation Workers share knowledge after each epoch for better accuracy
Ensemble Diversity Different learning rates and dropout per worker
Production-Ready Byzantine fault tolerance and dynamic load balancing
Quantum-Inspired Superposition aggregation, entanglement simulation, QUBO optimization
Distributed Ray-based MapReduce with O(log n) hierarchical aggregation

Installation

From PyPI (Recommended)

pip install hqde

From Source

git clone https://github.com/Prathmesh333/HQDE-PyPI.git
cd HQDE-PyPI
pip install -e .

Quick Start

from hqde import SmallImageResNet18, create_hqde_system, make_cifar_training_config

training_config = make_cifar_training_config(
    ensemble_mode='independent',
    batch_assignment='replicate',
    prediction_aggregation='mean',
)

hqde_system = create_hqde_system(
    model_class=SmallImageResNet18,
    model_kwargs={'num_classes': 10},
    num_workers=4,
    training_config=training_config,
)

# Train the ensemble and collect validation metrics each epoch
metrics = hqde_system.train(train_loader, num_epochs=20, validation_loader=test_loader)

# Make predictions (ensemble voting)
predictions = hqde_system.predict(test_loader)

# Evaluate the ensemble directly
eval_metrics = hqde_system.evaluate(test_loader)

# Cleanup resources
hqde_system.cleanup()

Legacy fedavg-style output example:

Epoch 1/40, Average Loss: 2.3045, LR: 0.001000
  → Weights aggregated and synchronized at epoch 1  
Epoch 2/40, Average Loss: 1.8234, LR: 0.000998
  → Weights aggregated and synchronized at epoch 2  

Examples:

python examples/quick_start.py           # Quick demo
python examples/cifar10_synthetic_test.py # CIFAR-10 benchmark
python examples/cifar10_test.py          # Real CIFAR-10 dataset

Current releases log epoch loss, accuracy, and learning rate directly. In independent + replicate mode there is no epoch-end synchronization message because workers stay diverse until inference time.

Training Modes

Use training_config to choose the training behavior that matches your workload:

# True ensemble: preserve diversity, aggregate only at inference
training_config = {
    'ensemble_mode': 'independent',
    'batch_assignment': 'replicate',
}

# Epoch-wise FedAvg/local-SGD style training
training_config = {
    'ensemble_mode': 'fedavg',
    'batch_assignment': 'split',
}

batch_assignment='split' is not PyTorch DDP. Each worker trains locally during the epoch, and weights are averaged only at the epoch boundary when ensemble_mode='fedavg'.

Training Config Notes

training_config = {
    'ensemble_mode': 'independent',
    'batch_assignment': 'replicate',
    'optimizer': 'sgd',
    'learning_rate': 0.1,
    'weight_decay': 5e-4,
    'use_amp': True,
    'label_smoothing': 0.1,
    'warmup_epochs': 5,
    'warmup_start_factor': 0.2,
    'compile_model': False,
    'compile_mode': 'default',
    'prediction_aggregation': 'mean',
}
  • Use independent + replicate for true ensemble training.
  • Use fedavg + split for epoch-wise averaging with lower memory pressure.
  • use_amp activates mixed precision only on CUDA devices.
  • quantization_config is only applied in fedavg mode during weight aggregation.

Architecture Overview


                    HQDE SYSTEM ARCHITECTURE                      

                                                                  
             
     QUANTUM          DISTRIBUTED           ADAPTIVE       
    INSPIRED       ENSEMBLE       QUANTIZATION     
   ALGORITHMS          LEARNING                            
             
                                                                  

Project Structure

hqde/
 core/
    hqde_system.py           # Main system, workers, quantization
 quantum/
    quantum_aggregator.py    # Superposition and entanglement
    quantum_noise.py         # Quantum noise generation
    quantum_optimization.py  # QUBO and quantum annealing
 distributed/
    mapreduce_ensemble.py      # MapReduce pattern
    hierarchical_aggregator.py # Tree aggregation
    fault_tolerance.py         # Byzantine fault tolerance
    load_balancer.py           # Dynamic load balancing
 utils/
     performance_monitor.py     # System monitoring

Quantum-Inspired Algorithms

Note: HQDE uses quantum-inspired algorithms on classical hardware, not actual quantum computers.

Quantum Superposition Aggregation

Combines ensemble predictions using quantum amplitude-like weights:

# Confidence scores converted to quantum amplitudes
amplitudes = sqrt(softmax(confidence_scores))

# Superposition combination
superposition = sum(amplitude_i * prediction_i)

Location: hqde/quantum/quantum_aggregator.py

Entanglement-Based Correlation

Models correlations between ensemble members using an entanglement matrix:

# Symmetric entanglement matrix
entanglement_matrix[i,j] = correlation(model_i, model_j) * strength

# Weight models by their entanglement with others
entangled_weights = softmax(cosine_similarity @ entanglement_matrix)

Location: hqde/quantum/quantum_aggregator.py

Quantum Annealing Optimization

Uses QUBO (Quadratic Unconstrained Binary Optimization) for ensemble selection:

# QUBO formulation for selecting optimal models
qubo_matrix = formulate_qubo(candidate_models, constraints)

# Solve using simulated quantum annealing
solution = quantum_annealing_solve(qubo_matrix)

Location: hqde/quantum/quantum_optimization.py


Distributed Computing

HQDE uses Ray for distributed computing with several patterns:

Ray Worker Architecture

# GPUs are automatically divided among workers
@ray.remote(num_gpus=gpu_per_worker)
class EnsembleWorker:
    def train_step(self, data_batch, targets):
        # Each worker trains its own model copy
        ...

MapReduce Weight Aggregation

MAP      →    SHUFFLE    →    REDUCE
Workers       Group by        Aggregate
weights       parameter       weights
              name

Location: hqde/distributed/mapreduce_ensemble.py

Hierarchical Tree Aggregation

Communication Complexity: O(log n)

Level 0 (Root):           [AGG]
                         /     \
Level 1:            [AGG]       [AGG]
                   /    \       /    \
Level 2:        [W1]  [W2]   [W3]  [W4]

Location: hqde/distributed/hierarchical_aggregator.py

Byzantine Fault Tolerance

Tolerates up to 33% faulty or malicious workers:

  • Outlier Detection: Median Absolute Deviation (MAD)
  • Robust Aggregation: Geometric median
  • Reliability Tracking: Source reputation scores

Location: hqde/distributed/fault_tolerance.py

Dynamic Load Balancing

Multi-factor node selection scoring:

  • 40% success rate
  • 30% current load
  • 20% execution speed
  • 10% capability match

Location: hqde/distributed/load_balancer.py


Adaptive Quantization

Dynamically adjusts precision based on weight importance:

Weight Importance Bits Compression
High (critical) 16 2x
Medium (default) 8 4x
Low (redundant) 4 8x

Importance Score = 70% × |weight| + 30% × |gradient|

quantization_config = {
    'base_bits': 8,   # Default precision
    'min_bits': 4,    # High compression for unimportant weights
    'max_bits': 16    # High precision for critical weights
}

Location: hqde/core/hqde_system.py


Configuration

Full Configuration Example

from hqde import create_hqde_system

# Quantization settings
quantization_config = {
    'base_bits': 8,
    'min_bits': 4,
    'max_bits': 16
}

# Quantum aggregation settings
aggregation_config = {
    'noise_scale': 0.005,
    'exploration_factor': 0.1,
    'entanglement_strength': 0.1
}

# Create system
hqde_system = create_hqde_system(
    model_class=YourModel,
    model_kwargs={'num_classes': 10},
    num_workers=8,
    quantization_config=quantization_config,
    aggregation_config=aggregation_config
)

API Reference

Core Classes

Class Description Location
HQDESystem Main entry point hqde/core/hqde_system.py
DistributedEnsembleManager Manages Ray workers hqde/core/hqde_system.py
AdaptiveQuantizer Weight compression hqde/core/hqde_system.py

Quantum Classes

Class Description Location
QuantumEnsembleAggregator Superposition/entanglement aggregation hqde/quantum/quantum_aggregator.py
QuantumNoiseGenerator Exploration noise hqde/quantum/quantum_noise.py
QuantumEnsembleOptimizer QUBO-based selection hqde/quantum/quantum_optimization.py

Distributed Classes

Class Description Location
MapReduceEnsembleManager MapReduce pattern hqde/distributed/mapreduce_ensemble.py
HierarchicalAggregator Tree aggregation hqde/distributed/hierarchical_aggregator.py
ByzantineFaultTolerantAggregator Fault tolerance hqde/distributed/fault_tolerance.py
DynamicLoadBalancer Work distribution hqde/distributed/load_balancer.py

Factory Function

def create_hqde_system(
    model_class,           # PyTorch model class
    model_kwargs,          # Model initialization parameters
    num_workers=4,         # Number of distributed workers
    quantization_config=None,
    aggregation_config=None
) -> HQDESystem

Performance Benchmarks

Metric Traditional Ensemble HQDE Improvement
Memory Usage 2.4 GB 0.6 GB 4x reduction
Training Time 45 min 12 min 3.75x faster
Communication 800 MB 100 MB 8x less data
Test Accuracy 91.2% 93.7% +2.5%

Documentation


Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/new-feature)
  3. Commit your changes (git commit -m 'Add new feature')
  4. Push to the branch (git push origin feature/new-feature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.


Citation

@software{hqde2025,
  title={HQDE: Hierarchical Quantum-Distributed Ensemble Learning},
  author={Prathamesh Nikam},
  year={2025},
  url={https://github.com/Prathmesh333/HQDE-PyPI}
}

Support

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hqde-0.1.10.tar.gz (58.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hqde-0.1.10-py3-none-any.whl (58.1 kB view details)

Uploaded Python 3

File details

Details for the file hqde-0.1.10.tar.gz.

File metadata

  • Download URL: hqde-0.1.10.tar.gz
  • Upload date:
  • Size: 58.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for hqde-0.1.10.tar.gz
Algorithm Hash digest
SHA256 31068aab5414adc769a68754b6e57c3aed4377d319912d0ecf075f70111f05ca
MD5 d9d571c0def199bcd0fe62e63031a224
BLAKE2b-256 80eae8ef1e1565eb525984895f50dfe6787e3b4206a592f747ac71a1de96f610

See more details on using hashes here.

File details

Details for the file hqde-0.1.10-py3-none-any.whl.

File metadata

  • Download URL: hqde-0.1.10-py3-none-any.whl
  • Upload date:
  • Size: 58.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for hqde-0.1.10-py3-none-any.whl
Algorithm Hash digest
SHA256 377be7aa9198401c440280a2485e4f1367dd7c3792b886ef63f96121345ce7cd
MD5 aa1f38cb48d83f184858207ca3f6efea
BLAKE2b-256 9ef5f7e0df7d2fefb1198e660f585abf173756b4df0d737c88bfe24842f1e39e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page