Download CONVERSION_NOTES.md from zgkm/GUI: direct link, hf CLI and curl.
- Browser
- Download file 3.83 kB
-
https://huggingface.co/zgkm/GUI/resolve/main/CONVERSION_NOTES.md
- Command line
-
hf download hf://zgkm/GUI/CONVERSION_NOTES.md
-
curl -L -o CONVERSION_NOTES.md https://huggingface.co/zgkm/GUI/resolve/main/CONVERSION_NOTES.md
Qwen3-VL-8B-sft-mr-v1.1 / checkpoint-7199 -> HuggingFace format
Source: /mnt/beegfs/checkpoints/xieqingsong/Qwen3-VL-8B-sft-mr-v1.1/checkpoint-7199
Converted: 2026-08-28, verified against transformers 4.57.6.
The source is a transformers 5.12.1 Trainer checkpoint. DeepSpeed had already
written a consolidated model.safetensors next to the ZeRO shards, so
zero_to_fp32.py was NOT needed — global_step7199/ holds optimizer state only
(100 GB, training-resume material, not copied).
Weights: untouched
All 750 tensors copied verbatim and verified bit-identical to the source
(torch.equal per tensor), all bfloat16, no NaN/Inf. Key names already match
the 4.57 layout (model.language_model.*, model.visual.*, lm_head.weight) —
no renaming was required.
config.json: the one change that actually mattered
transformers 5.x renamed text_config.rope_scaling -> rope_parameters and moved
rope_theta inside it. 4.57 looks for rope_scaling only. Loading the source
checkpoint under 4.57 therefore succeeds with no error while silently dropping
mrope_section: [24, 20, 20] and mrope_interleaved: true:
AutoConfig.from_pretrained(checkpoint-7199).text_config.rope_scaling -> None
i.e. the model falls back to plain RoPE and every image gets the wrong positional
encoding, with nothing in the logs to say so. The conversion restores the 4.57
layout; the converted dir asserts mrope_section == [24, 20, 20] on load.
Other config edits, all schema-only:
| key | source (tf 5.12.1) | converted (tf 4.57) | why |
|---|---|---|---|
text_config.rope_parameters |
present | -> rope_scaling + rope_theta |
see above |
vision_config.model_type |
qwen3_vl_vision |
qwen3_vl |
4.57 registry name |
use_cache (top level) |
false |
removed | training artifact; text_config.use_cache stays true |
bos/eos/pad_token_id, dtype (top level) |
present | removed | not in 4.57's Qwen3VLConfig; they live in generation_config.json |
text_config.pad_token_id |
null |
removed | tf-5.x writes an explicit null |
vision_config.dtype |
bfloat16 |
removed | inferred from tensors |
transformers_version |
5.12.1 |
4.57.0 |
generation_config.json: eos_token_id deduped [151645, 151645, 151643] ->
[151645, 151643] (the duplicate was a tf-5.x save artifact), bos_token_id: 151643 added to match the base model. Sampling params left as trained.
Tokenizer / processor
Taken from /mnt/beegfs/weights/Qwen3-VL-8B-Instruct (the SFT base). This is
sound, and was checked rather than assumed:
- vocab (151643 entries) — identical
- added_tokens (26) — identical
- merges (151387) — identical once the tf-5.x list-of-pairs serialization
(
["Ġ","Ġ"]) is normalized to 4.x's string form ("Ġ Ġ") - chat template — byte-identical to the checkpoint's own
chat_template.jinja
The SFT trained embed_tokens but added no tokens, so the vocabulary is the
base's. processor_config.json (tf-5.x nested format) was dropped in favour of
preprocessor_config.json + video_preprocessor_config.json; their values agree
(min_pixels 65536 / max_pixels 16777216, matching the training DataArguments).
Not copied
global_step7199/, rng_state_*.pth, scheduler.pt, trainer_state.json,
training_args.bin, latest, zero_to_fp32.py, tokenizer_config.json.tf5bak.
Verified
AutoConfig / AutoProcessor / AutoModelForImageTextToText load under tf 4.57.6
8.77B params, bf16, generate() on a test image returns coherent text.
Note training_args.bin cannot be unpickled outside the training env (it needs
the qwenvl module); the training meta was
datav2/train_data_traj_v2_mr_spatial_stepinstr.json (navigation + grounding
styles, conv template internvl2_5_mobile_navigation_v1).