#!/usr/bin/env bash set -euo pipefail echo "=======================================================" echo " VINCIE - Start (VINCIE-3B, 8x L40S)" echo "=======================================================" # --- Configurações de Ambiente Otimizadas --- export CUDA_VISIBLE_DEVICES="${CUDA_VISIBLE_DEVICES:-0,1,2,3,4,5,6,7}" export PYTHONFAULTHANDLER=1 export TORCH_NCCL_ASYNC_ERROR_HANDLING=1 export NCCL_DEBUG="WARN" export NCCL_SOCKET_IFNAME="lo" export NCCL_IB_DISABLE=1 export NCCL_P2P_DISABLE=1 # --- 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" # ... (resto do script builder, cache, clone, etc. permanece igual) ... # --- 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 # --- Configuração do Cache Persistente --- if [ -d /data ]; then echo "Usando /data para cache persistente." export HF_HOME="/data/.cache/huggingface" export TORCH_HOME="/data/.cache/torch" else echo "Usando /app/.cache para cache local." export HF_HOME="/app/.cache/huggingface" export TORCH_HOME="/app/.cache/torch" fi export HF_HUB_CACHE="${HF_HUB_CACHE:-$HF_HOME/hub}" mkdir -p "$HF_HUB_CACHE" "$TORCH_HOME" export HF_HUB_ENABLE_HF_TRANSFER=1 # --- Preparação do Código e do Modelo VINCIE --- export MODEL_REPO="ByteDance-Seed/VINCIE-3B" export APP_DIR="/app/VINCIE" export CKPT_DIR="${APP_DIR}/ckpt/VINCIE-3B" if [ ! -d "$APP_DIR" ]; then echo "Clonando repositório VINCIE para ${APP_DIR}..." git clone https://github.com/ByteDance-Seed/VINCIE.git "$APP_DIR" else echo "Repositório VINCIE já existe em ${APP_DIR}. Pulando clonagem." fi mkdir -p "$(dirname "$CKPT_DIR")" # --- Cache dos Modelos via Hugging Face Hub --- echo "📦 Verificando cache dos modelos..." python3 -c ' from huggingface_hub import snapshot_download import os, traceback repo_id = os.environ.get("MODEL_REPO") cache_dir = os.environ.get("HF_HUB_CACHE") ckpt_link_path = os.environ.get("CKPT_DIR") try: print(f"📥 Baixando {repo_id} para o cache em {cache_dir}...") model_path_in_cache = snapshot_download(repo_id=repo_id, cache_dir=cache_dir, resume_download=True, ignore_patterns=["*.safetensors"]) print(f"✅ Modelo em cache: {model_path_in_cache}") if not os.path.lexists(ckpt_link_path): os.symlink(model_path_in_cache, ckpt_link_path) print(f"🔗 Symlink criado: {ckpt_link_path} -> {model_path_in_cache}") else: print(f"✅ Symlink já existe em {ckpt_link_path}.") except Exception as e: print(f"⚠️ Falha no download ou criação de symlink do modelo: {e}") traceback.print_exc() ' # --- Diagnóstico Final (Opcional) --- echo "🕵️ Verificando conteúdo do diretório de checkpoints..." ls -lA "$CKPT_DIR" || echo "⚠️ Não foi possível listar o diretório de checkpoints." # --- Subindo a Aplicação --- echo "🚀 Iniciando a interface web VINCIE (app_vince.py)..." cd "$APP_DIR" # A chamada agora é mais limpa, pois a configuração está no ambiente python3 /app/app_vince.py