perf(dflash): split-chain fast rollback with F32 SSM checkpoints (+29% decode) - #506
Conversation
There was a problem hiding this comment.
All reported issues were addressed across 13 files
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
|
@Amidwestnoob thanks for the contribution, please review and fix cubic reviews |
|
@howard0su When you have a chance, could you please review this? Cubic passes and all four review threads are resolved. The latest follow-up gates capture logging behind the existing self-test/diagnostic flags; the Release CUDA build completed and all 15 tests passed locally. |
|
@Amidwestnoob I did run it and there is still little gain that can be squeezed. See my PR feel free to diff it and cherry pick the commits I added on top of your good PR 506 |
Adapted surgically from dusterbloom commit bb76966 onto PR Luce-Org#506 while preserving the later split-capture diagnostic gate. Co-Authored-By: Claude <noreply@anthropic.com>
|
Added Verification on the exact PR head lineage:
The bounded divergence check also found a pre-existing target-vs-DFlash mismatch at generated token 111 in both legacy and fast modes, before their restore-path outputs differ. That finding is not introduced by this batching commit and should be investigated separately in verifier/acceptance/state-selection semantics. |
There was a problem hiding this comment.
All reported issues were addressed across 9 files (changes from recent commits).
Tip: Review your code locally with the cubic CLI to iterate faster.
Re-trigger cubic
Adapted surgically from dusterbloom commit bb76966 onto PR Luce-Org#506 while preserving the later split-capture diagnostic gate. Co-Authored-By: Claude <noreply@anthropic.com>
263cf60 to
76e85a8
Compare
|
Rebased PR #506 onto current upstream
Post-rebase validation on RTX 3090 / sm_86:
The force-update used an explicit lease against the old head and was read back from GitHub. |
76e85a8 to
7c98e63
Compare
Adapted surgically from dusterbloom commit bb76966 onto PR Luce-Org#506 while preserving the later split-capture diagnostic gate. Co-Authored-By: Claude <noreply@anthropic.com>
Adapted surgically from dusterbloom commit bb76966 onto PR Luce-Org#506 while preserving the later split-capture diagnostic gate. Co-Authored-By: Claude <noreply@anthropic.com>
7c98e63 to
abf2f24
Compare
There was a problem hiding this comment.
1 issue found across 4 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="server/src/server/server_main.cpp">
<violation number="1" location="server/src/server/server_main.cpp:1027">
P3: Startup can report `split_rollback = ON` while no fast rollback is usable: the displayed value is only the env request, but runtime also requires local storage and successful capture validation. Label this as requested (or report effective status after validation) so operators do not mistake a fail-closed fallback for enabled acceleration.</violation>
</file>
Tip: Review your code locally with the cubic CLI to iterate faster.
Re-trigger cubic
| std::fprintf(stderr, "[server] │ fast_rollback = %s\n", bargs.fast_rollback ? "ON" : "off"); | ||
| if (bargs.device.is_layer_split()) { | ||
| std::fprintf(stderr, "[server] │ split_rollback = %s\n", | ||
| split_chain_fast_rollback_enabled() ? "ON" : "off"); |
There was a problem hiding this comment.
P3: Startup can report split_rollback = ON while no fast rollback is usable: the displayed value is only the env request, but runtime also requires local storage and successful capture validation. Label this as requested (or report effective status after validation) so operators do not mistake a fail-closed fallback for enabled acceleration.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At server/src/server/server_main.cpp, line 1027:
<comment>Startup can report `split_rollback = ON` while no fast rollback is usable: the displayed value is only the env request, but runtime also requires local storage and successful capture validation. Label this as requested (or report effective status after validation) so operators do not mistake a fail-closed fallback for enabled acceleration.</comment>
<file context>
@@ -980,6 +1022,10 @@ int main(int argc, char ** argv) {
std::fprintf(stderr, "[server] │ fast_rollback = %s\n", bargs.fast_rollback ? "ON" : "off");
+ if (bargs.device.is_layer_split()) {
+ std::fprintf(stderr, "[server] │ split_rollback = %s\n",
+ split_chain_fast_rollback_enabled() ? "ON" : "off");
+ }
std::fprintf(stderr, "[server] │ ddtree_budget = %d\n", bargs.ddtree_budget);
</file context>
| split_chain_fast_rollback_enabled() ? "ON" : "off"); | |
| split_chain_fast_rollback_enabled() ? "requested" : "off"); |
Summary
Benchmark
Controlled dual-GPU A/B/A benchmark on two RTX 3090 24 GB cards using the same pinned models, prompt, generation length, power/thermal conditions, and layer split (
--target-gpus 0,1 --target-layer-split 12,11). Each block used one discarded warmup and five measured runs.All 15 measured runs produced byte-identical 256-token output:
1653a412811d3b87e26aab900e801b411fd68f9214b512ae984db6404b82204fA1/A2 baseline drift was 0.48%. Maximum observed GPU temperature was 64 C.
Memory trade-off
The F32 SSM checkpoint storage adds exactly 1,774,190,592 bytes (~1.65 GiB) of persistent GPU memory in the tested split configuration. Both GPUs are required for the tested 27B configuration; a single RTX 3090 is not sufficient.
Safety boundary
supports_tree_verify()remains unconditionally false in production.DFLASH_SPLIT_FAST_ROLLBACKand requires successful capture validation.Verification
mainat5e302cbb483819cd21e72f5dd8becaa609eca8cfsrc[7]Scope
Measured on the exact dual-RTX-3090 configuration above with a 1,024-token prompt and 256 generated tokens. No performance claim is made for single-GPU execution, sibling-tree verification, other models, or other hardware.