feat: add CLI entry-point and launch script for PEFT fine-tuning
- finetune.py: argparse CLI with all config flags, CSV data loading, chronological train/val split, and full training pipeline Usage: python -m peft.finetune --data_path data.csv --value_col y Multi-GPU: torchrun --nproc_per_node=4 -m peft.finetune ... - finetune.sh: env-var driven launch script for single/multi-GPU Usage: DATA_PATH=data.csv NUM_GPUS=4 bash peft/finetune.sh
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env bash
|
||||
# ============================================================================
|
||||
# Example launch script for TimesFM 2.5 PEFT fine-tuning.
|
||||
#
|
||||
# Single GPU:
|
||||
# bash peft/finetune.sh
|
||||
#
|
||||
# Multi-GPU (e.g. 4 GPUs):
|
||||
# NUM_GPUS=4 bash peft/finetune.sh
|
||||
# ============================================================================
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
NUM_GPUS="${NUM_GPUS:-1}"
|
||||
|
||||
# --- Data -------------------------------------------------------------------
|
||||
DATA_PATH="${DATA_PATH:-data.csv}" # path to your CSV
|
||||
ID_COL="${ID_COL:-}" # series-id column (long format), leave empty for wide
|
||||
VALUE_COL="${VALUE_COL:-}" # value column (long format), leave empty for wide
|
||||
CONTEXT_LEN="${CONTEXT_LEN:-512}"
|
||||
HORIZON_LEN="${HORIZON_LEN:-128}"
|
||||
STRIDE="${STRIDE:-32}"
|
||||
VAL_SPLIT="${VAL_SPLIT:-0.2}"
|
||||
|
||||
# --- Adapter ----------------------------------------------------------------
|
||||
ADAPTER_TYPE="${ADAPTER_TYPE:-lora}" # lora | dora
|
||||
LORA_RANK="${LORA_RANK:-8}"
|
||||
LORA_ALPHA="${LORA_ALPHA:-16}"
|
||||
TARGET_MODULES="${TARGET_MODULES:-all}" # all | attention | ffn
|
||||
NUM_ADAPTER_LAYERS="${NUM_ADAPTER_LAYERS:-4}" # 0=all 20, advisor recommends 2-4
|
||||
|
||||
# --- Training ---------------------------------------------------------------
|
||||
NUM_EPOCHS="${NUM_EPOCHS:-10}"
|
||||
BATCH_SIZE="${BATCH_SIZE:-32}"
|
||||
LR="${LR:-1e-4}"
|
||||
MIXED_PRECISION="${MIXED_PRECISION:-no}" # no | fp16 | bf16
|
||||
|
||||
# --- Logging / checkpoint ---------------------------------------------------
|
||||
CHECKPOINT_DIR="${CHECKPOINT_DIR:-./peft_checkpoints}"
|
||||
|
||||
# ============================================================================
|
||||
|
||||
CMD_ARGS=(
|
||||
peft/finetune.py
|
||||
--data_path "$DATA_PATH"
|
||||
--context_len "$CONTEXT_LEN"
|
||||
--horizon_len "$HORIZON_LEN"
|
||||
--stride "$STRIDE"
|
||||
--val_split "$VAL_SPLIT"
|
||||
--adapter_type "$ADAPTER_TYPE"
|
||||
--lora_rank "$LORA_RANK"
|
||||
--lora_alpha "$LORA_ALPHA"
|
||||
--target_modules "$TARGET_MODULES"
|
||||
--num_adapter_layers "$NUM_ADAPTER_LAYERS"
|
||||
--train_output_head
|
||||
--num_epochs "$NUM_EPOCHS"
|
||||
--batch_size "$BATCH_SIZE"
|
||||
--learning_rate "$LR"
|
||||
--mixed_precision "$MIXED_PRECISION"
|
||||
--checkpoint_dir "$CHECKPOINT_DIR"
|
||||
)
|
||||
|
||||
# Optional columns.
|
||||
[[ -n "$ID_COL" ]] && CMD_ARGS+=(--id_col "$ID_COL")
|
||||
[[ -n "$VALUE_COL" ]] && CMD_ARGS+=(--value_col "$VALUE_COL")
|
||||
|
||||
if [[ "$NUM_GPUS" -gt 1 ]]; then
|
||||
echo "Launching multi-GPU training on $NUM_GPUS GPUs …"
|
||||
torchrun --nproc_per_node="$NUM_GPUS" "${CMD_ARGS[@]}"
|
||||
else
|
||||
echo "Launching single-GPU training …"
|
||||
python "${CMD_ARGS[@]}"
|
||||
fi
|
||||
Reference in New Issue
Block a user