euIaxs22 commited on
Commit
3a7411b
·
verified ·
1 Parent(s): 229ee14

Update start.sh

Browse files
Files changed (1) hide show
  1. start.sh +74 -99
start.sh CHANGED
@@ -2,134 +2,109 @@
2
  set -euo pipefail
3
 
4
  echo "======================================================="
5
- echo " ADUC-SDR Start (VINCIE/SeedVR, L40S)"
6
  echo "======================================================="
7
 
8
- # ---------------------- Env base ----------------------
 
9
  export CUDA_VISIBLE_DEVICES="${CUDA_VISIBLE_DEVICES:-0,1,2,3,4,5,6,7}"
10
- export TORCH_DTYPE="${TORCH_DTYPE:-bfloat16}"
11
-
12
- # SDPA / FA toggles
13
- export ENABLE_FLASH_SDP="${ENABLE_FLASH_SDP:-1}"
14
- export ENABLE_MEMORY_EFFICIENT_SDP="${ENABLE_MEMORY_EFFICIENT_SDP:-1}"
15
- export ENABLE_MATH_SDP="${ENABLE_MATH_SDP:-0}"
16
- export FLASH_ATTENTION_DISABLE="${FLASH_ATTENTION_DISABLE:-0}"
17
- export XFORMERS_FORCE_DISABLE="${XFORMERS_FORCE_DISABLE:-1}"
18
-
19
- # CUDA / NCCL baseline
20
- export CUDA_MODULE_LOADING="LAZY"
21
- export CUDA_DEVICE_MAX_CONNECTIONS="${CUDA_DEVICE_MAX_CONNECTIONS:-32}"
22
- export CUDA_DEVICE_ORDER="PCI_BUS_ID"
23
- export PYTORCH_CUDA_ALLOC_CONF="max_split_size_mb:512,garbage_collection_threshold:0.8"
24
- export OMP_NUM_THREADS="${OMP_NUM_THREADS:-8}"
25
- export MKL_NUM_THREADS="${MKL_NUM_THREADS:-8}"
26
- export NCCL_DEBUG="INFO"
27
- export NCCL_ASYNC_ERROR_HANDLING=1
28
- export NCCL_P2P_DISABLE=0
29
- export NCCL_IB_DISABLE=1
30
- export NCCL_SOCKET_IFNAME="lo"
31
- export NCCL_BLOCKING_WAIT=1
32
- export TORCH_NCCL_BLOCKING_WAIT=1
33
- #export NCCL_TIMEOUT=600
34
-
35
-
36
 
37
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
- # ---------------------- Persistência HF/torch ----------------------
 
 
40
  if [ -d /data ]; then
 
41
  export HF_HOME="/data/.cache/huggingface"
42
  export TORCH_HOME="/data/.cache/torch"
43
  else
 
44
  export HF_HOME="/app/.cache/huggingface"
45
  export TORCH_HOME="/app/.cache/torch"
46
  fi
47
  export HF_HUB_CACHE="${HF_HUB_CACHE:-$HF_HOME/hub}"
48
  mkdir -p "$HF_HUB_CACHE" "$TORCH_HOME"
 
49
 
50
- mkdir -p /app/.cache
51
- ln -sf "$HF_HOME" /app/.cache/huggingface
52
- unset TRANSFORMERS_CACHE
53
-
54
- export HF_HUB_ENABLE_HF_TRANSFER=1
55
- export HF_HUB_DOWNLOAD_TIMEOUT=6000
56
-
57
-
58
- mkdir /app/common
59
- mkdir /app/data
60
-
61
- git clone https://github.com/bytedance-seed/VINCIE.git /app/VINCIE
62
- cp -rvu /app/VINCIE/common/. /app/common/.
63
- cp -rvu /app/VINCIE/data/. /app/data/.
64
- cp -rvu /app/VINCIE/models/. /app/models/.
65
- cp -rvu /app/VINCIE/configs/. /app/configs/.
66
-
67
 
68
-
69
- MODEL_REPO="ByteDance-Seed/VINCIE-3B"
70
- CKPT_DIR="/app/ckpt/VINCIE-3B"
71
- mkdir -p "$CKPT_DIR"
72
-
73
- # ---------------------- Cache Estruturado HF (persistente) ----------------------
74
-
75
- # Define cache no volume persistente /data (1TB)
76
- if [ -d /data ]; then
77
- export HF_HOME="${HF_HOME:-/data/.cache/huggingface}"
78
  else
79
- export HF_HOME="${HF_HOME:-/app/.cache/huggingface}"
80
  fi
81
 
82
- export HF_HUB_CACHE="${HF_HUB_CACHE:-$HF_HOME/hub}"
83
- mkdir -p "$HF_HUB_CACHE"
84
 
85
- echo "📦 Cache HF: $HF_HUB_CACHE"
86
-
87
- # Download usando cache estruturado (não duplica arquivos)
88
- python3 - <<'PY'
89
  from huggingface_hub import snapshot_download
90
  import os
 
91
 
92
- cache_dir = os.environ.get('HF_HUB_CACHE')
93
- print(f'📥 Baixando VINCIE-3B para cache: {cache_dir}')
 
94
 
95
  try:
96
- model_path = snapshot_download(
97
- repo_id='ByteDance-Seed/VINCIE-3B',
98
- cache_dir=cache_dir, # Usa cache estruturado
99
- resume_download=True, # Retoma downloads interrompidos
100
- max_workers=8, # Acelera com paralelismo
101
- # Não usa local_dir - mantém tudo no cache HF
 
102
  )
103
- print(f'✅ Modelo em cache: {model_path}')
104
-
105
- # Cria symlink para compatibilidade com código legacy
106
- ckpt_link = '/app/ckpt/VINCIE-3B'
107
- os.makedirs('/app/ckpt', exist_ok=True)
108
- if os.path.islink(ckpt_link):
109
- os.unlink(ckpt_link)
110
- if not os.path.exists(ckpt_link):
111
- os.symlink(model_path, ckpt_link)
112
- print(f'🔗 Symlink: {ckpt_link} -> {model_path}')
113
-
114
  except Exception as e:
115
- print(f'⚠️ Download falhou: {e}')
116
- import traceback
117
  traceback.print_exc()
118
- PY
119
-
120
 
121
- echo "Executando builder Apex/Q8..."
122
- chmod +x /app/builder.sh
123
-
124
- /app/builder.sh || true
125
 
 
 
126
 
127
- # ---------------------- Diagnóstico ----------------------
128
- /app/info.sh || true
129
- ls -la /app || true
130
- ls -R /app | head -n 2000 || true
131
 
132
- # ---------------------- Subindo serviço ----------------------
133
- echo "🚀 Subindo serviços..."
134
- # Dica: pode-se exportar VINCIE_DIRECT_TO_CKPT=1 para fallback interno
135
- python /app/app_vince.py
 
2
  set -euo pipefail
3
 
4
  echo "======================================================="
5
+ echo " VINCIE - Start (VINCIE-3B, 8x L40S)"
6
  echo "======================================================="
7
 
8
+ # --- Configurações de Ambiente Otimizadas ---
9
+ # Define quais GPUs serão usadas (padrão: 8 GPUs)
10
  export CUDA_VISIBLE_DEVICES="${CUDA_VISIBLE_DEVICES:-0,1,2,3,4,5,6,7}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
+ # Configurações robustas para comunicação NCCL em um único nó
13
+ export PYTHONFAULTHANDLER=1
14
+ export TORCH_NCCL_ASYNC_ERROR_HANDLING=1
15
+ export NCCL_DEBUG="WARN"
16
+ export NCCL_SOCKET_IFNAME="lo" # Essencial para evitar problemas de rede em single-node
17
+ export NCCL_IB_DISABLE=1
18
+ export NCCL_P2P_DISABLE=1
19
+
20
+ # --- Builder para Dependências CUDA ---
21
+ # Executa o script que compila ou baixa dependências otimizadas como Apex e FlashAttention.
22
+ # É executado primeiro para garantir que o ambiente de baixo nível esteja pronto.
23
+ echo "🛠️ Iniciando o builder.sh para compilar/instalar dependências CUDA..."
24
+ if [ -f "/app/builder.sh" ]; then
25
+ /bin/bash /app/builder.sh
26
+ echo "✅ Builder finalizado."
27
+ else
28
+ echo "⚠️ Aviso: builder.sh não encontrado. Pulando etapa de compilação de dependências."
29
+ fi
30
 
31
+ # --- Configuração do Cache Persistente ---
32
+ # Usa o diretório /data se disponível (para persistência entre restarts do container),
33
+ # caso contrário, usa um diretório local.
34
  if [ -d /data ]; then
35
+ echo "Usando /data para cache persistente."
36
  export HF_HOME="/data/.cache/huggingface"
37
  export TORCH_HOME="/data/.cache/torch"
38
  else
39
+ echo "Usando /app/.cache para cache local."
40
  export HF_HOME="/app/.cache/huggingface"
41
  export TORCH_HOME="/app/.cache/torch"
42
  fi
43
  export HF_HUB_CACHE="${HF_HUB_CACHE:-$HF_HOME/hub}"
44
  mkdir -p "$HF_HUB_CACHE" "$TORCH_HOME"
45
+ export HF_HUB_ENABLE_HF_TRANSFER=1 # Ativa downloader turbo
46
 
47
+ # --- Preparação do Código e do Modelo VINCIE ---
48
+ export MODEL_REPO="ByteDance-Seed/VINCIE-3B"
49
+ export APP_DIR="/app/VINCIE"
50
+ export CKPT_DIR="${APP_DIR}/ckpt/VINCIE-3B" # O VINCIE espera os checkpoints neste caminho
 
 
 
 
 
 
 
 
 
 
 
 
 
51
 
52
+ # 1. Clona o repositório do VINCIE se ele não existir
53
+ if [ ! -d "$APP_DIR" ]; then
54
+ echo "Clonando repositório VINCIE para ${APP_DIR}..."
55
+ git clone https://github.com/ByteDance-Seed/VINCIE.git "$APP_DIR"
 
 
 
 
 
 
56
  else
57
+ echo "Repositório VINCIE já existe em ${APP_DIR}. Pulando clonagem."
58
  fi
59
 
60
+ # Garante que o diretório de checkpoints exista dentro do repositório clonado
61
+ mkdir -p "$(dirname "$CKPT_DIR")"
62
 
63
+ # --- Cache dos Modelos via Hugging Face Hub ---
64
+ echo "📦 Verificando cache dos modelos..."
65
+ python3 -c '
 
66
  from huggingface_hub import snapshot_download
67
  import os
68
+ import traceback
69
 
70
+ repo_id = os.environ.get("MODEL_REPO")
71
+ cache_dir = os.environ.get("HF_HUB_CACHE")
72
+ ckpt_link_path = os.environ.get("CKPT_DIR")
73
 
74
  try:
75
+ print(f"📥 Baixando {repo_id} para o cache em {cache_dir}...")
76
+ model_path_in_cache = snapshot_download(
77
+ repo_id=repo_id,
78
+ cache_dir=cache_dir,
79
+ resume_download=True,
80
+ # O VINCIE-3B é grande, ignora os arquivos safetensors se houver .bin
81
+ ignore_patterns=["*.safetensors"],
82
  )
83
+ print(f"✅ Modelo em cache: {model_path_in_cache}")
84
+
85
+ # Cria um link simbólico do cache para o diretório esperado pelo código do VINCIE.
86
+ # Isso evita duplicar os arquivos do modelo.
87
+ if not os.path.lexists(ckpt_link_path):
88
+ os.symlink(model_path_in_cache, ckpt_link_path)
89
+ print(f"🔗 Symlink criado: {ckpt_link_path} -> {model_path_in_cache}")
90
+ else:
91
+ print(f"✅ Symlink já existe em {ckpt_link_path}.")
92
+
 
93
  except Exception as e:
94
+ print(f"⚠️ Falha no download ou criação de symlink do modelo: {e}")
 
95
  traceback.print_exc()
96
+ '
 
97
 
98
+ # --- Diagnóstico Final (Opcional) ---
99
+ echo "🕵️ Verificando conteúdo do diretório de checkpoints..."
100
+ ls -lA "$CKPT_DIR" || echo "⚠️ Não foi possível listar o diretório de checkpoints."
 
101
 
102
+ # --- Subindo a Aplicação ---
103
+ echo "🚀 Iniciando a interface web VINCIE (app_vince.py)..."
104
 
105
+ # Muda para o diretório da aplicação para que os caminhos relativos (configs, assets) funcionem
106
+ cd "$APP_DIR"
 
 
107
 
108
+ # Lança a aplicação de UI. Gradio irá escutar em todas as interfaces de rede na porta 7860.
109
+ # O parâmetro --enable-queue habilita uma fila para gerenciar múltiplas requisições.
110
+ python3 /app/app_vince.py --server-name 0.0.0.0 --server-port 7860 --enable-queue