AlexWortega commited on
Commit
8d1c29a
·
verified ·
1 Parent(s): 4ac1f5f

B200.md: measured smoke results (1xH100 495 s/s full script, 2xH100 DDP functional but interconnect-bound 340 s/s), spawn requirement, honest 8x caveat

Browse files
Files changed (1) hide show
  1. tinyvla_b200/B200.md +21 -6
tinyvla_b200/B200.md CHANGED
@@ -157,12 +157,25 @@ batch_size × N; на 8 GPU при 256 это 2048 — опусти до 96–12
157
  `num_workers` воркерами (стрим-источник делит seed-пространство по рангам);
158
  лог и чекпойнты пишет только rank 0, samples/s в логе — глобальный.
159
 
160
- Ожидания на 8×B200/B300: ~5 500 семплов/с глобально (DDP ~92%; B300 в этой
161
- задаче ≈ B200 — шаг kernel-bound, не FLOPS-bound). Эпоха пула (~86M семплов)
162
- ≈ **4.5 ч**. Внимание на сеть: 8 рангов совокупно тянут ~140 МБ/с с HF CDN —
163
- если провайдер или CDN режет с одного IP, станете data-bound (~6 ч/эпоха);
164
- страховка — одноразовая упаковка в локальные wds-тары (`pack_wds.py`, ~1.3 ТБ
165
- NVMe, отдаёт 2 400+ семплов/с на процесс).
 
 
 
 
 
 
 
 
 
 
 
 
 
166
 
167
  При старте `load_compatible` напечатает, что перенесено из C-scaled, а что
168
  переинициализировано из-за смены размерностей — **проверь этот список**:
@@ -204,6 +217,8 @@ NVMe, отдаёт 2 400+ семплов/с на процесс).
204
  | + дедуп cam0 | 398 | 0.70 |
205
  | + плотный fixed-grid ViT + compile | **738** | **0.38** |
206
  | **end-to-end со стримом с хаба** | **745** | **0.37** |
 
 
207
  | стрим-загрузчик отдельно (16 воркеров) | 1019 | — |
208
  | webdataset из локальных таров (для сравнения) | 1600–2400 | — |
209
 
 
157
  `num_workers` воркерами (стрим-источник делит seed-пространство по рангам);
158
  лог и чекпойнты пишет только rank 0, samples/s в логе — глобальный.
159
 
160
+ **Статус мульти-GPU (провалидировано на 2×H100 SXM, 28.08.2026):**
161
+ - DDP-ветка РАБОТАЕТ end-to-end (стрим + C-чекпойнт + оба ранга, EXIT=0).
162
+ - КРИТИЧНО: воркеры DataLoader стартуют через **spawn** (уже в коде). С fork
163
+ 2 ранга × 16 воркеров, форкнутых после инициализации CUDA/NCCL, задушили
164
+ heartbeat torchrun-агента — ранги зависали в первом allreduce, NCCL watchdog
165
+ убивал прогон через 480 с. Симптом в логе: `RendezvousTimeoutError` через
166
+ ~3 мин после старта.
167
+ - Эффективность на конкретной паре карт этого пода — ПЛОХАЯ: 340 семплов/с
168
+ глобально против 495 на одной карте (шаг 258 → 750 мс; ~0.5 с уходит в
169
+ allreduce 0.6 ГБ градиентов). Функциональность доказана, масштабирование —
170
+ нет. Прежде чем планировать 8×, прогони `--profile-steps 220` на своей ноде
171
+ и посмотри на шаг: если allreduce не прячется — крути NCCL (NVLink-топология
172
+ узла, `NCCL_NVLS_ENABLE`, `bucket_cap_mb`, gradient compression) или включай
173
+ grad_accum (реже allreduce).
174
+ - Прогноз «8×B300 ≈ 4.5 ч/эпоха» из ранних версий этого файла считался от
175
+ идеального DDP ~92% и измерением НЕ подтверждён; на плохом interconnect
176
+ масштабирование может съесть большую часть выигрыша.
177
+ - Сеть при N рангах: совокупно ~N×25 МБ/с с HF CDN; если режут с одного IP —
178
+ страховка: локальные wds-тары (`pack_wds.py`, ~1.3 ТБ NVMe, 2 400+ семплов/с).
179
 
180
  При старте `load_compatible` напечатает, что перенесено из C-scaled, а что
181
  переинициализировано из-за смены размерностей — **проверь этот список**:
 
217
  | + дедуп cam0 | 398 | 0.70 |
218
  | + плотный fixed-grid ViT + compile | **738** | **0.38** |
219
  | **end-to-end со стримом с хаба** | **745** | **0.37** |
220
+ | train_fast.py целиком, 1×H100 (смоук с C-чекпойнтом) | 495 | 0.56 |
221
+ | train_fast.py, 2×H100 DDP (глобально; interconnect-bound) | 340 | 0.82 |
222
  | стрим-загрузчик отдельно (16 воркеров) | 1019 | — |
223
  | webdataset из локальных таров (для сравнения) | 1600–2400 | — |
224