Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| """ | |
| Trigger GPU training through Gradio interface | |
| Uses HTTP POST to call the Gradio API endpoint | |
| """ | |
| import requests | |
| import json | |
| import time | |
| from datetime import datetime | |
| print("="*70) | |
| print("π IPAD VAD GPU Training Trigger via Gradio API") | |
| print("="*70) | |
| print(f"Time: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") | |
| print() | |
| # Gradio API endpoint (local) | |
| GRADIO_URL = "http://localhost:7860" | |
| # Check if Gradio is running | |
| print("[Step 1] Checking Gradio interface...") | |
| try: | |
| response = requests.get(GRADIO_URL, timeout=5) | |
| if response.status_code == 200: | |
| print(f"β Gradio interface is running at {GRADIO_URL}") | |
| else: | |
| print(f"β οΈ Gradio returned status {response.status_code}") | |
| except Exception as e: | |
| print(f"β Cannot connect to Gradio: {e}") | |
| print(" Make sure app.py is running") | |
| exit(1) | |
| print() | |
| # Get API info | |
| print("[Step 2] Getting API endpoints...") | |
| try: | |
| api_response = requests.get(f"{GRADIO_URL}/info", timeout=10) | |
| if api_response.status_code == 200: | |
| api_info = api_response.json() | |
| print(f"β API info retrieved") | |
| print(f" Named endpoints: {len(api_info.get('named_endpoints', {}))}") | |
| else: | |
| print(f"β οΈ Could not get API info: {api_response.status_code}") | |
| except Exception as e: | |
| print(f"β οΈ Could not get API info: {e}") | |
| print() | |
| # Method 1: Try gradio_client (if available) | |
| print("[Step 3] Attempting to trigger training via gradio_client...") | |
| try: | |
| from gradio_client import Client | |
| client = Client(GRADIO_URL) | |
| print(f"β Connected to Gradio client") | |
| print() | |
| # Configuration | |
| device_name = "S01" | |
| epochs = 10 | |
| batch_size = 4 | |
| lr = 1e-4 | |
| print("π Training Configuration:") | |
| print(f" Device: {device_name}") | |
| print(f" Epochs: {epochs}") | |
| print(f" Batch Size: {batch_size}") | |
| print(f" Learning Rate: {lr}") | |
| print() | |
| print("π Triggering GPU training...") | |
| print(" This will request ZeroGPU allocation (H200, 80GB)") | |
| print(" Expected time: ~10-15 minutes") | |
| print() | |
| # Call the quick training endpoint | |
| start_time = time.time() | |
| result = client.predict( | |
| device_name=device_name, | |
| epochs=epochs, | |
| batch_size=batch_size, | |
| lr=lr, | |
| api_name="/train_quick_baseline" | |
| ) | |
| end_time = time.time() | |
| print() | |
| print("="*70) | |
| print(f"β Training request completed in {(end_time - start_time) / 60:.1f} minutes!") | |
| print("="*70) | |
| print() | |
| print("π Result:") | |
| print(result) | |
| print() | |
| except ImportError: | |
| print("β οΈ gradio_client not available, trying HTTP POST...") | |
| print() | |
| # Method 2: HTTP POST (fallback) | |
| print("[Step 3b] Attempting to trigger training via HTTP POST...") | |
| try: | |
| endpoint = f"{GRADIO_URL}/api/predict" | |
| payload = { | |
| "fn_index": 2, # Index of train_quick_baseline function | |
| "data": [ | |
| "S01", # device_name | |
| 10, # epochs | |
| 4, # batch_size | |
| 0.0001 # lr | |
| ] | |
| } | |
| print("π Sending training request...") | |
| print(f" Endpoint: {endpoint}") | |
| print(f" Payload: {json.dumps(payload, indent=2)}") | |
| print() | |
| response = requests.post( | |
| endpoint, | |
| json=payload, | |
| headers={"Content-Type": "application/json"}, | |
| timeout=3600 # 1 hour timeout | |
| ) | |
| if response.status_code == 200: | |
| result = response.json() | |
| print("β Training completed!") | |
| print() | |
| print("π Result:") | |
| print(json.dumps(result, indent=2)) | |
| else: | |
| print(f"β Training request failed: {response.status_code}") | |
| print(response.text) | |
| except Exception as e: | |
| print(f"β HTTP POST failed: {e}") | |
| import traceback | |
| traceback.print_exc() | |
| print() | |
| print("="*70) | |
| print("π‘ Alternative: Manual Trigger") | |
| print("="*70) | |
| print() | |
| print("If automatic trigger doesn't work, manually trigger via web interface:") | |
| print(f"1. Open: https://huggingface.co/spaces/MSherbinii/ipad-vad-training") | |
| print(f"2. Go to 'β‘ Quick Test (10 epochs)' tab") | |
| print(f"3. Click 'π Start Quick Training'") | |
| print(f"4. Wait ~10-15 minutes for completion") | |
| print() | |
| print("Or trigger via Python code:") | |
| print(""" | |
| from gradio_client import Client | |
| client = Client("https://huggingface.co/spaces/MSherbinii/ipad-vad-training") | |
| result = client.predict( | |
| quick_device="S01", | |
| quick_epochs=10, | |
| quick_batch=4, | |
| quick_lr=1e-4, | |
| api_name="/train_quick_baseline" | |
| ) | |
| print(result) | |
| """) | |
| print() | |
| print("="*70) | |