# OPSD Fixed Teacher Mode (Self-Distillation) - Megatron
# Paper: Self-Distilled Reasoner (arXiv:2601.18734)
# Teacher = base model (disable_adapter), Student = LoRA-adapted model
# Dataset: open-r1/OpenThoughts-114k-math
# Model: Qwen3-4B
#
# Hyperparameters aligned with paper's run_opsd.sh:
#   lr=2e-5, lora_r=64, lora_alpha=128, temp=1.2, beta=0.5, lmbda=1, effective batch=32

CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 \
NPROC_PER_NODE=8 \
PYTORCH_CUDA_ALLOC_CONF='expandable_segments:True' \
megatron rlhf \
    --rlhf_type gkd \
    --model Qwen/Qwen3-4B \
    --teacher_model Qwen/Qwen3-4B \
    --external_plugins examples/train/rlhf/opsd/opsd_plugin.py \
    --dataset 'open-r1/OpenThoughts-114k-math' \
    --use_vllm true \
    --vllm_mode colocate \
    --vllm_gpu_memory_utilization 0.6 \
    --vllm_max_model_len 10240 \
    --tuner_type lora \
    --lora_rank 64 \
    --lora_alpha 128 \
    --sleep_level 1 \
    --lmbda 1.0 \
    --beta 0.5 \
    --temperature 1.2 \
    --sft_alpha 0 \
    --torch_dtype bfloat16 \
    --micro_batch_size 2 \
    --global_batch_size 32 \
    --train_iters 1000 \
    --lr 2e-5 \
    --save_steps 100 \
    --save_total_limit 10 \
    --logging_steps 1 \
    --max_length 8192 \
    --max_completion_length 2048 \
    --tensor_model_parallel_size 1 \
    --pipeline_model_parallel_size 1 \
    --attention_backend flash \
    --recompute_granularity selective \
    --finetune \
    --no_save_optim \
    --no_save_rng
