#!/bin/bash # Watch for GPU availability on RunPod # Usage: ./watch_gpu_availability.sh [check_interval_seconds] INTERVAL=${1:-30} # Default: check every 30 seconds echo "===================================================================" echo "RunPod GPU Availability Monitor" echo "===================================================================" echo "Checking every ${INTERVAL} seconds..." echo "Press Ctrl+C to stop" echo "" while true; do TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') echo "[$TIMESTAMP] Scanning for GPUs with ≥16GB VRAM..." # Run availability check .venv/bin/python3 << 'EOF' import os from pathlib import Path from dotenv import load_dotenv import runpod # Load environment env_path = Path.cwd().parent / '.env.runpod' load_dotenv(env_path) runpod.api_key = os.getenv('RUNPOD_API_KEY') # Get GPU types gpu_types = runpod.get_gpus() found_any = False for gpu in gpu_types: memory_gb = gpu.get('memoryInGb', 0) secure = gpu.get('secureCloud', 0) community = gpu.get('communityCloud', 0) total = secure + community name = gpu.get('displayName', 'Unknown') if memory_gb >= 16 and total > 0: price_info = gpu.get('lowestPrice', {}) price = price_info.get('uninterruptablePrice', 'N/A') if price_info else 'N/A' cloud_info = [] if secure > 0: cloud_info.append(f"secure:{secure}") if community > 0: cloud_info.append(f"community:{community}") print(f" ✅ {name}: {total} available ({', '.join(cloud_info)}) @ ${price}/hr") found_any = True if not found_any: print(" ❌ No GPUs with ≥16GB VRAM available") EOF echo "" sleep $INTERVAL done