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>
29 lines
1.6 KiB
Docker
29 lines
1.6 KiB
Docker
# Pipeline-parallel CODE image — thin layer over the heavy base.
|
|
#
|
|
# Carries only the fast-changing artifacts: the pipeline binaries and the worker
|
|
# script. Everything heavy (CUDA libs, tinygrad, NVRTC headers, sshd, the PID-1
|
|
# supervisor, ENTRYPOINT) lives in the base image, so a code push rebuilds just
|
|
# this handful of COPYs — no apt, no pip. Fleet telemetry rides the datastream
|
|
# from the pp-worker binary itself (PP_FLEET_SINK), so there is no separate
|
|
# collector binary to ship.
|
|
#
|
|
# Stub mode is a runtime toggle (-e PP_WORKER_STUB=1), not a separate image:
|
|
# the worker only imports tinygrad in real mode, so the CUDA base is inert
|
|
# under the stub and the same image runs the no-GPU CPU E2E.
|
|
#
|
|
# Build context must be the workspace root (the COPYs reach into both
|
|
# target/release/ trees). Build the base first, then this image:
|
|
# docker build -f apps/pipeline-parallel-inference/Dockerfile.base \
|
|
# -t swactor-pp-base:cuda12.6 .
|
|
# docker build -f apps/pipeline-parallel-inference/Dockerfile \
|
|
# -t swactor-pp-gpu:latest .
|
|
ARG BASE_IMAGE=swactor-pp-base:cuda12.6
|
|
FROM ${BASE_IMAGE}
|
|
|
|
# Pipeline binaries (this crate's target/). Statically linked enough that the
|
|
# base stage's libc is all they need; the worker is pure Python.
|
|
COPY apps/pipeline-parallel-inference/target/release/pp-worker /usr/local/bin/pp-worker
|
|
COPY apps/pipeline-parallel-inference/target/release/pp-orchestrator /usr/local/bin/pp-orchestrator
|
|
COPY apps/pipeline-parallel-inference/pp_tinygrad_worker.py /usr/local/share/pp_tinygrad_worker.py
|
|
|
|
ENV WORKER_SCRIPT=/usr/local/share/pp_tinygrad_worker.py
|