Skip to main content
Training VLMs with FSDP or Megatron on single-turn reasoning task using GRPO on the GEO3K dataset. We used processed version here. Use the CUDA 13 Miles image from the installation guide and keep its bundled cuDNN version. FSDP vs Megatron Reward Plot

Data Preparation (For SFT Training)

The geo3k_imgurl dataset contains:
  • problem: The math problem text (string)
  • answer: The answer (string, e.g., “270”)
  • images: Image data (list)
For SFT training, we need to format the answer field for \boxed{} format and the messages. You can use the following script to format the answer field:

Reproduce

Configuration

Supported Models

  • Qwen3-VL-2B-Instruct
  • Qwen3-VL-4B-Instruct
  • Qwen3-VL-8B-Instruct
  • Qwen3-VL-30B-A3B-Instruct
  • Qwen3-VL-235B-A22B-Instruct
  • Qwen3-VL-2B-Thinking
  • Qwen3-VL-4B-Thinking
  • Qwen3-VL-8B-Thinking
  • Qwen3-VL-30B-A3B-Thinking
  • Qwen3-VL-235B-A22B-Thinking

Notes

Reward Model Configuration

We experimented with three reward model configurations:
  1. A geo3k-specific RM with tolerance=0.05 (to handle rounding in ground truth labels)
  2. A geo3k-specific RM with tolerance=0.0 (strict matching)
  3. The default math RM
All three performed similarly, so we use the default math RM for simplicity.

Numerical Precision with Non-Binary Rewards

Our initial geo3k-specific verifier produced “format scores” (0 and 0.9) instead of clean binary rewards. Under fp32, fractional values like 0.9 can’t be exactly represented, so when all samples in a group have the same reward, reward - mean doesn’t equal zero—creating spurious gradient signal. We fixed this by switching to the default math RM with clean binary 0/1 rewards. If you encounter similar precision issues with non-binary rewards, you can change the reward tensor dtype from torch.float to torch.float16 in miles/ray/rollout/train_data_conversion.py (_post_process_rewards) to truncate precision artifacts.

B200

Blackwell currently does not support fa3, we need to use --sglang-mm-attention-backend sdpa and --attn-implementation flash_attention_2