Files
foxhunt/scripts/README.md

223 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## RunPod Deployment Script
**Script**: `runpod_deploy.py`
Automated deployment script for RunPod GPU pods in EUR-IS region (SECURE cloud).
### Features
- Scans available GPUs with ≥16GB VRAM
- Auto-selects best value GPU (RTX 4090 preferred, then cheapest)
- Supports custom GPU selection
- Dry-run mode for testing
- Automatic network volume attachment
### Requirements
```bash
pip install requests python-dotenv
```
### Configuration
Create `.env.runpod` with:
```
RUNPOD_API_KEY=your_api_key
RUNPOD_VOLUME_ID=your_volume_id
```
### Usage Examples
```bash
# Auto-select best value GPU (dry run)
./scripts/runpod_deploy.py --dry-run
# Deploy with default settings (RTX 4090 preferred)
./scripts/runpod_deploy.py
# Deploy with specific GPU
./scripts/runpod_deploy.py --gpu-type "RTX 3090"
# Custom image and larger disk
./scripts/runpod_deploy.py \
--image runpod/pytorch:2.1.0-py3.10-cuda11.8.0-devel \
--container-disk 100
# With custom command
./scripts/runpod_deploy.py --command "jupyter lab --allow-root"
```
### Default Configuration
- **Cloud Type**: SECURE (no spot interruptions)
- **Region**: EUR-IS (Iceland - low latency to Europe)
- **Image**: `runpod/pytorch:2.4.0-py3.11-cuda12.4.1-devel-ubuntu22.04`
- **Container Disk**: 50GB
- **Network Volume**: Attached from `.env.runpod`
- **Ports**: 8888/http (Jupyter)
### GPU Selection Logic
1. If `--gpu-type` specified and available → use it
2. Else if RTX 4090 available → use it (best value)
3. Else → use cheapest available GPU
### Output
```
✅ POD DEPLOYED SUCCESSFULLY
======================================================================
Pod ID: abc123-xyz789
GPU: RTX 4090 (24GB)
Cost: $0.340/hr
Image: runpod/pytorch:2.4.0
Status: RUNNING
======================================================================
📝 NEXT STEPS:
1. Wait 2-3 minutes for pod to initialize
2. Access Jupyter at: https://abc123-8888.proxy.runpod.net
3. SSH access: ssh root@abc123.ssh.runpod.io
4. Monitor pod: https://www.runpod.io/console/pods
```
### Cost Warning
The script will display hourly costs. Remember to stop pods when done to avoid unnecessary charges.
---
## Local CI/CD Pipeline Simulator
**Script**: `local_ci_pipeline.sh`
Simulates GitLab CI/CD pipeline locally before deployment. Tests Docker image builds and deployments in a safe, local environment.
### Features
- 3-stage pipeline: Build → Test → Push
- GLIBC 2.35 validation (Ubuntu 22.04)
- CUDA 12.4.1 + cuDNN 9 library checks
- Entrypoint script validation
- Docker Hub push readiness
- Color-coded output with timing
- Dry-run mode for testing
- Exit on first failure (CI/CD behavior)
### Requirements
```bash
# Docker installed and running
docker info
# Docker Hub authentication (for push stage)
docker login
```
### Usage Examples
```bash
# Full pipeline (Build + Test + Push)
./scripts/local_ci_pipeline.sh
# Test build only (skip push)
./scripts/local_ci_pipeline.sh --skip-push
# Dry-run (show commands without executing)
./scripts/local_ci_pipeline.sh --dry-run
# Verbose output for debugging
./scripts/local_ci_pipeline.sh --verbose --skip-push
```
### Pipeline Stages
#### Stage 0: Pre-Flight Checks (🔍)
- Docker daemon running
- Docker BuildKit available
- Docker Hub authentication
- Dockerfile exists
- Git repository status
#### Stage 1: Build (🔨)
- Build Docker image with CUDA 12.4.1 + cuDNN 9
- Verify image size (~4.8 GB)
- Duration: ~2-3 minutes
#### Stage 2: Test (🧪)
- GLIBC 2.35 validation
- CUDA libraries (libcuda, libcurand, libcublas, libcudnn)
- nvidia-smi availability (optional)
- Binary GLIBC dependencies
- Entrypoint script validation
- Duration: ~10-20 seconds
#### Stage 3: Push (🚀)
- Push image to Docker Hub
- Verify authentication
- Warn about PRIVATE repository
- Duration: ~1-5 minutes
### Output Example
```
========================================
🚀 LOCAL CI/CD PIPELINE SIMULATOR
========================================
Simulating GitLab CI/CD pipeline locally
Image: jgrusewski/foxhunt:latest
========================================
🔍 STAGE 0: PRE-FLIGHT CHECKS
========================================
✓ All required commands available
✓ Docker daemon running
✓ Docker Hub authenticated
⏱ Pre-flight checks completed in 0m 3s
========================================
🔨 STAGE 1: BUILD
========================================
✓ Docker image built successfully: 4.80 GB
⏱ Build completed in 2m 34s
========================================
🧪 STAGE 2: TEST
========================================
✓ GLIBC 2.35 validated
✓ CUDA libraries validated
⏱ Test completed in 0m 18s
========================================
🚀 STAGE 3: PUSH
========================================
✓ Image pushed successfully
⏱ Push completed in 3m 12s
========================================
✅ PIPELINE COMPLETE
========================================
✓ Total pipeline time: 6m 7s
GitLab CI/CD readiness: ✅
```
### Troubleshooting
**Error: Docker daemon not running**
```bash
sudo systemctl start docker
docker info
```
**Error: Docker Hub authentication failed**
```bash
docker login
# Enter credentials for jgrusewski account
```
**Error: GLIBC version mismatch**
```bash
# Expected: GLIBC 2.35 (Ubuntu 22.04)
docker run --rm jgrusewski/foxhunt:latest ldd --version
```
### Documentation
- Full guide: `/LOCAL_CI_PIPELINE_GUIDE.md`
- Dockerfile: `/Dockerfile.runpod`
- Total time: 4-9 minutes (vs. 10-15 min on GitLab)
- Cost: $0 (vs. GitLab CI/CD minutes)