File size: 2,946 Bytes
a6fbb35
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env python3
"""
App principal para execução no HuggingFace Space.
Este arquivo executa o treinamento do modelo EDA e inicia o TensorBoard.
"""

import os
import subprocess
import sys
import threading
import time

def start_tensorboard():
    """
    Inicia o TensorBoard em background, verificando se já está rodando.
    """
    # Os logs do TensorBoard são salvos no output_dir (./results) quando report_to=["tensorboard"]
    # Criar diretório de resultados se não existir
    results_dir = os.path.join(os.path.dirname(__file__), "results")
    os.makedirs(results_dir, exist_ok=True)
    
    # Verificar se TensorBoard já está rodando na porta 6006
    import socket
    port_in_use = False
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        result = sock.connect_ex(('0.0.0.0', 6006))
        if result == 0:
            port_in_use = True
        sock.close()
    except Exception:
        pass
    
    if port_in_use:
        print("=" * 60)
        print("⚠️ TensorBoard já está rodando na porta 6006")
        print("=" * 60)
        return
    
    print("=" * 60)
    print("Iniciando TensorBoard...")
    print(f"Logdir: {results_dir}")
    print("TensorBoard estará disponível na interface do HuggingFace Space")
    print("=" * 60)
    
    # Matar qualquer processo TensorBoard anterior (se houver)
    os.system("pkill -f 'tensorboard.*6006' 2>/dev/null || true")
    time.sleep(1)
    
    # Iniciar TensorBoard em background
    # IMPORTANTE: Os logs são salvos em ./results quando report_to=["tensorboard"]
    # Porta 6006 é a porta padrão do TensorBoard
    os.system("tensorboard --logdir=results --host=0.0.0.0 --port=6006 > /dev/null 2>&1 &")
    
    # Aguardar um pouco para garantir que o TensorBoard iniciou
    time.sleep(2)
    print("✅ TensorBoard iniciado em background")

def main():
    """
    Executa o script de treinamento.
    """
    # Iniciar TensorBoard em thread separada
    tensorboard_thread = threading.Thread(target=start_tensorboard, daemon=True)
    tensorboard_thread.start()
    
    print("=" * 60)
    print("Iniciando treinamento do modelo EDA")
    print("=" * 60)
    
    script_path = os.path.join(os.path.dirname(__file__), "train.py")
    
    if not os.path.exists(script_path):
        print(f"❌ Erro: Arquivo {script_path} não encontrado!")
        sys.exit(1)
    
    try:
        result = subprocess.run(
            [sys.executable, script_path],
            check=True,
            capture_output=False,
        )
        print("\n✅ Treinamento concluído com sucesso!")
        return result.returncode
    except subprocess.CalledProcessError as e:
        print(f"\n❌ Erro durante o treinamento: {e}")
        sys.exit(e.returncode)
    except KeyboardInterrupt:
        print("\n⚠️ Treinamento interrompido pelo usuário")
        sys.exit(130)

if __name__ == "__main__":
    sys.exit(main())