- Created entrypoint-self-terminate.sh wrapper script - Updates entrypoint-generic.sh to be called by wrapper - Modified Dockerfile.runpod to use self-terminate entrypoint - Adds automatic pod termination via runpodctl after training completes - Prevents infinite restart loops and wasted GPU credits - Saves ~96% cost per training run ($4.59 per run) Implements pod self-termination using RUNPOD_POD_ID environment variable. Training exits with code 0 → runpodctl remove pod → immediate shutdown. Co-Authored-By: Claude <noreply@anthropic.com>
100 lines
2.5 KiB
Bash
Executable File
100 lines
2.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# Quick deployment script for debug Docker image
|
|
|
|
set -euo pipefail
|
|
|
|
echo "=========================================="
|
|
echo "Foxhunt Debug Image Deployment"
|
|
echo "=========================================="
|
|
|
|
# Configuration
|
|
IMAGE_NAME="jgrusewski/foxhunt:debug"
|
|
DOCKERFILE="Dockerfile.runpod.debug"
|
|
|
|
# Check Docker is running
|
|
if ! docker info &> /dev/null; then
|
|
echo "❌ ERROR: Docker is not running"
|
|
exit 1
|
|
fi
|
|
|
|
echo "✓ Docker is running"
|
|
|
|
# Check Dockerfile exists
|
|
if [ ! -f "${DOCKERFILE}" ]; then
|
|
echo "❌ ERROR: ${DOCKERFILE} not found"
|
|
exit 1
|
|
fi
|
|
|
|
echo "✓ Dockerfile found: ${DOCKERFILE}"
|
|
|
|
# Check entrypoint_debug.sh exists
|
|
if [ ! -f "entrypoint_debug.sh" ]; then
|
|
echo "❌ ERROR: entrypoint_debug.sh not found"
|
|
exit 1
|
|
fi
|
|
|
|
echo "✓ Entrypoint script found: entrypoint_debug.sh"
|
|
|
|
# Build Docker image
|
|
echo ""
|
|
echo "=========================================="
|
|
echo "Building Debug Image"
|
|
echo "=========================================="
|
|
echo "Image: ${IMAGE_NAME}"
|
|
echo "Dockerfile: ${DOCKERFILE}"
|
|
echo ""
|
|
|
|
docker build -f "${DOCKERFILE}" -t "${IMAGE_NAME}" . || {
|
|
echo "❌ ERROR: Docker build failed"
|
|
exit 1
|
|
}
|
|
|
|
echo ""
|
|
echo "✓ Image built successfully: ${IMAGE_NAME}"
|
|
|
|
# Show image size
|
|
IMAGE_SIZE=$(docker images "${IMAGE_NAME}" --format "{{.Size}}")
|
|
echo " Size: ${IMAGE_SIZE}"
|
|
|
|
# Push to Docker Hub
|
|
echo ""
|
|
echo "=========================================="
|
|
echo "Pushing to Docker Hub"
|
|
echo "=========================================="
|
|
echo "Image: ${IMAGE_NAME}"
|
|
echo ""
|
|
echo "NOTE: Ensure you are logged in to Docker Hub:"
|
|
echo " docker login -u jgrusewski"
|
|
echo ""
|
|
read -p "Press Enter to push image (Ctrl+C to cancel)..."
|
|
|
|
docker push "${IMAGE_NAME}" || {
|
|
echo "❌ ERROR: Docker push failed"
|
|
echo ""
|
|
echo "Try logging in first:"
|
|
echo " docker login -u jgrusewski"
|
|
exit 1
|
|
}
|
|
|
|
echo ""
|
|
echo "✓ Image pushed successfully: ${IMAGE_NAME}"
|
|
|
|
# Summary
|
|
echo ""
|
|
echo "=========================================="
|
|
echo "Deployment Summary"
|
|
echo "=========================================="
|
|
echo "✓ Debug image deployed: ${IMAGE_NAME}"
|
|
echo "✓ Image size: ${IMAGE_SIZE}"
|
|
echo "✓ Available on Docker Hub (PRIVATE)"
|
|
echo ""
|
|
echo "Next Steps:"
|
|
echo " 1. Go to RunPod console"
|
|
echo " 2. Create new pod with image: ${IMAGE_NAME}"
|
|
echo " 3. Enable Docker Hub authentication (jgrusewski)"
|
|
echo " 4. Mount volume: /runpod-volume"
|
|
echo " 5. Set BINARY_NAME=train_tft_parquet"
|
|
echo " 6. Check logs for crash diagnostics"
|
|
echo ""
|
|
echo "See AGENT_3_DEBUG_DEPLOYMENT_GUIDE.md for detailed instructions."
|