#!/usr/bin/env bash set -euo pipefail ROOT=${ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)} umask "${UCFNET_UMASK:-000}" usage() { cat >&2 </dev/null | awk '/libcuda\.so\.1/{print $NF; exit}') if [[ -n "$libcuda_so1" ]]; then mkdir -p "$LIBFIX_DIR" ln -sf "$libcuda_so1" "$LIBFIX_DIR/libcuda.so" fi fi if [[ -d "$LIBFIX_DIR" ]]; then export LD_LIBRARY_PATH="$LIBFIX_DIR:/usr/lib/x86_64-linux-gnu${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" fi materialize_args=( "$ROOT/scripts/materialize_config.py" --repo-root "$ROOT" \ --template "$DETECTOR_TEMPLATE" \ --output "$RUNTIME_CONFIG" \ --data-root "$DATA_ROOT" \ --pretrained-root "$PRETRAINED_ROOT" \ --log-dir "$LOG_DIR" ) if [[ -n "$TRAIN_BATCH_SIZE" ]]; then materialize_args+=(--train-batch-size "$TRAIN_BATCH_SIZE") fi if [[ -n "$TEST_BATCH_SIZE" ]]; then materialize_args+=(--test-batch-size "$TEST_BATCH_SIZE") fi if [[ -n "$TRAIN_WORKERS" ]]; then materialize_args+=(--workers "$TRAIN_WORKERS") fi if [[ -n "$MAX_TRAIN_ITERS" ]]; then materialize_args+=(--max-train-iters "$MAX_TRAIN_ITERS") fi "$ENV_PYTHON" "${materialize_args[@]}" >/dev/null IFS=',' read -r -a GPUS <<< "$GPU_LIST" NPROC=${NPROC:-${#GPUS[@]}} cmd=( "$ENV_PYTHON" -m torch.distributed.launch --master_port="$MASTER_PORT" --nproc_per_node="$NPROC" training/train.py --detector_path "$RUNTIME_CONFIG" --train_config_path "$TRAIN_CONFIG" ) if [[ "$DDP" == "1" ]]; then cmd+=(--ddp) fi if [[ -n "$RESUME" ]]; then cmd+=(--resume "$RESUME") fi if [[ "$RESUME_WEIGHTS_ONLY" == "1" ]]; then cmd+=(--resume-weights-only) fi mkdir -p "$LOG_DIR" chmod -R a+rwX "$LOG_DIR" 2>/dev/null || true cd "$ROOT/DeepfakeBench" echo "Runtime config: $RUNTIME_CONFIG" echo "Logs/checkpoints: $LOG_DIR" CUDA_VISIBLE_DEVICES="$GPU_LIST" "${cmd[@]}"