swactor/apps/pipeline-parallel-inference/Cargo.toml
Zachery Aaron Shores-Chmielewski ae9ca3bcf3 feat: datastream feature cleaning
Promote pipeline-parallel-inference to a first-class app and consolidate observability on the datastream wire, decoupling the dashboard crate from `distribution`.

- apps/pipeline-parallel-inference: move the example out of `examples/` into `apps/` as its own workspace, rename binaries to `pp-worker`/`pp-orchestrator`, and strip release binaries
- cluster: add `ClusterNode`, a synchronous facade over the actorized distribution protocol (IrohDriver + per-node Runtime hosting Swim/Registry/Metadata/Directory actors with a `MembershipFanout`), replacing ad-hoc `driver.node()`/`tick()` call sites
- fleet: add per-node fleet telemetry that ships identity/resource records as `DatastreamFrame`s over the cluster transport to the orchestrator's `DatastreamSink`, folded into a `FleetView` on a 3s tick
- provision: add best-effort, opt-in SSH boot-phase telemetry (`PP_DEPLOY_KEY`) that streams rented-node boot logs onto the orchestrator's datastream as `proc.boot.<stage>.*`
- dashboard: rewire the crate dependency from `distribution` to `datastream`, drop the standalone `swactor-datastream-dashboard` binary, and rewrite `datastream_source.rs` to demux per-node frames into Overview/Distribution/Fleet views with live-node TTL filtering
- distribution: refresh dist/netmap plugin copy and README from "Kademlia routing" to gossip-directory terminology

Signed-off-by: Zachery Aaron Shores-Chmielewski <zacheryasc@gmail.com>
2026-06-09 13:29:07 +04:00

46 lines
1.5 KiB
TOML

[workspace]
[package]
name = "pipeline-parallel-inference"
version = "0.1.0"
edition = "2024"
publish = false
[dependencies]
swactor = { path = "../..", features = ["transport", "serde", "std"] }
swactor-transport = { path = "../../crates/transport" }
# `ssh` enables the orchestrator's boot-phase telemetry: it SSHes into each
# rented node and streams the worker boot log onto its datastream.
swactor-process = { path = "../../crates/process", features = ["ssh"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
reqwest = { version = "0.12", features = ["json", "stream"] }
futures-util = "0.3"
tokio = { version = "1", features = ["full"] }
distribution = { path = "../../crates/distribution", features = ["iroh"] }
datastream = { path = "../../crates/datastream" }
# Live runtime dashboard (HTTP overview/actors/topology pages, served on
# localhost when PP_DASHBOARD is set).
dashboard = { path = "../../crates/dashboard" }
iroh = "0.98"
urlencoding = "2"
base64 = "0.22"
libc = "0.2"
[[bin]]
name = "pp-worker"
path = "src/bin/pp_worker.rs"
[[bin]]
name = "pp-orchestrator"
path = "src/bin/pp_orchestrator.rs"
[dev-dependencies]
wiremock = "0.6"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
# These binaries are shipped to rented GPU nodes over the docker image on a
# cold lease, and over scp through vast.ai's throttled SSH proxy for manual
# swaps. Stripping debug symbols (~26MB -> ~18MB) trims both at no runtime cost.
[profile.release]
strip = true