Files
foxhunt/scripts/README.md

5.5 KiB
Raw Blame History

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

pip install requests python-dotenv

Configuration

Create .env.runpod with:

RUNPOD_API_KEY=your_api_key
RUNPOD_VOLUME_ID=your_volume_id

Usage Examples

# 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

# Docker installed and running
docker info

# Docker Hub authentication (for push stage)
docker login

Usage Examples

# 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

sudo systemctl start docker
docker info

Error: Docker Hub authentication failed

docker login
# Enter credentials for jgrusewski account

Error: GLIBC version mismatch

# 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)