Compare commits
3 Commits
418a4cc76d
...
8e51c39c6e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8e51c39c6e | ||
|
|
e1b80301d8 | ||
|
|
3d2ae812a7 |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -23,5 +23,5 @@ Thumbs.db
|
||||
# Logs
|
||||
*.log
|
||||
|
||||
# Large dataset (optional, use git-lfs if needed)
|
||||
# dataset/*.jsonl
|
||||
# Large dataset (use git-lfs or exclude)
|
||||
dataset/*.jsonl
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
158
deploy-and-train.sh
Executable file
158
deploy-and-train.sh
Executable file
@@ -0,0 +1,158 @@
|
||||
#!/bin/bash
|
||||
# Update a GPU-server clone of agenx-lora-training and run the training.
|
||||
#
|
||||
# Usage:
|
||||
# bash deploy-and-train.sh
|
||||
#
|
||||
# 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 -euo pipefail
|
||||
|
||||
# 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
|
||||
|
||||
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..."
|
||||
cd "$INSTALL_DIR"
|
||||
|
||||
# Check if Python is available
|
||||
if ! command -v python3 &> /dev/null; then
|
||||
echo "ERROR: Python3 not found. Please install Python $PYTHON_VERSION or later."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create virtual environment
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
|
||||
# Upgrade pip
|
||||
pip install --upgrade pip
|
||||
|
||||
# Install PyTorch with CUDA support
|
||||
echo " Installing PyTorch with CUDA support..."
|
||||
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
|
||||
|
||||
# Install other dependencies
|
||||
echo " Installing training dependencies..."
|
||||
pip install transformers datasets trl peft accelerate bitsandbytes
|
||||
|
||||
# Verify GPU availability
|
||||
echo ""
|
||||
echo " Checking GPU availability..."
|
||||
python3 -c "
|
||||
import torch
|
||||
if torch.cuda.is_available():
|
||||
print(f' ✓ CUDA available: {torch.cuda.get_device_name(0)}')
|
||||
print(f' ✓ VRAM: {torch.cuda.get_device_properties(0).total_mem / 1e9:.1f} GB')
|
||||
else:
|
||||
print(' ✗ CUDA not available. GPU training will not work.')
|
||||
print(' Please ensure CUDA drivers are installed.')
|
||||
exit(1)
|
||||
"
|
||||
|
||||
# Step 4: Prepare dataset
|
||||
echo "[4/5] Preparing dataset..."
|
||||
python3 training/scripts/prepare_dataset.py \
|
||||
--input dataset/combined_20k.jsonl \
|
||||
--output training/data
|
||||
|
||||
echo " Dataset prepared:"
|
||||
echo " - training/data/train.jsonl"
|
||||
echo " - training/data/test.jsonl"
|
||||
|
||||
# Step 5: Train the model
|
||||
echo "[5/5] Starting training..."
|
||||
echo ""
|
||||
echo " Training configuration:"
|
||||
echo " - Model: meta-llama/Llama-2-7b-hf"
|
||||
echo " - Method: QLoRA (4-bit quantization)"
|
||||
echo " - Epochs: 3"
|
||||
echo " - Batch size: 4"
|
||||
echo " - Learning rate: 2e-4"
|
||||
echo ""
|
||||
echo " Estimated training time: 6-24 hours (depending on GPU)"
|
||||
echo ""
|
||||
|
||||
python3 training/scripts/train.py \
|
||||
--config training/configs/llama2-7b-lora.yaml
|
||||
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
echo "Training complete!"
|
||||
echo "=============================================="
|
||||
echo ""
|
||||
echo "Trained model saved to: $INSTALL_DIR/training/output/llama2-7b-lora/"
|
||||
echo ""
|
||||
echo "To generate summaries:"
|
||||
echo " cd $INSTALL_DIR"
|
||||
echo " source venv/bin/activate"
|
||||
echo " python3 training/scripts/inference.py \\"
|
||||
echo " --model training/output/llama2-7b-lora \\"
|
||||
echo " --task \"Your task here\" \\"
|
||||
echo " --files src/file.py \\"
|
||||
echo " --tests-run --test-count 100"
|
||||
echo ""
|
||||
@@ -23,25 +23,24 @@ training/
|
||||
- GPU with 40GB+ VRAM (A100 recommended)
|
||||
- 64GB+ system RAM
|
||||
- 100GB+ free disk space
|
||||
- CUDA drivers installed
|
||||
|
||||
## Installation
|
||||
## Server Deployment (Recommended)
|
||||
|
||||
Use the deployment script to clone and train on your GPU server:
|
||||
|
||||
```bash
|
||||
cd scripts/lora_training/training
|
||||
|
||||
# Create virtual environment
|
||||
python -m venv venv
|
||||
source venv/bin/activate
|
||||
|
||||
# Install dependencies
|
||||
pip install transformers datasets trl peft accelerate bitsandbytes
|
||||
|
||||
# Or use conda
|
||||
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
|
||||
pip install transformers datasets trl peft accelerate bitsandbytes
|
||||
# Deploy and train in one command
|
||||
bash deploy-and-train.sh
|
||||
```
|
||||
|
||||
## Usage
|
||||
This will:
|
||||
1. Clone the repo to `/opt/loras/agenx-lora-training`
|
||||
2. Setup Python environment with CUDA support
|
||||
3. Prepare the dataset
|
||||
4. Train the LoRA adapter
|
||||
|
||||
## Manual Setup
|
||||
|
||||
### 1. Prepare Dataset
|
||||
|
||||
@@ -123,7 +122,3 @@ Trained model is saved to `output/llama2-7b-lora/`:
|
||||
**Generation too long/short:**
|
||||
- Adjust `max_new_tokens` in inference script
|
||||
- Tune `temperature` and `top_p`
|
||||
|
||||
## License
|
||||
|
||||
This training infrastructure is part of the AgenX project.
|
||||
|
||||
Reference in New Issue
Block a user