55 lines
1.4 KiB
Bash
Executable File
55 lines
1.4 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
# ─── SmolLM3-3B LoRA Training Pipeline ───
|
|
# Stages: prepare → train (skip with env vars)
|
|
#
|
|
# Usage:
|
|
# docker run --gpus all -v /path/to/output:/data smollora
|
|
# docker run --gpus all -e SKIP_PREP=1 -v /path/to/processed:/data/processed smollora
|
|
|
|
MODEL="${MODEL:-HuggingFaceTB/SmolLM3-3B}"
|
|
DATA_DIR="${DATA_DIR:-/data}"
|
|
OUTPUT_DIR="${OUTPUT_DIR:-/output}"
|
|
EPOCHS="${EPOCHS:-3}"
|
|
BATCH_SIZE="${BATCH_SIZE:-4}"
|
|
LR="${LR:-2e-4}"
|
|
LORA_R="${LORA_R:-16}"
|
|
MAX_LENGTH="${MAX_LENGTH:-4096}"
|
|
|
|
echo "🎭 SmolLM3-3B LoRA Training Pipeline"
|
|
echo " Model: $MODEL"
|
|
echo " Data: $DATA_DIR"
|
|
echo " Output: $OUTPUT_DIR"
|
|
echo " Epochs: $EPOCHS"
|
|
echo " Batch: $BATCH_SIZE"
|
|
echo " LR: $LR"
|
|
echo " LoRA r: $LORA_R"
|
|
echo ""
|
|
|
|
# Stage 1: Data preparation
|
|
if [ "${SKIP_PREP:-0}" = "0" ]; then
|
|
echo "━━━ Stage 1: Data Preparation ━━━"
|
|
python /app/prepare_data.py \
|
|
--output-dir "$DATA_DIR"
|
|
echo "✅ Data prepared in $DATA_DIR"
|
|
else
|
|
echo "⏭ Skipping data preparation (SKIP_PREP=1)"
|
|
fi
|
|
|
|
# Stage 2: Training
|
|
echo ""
|
|
echo "━━━ Stage 2: LoRA Training ━━━"
|
|
python /app/train_lora.py \
|
|
--data-dir "$DATA_DIR" \
|
|
--model "$MODEL" \
|
|
--output-dir "$OUTPUT_DIR" \
|
|
--epochs "$EPOCHS" \
|
|
--batch-size "$BATCH_SIZE" \
|
|
--lr "$LR" \
|
|
--lora-r "$LORA_R" \
|
|
--max-length "$MAX_LENGTH"
|
|
|
|
echo ""
|
|
echo "🎭 Training complete! Adapter saved to $OUTPUT_DIR/final"
|