#!/bin/bash # Full CompanionGuard-RL pipeline on 4x RTX 5090. # # Step 1: Generate data (calls LLM API, single process) # Step 2: Annotate + split (calls LLM API, single process) # Step 3: Train detector (4 GPU DDP, BF16) # Step 4: Train intervention (4 GPU BC + 1 GPU PPO) # Step 5: Evaluate (single GPU) # # Usage: # export DASHSCOPE_API_KEY=your_key # for Qwen # bash scripts/run_full_pipeline.sh set -e NUM_GPUS=4 echo "======================================================" echo " CompanionGuard-RL Full Pipeline — 4x RTX 5090" echo "======================================================" # ── Step 1: Data generation ──────────────────────────────────────────── echo "" echo "[1/5] Generating dataset..." python scripts/generate_data.py --config configs/data_generation.yaml # ── Step 2: LLM annotation + split ───────────────────────────────────── echo "" echo "[2/5] Annotating and splitting dataset..." python scripts/annotate_data.py \ --input data/raw/generated.jsonl \ --output data/processed/annotated.jsonl \ --config configs/data_generation.yaml # ── Step 3: Train detector ────────────────────────────────────────────── echo "" echo "[3/5] Training risk detector (4 GPU DDP, BF16)..." accelerate launch \ --num_processes=${NUM_GPUS} \ --mixed_precision=bf16 \ --multi_gpu \ scripts/train_detector.py \ --config configs/detector_config.yaml # ── Step 4: Train intervention policy ────────────────────────────────── echo "" echo "[4/5] Training intervention policy (BC: 4 GPU, PPO: 1 GPU)..." accelerate launch \ --num_processes=${NUM_GPUS} \ --mixed_precision=bf16 \ --multi_gpu \ scripts/train_intervention.py \ --config configs/intervention_config.yaml \ --train-data data/processed/train.jsonl # ── Step 5: Evaluate ──────────────────────────────────────────────────── echo "" echo "[5/5] Evaluating..." python scripts/evaluate.py \ --detector-ckpt checkpoints/detector/best.pt \ --agent-ckpt checkpoints/intervention/final.pt \ --test-data data/processed/test.jsonl \ --config configs/detector_config.yaml \ --intervention-config configs/intervention_config.yaml \ --output experiments/eval_results.json echo "" echo "======================================================" echo " Pipeline complete. Results: experiments/eval_results.json" echo "======================================================"