AdwolfCzar commited on
Commit
73da8fb
·
verified ·
1 Parent(s): f0403fa

Upload PROGRESSO.md with huggingface_hub

Browse files
Files changed (1) hide show
  1. PROGRESSO.md +256 -1
PROGRESSO.md CHANGED
@@ -1,5 +1,13 @@
1
  # smoothloopv3 — diário de bordo (LoRA MiniMax H3)
2
 
 
 
 
 
 
 
 
 
3
  Início: 2026-09-19. GPU: RTX 5090 32 GB (driver 595.91.07, CUDA 13.2).
4
  Disco: overlay 350 GB, **NÃO é volume persistente** (`df` mostra overlay em /workspace).
5
  → Tudo que importa precisa ir para o HF. Recycle/destroy apaga tudo.
@@ -119,7 +127,25 @@ Disco: overlay 350 GB, **NÃO é volume persistente** (`df` mostra overlay em /w
119
  | | | e apaga states locais antigos (mantem 2). Samples do step 0 ja no HF. |
120
 
121
  ## Bugs / incidentes
122
- (nenhum ainda)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
 
124
  ## Progresso
125
  - [x] Ler relatório + NOTES + handoff
@@ -133,3 +159,232 @@ Disco: overlay 350 GB, **NÃO é volume persistente** (`df` mostra overlay em /w
133
  - [x] Smoke test + resume (leg1 10 steps + leg2 resume ate 15, ambos exit 0)
134
  - [x] Cache completo (21,5 GB)
135
  - [x] Treino lancado + uploader em tempo real ativo
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  # smoothloopv3 — diário de bordo (LoRA MiniMax H3)
2
 
3
+ > **ESTADO EM 2026-09-19 09:5x** — pipeline de dados 100% concluído e espelhado no HF.
4
+ > Treino lançado às 08:4x, morreu no step 191 às 09:38 por **falha de host** (a GPU sumiu do
5
+ > barramento; `actual_status: offline` na Vast). Aguardando a GPU voltar, com watchdog armado
6
+ > para relançar sozinho. Nenhum checkpoint tinha sido salvo ainda.
7
+ >
8
+ > **Para retomar em outra máquina: vá direto para a seção "RETOMADA EM OUTRA MÁQUINA" no fim
9
+ > deste arquivo.** Não refaça captions, conversão, views nem cache — tudo está pronto no HF.
10
+
11
  Início: 2026-09-19. GPU: RTX 5090 32 GB (driver 595.91.07, CUDA 13.2).
12
  Disco: overlay 350 GB, **NÃO é volume persistente** (`df` mostra overlay em /workspace).
13
  → Tudo que importa precisa ir para o HF. Recycle/destroy apaga tudo.
 
127
  | | | e apaga states locais antigos (mantem 2). Samples do step 0 ja no HF. |
128
 
129
  ## Bugs / incidentes
130
+
131
+ ### 2026-09-19 09:38 — GPU caiu do barramento durante o treino (NAO resolvido de dentro)
132
+ Treino morreu no **step 191** (11,59 s/it, loss 0,0795). `nvidia-smi` passou a responder
133
+ `Unable to determine the device handle for GPU0: 0000:81:00.0: Unknown Error / No devices were found`.
134
+ Os device nodes (`/dev/nvidia*`) continuavam existindo, mas o driver nao falava mais com a placa.
135
+ `vastai show instance` reportou `actual_status: offline` com `cur_state: running` — ou seja, a
136
+ propria Vast perdeu contato: **falha de host, nao do treino** (nao houve OOM, nao houve erro CUDA).
137
+
138
+ Num container sem privilegios nao da para resetar a GPU, recarregar o modulo nem re-escanear o
139
+ barramento PCI. Unica recuperacao seria reiniciar a instancia pela API da Vast (preserva o
140
+ filesystem do container); o usuario optou por esperar, dizendo que isso as vezes acontece e volta.
141
+
142
+ Perda: 191 steps (~37 min). Nenhum checkpoint existia ainda porque o primeiro save era no 500.
143
+ **Acao tomada:** `SAVE_EVERY` baixado de 500 para **250** no relancamento, e um watchdog
144
+ (`/workspace/scripts/watch_gpu_relaunch.sh`) que testa a GPU a cada 60 s, exige 45 s de
145
+ estabilidade e relanca o treino sozinho.
146
+
147
+ Nada mais foi perdido: dataset, captions, cache (22 GB) e samples sobreviveram, e desde entao
148
+ estao todos espelhados no HF.
149
 
150
  ## Progresso
151
  - [x] Ler relatório + NOTES + handoff
 
159
  - [x] Smoke test + resume (leg1 10 steps + leg2 resume ate 15, ambos exit 0)
160
  - [x] Cache completo (21,5 GB)
161
  - [x] Treino lancado + uploader em tempo real ativo
162
+
163
+ ---
164
+
165
+ # RETOMADA EM OUTRA MÁQUINA — runbook completo
166
+
167
+ Escrito em 2026-09-19 depois que a GPU desta instância caiu do barramento no step 191.
168
+ **Tudo que está abaixo já foi decidido, executado e verificado. Não refaça nada disso.**
169
+
170
+ ## 0. O que NÃO precisa ser refeito
171
+
172
+ | Etapa | Situação | Onde está |
173
+ |---|---|---|
174
+ | Download do dataset do Mega | pronto | zip no HF |
175
+ | Normalização 24 fps CFR + tiling de loop + max_edge 1280 | pronto | dentro do zip |
176
+ | Correção dos 70 clipes <124f | pronto | dentro do zip |
177
+ | Captions H3 (1752/1752, $0,65) | pronto | dentro do zip, sidecar `.txt` |
178
+ | Escolha das views e quotas | **decidida** | `manifest_views.csv` |
179
+ | TOMLs de cache e treino | prontos | `configs/` no repo do modelo |
180
+ | 3 imagens de sample + prompts + seeds | prontos | `samples/` no repo do modelo |
181
+ | Cache de latentes + text encoder (22 GB, ~2,5 h de GPU) | pronto | tar no repo do dataset |
182
+ | Smoke test (10 steps + resume até 15) | passou | — |
183
+
184
+ Só falta **rodar o treino**.
185
+
186
+ ## 1. Artefatos no Hugging Face
187
+
188
+ Repo do dataset — `AdwolfCzar/smoothloopv3_dataset` (público, gated manual):
189
+ - `smoothloopv3_dataset.zip` (3,88 GB) — 1752 mp4 já convertidos + 1752 `.txt` com as captions H3
190
+ - `cache/cache_smoothloopv3_pin_ede9ed9f.tar` (22,81 GB) — latentes + TE, **amarrado ao pin `ede9ed9f`**
191
+ - `tags_danbooru_originais.tar.gz` — tags originais que o captioner sobrescreveu (não são usadas no treino)
192
+
193
+ Repo do modelo — `AdwolfCzar/minih33-smoothloopv3` (público, gated manual):
194
+ - `configs/` — TOMLs, scripts de cache/treino, uploader, scripts auxiliares
195
+ - `samples/previews_20260919/` — 3 PNGs, `sample_prompts.txt`, `sample_manifest.json`
196
+ - `manifest_views.csv` — **congela qual clipe vai para qual view** (crítico, ver §4)
197
+ - `PROGRESSO.md` — este diário
198
+
199
+ ## 2. Ambiente exato que funcionou
200
+
201
+ ```
202
+ GPU RTX 5090 32 GB (sm_120 / cc 12.0), driver 595.91.07, CUDA 13.2
203
+ python 3.12.14 em /venv/main
204
+ torch 2.10.0+cu130 <- NÃO troque; instale com --index-url .../whl/cu130
205
+ transformers 4.57.6 accelerate 1.6.0 safetensors 0.4.5 hf_hub 0.34.3
206
+ av 14.0.1 bitsandbytes 0.50.2 diffusers 0.32.1 einops 0.7.0
207
+ tensorboard 2.21.0 toml 0.10.2 voluptuous 0.15.2 hf-xet 1.6.0
208
+ ffmpeg 6.1.1
209
+ trainer AkaneTendo25/musubi-tuner, branch minimax-h3, commit ede9ed9f769d605db32d37e32243d4c979f9eee3
210
+ ```
211
+
212
+ Se `/venv/main` der `Permission denied` ao instalar: `sudo chown -R claude:claude /venv/main`.
213
+
214
+ ## 3. Montagem da máquina nova
215
+
216
+ ```bash
217
+ export HF_TOKEN=<token da conta AdwolfCzar>
218
+ source /venv/main/bin/activate
219
+ sudo chown -R claude:claude /venv/main # se necessário
220
+
221
+ # 3.1 trainer no pin auditado
222
+ git clone https://github.com/AkaneTendo25/musubi-tuner.git /workspace/projects/musubi-tuner
223
+ cd /workspace/projects/musubi-tuner
224
+ git fetch origin minimax-h3 && git checkout ede9ed9f769d605db32d37e32243d4c979f9eee3
225
+ uv pip install torch==2.10.0 torchvision --index-url https://download.pytorch.org/whl/cu130
226
+ uv pip install -e . && uv pip install tensorboard
227
+
228
+ # 3.2 pesos (~88 GB, xet é rápido) — SÓ estes 4 arquivos
229
+ python - <<'PY'
230
+ from huggingface_hub import hf_hub_download
231
+ for f in ["diffusion_models/minimax_h3_fl2va_bf16.safetensors",
232
+ "text_encoders/qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors",
233
+ "vae/minimax_h3_video_vae_fp16.safetensors",
234
+ "vae/minimax_h3_audio_vae_fp32.safetensors"]:
235
+ hf_hub_download("Comfy-Org/MiniMax-H3", f, local_dir="/workspace/models/MiniMax-H3")
236
+ PY
237
+
238
+ # 3.3 dataset pronto (NÃO recaptionar, NÃO reconverter)
239
+ python - <<'PY'
240
+ from huggingface_hub import hf_hub_download
241
+ hf_hub_download("AdwolfCzar/smoothloopv3_dataset","smoothloopv3_dataset.zip",
242
+ repo_type="dataset", local_dir="/workspace/datasets")
243
+ PY
244
+ cd /workspace/datasets && unzip -q smoothloopv3_dataset.zip # cria smoothloopv3_work/{1..6}
245
+
246
+ # 3.4 cache pronto (pula ~2,5 h de GPU)
247
+ python - <<'PY'
248
+ from huggingface_hub import hf_hub_download
249
+ hf_hub_download("AdwolfCzar/smoothloopv3_dataset","cache/cache_smoothloopv3_pin_ede9ed9f.tar",
250
+ repo_type="dataset", local_dir="/workspace/dl")
251
+ PY
252
+ mkdir -p /workspace/cache && tar xf /workspace/dl/cache/cache_smoothloopv3_pin_ede9ed9f.tar -C /workspace/cache
253
+
254
+ # 3.5 configs, scripts e samples
255
+ python - <<'PY'
256
+ from huggingface_hub import snapshot_download
257
+ snapshot_download("AdwolfCzar/minih33-smoothloopv3",
258
+ allow_patterns=["configs/*","samples/*","manifest_views.csv"],
259
+ local_dir="/workspace/restore")
260
+ PY
261
+ mkdir -p /workspace/projects/h3_smoothloopv3/{configs,output,samples} /workspace/scripts /workspace/notes
262
+ cp /workspace/restore/configs/*.toml /workspace/projects/h3_smoothloopv3/configs/
263
+ cp /workspace/restore/configs/*.sh /workspace/restore/configs/*.py /workspace/scripts/
264
+ cp /workspace/restore/manifest_views.csv /workspace/notes/
265
+ cp -r /workspace/restore/samples/previews_20260919 /workspace/projects/h3_smoothloopv3/samples/
266
+ chmod +x /workspace/scripts/*.sh
267
+ ```
268
+
269
+ **Os caminhos acima não são sugestão, são requisito.** `sample_prompts.txt` e os TOMLs guardam
270
+ caminhos absolutos; se a árvore mudar, o sampling não acha as PNGs e o trainer não acha o cache.
271
+
272
+ ## 4. Religar as views — o passo que não pode ser improvisado
273
+
274
+ Os arquivos de cache são indexados pelo **stem** do item (`1_8xsg9eu5sz`). Rodar
275
+ `assign_views.py` de novo re-sorteia a distribuição e **invalida os 22 GB de cache**.
276
+ Use sempre o manifesto congelado:
277
+
278
+ ```bash
279
+ python /workspace/scripts/rebuild_views_from_manifest.py \
280
+ --manifest /workspace/notes/manifest_views.csv \
281
+ --dataset /workspace/datasets/smoothloopv3_work \
282
+ --out /workspace/datasets/views_smoothloopv3
283
+ ```
284
+
285
+ Deve imprimir exatamente `v288: 963 · v384: 491 · v480: 298` (1752 itens) e sair com código 0.
286
+ O script falha de propósito se algum arquivo faltar, porque nesse caso o cache não casaria.
287
+ Verificado nesta máquina: a reconstrução pelo manifesto bate 100% com as views originais
288
+ (hash idêntico das três listas).
289
+
290
+ ## 5. Lançar o treino
291
+
292
+ ```bash
293
+ cd /workspace
294
+ DATASET_CONFIG=/workspace/projects/h3_smoothloopv3/configs/dataset_smoothloopv3_train.toml \
295
+ SAMPLE_PROMPTS=/workspace/projects/h3_smoothloopv3/samples/previews_20260919/sample_prompts.txt \
296
+ RUN_NAME=minih33_smoothloopv3 MAX_STEPS=6000 SAVE_EVERY=250 SAMPLE_EVERY=500 \
297
+ nohup bash /workspace/scripts/train_smoothloopv3.sh > /workspace/logs/train.log 2>&1 &
298
+
299
+ # uploader em tempo real (obrigatório: /workspace não é volume, some no recycle)
300
+ nohup python /workspace/scripts/hf_uploader.py \
301
+ --output-dir /workspace/projects/h3_smoothloopv3/output/minih33_smoothloopv3 \
302
+ --repo AdwolfCzar/minih33-smoothloopv3 --interval 60 --keep-states 2 \
303
+ > /workspace/logs/uploader.log 2>&1 &
304
+ ```
305
+
306
+ Se já existir checkpoint no HF e você quiser continuar de onde parou, baixe o `*-state`
307
+ correspondente para dentro do `output/` e acrescente `RESUME=1`.
308
+
309
+ Parada graciosa a qualquer momento (salva e encerra no próximo optimizer step):
310
+ ```bash
311
+ touch /workspace/projects/h3_smoothloopv3/output/minih33_smoothloopv3/save-and-stop.flag
312
+ ```
313
+ Salvar sem parar: `touch .../save-now.flag`.
314
+
315
+ ## 6. Configuração, e por que ela é assim
316
+
317
+ | Item | Valor | Motivo |
318
+ |---|---|---|
319
+ | Base | FL2VA BF16 → ConvRot INT8 na carga, fwd BF16 | pipeline histórico do projeto |
320
+ | Condicionamento | `--task i2va`, `target_modalities = ["video"]` | preserva o experimento anterior; áudio é ignorado |
321
+ | LoRA | dim 32 / alpha 32 | histórico v3 |
322
+ | Otimizador / LR | AdamW8bit, **5e-5**, constant_with_warmup 50 | v3 revisou 1e-4 → 5e-5 para H3 destilado |
323
+ | Batch / acumulação | 1 / 1 | obrigatório no H3 |
324
+ | Guidance | escala 4, schedule `sigma`, form `normalized` | receita v3 |
325
+ | Jitter de densidade espacial | 0,2 | receita v3 |
326
+ | Base preservation | **0 (desligada)** | decisão explícita do v3 |
327
+ | Atenção / precisão | SDPA / BF16 | flash_attn quebra o ConvRot INT8 |
328
+ | AdaLN | rank 16 | histórico |
329
+ | Block swap | 32, h2d_only, ring 2, pinned | OOM histórico no step 4502 com swap 24 |
330
+ | Views | 3 áreas (512×288 / 640×384 / 832×480), quotas 55/28/17, **todas `max_frames = 124`** | ver abaixo |
331
+ | Samples | 3 previews, seeds 42/43/44, 124f, 20 passos, ~480p | ver abaixo |
332
+
333
+ **Por que todas as views em 124 frames:** decisão do Cesar de respeitar o mínimo do H3 de 5 s.
334
+ No grid `17k+5` o primeiro valor acima de 5 s é **124** (5,17 s), então nenhuma view pode ficar
335
+ abaixo disso. Isso descartou a receita do smoothloop histórico (que usava f124/90/73) e a escada
336
+ do videovibe (f192/141/107). 124 também é exatamente o regime de geração alvo. Multi-resolução
337
+ foi mantida porque o RoPE do H3 é normalizado por área — treinar numa área só deixa a LoRA
338
+ frágil fora dela. Como a duração deixou de diferenciar as views, a área é estratificada pela
339
+ resolução da fonte (as fontes mais densas ancoram a área maior), como o `assign_buckets.py`
340
+ histórico fazia.
341
+
342
+ **Samples:** 3 clipes reais do próprio dataset, **primeiro frame** como condição (a caption H3
343
+ ancora `<Picture 1>` em 0.00 s, então um frame do meio contradiria o texto). Cobrem paisagem /
344
+ quase-quadrado / retrato e os tipos smooth / slow / static. Seeds, dimensões e passos são fixos
345
+ entre checkpoints de propósito: é o que isola a evolução da LoRA de mudanças na avaliação.
346
+ São clipes do treino, então servem para **acompanhamento visual**, não como validação independente.
347
+
348
+ ## 7. Números medidos nesta máquina
349
+
350
+ | | |
351
+ |---|---|
352
+ | Velocidade | **11,6–12,4 s/it** (smoke nos itens mais pesados: ~10 s/it) |
353
+ | Loss | 0,0996 → 0,0795 nos primeiros 191 steps |
354
+ | VRAM | **25,1 GB / 32 GB** durante os steps; pico 15,1 GiB no sampling |
355
+ | Sampling | ~113 s por preview (101,6 s denoising + 11,7 s decode) → ~6 min por evento de 3 |
356
+ | Cache | latentes ~2,5 h (GPU 100%, VAE-bound) + TE ~20 min = 21,5 GB |
357
+ | 1 época | 1752 steps ≈ 5,7 h |
358
+
359
+ Âncoras históricas para comparação: quick (124f multi-res) 12,8 s/it · v2 10,15 · smoothloop 8,7 ·
360
+ videovibe 12,4. Estamos na faixa esperada.
361
+
362
+ **Orçamento de steps:** 6000 é teto, não alvo. O histórico parou o smoothloop em 2100 (966 clipes)
363
+ e o jiggle em 2500 (1232 clipes) — ambos ~2 épocas. Com 1752 clipes, 2 épocas ≈ 3500 steps.
364
+ A decisão é visual, comparando os previews de seed fixa entre checkpoints, não pela loss.
365
+
366
+ ## 8. Armadilhas desta máquina que valem para a próxima
367
+
368
+ 1. **`pgrep -f` / `pkill -f` casam com o próprio shell** e matam a sessão. Aconteceu 2×. Grave o
369
+ PID num arquivo ao lançar (`echo $! > /workspace/logs/x.pid`) e mate por PID.
370
+ 2. **`captioner` consome stdin.** Dentro de `while read -r f` ele come caracteres do caminho lido
371
+ (viravam `orkspace/...`). Use `</dev/null` no comando interno.
372
+ 3. **`--save_last_n_steps_state` NÃO existe no pin `ede9ed9f`.** O template do handoff de 18/09
373
+ usa esse argumento e falharia. A única retenção é `--save_last_n_checkpoints N`, que apaga
374
+ LoRAs antigos junto com os states e quebraria o checkpoint picking — por isso **não passamos
375
+ retenção nenhuma**; o uploader sobe tudo e limpa só os states locais (mantém 2).
376
+ 4. **Jupyter cria `.ipynb_checkpoints` dentro de `output/`** quando alguém navega pela pasta. O
377
+ uploader já ignora esse padrão; se escrever outro, ignore também.
378
+ 5. **`/workspace` é overlay, não volume.** Confirme com
379
+ `vast-capabilities | jq '.instance.workspace_is_volume'`. Se for `false`, o upload em tempo
380
+ real não é conforto, é requisito.
381
+ 6. **Não rode ComfyUI junto com o treino.** O gargalo é VRAM (25,1 de 32 GB), não disco.
382
+ 7. **Falha de GPU não é OOM.** Se `nvidia-smi` responder `Unable to determine the device handle
383
+ ... No devices were found`, a GPU caiu do barramento — não dá para consertar de dentro de um
384
+ container sem privilégios. Confira `vastai show instance $CONTAINER_ID`: `actual_status:
385
+ offline` confirma que é host. Foi o que matou o run no step 191.
386
+ 8. **captionkreator precisa do fix de fps baixo** se for recaptionar qualquer coisa: fontes de
387
+ 4–16 fps falhavam a conversão com `duration changed from X to Y` (~11% deste dataset).
388
+ Branch `fix/low-fps-duration`, commit `8c6f813` em `github.com/adbrasi/captionkreator`
389
+ (local, sem push até agora). Duas causas: `-stream_loop` com uma cópia a menos do que o `-t`
390
+ precisa, e tolerância medida no fps do alvo em vez do da fonte.