Files
foxhunt/scripts
jgrusewski 00ef9e2866 Wave 15: Complete FactoredAction migration to 45-action system
Major Changes:
- Migrated from 3-action TradingAction to 45-action FactoredAction
- 45 actions: 5 exposure × 3 order types × 3 urgency levels
- Absolute exposure model (target positions -1.0 to +1.0)
- Transaction cost differentiation (Market 0.15%, LimitMaker 0.05%, IoC 0.10%)
- Fixed action diversity threshold (1.11% → 0.5% for 45-action space)

Bug Fixes:
- Bug #15: Incomplete FactoredAction integration (code existed but unused)
- Bug #16: Runtime crash in action diversity checking (hardcoded 3-action match)

Code Changes (13 files, ~464 lines):
- ml/src/dqn/action_space.rs: Core FactoredAction + 4 helper methods
- ml/src/trainers/dqn.rs: Action diversity refactored (3→45 dynamic)
- ml/src/dqn/reward.rs: calculate_reward() signature updated
- ml/src/dqn/portfolio_tracker.rs: execute_action() absolute exposure
- ml/src/dqn/dqn.rs: WorkingDQN action selection migrated
- ml/tests/*.rs: 9 test files updated with FactoredAction assertions

Test Results:
- 1-epoch smoke test: 100% action diversity (45/45 actions, 80.2s)
- 10-epoch production: 87.8% readiness (79/90 scorecard, 14.0 min)
- Loss convergence: 96.9% reduction (119K → 3.6K)
- Action diversity: 100% → 44% (healthy specialization)
- Checkpoint reliability: 12/12 files saved (100%)
- DQN tests: 195/195 passing (100%)
- ML baseline: 1,514/1,515 passing (99.93%)

Production Status:  CERTIFIED (87.8% readiness)
Go/No-Go:  GO FOR 100-EPOCH PRODUCTION TRAINING

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 23:27:02 +01:00
..

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)