From e1b80301d802a60b010dee5ad5e9741971d0d90a Mon Sep 17 00:00:00 2001 From: Christian Medina <37550954+cmedinasoriano@users.noreply.github.com> Date: Tue, 30 Jun 2026 15:03:40 -0400 Subject: [PATCH] refactor: update deploy script to match cyron pattern --- deploy-and-train.sh | 96 +++++++++++++++++++++++++++++++-------------- 1 file changed, 66 insertions(+), 30 deletions(-) diff --git a/deploy-and-train.sh b/deploy-and-train.sh index 5ca8146..6a2f23a 100755 --- a/deploy-and-train.sh +++ b/deploy-and-train.sh @@ -1,43 +1,79 @@ #!/bin/bash -# -# LoRA Training Deployment Script -# Clones the repo and trains the LoRA adapter on the server +# Update a GPU-server clone of agenx-lora-training and run the training. # # Usage: # bash deploy-and-train.sh # -# This will: -# 1. Clone the repo to /opt/loras/agenx-lora-training -# 2. Setup Python environment with GPU support -# 3. Prepare the dataset -# 4. Train the LoRA adapter +# Optional overrides: +# LORA_DEPLOY_REPO_URL=https://gitea.cyaren.com/cmedina/agenx-lora-training.git +# LORA_DEPLOY_REPO_DIR=/opt/loras/agenx-lora-training +# LORA_DEPLOY_BRANCH=main # -set -e +set -euo pipefail -# Configuration -REPO_URL="https://gitea.cyaren.com/cmedina/agenx-lora-training.git" -INSTALL_DIR="/opt/loras/agenx-lora-training" -PYTHON_VERSION="3.10" - -echo "==============================================" -echo "LoRA Training Deployment" -echo "==============================================" -echo "" - -# Step 1: Create installation directory -echo "[1/5] Creating installation directory..." -mkdir -p /opt/loras -if [ -d "$INSTALL_DIR" ]; then - echo " Directory already exists: $INSTALL_DIR" - echo " Removing old clone..." - rm -rf "$INSTALL_DIR" +# Load credentials from env file if it exists (override with env vars). +if [ -f /home/cyaren/.deploy.env ]; then + set -a; source /home/cyaren/.deploy.env; set +a fi -# Step 2: Clone the repository -echo "[2/5] Cloning repository..." -git clone "$REPO_URL" "$INSTALL_DIR" -echo " Repository cloned to: $INSTALL_DIR" +DEPLOY_USER="${LORA_DEPLOY_USER:-}" +DEPLOY_TOKEN="${LORA_DEPLOY_TOKEN:-}" + +# Build the repo URL; embed user:token for HTTPS auth when provided. +if [ -n "${DEPLOY_USER}" ] && [ -n "${DEPLOY_TOKEN}" ]; then + REPO_URL="${LORA_DEPLOY_REPO_URL:-https://${DEPLOY_USER}:${DEPLOY_TOKEN}@gitea.cyaren.com/cmedina/agenx-lora-training.git}" +else + REPO_URL="${LORA_DEPLOY_REPO_URL:-https://gitea.cyaren.com/cmedina/agenx-lora-training.git}" +fi +REPO_DIR="${LORA_DEPLOY_REPO_DIR:-/opt/loras/agenx-lora-training}" +BRANCH="${LORA_DEPLOY_BRANCH:-main}" +REMOTE="${LORA_DEPLOY_REMOTE:-origin}" + +RUN_USER="${SUDO_USER:-$(id -un)}" +RUN_GROUP="$(id -gn "${RUN_USER}" 2>/dev/null || id -gn)" +REPO_PARENT="$(dirname "${REPO_DIR}")" + +echo "=== LoRA Training Git Deploy ===" +echo "Repo: ${REPO_URL}" +echo "Dir: ${REPO_DIR}" +echo "Branch: ${BRANCH}" + +if [ ! -d "${REPO_PARENT}" ]; then + sudo install -d -m 0755 -o "${RUN_USER}" -g "${RUN_GROUP}" "${REPO_PARENT}" +fi + +if [ ! -d "${REPO_DIR}/.git" ]; then + git clone --branch "${BRANCH}" "${REPO_URL}" "${REPO_DIR}" +fi + +cd "${REPO_DIR}" + +# Ensure the remote URL matches the authenticated HTTPS URL. +git remote set-url "${REMOTE}" "${REPO_URL}" + +git fetch "${REMOTE}" "${BRANCH}" +git checkout "${BRANCH}" +git pull --ff-only "${REMOTE}" "${BRANCH}" + +# Setup Python environment and train +echo "" +echo "=== Setting up Python environment ===" +python3 -m venv venv +source venv/bin/activate +pip install --upgrade pip +pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 +pip install transformers datasets trl peft accelerate bitsandbytes + +# Prepare dataset +echo "" +echo "=== Preparing dataset ===" +python3 training/scripts/prepare_dataset.py --input dataset/combined_20k.jsonl --output training/data + +# Train +echo "" +echo "=== Starting LoRA training ===" +python3 training/scripts/train.py --config training/configs/llama2-7b-lora.yaml # Step 3: Setup Python environment echo "[3/5] Setting up Python environment..."