Spaces:
Paused
Paused
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())
|