Add a complete single-GPU distributed-inference example that rents a vast.ai GPU, boots a worker container, and runs a prompt end-to-end over iroh/SWIM. - examples/single-gpu-inference: add the `single_gpu_inference` orchestrator binary that starts a local iroh node, waits for the remote gpu-node to register the `"inference"` SWIM name, then sends an `InferenceRequest` and prints the response - examples/single-gpu-inference: add the `gpu_node` binary that joins the cluster via `SEED_ADDR`, spawns an `InferenceActor` over `tinygrad_worker.py`, and registers the `"inference"` bridge - inference_actor: bridge swactor messaging to a Python child process via stdin/stdout JSON, with `ProcessBridge`/`RequestBridge` adapters that satisfy the single-`Incoming` actor constraint - iroh_transport: add `IrohActorTransport` that sends `WireEnvelope`s over iroh QUIC uni-streams (connection-cached against early close), plus wire encode/decode and an inbound drain helper - vastai: add a vast.ai REST client (`find_offer` with reliability/cuda/geo filters excluding CN, `create_instance`, `wait_for_running`, `destroy_instance`) parameterised by a mockable `base_url` - worker/docs/tests: ship `tinygrad_worker.py`/`echo_worker.py` (newline-JSON, `--stub`/`--model` defaulting to llama3.2:1b), a Dockerfile, Makefile, SPEC, and actor/codec/cluster/integration/vastai test suites Signed-off-by: Zachery Aaron Shores-Chmielewski <zacheryasc@gmail.com>
70 lines
1.6 KiB
TOML
70 lines
1.6 KiB
TOML
[workspace]
|
|
members = [
|
|
".",
|
|
"crates/bindings/python",
|
|
"crates/bindings/wasm-runtime",
|
|
"crates/simulation",
|
|
"crates/dashboard",
|
|
"crates/distribution",
|
|
"crates/process",
|
|
"crates/datastore",
|
|
"crates/transport",
|
|
"crates/node",
|
|
"tests/docker",
|
|
"tests/integration",
|
|
"xtask",
|
|
]
|
|
exclude = ["crates/bindings/wasm-crypto", "examples"]
|
|
|
|
[package]
|
|
name = "swactor"
|
|
version = "0.1.0"
|
|
edition = "2024"
|
|
autobenches = false
|
|
|
|
[profile.bench]
|
|
debug = true
|
|
strip = false
|
|
|
|
[lib]
|
|
crate-type = ["rlib"]
|
|
|
|
[features]
|
|
default = ["getrandom", "std"]
|
|
std = [] # OTP patterns: supervisors, registries, timers, routers
|
|
getrandom = ["dep:getrandom"]
|
|
serde = ["dep:serde"]
|
|
tracing = ["dep:tracing"]
|
|
no_random = [] # compile without access to a source of randomness
|
|
transport = [
|
|
] # transport-agnostic messaging (no mandatory deps; codec is user-provided)
|
|
wasm = ["no_random", "dep:web-time"] # browser/wasm32 target support
|
|
|
|
[dependencies]
|
|
getrandom = { version = "0.2", optional = true }
|
|
serde = { version = "1", features = ["derive"], optional = true }
|
|
tracing = { version = "0.1", optional = true }
|
|
web-time = { version = "0.2", optional = true }
|
|
crossbeam-queue = "0.3.12"
|
|
crossbeam-utils = "0.8.21"
|
|
|
|
[lints.rust]
|
|
unexpected_cfgs = { level = "allow", check-cfg = ['cfg(kani)'] }
|
|
|
|
[dev-dependencies]
|
|
criterion = { version = "0.5", features = ["html_reports"] }
|
|
proptest = "1"
|
|
proptest-state-machine = "0.3"
|
|
|
|
[[bench]]
|
|
name = "runtime_benchmarks"
|
|
harness = false
|
|
|
|
[[bench]]
|
|
name = "mt_benchmarks"
|
|
harness = false
|
|
|
|
[[bench]]
|
|
name = "hasher_benchmarks"
|
|
harness = false
|
|
|