#!/bin/bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" cd "${PROJECT_ROOT}" DATASET_DIR="${DATASET_DIR:-${EVO2_DATASET_DIR:-${PROJECT_ROOT}/data/data_mini/genome_data}}" CKPT_DIR="${CKPT_DIR:-}" AVAILABLE_DEVICES="$(python -c "import torch; c=torch.cuda.device_count(); print(c if c > 0 else 1)")" DEVICES="${DEVICES:-${AVAILABLE_DEVICES}}" SEQ_LENGTH="${SEQ_LENGTH:-8192}" MICRO_BATCH_SIZE="${MICRO_BATCH_SIZE:-2}" GLOBAL_BATCH_SIZE="${GLOBAL_BATCH_SIZE:-}" MAX_STEPS="${MAX_STEPS:-1000}" WARMUP_STEPS="${WARMUP_STEPS:-5}" VAL_CHECK_INTERVAL="${VAL_CHECK_INTERVAL:-50}" LIMIT_VAL_BATCHES="${LIMIT_VAL_BATCHES:-2}" WORKERS="${WORKERS:-8}" CHECKPOINTING="${CHECKPOINTING:-1}" EXTRA_ARGS=() if [[ -n "${GLOBAL_BATCH_SIZE}" ]]; then EXTRA_ARGS+=(--global-batch-size "${GLOBAL_BATCH_SIZE}") fi if [[ "${CHECKPOINTING}" != "1" ]]; then EXTRA_ARGS+=(--disable-checkpointing --no-save-last-checkpoint) fi if [[ -n "${CKPT_DIR}" ]]; then if [[ ! -d "${CKPT_DIR}" ]]; then echo "Error: Evo2 1B checkpoint directory not found: ${CKPT_DIR}" >&2 echo "Set CKPT_DIR only when you want to restore from a 1B NeMo checkpoint." >&2 exit 1 fi EXTRA_ARGS+=(--ckpt-dir "${CKPT_DIR}") fi echo "EVO2_PROJECT_ROOT: ${PROJECT_ROOT}" echo "EVO2_DATASET_DIR: ${DATASET_DIR}" echo "EVO2_CKPT_DIR: ${CKPT_DIR:-}" echo "EVO2_DEVICES: ${DEVICES}" echo "EVO2_SEQ_LENGTH: ${SEQ_LENGTH}" echo "EVO2_MAX_STEPS: ${MAX_STEPS}" echo "EVO2_CHECKPOINTING: ${CHECKPOINTING}" echo "EVO2_WORKERS: ${WORKERS}" export OMP_NUM_THREADS="${OMP_NUM_THREADS:-1}" export MKL_NUM_THREADS="${MKL_NUM_THREADS:-1}" python scripts/train.py \ -d config/genome_data_config.yaml \ --dataset-dir "${DATASET_DIR}" \ --model-size 1b \ --devices "${DEVICES}" \ --num-nodes 1 \ --seq-length "${SEQ_LENGTH}" \ --micro-batch-size "${MICRO_BATCH_SIZE}" \ --lr 0.0001 \ --warmup-steps "${WARMUP_STEPS}" \ --max-steps "${MAX_STEPS}" \ --clip-grad 1 \ --wd 0.01 \ --workers "${WORKERS}" \ --activation-checkpoint-recompute-num-layers 1 \ --val-check-interval "${VAL_CHECK_INTERVAL}" \ --limit-val-batches "${LIMIT_VAL_BATCHES}" \ "${EXTRA_ARGS[@]}"