Skip to main content

Distributed compute coordination for Earth-space AI workloads

Project description

rotastellar-distributed

Distributed Computing for Space Infrastructure

Federated learning, model partitioning, gradient synchronization, and mesh networking for orbital compute clusters.

Installation

pip install rotastellar-distributed

With framework support:

pip install rotastellar-distributed[pytorch]
pip install rotastellar-distributed[tensorflow]

Quick Start

Federated Learning

from rotastellar_distributed import (
    FederatedClient,
    GradientAggregator,
    AggregationStrategy,
    CompressionConfig,
    CompressionType
)

# Configure gradient compression for limited bandwidth
compression = CompressionConfig(
    compression_type=CompressionType.TOP_K,
    sparsity=0.99,  # Keep top 1% of gradients
    error_feedback=True
)

# Create federated client
client = FederatedClient(
    node_id="sat-001",
    compression=compression
)

# Compress gradients before transmission
gradients = model.get_gradients()
compressed = client.compress(gradients)
print(f"Compression ratio: {compressed.compression_ratio:.1f}x")

# Server-side aggregation
aggregator = GradientAggregator(strategy=AggregationStrategy.FEDAVG)
aggregated = aggregator.aggregate([grad1, grad2, grad3], weights=[0.4, 0.3, 0.3])

Model Partitioning

from rotastellar_distributed import (
    ModelProfile,
    PartitionOptimizer,
    NodeConfig,
    NodeType
)

# Profile your model
profile = ModelProfile(
    layers=[
        {"name": "embedding", "params_mb": 100, "flops": 1e9},
        {"name": "transformer_1", "params_mb": 200, "flops": 5e9},
        {"name": "transformer_2", "params_mb": 200, "flops": 5e9},
        {"name": "output", "params_mb": 50, "flops": 1e8},
    ]
)

# Define available nodes
nodes = [
    NodeConfig(node_id="sat-001", node_type=NodeType.SATELLITE, memory_gb=8, compute_tflops=2.0),
    NodeConfig(node_id="sat-002", node_type=NodeType.SATELLITE, memory_gb=8, compute_tflops=2.0),
    NodeConfig(node_id="ground-001", node_type=NodeType.GROUND, memory_gb=32, compute_tflops=10.0),
]

# Optimize partitioning
optimizer = PartitionOptimizer()
plan = optimizer.optimize(profile, nodes)
print(f"Partition plan: {plan.assignments}")
print(f"Estimated latency: {plan.estimated_latency_ms:.1f} ms")

Synchronization Scheduling

from rotastellar_distributed import SyncScheduler, GroundStation
from rotastellar import Position

# Define ground stations
stations = [
    GroundStation(
        name="KSC",
        position=Position(28.5729, -80.6490, 0.0),
        uplink_mbps=100.0,
        downlink_mbps=200.0
    ),
    GroundStation(
        name="Svalbard",
        position=Position(78.2297, 15.3975, 0.0),
        uplink_mbps=150.0,
        downlink_mbps=300.0
    ),
]

# Create scheduler
scheduler = SyncScheduler(ground_stations=stations)

# Get optimal sync windows
windows = scheduler.get_sync_windows(
    satellite_id="sat-001",
    duration_hours=24
)
for window in windows:
    print(f"Station: {window.station.name}")
    print(f"Start: {window.start_time}, Duration: {window.duration_seconds}s")
    print(f"Data capacity: {window.data_capacity_mb:.1f} MB")

Space Mesh Networking

from rotastellar_distributed import SpaceMesh, MeshNode
from rotastellar import Position

# Create mesh network
mesh = SpaceMesh()

# Add nodes
mesh.add_node(MeshNode(node_id="sat-001", position=Position(45.0, -122.0, 550.0)))
mesh.add_node(MeshNode(node_id="sat-002", position=Position(46.0, -120.0, 550.0)))
mesh.add_node(MeshNode(node_id="sat-003", position=Position(44.0, -118.0, 550.0)))

# Add inter-satellite links
mesh.add_link("sat-001", "sat-002", bandwidth_mbps=1000.0, latency_ms=2.0)
mesh.add_link("sat-002", "sat-003", bandwidth_mbps=1000.0, latency_ms=2.5)

# Find optimal route
route = mesh.find_route("sat-001", "sat-003")
print(f"Route: {' -> '.join(route.hops)}")
print(f"Total latency: {route.total_latency_ms:.1f} ms")

Features

  • Federated Learning — Privacy-preserving distributed training across orbital nodes
  • Gradient Compression — TopK, random sparsification, quantization for bandwidth-limited links
  • Model Partitioning — Intelligent layer placement across heterogeneous nodes
  • Sync Scheduling — Optimal ground station contact windows for data synchronization
  • Mesh Networking — Dynamic routing for inter-satellite communication

Links

Author

Created by Subhadip Mitra at RotaStellar.

License

MIT License — Copyright (c) 2026 RotaStellar

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

rotastellar_distributed-0.1.0.tar.gz (20.2 kB view details)

Uploaded Source

Built Distribution

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

rotastellar_distributed-0.1.0-py3-none-any.whl (23.7 kB view details)

Uploaded Python 3

File details

Details for the file rotastellar_distributed-0.1.0.tar.gz.

File metadata

  • Download URL: rotastellar_distributed-0.1.0.tar.gz
  • Upload date:
  • Size: 20.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.7

File hashes

Hashes for rotastellar_distributed-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d524098be61599c2be14efe28f1ac461204c273b5ae70435eab96027bc9cb0c2
MD5 8648db9b3fe745973ac4c0a791ba8d36
BLAKE2b-256 28de87b814ccbd3decac3b79699a76df7c20a702e2489a92f40221a5bd6f4976

See more details on using hashes here.

File details

Details for the file rotastellar_distributed-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for rotastellar_distributed-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 807ea025d7afac72aaa163ee28d7d5c976226b1be6ce5e604d318b3c84c5d59b
MD5 98b2a79ac965b4aa7e00121159ce33ab
BLAKE2b-256 9706494d585a35c62e42292b03138d5f1441839752acc99ce0ea2c4fcb949034

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