MTP

#1
by wepiqx - opened

Hi,love your work but how did you manage put nextn tensors? because i tried myself with the python script and this is only what i got
image
and the separate MTP (2 gb) works just fine

protoLabsAI org
β€’
edited Jun 28

Hello, thanks for the support.

That expected 442 got 427 gap is exactly 15 tensors, which is the mtp.* head. You're converting the bare base. deepreinforce-ai/Ornith-1.0-9B keeps mtp_num_hidden_layers: 1 in its config but ships none of the mtp.* weights, so the converter writes block_count = 33 into the metadata (declaring the blk.32 MTP layer) but has nothing to fill it, and the load expects 442 while the file has 427.

Fix: graft the head into the trunk before converting, then convert with no --mtp flag:

hf download protoLabsAI/Ornith-1.0-9B-MTP --local-dir ./mtp-head
python ./mtp-head/recipe/graft.py \
  --donor ./mtp-head --target deepreinforce-ai/Ornith-1.0-9B \
  --out ./ornith-9b-mtp --dtype bfloat16
python convert_hf_to_gguf.py ./ornith-9b-mtp --outfile ornith-9b-mtp-BF16.gguf --outtype bf16

Heads up: only 4 of the 15 head tensors are named blk.32.nextn.* (eh_proj, enorm, hnorm, shared_head_norm); the other 11 land as ordinary blk.32.* (attn/ffn/norms), so grepping nextn shows 4, not 15, but the head is complete.

And since your standalone 2 GB draft already works, you can skip grafting entirely: just run the base GGUF with --model-draft mtp-ornith-9b-mtp-kl-Q8_0.gguf --spec-type draft-mtp. Same result.

protoLabsAI org

I've added a troubleshooting section to the readme so others don't hit the same issue.

artificial-citizen changed discussion status to closed

Sign up or log in to comment