Decentralized Scheduler

ByzPy supports fully decentralized execution where each node runs in its own process and exchanges messages without a central orchestrator. This enables true peer-to-peer training with independent node progress and message-driven communication. The existing actor-based examples remain available for different use cases.

Key pieces

  • NodeRunner: runs a user-provided step function and message handler in a separate process. Supports manual steps, auto-stepping, and message delivery.

  • NodeCluster: minimal manager for multiple NodeRunner instances (start/stop, send messages, read state).

  • DecentralizedPeerToPeer: spawns each P2P participant as its own NodeRunner and exchanges half-steps/attacks via the cluster. Honest and byzantine nodes implement the same p2p_* methods as before.

  • ParameterServerRunner: similar process-backed runner for a simple PS loop; a DecentralizedParameterServer wrapper is provided for API parity.

Examples

  • python examples/p2p/decentralized_demo.py

  • python examples/ps/decentralized_demo.py

These demos avoid actor backends entirely and use the process-based runners to show independent node progress and message passing.

Notes

  • The decentralized execution path is production-ready and fully integrated.

  • The actor-backed P2P/PS scripts remain available for different execution models.

  • Runners can host a NodeScheduler + ActorPool inside a node process (see test_node_runner.py) for intra-node parallelism.

  • The decentralized wrappers (PeerToPeer, DecentralizedParameterServer) are thin facades that delegate to the process-based runners.