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
11 changes: 10 additions & 1 deletion docs/GLM53_DFLASH7_PYTHON_OVERLAY_SPARKCACHE_TP4_QUICKSTART.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ store/restart/restore, or concurrency qualification.
| vLLM native extensions and wheel metadata | `da4d7be6c97434f6942292ed8abbf4b32dc44355` |
| vLLM Python source | `0b67266a0f37d6146a8403fb8482403c62f412d5`, tree `ba9484ccb33aa56e90ff2f447f15ca9b9da97639` |
| B12X | `b1d541f9e71a35f030d45fae437630fff7507c2a`, tree `c69cdec1c59a08e8e0e549f930fa8abcfb5134ae` |
| SparkCache reconstructed-page placement | `5d571018de5b63a9a90e5c11e6d6e86bbff4a957`, tree `e864ed9ad64f771188fdb59aa9738e348134d636` |
| SparkCache reconstructed-page placement and canonical CUDA configuration | `b95aa8ab0068dc66a6892a5c311d7e9dd4a9c55a`, tree `723fc604d73911a9e907798fd7932e4fc9c95df5`, clean source SHA-256 `48e008ba0cbd12f1ffae1c28388ea83310f41c6219c955e13d63ab171290d8de` |
| DFlash draft-loader separation | Patch SHA-256 `39b567013ee7aed79f63200ed460129587933dc77fb430decdf19f78178de279`, postimage SHA-256 `98acbae2b3bb4482d83f9637c163ce7c92707ccdf6561b7e431f23337f151cf4` |
| Target | `local-inference-lab/GLM-5.3-Flash-NVFP4@520de24eabf507659eaef7c70f14fd584527facc` |
| External draft | `incoai/GLM-5.3-Flash-DFlash2@dc77ff1c99eeb2df044ee3d4f0094eb033fee410`, BF16 weights SHA-256 `b33c03475ba7322cf398828f2d8d1be376df30dc05c6b40c28c8ea8da23e410b` |
Expand Down Expand Up @@ -54,6 +54,9 @@ postimage SHA-256
`98acbae2b3bb4482d83f9637c163ce7c92707ccdf6561b7e431f23337f151cf4`.
Both profiles remain unqualified until live four-rank gates pass.

SparkCache PR #26 accepts the canonical CUDA keys used by both profiles. No
local PR25 compatibility profile or legacy-key rewrite is part of this path.

## Resolve the profile and inspect the plan

Copy `scripts/config/glm53-flash-tp4-site.example.yaml`
Expand Down Expand Up @@ -93,3 +96,9 @@ MTP profiles. `tail-cow-v1` also separates these entries from snapshot-v1
manifests. The two target-loader profiles share a namespace because loader
choice does not change target or draft model state; each profile uses a
different cache root and one-shot clear token while qualification is pending.

Moving from SparkCache PR #25 to PR #26 does not change the namespace. The
checkpoint identities, publication schema, record vocabulary, digest salts,
parallel geometry, vLLM patches, lease contract, and CUDA placement ABI are
unchanged. Compatible PR25 `page-tail-cow-v1` entries remain eligible; only
the configuration vocabulary and SparkCache source receipt change.
12 changes: 10 additions & 2 deletions runtime/glm53-flash-dflash7-python-overlay/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ The image combines these exact roles:
`0b67266a0f37d6146a8403fb8482403c62f412d5`;
- B12X `b1d541f9e71a35f030d45fae437630fff7507c2a`;
- SparkCache reconstructed-page placement source
`5d571018de5b63a9a90e5c11e6d6e86bbff4a957`, Git tree
`e864ed9ad64f771188fdb59aa9738e348134d636`;
`b95aa8ab0068dc66a6892a5c311d7e9dd4a9c55a`, Git tree
`723fc604d73911a9e907798fd7932e4fc9c95df5`;
- external BF16 DFlash2 weights with SHA-256
`b33c03475ba7322cf398828f2d8d1be376df30dc05c6b40c28c8ea8da23e410b`.

Expand Down Expand Up @@ -43,3 +43,11 @@ profile uses global fastsafetensors for the target and an exact
`draft_load_config` selecting safetensors for DFlash. The image applies and
verifies the draft-loader patch before installing SparkCache patches. See
`docs/GLM53_DFLASH7_PYTHON_OVERLAY_SPARKCACHE_TP4_QUICKSTART.md`.

The SparkCache source accepts the canonical CUDA configuration keys directly.
No PR25 compatibility profile or legacy-key translation is required by these
profiles.

The PR26 source update does not change cache identity, page-tail publication,
record geometry, vLLM patch bytes, the lease contract, or the CUDA placement
ABI. Existing compatible PR25 cache entries remain in the same namespace.
14 changes: 11 additions & 3 deletions runtime/glm53-flash-dflash7-python-overlay/pins.json
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,17 @@
},
"sparkcache": {
"repository": "https://github.com/FujitsuPolycom/sparkcache.git",
"commit": "5d571018de5b63a9a90e5c11e6d6e86bbff4a957",
"tree": "e864ed9ad64f771188fdb59aa9738e348134d636",
"source_tree_sha256": "f7c0565521fddeff7085e4cc08043cb8d1e2bde33abc67f83b8608a162d05b88",
"commit": "b95aa8ab0068dc66a6892a5c311d7e9dd4a9c55a",
"tree": "723fc604d73911a9e907798fd7932e4fc9c95df5",
"source_tree_sha256": "48e008ba0cbd12f1ffae1c28388ea83310f41c6219c955e13d63ab171290d8de",
"cuda_config_schema": "canonical-v1",
"canonical_cuda_config_keys": [
"spark_cache_cuda_restore",
"spark_cache_cuda_placement_library",
"spark_cache_cuda_placement_library_sha256",
"spark_cache_cuda_placement_arena_bytes",
"spark_cache_cuda_restore_io_workers"
],
"contract": {
"path": "sparkcache/runtime_patches/vllm-kv-block-lease-contract-glm53-b12x-kda-adaptive-mtp.json",
"sha256": "6defde9551cbb586fd09bb2d3020495531b6573397875a767eaae1dbad126024",
Expand Down
32 changes: 32 additions & 0 deletions runtime/glm53-flash-dflash7-python-overlay/prepare_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,15 @@ def _longpath_run(argv, *, cwd=None):


_original_run = common.run
_original_copy_file = common.copy_file


def _routed_copy_file(source: Path, destination: Path) -> None:
"""Place the DFlash7 pins in the shared prepared-context topology."""

if source == COMMON / "pins.json":
source = PINS
_original_copy_file(source, destination)


def _render_containerfile() -> str:
Expand Down Expand Up @@ -79,6 +88,15 @@ def _render_containerfile() -> str:
if old not in text:
raise PrepareError(f"shared Containerfile omits required text: {old}")
text = text.replace(old, new)
deployment = (
'org.sparkcache.deployment-profile="glm53-flash-dflash7-python-overlay"'
)
if deployment not in text:
raise PrepareError("rendered Containerfile omits the DFlash7 deployment label")
text = text.replace(
deployment,
'org.sparkcache.cuda-config-schema="canonical-v1" \\\n ' + deployment,
)
return text


Expand All @@ -96,6 +114,17 @@ def _render_verify_image() -> str:
if old not in text:
raise PrepareError(f"shared image verifier omits required text: {old}")
text = text.replace(old, new)
deployment = (
'"org.sparkcache.deployment-profile": '
'"glm53-flash-dflash7-python-overlay",'
)
if deployment not in text:
raise PrepareError("rendered verifier omits the DFlash7 deployment label")
text = text.replace(
deployment,
'"org.sparkcache.cuda-config-schema": "canonical-v1",\n'
f" {deployment}",
)
return text


Expand Down Expand Up @@ -132,16 +161,19 @@ def _replace_runtime_files(context: Path) -> None:
def prepare(output: Path, *, repository_root: Path = ROOT) -> dict[str, Any]:
original_pins = common.PINS
original_run = common.run
original_copy_file = common.copy_file
try:
common.PINS = PINS
common.run = _longpath_run
common.copy_file = _routed_copy_file
common.prepare(output, repository_root=repository_root)
_replace_runtime_files(output)
common.verify_context(output)
return json.loads((output / "receipt.json").read_text(encoding="utf-8"))
finally:
common.PINS = original_pins
common.run = original_run
common.copy_file = original_copy_file


def verify_context(context: Path) -> dict[str, Any]:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,22 @@ def test_pins_bind_the_exact_dflash7_composition() -> None:
"b1d541f9e71a35f030d45fae437630fff7507c2a"
)
assert pins["sparkcache"]["commit"] == (
"5d571018de5b63a9a90e5c11e6d6e86bbff4a957"
"b95aa8ab0068dc66a6892a5c311d7e9dd4a9c55a"
)
assert pins["sparkcache"]["tree"] == (
"723fc604d73911a9e907798fd7932e4fc9c95df5"
)
assert pins["sparkcache"]["source_tree_sha256"] == (
"48e008ba0cbd12f1ffae1c28388ea83310f41c6219c955e13d63ab171290d8de"
)
assert pins["sparkcache"]["cuda_config_schema"] == "canonical-v1"
assert pins["sparkcache"]["canonical_cuda_config_keys"] == [
"spark_cache_cuda_restore",
"spark_cache_cuda_placement_library",
"spark_cache_cuda_placement_library_sha256",
"spark_cache_cuda_placement_arena_bytes",
"spark_cache_cuda_restore_io_workers",
]
workload = pins["workload"]
assert workload["role"] == "external-dflash7"
assert workload["draft"]["weights_sha256"] == (
Expand All @@ -59,6 +73,7 @@ def test_rendered_image_metadata_names_dflash7_not_adaptive_mtp() -> None:
recipe = prepare._render_containerfile()
assert "SparkRing GLM-5.3 DFlash7 Python overlay" in recipe
assert "glm53-flash-dflash7-python-overlay" in recipe
assert 'org.sparkcache.cuda-config-schema="canonical-v1"' in recipe
assert "010-dflash-draft-load-config.patch" in recipe
assert "98acbae2b3bb4482d83f9637c163ce7c92707ccdf6561b7e431f23337f151cf4" in recipe
label_section = recipe[recipe.index("LABEL org.opencontainers.image.title=") :]
Expand All @@ -74,6 +89,7 @@ def test_verifier_requires_the_dflash7_deployment_label() -> None:
assert labels["org.sparkcache.deployment-profile"] == (
"glm53-flash-dflash7-python-overlay"
)
assert labels["org.sparkcache.cuda-config-schema"] == "canonical-v1"
assert labels["org.jovian.vllm.commit"] != labels[
"org.sparkring.vllm.python.commit"
]
Expand Down
1 change: 1 addition & 0 deletions runtime/glm53-flash-dflash7-python-overlay/verify_image.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ def expected_output_labels(pins: dict[str, Any]) -> dict[str, str]:
labels["org.sparkcache.deployment-profile"] = (
"glm53-flash-dflash7-python-overlay"
)
labels["org.sparkcache.cuda-config-schema"] = "canonical-v1"
return labels


Expand Down
2 changes: 2 additions & 0 deletions scripts/config/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,8 @@ SparkCache CUDA restore with page-tail copy-on-write publication.
Resolve either profile with
`scripts/prepare_glm53_dflash7_python_overlay_profile.py`. Follow the
[DFlash7 Python-overlay quickstart](../../docs/GLM53_DFLASH7_PYTHON_OVERLAY_SPARKCACHE_TP4_QUICKSTART.md).
Both templates use only SparkCache PR #26 canonical CUDA keys; they do not
require a PR25 compatibility profile.

## DeepSeek-V4-Flash-0731

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,9 +148,9 @@
"max_num_seqs": "32",
"sparkcache_publication_schema": "tail-cow-v1",
"sparkcache_effective_publication_schema": "page-tail-cow-v1",
"sparkcache_source_sha256": "f7c0565521fddeff7085e4cc08043cb8d1e2bde33abc67f83b8608a162d05b88",
"sparkcache_source_revision": "5d571018de5b63a9a90e5c11e6d6e86bbff4a957",
"sparkcache_source_tree": "e864ed9ad64f771188fdb59aa9738e348134d636",
"sparkcache_source_sha256": "48e008ba0cbd12f1ffae1c28388ea83310f41c6219c955e13d63ab171290d8de",
"sparkcache_source_revision": "b95aa8ab0068dc66a6892a5c311d7e9dd4a9c55a",
"sparkcache_source_tree": "723fc604d73911a9e907798fd7932e4fc9c95df5",
"vllm_native_revision": "da4d7be6c97434f6942292ed8abbf4b32dc44355",
"vllm_python_revision": "0b67266a0f37d6146a8403fb8482403c62f412d5",
"vllm_python_tree": "ba9484ccb33aa56e90ff2f447f15ca9b9da97639",
Expand All @@ -175,10 +175,11 @@
"org.opencontainers.image.base.name": "ghcr.io/fujitsupolycom/sparkring-glm53-runtime@sha256:864adfe68f458223e186a19844ac80c7adc7365e5db1f25e109b85fc19850dcd",
"org.sparkring.base.image-id": "sha256:7e8c0ebcb2001efb4cdab0ec9d20d53972e62db3688230044e22e61ffb1d35d5",
"org.sparkcache.deployment-profile": "glm53-flash-dflash7-python-overlay",
"org.sparkcache.cuda-config-schema": "canonical-v1",
"org.sparkcache.cuda-placement-library-sha256": "REPLACE_WITH_CUDA_PLACEMENT_LIBRARY_SHA256",
"org.sparkcache.source-revision": "5d571018de5b63a9a90e5c11e6d6e86bbff4a957",
"org.sparkcache.source-tree": "e864ed9ad64f771188fdb59aa9738e348134d636",
"org.sparkcache.source-sha256": "f7c0565521fddeff7085e4cc08043cb8d1e2bde33abc67f83b8608a162d05b88",
"org.sparkcache.source-revision": "b95aa8ab0068dc66a6892a5c311d7e9dd4a9c55a",
"org.sparkcache.source-tree": "723fc604d73911a9e907798fd7932e4fc9c95df5",
"org.sparkcache.source-sha256": "48e008ba0cbd12f1ffae1c28388ea83310f41c6219c955e13d63ab171290d8de",
"org.sparkcache.vllm-contract-sha256": "6defde9551cbb586fd09bb2d3020495531b6573397875a767eaae1dbad126024",
"org.sparkring.source-receipt-sha256": "REPLACE_WITH_SOURCE_RECEIPT_SHA256",
"org.sparkring.nccl.commit": "73cf112295c33aee2b895f329f592f2a9b4b0f97",
Expand All @@ -188,6 +189,6 @@
"attestation_hook": [
"/bin/sh",
"-ec",
"test -f /models/target/config.json && test -f /models/target/model.safetensors.index.json && test \"$(sha256sum /models/target/config.json | cut -d ' ' -f1)\" = 676382abd1e90a6c85f0c8f33d45441ecd45fd514fd7b63ce5610e732d8e4996 && test \"$(sha256sum /models/target/model.safetensors.index.json | cut -d ' ' -f1)\" = 0d1d9e6b226e76520e182de10d4e7194cc885c5cb1bf885bb90de1916ce312cb && test -f /dflash-draft/config.json && test -f /dflash-draft/model.safetensors && test \"$(sha256sum /dflash-draft/config.json | cut -d ' ' -f1)\" = c4aeac0101196a6e26705b34c45230bcd0c7c68ee2d2d1efdb242087f3712573 && test \"$(sha256sum /dflash-draft/model.safetensors | cut -d ' ' -f1)\" = b33c03475ba7322cf398828f2d8d1be376df30dc05c6b40c28c8ea8da23e410b && test \"$(sha256sum /opt/sparkring/nccl/libnccl.so.2 | cut -d ' ' -f1)\" = 5f1c3f10d5ace66d4ba584415bbfe42b6ac1a0a9116a3b81dcbe50516ad924b3 && grep -q '\"tail-cow-v1\"' /opt/sparkcache-src/sparkcache/spark_context_cache_config.py && test \"$(sha256sum /opt/sparkring/runtime/python-overlay/vllm-python-overlay.json | cut -d ' ' -f1)\" = e5e528288b173399611a4930fecc4182b7208bc1564881d52ca5d2c5c4ae0f6a && test \"$(sha256sum /opt/sparkring/runtime/python-overlay/source-receipt.json | cut -d ' ' -f1)\" = REPLACE_WITH_SOURCE_RECEIPT_SHA256 && test \"$(python3 -c 'import json; print(json.load(open(\"/opt/sparkring/runtime/python-overlay/retained-native.json\", encoding=\"utf-8\"))[\"native_elf_manifest_sha256\"])')\" = REPLACE_WITH_VLLM_NATIVE_ELF_MANIFEST_SHA256 && test \"$(python3 -c 'import json; print(json.load(open(\"/opt/sparkring/runtime/python-overlay/retained-native.json\", encoding=\"utf-8\"))[\"native_dispatch_manifest_sha256\"])')\" = REPLACE_WITH_VLLM_NATIVE_DISPATCH_MANIFEST_SHA256 && test \"$(cat /opt/sparkring/runtime/python-overlay/sparkcache-source-tree.sha256)\" = f7c0565521fddeff7085e4cc08043cb8d1e2bde33abc67f83b8608a162d05b88 && test \"$(sha256sum /opt/sparkcache-src/sparkcache/runtime_patches/vllm-kv-block-lease-contract-glm53-b12x-kda-adaptive-mtp.json | cut -d ' ' -f1)\" = 6defde9551cbb586fd09bb2d3020495531b6573397875a767eaae1dbad126024 && test \"$(sha256sum /opt/sparkcache-src/sparkcache/native/build-cuda/libspark_cache_placement.so | cut -d ' ' -f1)\" = REPLACE_WITH_CUDA_PLACEMENT_LIBRARY_SHA256 && python3 /opt/sparkcache-src/sparkcache/runtime_patches/verify_lease_contract.py --vllm-root /usr/local/lib/python3.12/dist-packages --contract /opt/sparkcache-src/sparkcache/runtime_patches/vllm-kv-block-lease-contract-glm53-b12x-kda-adaptive-mtp.json"
"test -f /models/target/config.json && test -f /models/target/model.safetensors.index.json && test \"$(sha256sum /models/target/config.json | cut -d ' ' -f1)\" = 676382abd1e90a6c85f0c8f33d45441ecd45fd514fd7b63ce5610e732d8e4996 && test \"$(sha256sum /models/target/model.safetensors.index.json | cut -d ' ' -f1)\" = 0d1d9e6b226e76520e182de10d4e7194cc885c5cb1bf885bb90de1916ce312cb && test -f /dflash-draft/config.json && test -f /dflash-draft/model.safetensors && test \"$(sha256sum /dflash-draft/config.json | cut -d ' ' -f1)\" = c4aeac0101196a6e26705b34c45230bcd0c7c68ee2d2d1efdb242087f3712573 && test \"$(sha256sum /dflash-draft/model.safetensors | cut -d ' ' -f1)\" = b33c03475ba7322cf398828f2d8d1be376df30dc05c6b40c28c8ea8da23e410b && test \"$(sha256sum /opt/sparkring/nccl/libnccl.so.2 | cut -d ' ' -f1)\" = 5f1c3f10d5ace66d4ba584415bbfe42b6ac1a0a9116a3b81dcbe50516ad924b3 && grep -q '\"tail-cow-v1\"' /opt/sparkcache-src/sparkcache/spark_context_cache_config.py && test \"$(sha256sum /opt/sparkring/runtime/python-overlay/vllm-python-overlay.json | cut -d ' ' -f1)\" = e5e528288b173399611a4930fecc4182b7208bc1564881d52ca5d2c5c4ae0f6a && test \"$(sha256sum /opt/sparkring/runtime/python-overlay/source-receipt.json | cut -d ' ' -f1)\" = REPLACE_WITH_SOURCE_RECEIPT_SHA256 && test \"$(python3 -c 'import json; print(json.load(open(\"/opt/sparkring/runtime/python-overlay/retained-native.json\", encoding=\"utf-8\"))[\"native_elf_manifest_sha256\"])')\" = REPLACE_WITH_VLLM_NATIVE_ELF_MANIFEST_SHA256 && test \"$(python3 -c 'import json; print(json.load(open(\"/opt/sparkring/runtime/python-overlay/retained-native.json\", encoding=\"utf-8\"))[\"native_dispatch_manifest_sha256\"])')\" = REPLACE_WITH_VLLM_NATIVE_DISPATCH_MANIFEST_SHA256 && test \"$(cat /opt/sparkring/runtime/python-overlay/sparkcache-source-tree.sha256)\" = 48e008ba0cbd12f1ffae1c28388ea83310f41c6219c955e13d63ab171290d8de && test \"$(sha256sum /opt/sparkcache-src/sparkcache/runtime_patches/vllm-kv-block-lease-contract-glm53-b12x-kda-adaptive-mtp.json | cut -d ' ' -f1)\" = 6defde9551cbb586fd09bb2d3020495531b6573397875a767eaae1dbad126024 && test \"$(sha256sum /opt/sparkcache-src/sparkcache/native/build-cuda/libspark_cache_placement.so | cut -d ' ' -f1)\" = REPLACE_WITH_CUDA_PLACEMENT_LIBRARY_SHA256 && python3 /opt/sparkcache-src/sparkcache/runtime_patches/verify_lease_contract.py --vllm-root /usr/local/lib/python3.12/dist-packages --contract /opt/sparkcache-src/sparkcache/runtime_patches/vllm-kv-block-lease-contract-glm53-b12x-kda-adaptive-mtp.json"
]
}
Loading
Loading