#!/usr/bin/env bash set -euo pipefail : "${APP_DIR:=/app}" echo "=======================================================" echo " VINCIE - Start (VINCIE-3B, 8x L40S)" echo "=======================================================" # --- Adição para Gradio --- # Exporta as variáveis que o app_vince.py irá ler. export GRADIO_SERVER_NAME="0.0.0.0" export GRADIO_SERVER_PORT="${PORT:-7860}" # Usa a variável PORT se definida, senão 7860 export GRADIO_ENABLE_QUEUE="True" # --- Builder para Dependências CUDA --- echo "🛠️ Iniciando o builder.sh para compilar/instalar dependências CUDA..." if [ -f "/app/builder.sh" ]; then /bin/bash /app/builder.sh echo "✅ Builder finalizado." else echo "⚠️ Aviso: builder.sh não encontrado. Pulando etapa de compilação de dependências." fi # --- Tree de /app e /data (inclui ocultos) --- echo "🔎 Tree de /app e /data (incluindo ocultos)" print_tree() { local dir="$1" if command -v tree >/dev/null 2>&1; then echo "── tree $dir" tree -a -L 3 "$dir" || true else echo "── (tree não instalado) fallback com find/ls para $dir" # Lista top-level com ocultos e depois find com profundidade limitada ls -la "$dir" || true # find limitado a 3 níveis, mostrando ocultos find "$dir" -maxdepth 3 -printf "%y %M %u:%g %kK %TY-%Tm-%Td %TT %p\n" 2>/dev/null | sort || true fi } [ -d /app ] && print_tree /app || echo "/app não existe" [ -d /app/.cache ] && print_tree /app/.cache || echo "/app/.cache não existe" [ -d /data ] && print_tree /data || echo "/data não existe" [ -d /data/.cache ] && print_tree /data/.cache || echo "/data/.cache não existe" # --- Subindo a Aplicação --- echo "🚀 Iniciando a interface web VINCIE (app_vince.py)..." cd "$APP_DIR" export CUDA_VISIBLE_DEVICES="0,1,2,3" # opcional: nvidia-smi -pm 1 # Lança worker distribuído (se optar por processo separado) #torchrun --standalone --nproc-per-node=4 services/vince_server.py & # UI (usa o mesmo processo e instancia o VinceSingleton internamente) python3 /app/app_vince.py