| # COPSD-style cross-model OPD: frozen 7B teacher + 0.5B student on ChartQA | |
| set -euo pipefail | |
| cd "$(dirname "$0")/.." | |
| source "$(dirname "$0")/launch_utils.sh" | |
| export DYME_OPSD_MODE="${DYME_OPSD_MODE:-rlsd}" | |
| export DYME_OPSD_PROVIDERS="${DYME_OPSD_PROVIDERS:-}" | |
| export DYME_OPSD_PRIVILEGE_PROFILE="${DYME_OPSD_PRIVILEGE_PROFILE:-text}" | |
| export DYME_TEACHER_MODEL="${DYME_TEACHER_MODEL:-llava-hf/llava-onevision-qwen2-7b-ov-hf}" | |
| export DYME_OUTPUT_DIR="${DYME_OUTPUT_DIR:-./outputs/opd-7b-chartqa}" | |
| # Optional ZeRO-2 student sharding (HF Accelerate + DeepSpeed JSON). Pair with DYME_TEACHER_DEVICE_MAP=same. | |
| # ZeRO-2 (default) or ZeRO-3 colocate for tighter memory: | |
| # ACCELERATE_CONFIG=default_config_zero3_colocate.yaml | |
| export ACCELERATE_CONFIG="${ACCELERATE_CONFIG:-default_config.yaml}" | |
| # DDP default: complement GPUs. DeepSpeed script uses default_config_zero2.yaml instead. | |
| export DYME_TEACHER_DEVICE_MAP="${DYME_TEACHER_DEVICE_MAP:-auto}" | |
| # OPSD-DETAIL: skip JSD decomposition when free GPU memory (GiB) is below this threshold | |
| export DYME_OPSD_DETAIL_MIN_FREE_GB="${DYME_OPSD_DETAIL_MIN_FREE_GB:-4.0}" | |
| ACCELERATE_CONFIG="$(resolve_accelerate_config)" | |
| NUM_PROCESSES="$(detect_num_gpus)" | |
| print_launch_plan | |
| LOG_DIR="${DYME_LOG_DIR:-./outputs/logs}" | |
| mkdir -p "${LOG_DIR}" | |
| LOG_FILE="${LOG_DIR}/train_opd_7b_$(date +%Y%m%d_%H%M%S).log" | |
| echo "OPD teacher: ${DYME_TEACHER_MODEL}" | |
| echo "Writing log to: ${LOG_FILE}" | |
| accelerate launch --config_file "${ACCELERATE_CONFIG}" --num_processes "${NUM_PROCESSES}" main.py \ | |
| --config config/config_opd_7b_chartqa.py \ | |
| --mode rl \ | |
| --opsd_enabled \ | |
| --opsd_mode "${DYME_OPSD_MODE}" \ | |
| --opsd_providers "${DYME_OPSD_PROVIDERS}" \ | |
| 2>&1 | tee "${LOG_FILE}" | |