Training
Trained with verl (0.9.0.dev) on 4 GPUs, FSDP2 actor +
vLLM rollout.
Table | |
|---|
| Algorithm | GRPO (adv_estimator=grpo), 4 rollouts per prompt |
| Steps | 200 |
| Train batch size | 128 prompts |
| Mini / micro batch | 64 / 2 per GPU |
| Max prompt / response length | 1024 / 2048 tokens |
| Learning rate | 1e-6 |
| KL | use_kl_loss=True, kl_loss_coef=0.001, low_var_kl; no KL in reward |
| Entropy coefficient | 0 |
| Rollout | vLLM, TP=1, temperature per verl defaults |
Prompts are in reasoning ("think") format; responses are scored by a rule-based
instruction-following checker.
Precision
The weights are stored as float32 — this is verl's raw training export, not a
post-training cast. config.json declares dtype: bfloat16, so transformers casts to
bf16 on load by default. Pass dtype="float32" if you want the stored precision.
Usage
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "ZetaRRR/Qwen3.5-4B-VerIH-step200"
tok = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, dtype="auto", device_map="auto")
messages = [{"role": "user", "content": "Write a haiku about gradients. Use no commas."}]
inputs = tok.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
out = model.generate(inputs, max_new_tokens=2048)
print(tok.decode(out[0][inputs.shape[-1]:], skip_special_tokens=True))
Qwen3.5-4B is a hybrid-attention (GatedDeltaNet + full attention) multimodal architecture;
the vision tower is carried over from the base model unchanged, as RL touched text only.