Skip to content

Fresh jarvis-gb10 install fails at image/packs: the built pins predate the edit pack from #78 #84

Closed

Description

@Guitaraholic

Hi Jay, thanks for LocalRouter. We're really enjoying getting it running on our Spark.

We hit a snag on a fresh install today, and it looks like it affects anyone installing from scratch since #78 landed.

What happened

On d9a0734, a fresh tools/install/bootstrap.sh --profile jarvis-gb10 --accept on a DGX Spark (GB10, driver 580.178.04, CUDA 13.0) stops at image/packs:

FAIL te/manifest.json: size 131480, want 67306
FAIL te/weights.safetensors: size 16289653928, want 15136839544
FAIL vae/manifest.json: size 62806, want 33861
FAIL vae/weights.safetensors: size 662002120, want 506156560
fail: 6/10 files match

Every other step passed, including the chat and Drama 3 GPU qualifications.

What we think is going on

tools/spark/prepare.sh:105 (added in #78) runs pack --precision edit, which rewrites te/ (749 tensors) and vae/ (230 tensors, now with the encoder). image/packs then checks them against tools/twin/packs/built/qwen-image-2.1-turbo.json, which was last changed in c82bd87 on 22 October and still pins the pre-edit te/ and vae/. A box that already has an image-packs stamp from before #78 won't notice, which is probably why it didn't show up on DGX-01.

Possible fix

Re-pin te/ and vae/ in built/qwen-image-2.1-turbo.json from an edit-pack build, and pin edit.json too.

As a stopgap we did exactly that locally, from our own build on the Spark. The source checkpoints had already passed their pins in image/download. With these values verify_assets.py passes 10/10 and the install goes on. The two manifest hashes are the same ones the edit pack printed when it wrote them. Here they are in case they're useful to compare against a build on DGX-01:

Path Size (bytes) SHA-256
te/manifest.json 131480 a70146666c4990c0a66a9774fab991d7f1dbd687efaaa45eac5cc1928e836519
te/weights.safetensors 16289653928 62d2543cdfb919f0c67f2265fd87483a6cd0d9e7b7143440199ec2f4c87f71bc
vae/manifest.json 62806 191c1441c61496f30d3f5b4baa2433e712ba13e15d1e80f167ed82353c54e6a7
vae/weights.safetensors 662002120 ed03972f15842905e6ee1e96f22b426ef99be57c15921b81088f7369617487b4
edit.json (not pinned today) 221 79baea3189bf6bcd6f6bfa38866978a3d7a1da6ada17cf60ef9228d5806a3a15

We haven't checked whether the edit pack is byte-for-byte reproducible across boxes, so please treat these as a comparison point rather than the pins to ship.

Happy to test a fix on our box if that helps.


Raised by Claude Opus on behalf of GUITARAHOLIC.

Activity

  1. jayleaton commented on Oct 28, 2026

    @jayleaton
    Owner

    Sorry about that. Let me take a look at this. Thanks for the report

  2. jayleaton commented on Oct 29, 2026

    @jayleaton
    Owner

    Thanks for such a clear report, and for the hashes. They pinned the problem down exactly.

    You were right about the first part. The built pins (tools/twin/packs/built/qwen-image-2.1-turbo.json) still described te/ and vae/ from before the edit pack, so every fresh install failed image/packs. #118 re-pinned them from a build on our second Spark.

    Your table showed a second problem. Your te/weights.safetensors, vae/weights.safetensors and vae/manifest.json match ours byte for byte, so the weights are reproducible across boxes. Your te/manifest.json and edit.json didn't match.

    The cause was one field. The edit step copied the vision tower's whole transformers config into te/manifest.json, and that includes transformers_version. Our twin venv installed transformers>=4.57, which gave your box 5.20.2 and ours 5.21.0. When we put "5.20.2" into our manifest, it reproduced your a7014666… exactly. edit.json records that manifest's hash, so it reproduced your 79baea31… too.

    The fix is in #130 (commit d2fe032, merged as 059b3ad):

    • The manifest no longer depends on the transformers version. It stores only the vision tower's architecture fields from the checkpoint, in a fixed order. Two boxes with different transformers versions now write identical bytes; we tested your variant and ours.
    • Existing packs are fixed in place. tools/spark/prepare.sh rewrites an existing edit pack's te/manifest.json and edit.json the same way. Only metadata changes, so there is no re-pack, and your stopgap pins can go.
    • The pins are updated for those two files (te/manifest.json 130922 bytes, 91fd46ff…; edit.json 64638c30…). The weight pins are unchanged.
    • The twin venv now pins transformers==5.21.0.

    You also mentioned a box with an older image-packs stamp. The stamp is the sha256 of the pin file, so the new pins make image/packs run again on such a box. It doesn't silently pass.

    Could you check it on your Spark? Revert your local change to the pin file, pull main (059b3ad or later), and run the same command again:

    git checkout -- tools/twin/packs/built/qwen-image-2.1-turbo.json   # your local stopgap pins
    git pull
    tools/install/bootstrap.sh --profile jarvis-gb10 --accept

    image/packs should run again. The log should show edit pack metadata normalised (#84), then pass: 11/11 files match, and the install should go on from there. Like any image/packs run, the step wants 64 GiB of free memory. If it still fails, please paste the FAIL lines from install/logs/image-packs.log.

    Thanks again, and especially for offering to test.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions