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