⚡ Benchmark DDP 3×GPU — MicroPLLM 108M

Data-parallel trening na RTX 3090 + RTX 4060 Ti + RTX 3060  ·  2026-09-27  ·  model: 108 082 688 param, seq 2048, bf16, grad-checkpointing
PyTorch 2.6.0+cu124 torchrun --nproc_per_node=3 asymetryczny micro-batch 8/8/6 accum 2 → world batch 90 112 tok

🏁 Wynik główny (pełny model, 16 warstw)

KonfiguracjaKrokWorld batchPrzepływChinchilla 2.8B
SOLO — RTX 30900.80 s32 768 tok40 844 tok/s19.0 h
DDP×3 — 3090+4060Ti+30601.56 s90 112 tok57 767 tok/s13.5 h
1.93× przyśpieszenia — ~5.5 h oszczędności na optimum Chinchilli (2.8 mld tokenów). Bariera: najwolniejsza karta (3060) + zajętość VRAM przez współdzielone serwery (LM Studio/Bielik na GPU0: −10.8 GB).

🧪 Sanity micro-test (4 warstwy, 45M) — weryfikacja mechanizmu DDP

KonfiguracjaKrokPrzepływ
SOLO296 ms110 862 tok/s
DDP×3588 ms153 178 tok/s
Przyśpieszenie tylko 1.38× — krótkie kroki (<300 ms) ⇒ all-reduce bariera dominuje. Wniosek: efektywność DDP rośnie z długością kroku — pełny model (krok >800 ms) ma narzut sync ~3%.

⚠️ Synchronizacja wag — uwaga produkcyjna

Spread wag po 30 krokach: 1.27e-03 (wymagane: 0). Przyczyna: asymetryczne micro-batche — DDP uśrednia gradienty stałą wagą 1/world_size, nie wproportcjonalnie do liczby tokenów na rank.

Przed prawdziwym treningiem: skaluj loss per rank:
loss = CE(...) * (micro_batch_rank * world_size / world_batch_tokens)
i weryfikuj spread asercją po N krokach. Do pomiaru przepustowości rozjazd bez znaczenia.

⏱️ Projections — pre-train od zera (pełny model 768 / 138M)

ReżimTokenySOLO 3090DDP×3 (zmierzone)DDP×3 (wolne karty, micro 16/16/12)
Chinchilla optimum (20 tok/param)2.8 mld~26 h~13.5 h~9–10 h
Jak obecny model (66 tok/param)9.1 mld~3.4 dnia~1.8 dnia~1.2 dnia

📁 Pliki

PlikOpis
DDP_BENCHMARK_WYNIKI.mdpełne wyniki + wnioski + checklist produkcyjny
log_ddp3_pelny.txtsurowy log: DDP×3, pełny model (57 767 tok/s)
log_solo_3090.txtsurowy log: solo 3090 (40 844 tok/s)
log_ddp3_micro.txtsurowy log: micro-test 4 warstwy
train_ddp_test.pyskrypt benchmarku (SOLO + torchrun DDP, weryfikacja spread wag)
bench_ddp.shlauncher: ./bench_ddp.sh [micro|full]