Skip to content

feat(skippy): add Poolside Laguna staged-runtime candidate - #1095

Closed
michaelneale wants to merge 20 commits into
mainfrom
feat/laguna-certification
Closed

feat(skippy): add Poolside Laguna staged-runtime candidate#1095
michaelneale wants to merge 20 commits into
mainfrom
feat/laguna-certification

Conversation

@michaelneale

@michaelneale michaelneale commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

Status

This draft adds staged-runtime support for the pinned Poolside Laguna S 2.1 Q4_K_M artifact and records real M5 + Vast Mesh evidence. The model has passed strict local two- and three-stage parity and ordinary two-node inference over Iroh/QUIC.

Suffix N-gram depth 2 is now published in the pinned package as its default serving policy, and this branch teaches the runtime to consume that package field. A no-config resolver test proves the package selects suffix N-gram and depth 2. A Vast-only cold start on the exact revision reached stable direct-Iroh placement and downstream-stage readiness, then was deliberately paused before stage 0 finished downloading or any inference ran. Live package-default consumption therefore remains unproven.

The PR remains a draft because it also carries generic dependencies and timeout-cancellation changes with open review findings. Those must land or be extracted before merge.

Pinned artifact

  • source: poolside/Laguna-S-2.1-GGUF@edd093522473dc7313b0738d8b4116b7f8b9745f
  • source SHA-256: a34c74e46688122bef83122f4133031bababbefcf57436dde97048c91e2cc6ff
  • package: meshllm/laguna-s-2.1-Q4_K_M-layers@0c467ad441ee94cb5a76f626294d963c4048507d
  • package manifest SHA-256: 0250cfb54ceeb94a9c71e48df447f780e32fc625553844d6403770f315be0237
  • package policy: suffix N-gram match 5..32, proposal cap 48, fixed verify window 1..32, pipeline depth 2

The Hugging Face policy update is immutable at commit 0c467ad. All evidence is limited to this Q4_K_M artifact and the revisions above.

What changes

  • add Laguna staged graph filtering and stage-boundary output to the carried llama.cpp patch queue
  • recognize Laguna and its 3,072-wide activations in topology capability inference
  • add a reviewed capability record for the exact pinned Q4_K_M artifact; F16 remains the default wire dtype and Q8 remains untested
  • preserve immutable Hugging Face source revisions through quant discovery, package jobs, catalog updates, and suggested CLI commands
  • add the prediction-return listener required by the strict three-stage correctness harness, including stalled-peer shutdown
  • allow layer packages to publish an optional positive verification pipeline_depth; omission preserves the legacy depth of 1
  • make the serving resolver consume the package depth and validate/report it during package preflight
  • record the exact package, parity, Mesh, N-gram, stability, and limitation evidence

What is proven

Strict local correctness on M5 Max / Metal

  • two stages 0..24 / 24..48: full and staged execution both predicted token 674
  • three stages 0..16 / 16..32 / 32..48: full and staged execution both predicted token 674
  • both strict commands exited 0 without allowing mismatches
  • F16 activation payload is 6,144 bytes per boundary for activation width 3,072

Real M5 + Australian Vast Mesh serving

  • ordinary mesh-llm nodes ran on M5 Max/Metal and an Australian Vast RTX 6000 Ada/CUDA worker
  • normal planning launched the capacity-bounded package split 0..36 / 36..48
  • stage traffic used direct Iroh/QUIC; there was no SSH stage forwarding
  • the run configured context 262144, F16 activation wire, F16 KV, four lanes, n_batch=512, and n_ubatch=128
  • the exercised request contained 44,460 prompt tokens and generated 65 tokens; this proves roughly 44K-token operation, not full 256K saturation
  • a three-request miss/hit/miss recovery probe returned HTTP 200 and byte-identical generated content on all requests
  • decode throughput was 19.74, 18.24, and 15.42 tok/s
  • the exact-prefix hit reused 44,416 prompt tokens
  • each request proposed 64 suffix N-gram tokens and accepted 32 at pipeline depth 2
  • a 63-request stability harness returned 63 HTTP 200 responses
  • the native log scan found no unsupported-trim, all-lanes-busy, reset, decode, slot, or proactive-eviction fatal errors

RTT varied materially during the run, including transient spikes; this PR does not claim a single fixed latency figure.

Published default policy

  • all 51 package artifacts passed size and SHA preflight at the new immutable package revision
  • preflight reports the exact suffix N-gram and depth-2 policy above
  • the runtime remains backward-compatible: packages without pipeline_depth resolve to depth 1
  • the no-config resolver regression test proves this package shape selects ngram-suffix and verify pipeline depth 2 without a local speculative override

What is not proven

  • completion of a fresh live launch using the new package revision with no speculative CLI/config override. The paused Vast-only attempt did not reach inference; a new-package M5 launch is not yet claimed
  • full 128K or 256K context saturation or soak
  • Q8 activation wire, Q8 KV quality, DFlash, or any other Poolside size/quant
  • structured Poolside tool use: the formal harness passed 6/13 checks (sequential 4/5, overlapping 0/5, exact-prefix 1/1, same-prefix 0/1, native-log scan 1/1)
  • fixed latency expectations across different Iroh routes

In the failed tool cases Laguna often emitted textual <tool_call> content that was not projected into OpenAI tool_calls; one sequential response ended with finish_reason=stop. This is not a native split crash, but it means this PR does not claim tool-use certification.

Remaining merge work

  1. Resume on two dedicated Vast workers against package revision 0c467ad…, with explicit --max-vram caps matching physical GPU memory and no speculative strategy/depth override. Wait for both stages, run a small smoke plus the 44,460-token N-gram request, and require telemetry to report effective ngram-suffix, pipeline depth 2, successful inference, and clean shutdown. Metal correctness is already covered by strict M5 parity; a fresh M5 live launch can follow if desired.
  2. Land skippy: recover hybrid speculative windows and orphaned lanes #1100 and fix or extract the generic timeout-cancellation review findings carried by this branch.
  3. Rebase onto the landed common heads, rerun focused correctness/package checks, and mark this PR ready.

Validation

  • clean llama.cpp patch-queue application
  • just build
  • embedded-native just release-build
  • strict skippy-correctness single-step and three-stage chain
  • full package preflight: 51/51 artifacts present with matching sizes and SHA-256 values
  • real two-node Mesh long-context, recovery, and stability runs described above
  • cargo test -p skippy-model-package --bin skippy-model-package — 51 passed
  • cargo test -p skippy-topology --lib — 33 passed
  • cargo test -p mesh-llm-host-runtime --lib package_suffix_strategy_resolves_as_a_standalone_proposer — passed
  • cargo check -p skippy-model-package -p skippy-runtime -p skippy-topology -p mesh-llm
  • cargo clippy -p skippy-model-package -p skippy-runtime -p skippy-topology -p mesh-llm --all-targets -- -D warnings
  • cargo fmt --all --check

Tracks #1090. Depends on #1100.

@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The changes add source-revision propagation and upstream license metadata to model packaging, introduce TCP prediction-return handling for correctness runs, and add Laguna family inference, staged llama.cpp execution, validation, and parity records.

Changes

Revision-aware model packaging

Layer / File(s) Summary
Revision propagation through package preparation
crates/mesh-llm-commands/src/model_package.rs, crates/model-package/src/prepare.rs, crates/model-package/src/bin/queue-unsloth-layer-packages.rs
Source revisions flow through quant discovery, preparation parameters, job environments, and source model volumes.
Job volume revision serialization
crates/model-package/src/jobs.rs, crates/model-package/src/bin/queue-unsloth-layer-packages.rs
JobVolume supports optional serialized revisions, with explicit revisions configured for model and bucket volumes and covered by JSON tests.
Upstream license model-card metadata
crates/model-package/src/scripts/split-model-job.sh, crates/model-package/src/script.rs
Generated model cards resolve upstream license metadata and include it in frontmatter and overview tables, with matching embedded-script assertions.

Prediction return listener integration

Layer / File(s) Summary
TCP prediction-return listener
crates/skippy-correctness/src/runner/mod.rs, crates/skippy-correctness/src/runner/prediction_return.rs
A shutdown-aware TCP listener handles optional handshakes, READY signaling, prediction replies, timeouts, and protocol tests.
Split-chain endpoint and reply integration
crates/skippy-correctness/src/runner/split_chain.rs
The split-chain runner wires the listener endpoint into stage topology and receives initial and verification predictions through the listener.

Laguna staged execution support

Layer / File(s) Summary
Laguna topology capability inference
crates/skippy-topology/src/family_capability.rs, crates/skippy-topology/src/lib.rs, crates/skippy-topology/src/tests.rs
Laguna is registered as a non-recurrent family, inferred from model identities, and validated through capability assertions.
Laguna staged graph execution
third_party/llama.cpp/patches/0046-Support-Laguna-staged-execution.patch
The Laguna graph uses stage layer filters, conditionally creates inputs and outputs, emits stage boundaries, and allows the Laguna architecture during model opening.
Laguna parity and candidate records
docs/skippy/FAMILY_STATUS.md, docs/skippy/LLAMA_PARITY.md, docs/skippy/llama-parity-candidates.json
Laguna candidate status, package-backed parity evidence, and family status documentation are recorded.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related issues

Possibly related PRs

  • Mesh-LLM/mesh-llm#937 — Both changes modify rich model-card generation and its embedded-script expectations.
  • Mesh-LLM/mesh-llm#1085 — The Laguna staged-execution patch builds on related skippy_graph_filter infrastructure.

Suggested labels: experimental

Suggested reviewers: ndizazzo

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 14.29% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the PR’s main theme: adding conservative staged-runtime support for Laguna in Skippy.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/laguna-certification

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@michaelneale
michaelneale marked this pull request as draft July 28, 2026 03:02
@github-actions

Copy link
Copy Markdown
Contributor

This pull request is currently a draft. Reviews will not take place until the PR is marked as ready for review.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@crates/mesh-llm-commands/src/model_package.rs`:
- Line 99: Update run_list_quants so every listed quant preserves the requested
revision: emit examples using the repo@revision:quant format and include
sourceRevision in JSON output. Apply this consistently to both output paths,
using the existing source_revision value.

In `@crates/skippy-correctness/src/runner/prediction_return.rs`:
- Around line 75-82: Ensure PredictionReturnListener::drop cannot block
indefinitely when a connected peer stalls: add a read timeout to the accepted
stream and update the handshake/reply loop using read_stage_message and
recv_reply to surface timeout or WouldBlock results, re-checking shutdown and
exiting promptly. Preserve normal handshake and reply processing while allowing
thread.join() to complete after shutdown.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: c25d1f26-957c-42f0-a4ef-35dad64e550e

📥 Commits

Reviewing files that changed from the base of the PR and between d91d62b and 18b2128.

📒 Files selected for processing (16)
  • crates/mesh-llm-commands/src/model_package.rs
  • crates/model-package/src/bin/queue-unsloth-layer-packages.rs
  • crates/model-package/src/jobs.rs
  • crates/model-package/src/prepare.rs
  • crates/model-package/src/script.rs
  • crates/model-package/src/scripts/split-model-job.sh
  • crates/skippy-correctness/src/runner/mod.rs
  • crates/skippy-correctness/src/runner/prediction_return.rs
  • crates/skippy-correctness/src/runner/split_chain.rs
  • crates/skippy-topology/src/family_capability.rs
  • crates/skippy-topology/src/lib.rs
  • crates/skippy-topology/src/tests.rs
  • docs/skippy/FAMILY_STATUS.md
  • docs/skippy/LLAMA_PARITY.md
  • docs/skippy/llama-parity-candidates.json
  • third_party/llama.cpp/patches/0046-Support-Laguna-staged-execution.patch

// This path doesn't need HF_TOKEN — works for public repos.
if source_quant.is_none() {
return run_list_quants(&hf_client, source_repo, json).await;
return run_list_quants(&hf_client, source_repo, source_revision, json).await;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Preserve the selected revision in list output.

The quants are now discovered at the requested revision, but the follow-up example still emits repo:quant, and JSON omits the revision. Copying that example can package a different commit. Use the existing repo@revision:quant form and include sourceRevision in JSON.

Proposed fix
             serde_json::to_string_pretty(&json!({
                 "sourceRepo": source_repo,
+                "sourceRevision": source_revision,
                 "quants": quants,
             }))?

-    eprintln!("   mesh-llm models package {}:{}", source_repo, quants[0].name);
+    let source_ref = source_revision
+        .map(|revision| format!("{source_repo}@{revision}:{}", quants[0].name))
+        .unwrap_or_else(|| format!("{source_repo}:{}", quants[0].name));
+    eprintln!("   mesh-llm models package {source_ref}");

Also applies to: 256-262

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/mesh-llm-commands/src/model_package.rs` at line 99, Update
run_list_quants so every listed quant preserves the requested revision: emit
examples using the repo@revision:quant format and include sourceRevision in JSON
output. Apply this consistently to both output paths, using the existing
source_revision value.

Comment on lines +75 to +82
impl Drop for PredictionReturnListener {
fn drop(&mut self) {
self.shutdown.store(true, Ordering::SeqCst);
if let Some(thread) = self.thread.take() {
let _ = thread.join();
}
}
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Drop can hang indefinitely if the peer stalls after the handshake.

shutdown is only checked while polling the nonblocking accept() loop (lines 92-97). Once a connection is accepted, the stream is switched to blocking mode (lines 102-104) and the handshake/reply loop (read_stage_message, recv_reply) has no timeout and never re-checks shutdown. If the connected peer stops sending data without closing the socket, Drop::drop (lines 75-82) will block forever in thread.join().

Today this is only avoided because, in split_chain.rs, the ChildGuards for the stage processes happen to be declared (and thus dropped/killed) before PredictionReturnListener — an implicit ordering invariant that isn't documented or enforced here, and would silently break under a future refactor.

🔒 Proposed fix: apply a read timeout and re-check shutdown in the reply loop
     stream
         .set_nonblocking(false)
         .context("set direct prediction return stream blocking")?;
+    stream
+        .set_read_timeout(Some(Duration::from_millis(200)))
+        .context("set direct prediction return read timeout")?;
     consume_optional_client_ready_hello(&mut stream)?;
     send_ready(&mut stream).context("send direct prediction return ready")?;
     stream.flush().ok();
-    let open =
-        read_stage_message(&mut stream, 0).context("read direct prediction return open message")?;
+    let open = loop {
+        match read_stage_message(&mut stream, 0) {
+            Ok(message) => break message,
+            Err(error)
+                if matches!(error.kind(), io::ErrorKind::WouldBlock | io::ErrorKind::TimedOut) =>
+            {
+                if shutdown.load(Ordering::SeqCst) {
+                    return Ok(());
+                }
+            }
+            Err(error) => return Err(error).context("read direct prediction return open message"),
+        }
+    };
     if open.kind != WireMessageKind::PredictionReturnOpen {
         bail!("expected direct prediction return open message");
     }
     loop {
         match recv_reply(&mut stream) {
             Ok(reply) => {
                 if sender.send(Ok(reply)).is_err() {
                     return Ok(());
                 }
             }
+            Err(error)
+                if matches!(error.kind(), io::ErrorKind::WouldBlock | io::ErrorKind::TimedOut) =>
+            {
+                if shutdown.load(Ordering::SeqCst) {
+                    return Ok(());
+                }
+            }
             Err(error) if error.kind() == io::ErrorKind::UnexpectedEof => return Ok(()),
             Err(error) => return Err(error).context("read direct prediction return reply"),
         }
     }

(Requires read_stage_message/recv_reply error kinds to surface WouldBlock/TimedOut, or alternatively store a cloneable handle to the stream so Drop can call stream.shutdown(Shutdown::Both) to force-unblock the read.)

Also applies to: 84-124

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/skippy-correctness/src/runner/prediction_return.rs` around lines 75 -
82, Ensure PredictionReturnListener::drop cannot block indefinitely when a
connected peer stalls: add a read timeout to the accepted stream and update the
handshake/reply loop using read_stage_message and recv_reply to surface timeout
or WouldBlock results, re-checking shutdown and exiting promptly. Preserve
normal handshake and reply processing while allowing thread.join() to complete
after shutdown.

@michaelneale michaelneale changed the title feat(skippy): add Poolside Laguna staged split support feat(skippy): add Poolside Laguna staged-runtime candidate Jul 28, 2026

i386 commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

Review findings at 6bd11c5:

  • [P1] Catalog provenance becomes stale across source revisions. Existing variants update only packages; their source.revision is neither refreshed nor represented per package. Repackaging the same filename from another revision can therefore publish new artifacts while the catalog still identifies the old source revision. Please include the revision in variant/package identity for both dictionary and list formats. Relevant code

  • [P2] Listener teardown can hang indefinitely. After accepting a connection, blocking reads never re-check shutdown, while Drop unconditionally joins the thread. A stalled peer can wedge the correctness process. Add read timeouts with shutdown checks—or retain a stream handle and force Shutdown::Both—plus a stalled-peer regression test. Relevant code

  • [P2] Quant-list output discards the selected revision. Discovery correctly uses repo@revision, but JSON omits it and the suggested command prints repo:quant. Copying that command silently packages current main instead of the inspected revision. Emit sourceRevision and repo@revision:quant. Relevant code

The latter two overlap CodeRabbit comments and are independently confirmed.

i386 commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

Reviewed the update range a2e0d65c…25727d92 (one commit). I found two cancellation gaps that should be addressed:

  1. [P1] A timed-out local request can still start and run the full prefill. The timeout path cancels the request token, but the local-runtime implementation unconditionally calls runtime.prefill(...) (lines 330–343); its first cancellation check is not until the decode loop (lines 606–616). If the deadline expires while the blocking task is waiting for the runtime mutex or doing cache restore, it will acquire the runtime and perform an expensive prefill even though cancellation is already set, continuing to hold the generation permit/GPU after the 504. Please check cancellation before starting prefill (and before subsequent cache persistence), and add a test that proves the real blocking generation exits/releases capacity; the current router test only proves that the token flag is set on a synthetic pending future.

  2. [P2] SkippyModelHandle drops the new context-aware calls. The new trait defaults fall back to the context-free methods, but this forwarding impl still only overrides chat_completion / completion (lines 968–997). Any caller using chat_completion_with_context or completion_with_context through a SkippyModelHandle therefore silently loses the cancellation token at this wrapper boundary. Please add forwarding overrides, ideally with a wrapper-level regression test.

The router/wrapper propagation added in this commit otherwise looks internally consistent.

michaelneale and others added 3 commits July 28, 2026 19:15
Extract the recurrent checkpoint work from the Inkling branch into the common llama.cpp patch queue. Snapshot partial recurrent state, trim hybrid attention directly, retain pipelined checkpoints, and replay only the accepted prefix.

This avoids copying the full long-context attention cache for each speculative verify window.

Assisted-by: codex
A generation that failed mid-decode on a split topology (e.g. a runtime
trim error) tore down the binary stage connection before the graceful
Stop message, so the stage never called drop_session_timed for that
session. The leaked RuntimeState lane stayed 'active' forever; retried
requests used fresh session ids, so leaked lanes accumulated until every
admission wedged (EAGAIN fast-fails / reply timeouts) and only a process
restart recovered.

Track sessions created per binary connection and drop any that never saw
a graceful Stop when the connection handler exits, returning their
execution lanes to the pool so the next request gets a fresh lane.

Assisted-by: goose
Keep orphaned-lane reclamation separate from the already oversized binary connection message loop, with its focused unit tests beside the tracker.

Assisted-by: codex
@michaelneale

Copy link
Copy Markdown
Collaborator Author

The three review findings on the Laguna/package change are fixed at 28e66d15:

  • catalog updates now refresh immutable source provenance for existing dictionary- and list-style variants, and package entries record source_revision
  • quant-list JSON emits sourceRevision, and the suggested command preserves repo@revision:quant
  • prediction-return listener teardown retains a cloned stream, forces Shutdown::Both, and has a stalled-peer regression test

Validation completed successfully:

  • affected mesh-llm-commands, model-package, and skippy-correctness tests
  • focused drop_stops_when_connected_peer_stalls regression
  • cargo check for all touched crates plus mesh-llm
  • warning-denying Clippy for all touched crates plus mesh-llm
  • workspace formatting and diff checks

The later timeout-cancellation review has two separate, still-open generic findings. The PR description now calls those out explicitly; they are not being treated as resolved by this commit.

@i386 i386 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review of current head 624fc7b9.

[blocking] Add an explicit Laguna cache-policy assertion. The new reviewed laguna capability is not covered by family_policy::tests::every_reviewed_family_has_an_explicit_cache_policy; the current CI run reproduces this as reviewed family laguna has no explicit policy assertion. Please add the Laguna policy expectation (and keep its intended K/V defaults explicit) so adding it to the reviewed catalog cannot silently leave the loader/planner policy unguarded.

The rest of this pass found no additional blocking issue.

@michaelneale

Copy link
Copy Markdown
Collaborator Author

Paused Vast-only default-policy checkpoint (2026-07-29)

The follow-on was deliberately paused before inference. This is a partial startup result, not a completed runtime gate.

What completed:

  • exact branch head 6ee85338 built as an embedded CUDA SM120 release; deployed binary SHA-256 3d4db6a06b130723a0b3aea2e9d250354ca6a97c9057d74a4d05631c76e8c8f4
  • two dedicated Australian Vast workers joined a private Mesh; the public-mesh Vast node was not used
  • actual GPUs were RTX PRO 6000 Blackwell Max-Q 96 GB plus RTX 5090 32 GB
  • both nodes used package meshllm/laguna-s-2.1-Q4_K_M-layers@0c467ad441ee94cb5a76f626294d963c4048507d, context 262144, F16 activation wire, F16 KV, one lane, and no speculative strategy/depth override
  • direct Iroh/QUIC settled around 29–32 ms after an initial relay sample
  • manifest SHA-256 matched 0250cfb54ceeb94a9c71e48df447f780e32fc625553844d6403770f315be0237
  • with explicit physical-capacity caps (--max-vram 90 and 30), normal planning chose 0..45 / 45..48
  • downstream stage 45..48 reached ready with activation width 3072, runtime context 262144, one lane, and F16 wire
  • stage 0 cold materialization reached 27/48 snapshot entries (about 32 GB) before the requested pause

An important lab finding: without --max-vram, the node-capacity field advertised roughly 984 GB and 64 GB despite nvidia-smi and the GPU list correctly reporting 96 GB and 32 GB. Explicit caps made placement inputs truthful. This generic capacity-advertisement discrepancy should be investigated separately; it is not Poolside-specific.

Not completed or claimed:

  • stage 0 readiness
  • any inference request
  • live proof that the package selected suffix N-gram and verify depth 2
  • throughput, acceptance, cache, or stability results from this Vast-only attempt

Exact resume gate:

  1. Provision two dedicated Vast workers; do not use the public-mesh node.
  2. Deploy the exact Poolside branch release and set --max-vram to physical GPU budgets until the capacity discrepancy is fixed.
  3. Launch both against revision 0c467ad…, context 262144, F16 wire/KV, and no speculative CLI/config override.
  4. Wait for both stages to report ready; record the realized ranges and direct/relay route.
  5. Run a small smoke, then the existing deterministic 44,460-prompt-token / 65-completion-token request.
  6. Require response telemetry to show suffix proposer, proposal cap 48, verify depth 2, successful inference, and clean shutdown; repeat once for exact-prefix behavior if healthy.
  7. Update the PR/issue with only those observed results. Strict M5 Metal two- and three-stage parity is already proven; a fresh M5 live launch is optional after the Vast gate.

Cleanup completed: both Poolside processes exited cleanly, and the Poolside builder, 5090, and Pro 6000 instances were destroyed. The existing public-mesh RTX 3090 remains running and untouched.

@michaelneale

Copy link
Copy Markdown
Collaborator Author

Combined replacement branch is now open as #1118. It carries the current work from this PR onto current main, linearizes the shared llama.cpp patch queue, and separates prior live evidence from validation run on the combined head. Please continue review on #1118; this PR is left open for provenance until maintainers decide to close/supersede it.

@ndizazzo

Copy link
Copy Markdown
Collaborator

Superseded by #1118

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants