#!/bin/bash # C3 Phase 2 SFT: 10000 opt-steps from stage1_merged, stage_0=0/1=24000/2=48000/vqa=64000 set -euo pipefail source /etc/network_turbo 2>/dev/null || true source /root/autodl-tmp/covt_repro/scripts/_common_env.sh STAGE1_MERGED=$BASE/covt_data/output/merged/stage1_merged OUTPUT_DIR=$BASE/covt_data/output/lora_stage234 mkdir -p $OUTPUT_DIR export MASTER_PORT=22813 export CUDA_VISIBLE_DEVICES=0 NUM_DEVICES=1 BATCH_PER_DEVICE=4 GLOBAL_BATCH_SIZE=8 GRAD_ACCUM_STEPS=$((GLOBAL_BATCH_SIZE / (BATCH_PER_DEVICE * NUM_DEVICES))) STAGE_0_STEP=0 STAGE_1_STEP=6000 STAGE_2_STEP=12000 VQA_ONLY_STAGE=16000 MAX_STEPS=10000 cd $COVT_CODE/train deepspeed \ --num_gpus 1 \ --master_port $MASTER_PORT \ src/training/train.py \ --use_liger True \ --lora_enable True \ --vision_lora True \ --use_dora False \ --lora_namespan_exclude '["embed_tokens", "lm_head", "dino", "sam", "depth", "SD", "internvit", "pidinet", "siglip", "metaclip"]' \ --lora_rank 16 \ --lora_alpha 32 \ --lora_dropout 0.01 \ --num_lora_modules -1 \ --model_id $STAGE1_MERGED \ --model_path $STAGE1_MERGED \ --anchor_model_id '["sam", "depth", "dino"]' \ --data_path $DATA_DIR/dataset/CoVT-Dataset \ --image_folder $DATA_DIR/dataset/CoVT-Dataset \ --remove_unused_columns False \ --freeze_vision_tower True \ --freeze_llm True \ --tune_merger False \ --bf16 True \ --fp16 False \ --disable_flash_attn2 False \ --output_dir "$OUTPUT_DIR" \ --resume_from_checkpoint True \ --max_steps $MAX_STEPS \ --per_device_train_batch_size $BATCH_PER_DEVICE \ --gradient_accumulation_steps $GRAD_ACCUM_STEPS \ --image_min_pixels $IMAGE_MIN_PIXELS \ --image_max_pixels $IMAGE_MAX_PIXELS \ --image_resized_width $IMAGE_RESIZE_W \ --image_resized_height $IMAGE_RESIZE_H \ --learning_rate 5e-5 \ --projection_layer_lr 1e-5 \ --weight_decay 0.1 \ --warmup_ratio 0.05 \ --lr_scheduler_type "cosine" \ --logging_steps 1 \ --tf32 True \ --gradient_checkpointing True \ --lazy_preprocess True \ --save_strategy "steps" \ --save_steps 1000 \ --dataloader_num_workers 0 \ --deepspeed $SCRIPTS_DIR/zero2_pro6000.json \ --report_to tensorboard \ --run_name "sft_phase2" \ --training_stage "full" \ --stage_0_step $((STAGE_0_STEP * BATCH_PER_DEVICE)) \ --stage_1_step $((STAGE_1_STEP * BATCH_PER_DEVICE)) \ --stage_2_step $((STAGE_2_STEP * BATCH_PER_DEVICE)) \ --vqa_only_stage $VQA_ONLY_STAGE \ 2>&1 | tee $OUTPUT_DIR/sft_phase2.log