File size: 4,871 Bytes
d14d520
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#!/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)