CoolFace
Modelpublic

NiuNiu0110/rst-qwen3.5-4b-nemo-sft

sourceHugging Faceapache-2.0updated 21d agoView on Hugging Face
0likes27downloads
Model Card

rst-qwen3.5-4b-nemo-sft

Supervised fine-tune of `Qwen/Qwen3.5-4B` on Nemotron terminal trajectories, from the Recursive Synthesis for Long-Horizon Terminal Tasks pipeline at k1ssloo/RST-Train.

What this checkpoint is

Base modelQwen/Qwen3.5-4B
Training corpus`NiuNiu0110/Nemotron-Terminal-SFT-terminus`
Checkpointglobal_step_480
ArchitectureQwen3_5ForConditionalGeneration
Weights8.7 GB, bfloat16, 738 tensors
Vision tower297 tensors, copied verbatim from the base model

Trained with verl + FSDP2 on a pre-tokenized corpus: the Qwen3.5 loss mask is baked into the data once (scripts/15_export_pretokenized.py) rather than recomputed per backend, because tokenizing turns separately and concatenating them does not reproduce the whole-conversation render for this template.

Benchmarks

None. No benchmark has been run against this checkpoint. The eval harness exists in the repo but has not been executed on these weights, so there is no score here to quote — not a low one, not a high one. Treat it as an untested artifact of a training run.

How it was exported

verl writes FSDP shards, which from_pretrained cannot load. These weights came from scripts/08_prepare_eval_ckpt.sh, which merges every shard, splices the vision tower back in from the base model (training carries only the text stack), and then verifies that the text weights actually moved — a merge over a missing shard produces a loadable model that is silently part-untrained, and a merge that reproduced the base is indistinguishable from a successful one without that check.

Usage

python
from transformers import AutoModelForImageTextToText, AutoProcessor

model = AutoModelForImageTextToText.from_pretrained("NiuNiu0110/rst-qwen3.5-4b-nemo-sft", dtype="auto", device_map="auto")
processor = AutoProcessor.from_pretrained("NiuNiu0110/rst-qwen3.5-4b-nemo-sft")

License

Apache-2.0, inherited from the base model.