Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -356,6 +356,19 @@ mapped arena before submitting its copy spans. A flat 813,068,464-byte
snapshot therefore requires 13 payload objects rather than 512 logical-chunk
files; the manifest remains the atomic visibility point.

Bounded flat-object prefetch is **research-only**. The implementation
authenticates up to four version 2 objects concurrently in request-private host
buffers and then copies them into mapped placement arenas in manifest order.
Its GPU-free integrity, ordering, concurrency, and memory-bound tests pass.

The exact GLM-5.3 TP4/DCP1 serving evaluation for SparkCache
`eabe7fd0c878db7384ef87fe80a1e96b9bedcf67` structurally verified all four
rank-local 131,072-token snapshots but returned `spark` instead of the expected
`red`. An equivalent recomputation returned `red`. Consequently, the
four-reader implementation is not a deployable restore path and does not
replace the single-reader qualification. See the
[immutable research receipt](evidence/glm53-flash-dflash7-bf16/flat-v2-four-reader-semantic-rejection-eabe7fd.json).

Flat macro publication and its SparkCache CUDA restore path are
**implemented and GPU-free tested, not live qualified**. The object-count
geometry above follows the format contract; it is not a claim of measured
Expand Down
2 changes: 1 addition & 1 deletion deploy/deepseek_v4/tp4_profile.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"cache_model_profile": "deepseek-v4-fp8-hma",
"published_runtime_base": "ghcr.io/fujitsupolycom/gb10-vllm-serving@sha256:6fc26fdad81a18f0fff67ce0a05f6d90165625ea2e1cac8a6f39bfb462017028",
"sparkcache": {
"source_sha256": "6651f2823c816fac93779cbca54a8f19c0ed262830953149f3a87d189d1f833b"
"source_sha256": "15d62a07088d1212bfea60cecae868844cb582a3ac5273189a24532617ac5590"
},
"model": {
"repository": "deepseek-ai/DeepSeek-V4-Flash-0731",
Expand Down
2 changes: 1 addition & 1 deletion deploy/glm52_35bpw/profile.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"published_runtime_base": "ghcr.io/fujitsupolycom/gb10-vllm-serving@sha256:6fc26fdad81a18f0fff67ce0a05f6d90165625ea2e1cac8a6f39bfb462017028",
"base_image_requirement": "exact GLM-5.2 3.5-bpw R7 image recorded by the source container inspection",
"sparkcache": {
"source_sha256": "6651f2823c816fac93779cbca54a8f19c0ed262830953149f3a87d189d1f833b"
"source_sha256": "15d62a07088d1212bfea60cecae868844cb582a3ac5273189a24532617ac5590"
},
"model": {
"repository": "brandonmusic/GLM-5.2-EXL3-TR3v4-3.5bpw-MTP78",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
{
"schema": "sparkcache-glm53-flat-v2-reader-research/v1",
"status": "research-only",
"conclusion": "semantic-rejection",
"runtime": {
"image_id": "sha256:df4e09a32cdbf1c0e69cc7c4c9e95d890d6c7a1e3eaac84f969912a16fd27dd3",
"sparkcache_commit": "eabe7fd0c878db7384ef87fe80a1e96b9bedcf67",
"sparkcache_tree": "d88a65ea265a6f212367baa8c4a4970079d6b08a",
"sparkcache_source_sha256": "d9a7800ce201b0671676fc8d71423947c7b24e4797758db727c06e0e684495fe",
"topology": "TP4/DCP1",
"publication_schema": "snapshot-v1",
"flat_manifest_schema": "sparkcache-page-snapshot-manifest/v2",
"maximum_parallel_reads": 4
},
"stored_context": {
"context_digest": "b4161571df103395e2abae10372a90f35468561ec6c42bf4a7b7f0d0dfda5873",
"prompt_sha256": "965acd85cb28f804ab59cdc160688b04efaee14341e0bd27b647673e652ab812",
"tokens": 131072,
"encoded_bytes_per_rank": 813068464,
"objects_per_rank": 13
},
"structural_restore": {
"ranks": [0, 1, 2, 3],
"all_ranks_verified": true,
"read_and_hash_ms": {
"minimum": 484.1,
"maximum": 528.8
},
"placement_ms": {
"minimum": 323.7,
"maximum": 330.9
},
"arena_wait_ms": {
"minimum": 293.2,
"maximum": 297.7
},
"final_completion_ms": {
"minimum": 129.5,
"maximum": 131.6
},
"cache_service_ms": {
"minimum": 1231.7,
"maximum": 1331.2
}
},
"semantic_restore": {
"expected": "red",
"observed": "spark",
"passed": false,
"response_sha256": "0bb1366f58973e94b3cd518d4981be67c86ee35768039e392bb5c494b27bc58e"
},
"recomputation_control": {
"relationship": "one-token-changed prompt with the same token count",
"prompt_sha256": "4bb683a895caaaacb783294e65cb9c4b59c808c1e7b563a48edb6cd52b302dfe",
"tokens": 131072,
"expected": "red",
"observed": "red",
"passed": true,
"elapsed_seconds": 55.14106,
"response_sha256": "2c68d02422a6c4bdb42bd10221940894e746342bef6a56695fdbcb549074a355"
},
"rollback": {
"image_id": "sha256:5a3abacbd1d5a23332e24b4f68a3459532ceff1e02418a9366ab98e8f0919c98",
"original_prompt_recomputed": true,
"expected": "red",
"observed": "red",
"passed": true,
"elapsed_seconds": 52.415905,
"qualified_fallback_restore_recheck": "pending-at-record-time"
},
"admission": {
"deployable": false,
"qualified": false,
"reason": "A structurally verified persistent restore failed the exact semantic oracle."
}
}
4 changes: 2 additions & 2 deletions sparkcache/persistent_context_cache/cache_manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2938,8 +2938,8 @@ def commit_page_snapshot(

Physical extents are independent of the identity's logical chunk
geometry. The root retains the exact 256-token boundary and chunk
count used by lookup/admission, while restore authenticates both each
extent and the reassembled byte stream before any page placement.
count used by lookup/admission. Restore authenticates the root metadata,
contiguous descriptor geometry, and each extent before placement.
"""

_validate_digest(context_digest, "context_digest")
Expand Down
7 changes: 6 additions & 1 deletion sparkcache/spark_context_cache_connector.py
Original file line number Diff line number Diff line change
Expand Up @@ -3701,11 +3701,16 @@ def _load_hybrid_pages(
)
logger.info(
"spark-context-cache: SparkCache CUDA restore verified %d bytes"
" slabs=%d read_hash=%.1f ms submit=%.1f ms finish=%.1f ms",
" slabs=%d read_hash=%.1f ms placement=%.1f ms"
" (arena_wait=%.1f ms host_copy=%.1f ms submit_call=%.1f ms)"
" finish=%.1f ms",
result.source_bytes,
result.slabs,
result.read_and_hash_ms,
result.copy_and_submit_ms,
result.arena_wait_ms,
result.host_copy_ms,
result.submit_call_ms,
result.finish_ms,
)
return True
Expand Down
Loading