umm / scripts /launch_h3_lora.sh
Orangerl's picture
Update Stage-2 code, evaluations, handoff, and deployment skill
bca45b0 verified
Raw History Blame Contribute Delete
3.44 kB
#!/usr/bin/env bash
set -euo pipefail
UMM_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "${UMM_ROOT}"
# Downloads and SwanLab traffic must go directly from this host.
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY all_proxy ALL_PROXY
export CUDA_VISIBLE_DEVICES="${CUDA_VISIBLE_DEVICES:-0,1,2,3,4,5,6,7}"
export UMM_PROCESS_NAME="${UMM_PROCESS_NAME:-H3_LoRA}"
export SWANLAB_PROJ_NAME="${SWANLAB_PROJ_NAME:-unified-model}"
export SWANLAB_KEY_FILE="${SWANLAB_KEY_FILE:-${UMM_ROOT}/secrets/swanlab_key.txt}"
export MASTER_PORT="${MASTER_PORT:-29617}"
if [[ "${CUDA_VISIBLE_DEVICES}" != "0,1,2,3,4,5,6,7" ]]; then
echo "H3_LoRA formal launch requires all eight GPUs; got ${CUDA_VISIBLE_DEVICES}" >&2
exit 1
fi
if [[ ! -x "${UMM_ROOT}/.env/unvideo/bin/python" ]]; then
echo "Portable environment is not deployed." >&2
exit 1
fi
if [[ ! -s "${SWANLAB_KEY_FILE}" ]]; then
echo "SwanLab key file is missing or empty: ${SWANLAB_KEY_FILE}" >&2
exit 1
fi
if [[ ! -s "${UMM_ROOT}/data/cvbench_500/validation.jsonl" ]]; then
echo "CV-Bench validation subset is not ready." >&2
exit 1
fi
mkdir -p outputs logs
"${UMM_ROOT}/.env/unvideo/bin/python" "${UMM_ROOT}/scripts/validate_covt_references.py" \
2>&1 | tee "${UMM_ROOT}/logs/covt_reference_closure.log"
"${UMM_ROOT}/.env/unvideo/bin/python" "${UMM_ROOT}/scripts/verify_bundle.py" --materialized \
2>&1 | tee "${UMM_ROOT}/logs/H3_LoRA_preflight.log"
nvidia-smi \
--query-gpu=index,name,memory.total,memory.used,memory.free,utilization.gpu,temperature.gpu \
--format=csv,noheader \
| tee logs/H3_LoRA_gpu_before_launch.log
sha256sum \
configs/stage2_covt.yaml \
data/cvbench_500/validation.jsonl \
data/cvbench_500/summary.json \
code/umm/stage2_covt/train.py \
code/umm/stage2_covt/cvbench_eval.py \
> logs/H3_LoRA_launch_fingerprint.sha256
DRY_RUN=1 bash code/umm/stage2_covt/run_train.sh \
--run_name H3_LoRA-dry-run \
> logs/H3_LoRA_dry_run.log
SMOKE_DIR="${UMM_ROOT}/outputs/H3_LoRA_8gpu_smoke"
SMOKE_SENTINEL="${SMOKE_DIR}/SMOKE_COMPLETE"
if [[ "${FORCE_SMOKE:-0}" == "1" || ! -f "${SMOKE_SENTINEL}" ]]; then
mkdir -p "${SMOKE_DIR}"
echo "[H3_LoRA] starting 8-GPU one-step smoke with full CV-Bench-500 evaluation"
bash code/umm/stage2_covt/run_train.sh \
--output_dir "${SMOKE_DIR}" \
--max_steps 1 \
--per_device_train_batch_size 1 \
--save_strategy no \
--run_name H3_LoRA-8gpu-smoke \
--cvbench_eval_every_n_steps 1 \
2>&1 | tee "${UMM_ROOT}/logs/H3_LoRA_8gpu_smoke.log"
date -u +%FT%TZ > "${SMOKE_SENTINEL}"
fi
CAPACITY_DIR="${UMM_ROOT}/outputs/H3_LoRA_8gpu_batch4_smoke"
CAPACITY_SENTINEL="${CAPACITY_DIR}/SMOKE_COMPLETE"
if [[ "${FORCE_SMOKE:-0}" == "1" || ! -f "${CAPACITY_SENTINEL}" ]]; then
mkdir -p "${CAPACITY_DIR}"
echo "[H3_LoRA] starting 8-GPU batch-4 capacity smoke"
bash code/umm/stage2_covt/run_train.sh \
--output_dir "${CAPACITY_DIR}" \
--max_steps 1 \
--per_device_train_batch_size 4 \
--save_strategy no \
--run_name H3_LoRA-8gpu-batch4-smoke \
--cvbench_eval_every_n_steps 0 \
2>&1 | tee "${UMM_ROOT}/logs/H3_LoRA_8gpu_batch4_smoke.log"
date -u +%FT%TZ > "${CAPACITY_SENTINEL}"
fi
echo "[H3_LoRA] connectivity/eval and batch-4 capacity smokes passed; starting resumable 8-GPU formal training"
bash code/umm/stage2_covt/run_train.sh \
--run_name H3_LoRA-stage2-covt4-8gpu \
2>&1 | tee -a "${UMM_ROOT}/logs/H3_LoRA_train.log"