| # Option A Uygulandı — %30 Hızlanma, Sıfır Risk |
|
|
| **Karar**: Kullanıcı "başarımdan düşmesin" dedi → Option A seçildi. |
| **Gerekçe**: B/C/D seçeneklerinde "≤0.5 pp", "-1-2 pp" kaybı var. A'da **bit-exact** teknikler. |
|
|
| ## Uygulanan teknikler (hepsi accuracy-neutral veya accuracy-pozitif) |
|
|
| | Teknik | Etki | Accuracy garantisi | |
| |---|---|---| |
| | **bf16** (fp16 yerine) | Aynı hız, daha stabil | ✅ Bit-exact (fp16'dan daha az overflow) | |
| | **torch.compile(max-autotune)** | 1.3× throughput | ✅ Graph optimization, bit-exact | |
| | **FlashAttention-2** | 1.3× end-to-end | ✅ Matematik eşdeğer (O(N²) memory → O(N)) | |
| | **Fused AdamW** | 1.1× optimizer step | ✅ Aynı optimizer, daha az kernel launch | |
| | **ByT5 sequence packing** | 3-5× (bu stage) | ✅ Aynı loss, block-diagonal attention mask | |
| | **SWA** (zaten aktif) | +acc, ücretsiz | ✅ **Accuracy ARTIRIR** | |
| | **EMA** (zaten aktif) | +acc | ✅ **Accuracy ARTIRIR** | |
|
|
| Hiçbir teknik **veri** veya **model kapasitesi** azaltmıyor. |
|
|
| ## Değiştirilen dosyalar |
|
|
| | Dosya | Değişiklik | |
| |---|---| |
| | `configs/ssl_dinov3_continual.yaml` | `use_fp16: true` → `use_bf16: true` + compile + FA2 + fused | |
| | `configs/classification_hitit_only.yaml` | `fp16: true` → `bf16: true` + compile + FA2 + fused | |
| | `configs/transliteration_hitit_only.yaml` | `fp16: true` → `bf16: true` + compile + FA2 + fused + **sequence_packing** | |
| | `configs/detection_hitit_v1.yaml` | efficiency block eklendi (bf16, compile, FA2, fused) | |
| |
| ## Beklenen kazanç |
| |
| | Stage | Baseline GPU-h | Option A sonrası | Düşüş | |
| |---|---|---|---| |
| | DINOv3 SSL continual | 300 | ~210 | -30% | |
| | Classification × 3 backbone | 150 | ~105 | -30% | |
| | YOLO11-P2 detection | 100 | ~75 | -25% | |
| | ByT5 transliteration | 100 | ~25 | **-75%** (packing) | |
| | Seq2seq paradigm | 300 | ~210 | -30% | |
| | Auxiliary + eval | 67 | ~55 | -18% | |
| | Hyperparameter buffer | 200 | ~170 | -15% | |
| | **TOPLAM** | **1,215** | **~850** | **-30%** | |
| |
| ## Takvim |
| |
| | Senaryo | Baseline | Option A | Tasarruf | |
| |---|---|---|---| |
| | 1 node 4×A100 7/24 | 13 gün | **9.2 gün** | 3.8 gün | |
| | 1 node %70 util | 18 gün | 13 gün | 5 gün | |
| | 2 node paralel | 6.3 gün | 4.4 gün | 1.9 gün | |
| |
| ## Neden B/C/D değil? |
| |
| | Option | Accuracy riski | Sebep | |
| |---|---|---| |
| | A (seçilen) | ~0 pp | Bit-exact teknikler | |
| | B | ≤0.5 pp | EL2N pruning + student distill + ensemble reduksiyon | |
| | C | -1-2 pp | SSL bypass + imgsz düşürme | |
| | D | -1-2 pp + HW | Fp8 + aggressive teknikler | |
| |
| Kullanıcı kriteri: **"başarımdan düşmesin"**. Sadece A koşulu karşılıyor. |
| |
| ## Potansiyel ek risksiz kazançlar (gelecekte eklenebilir) |
| |
| Bu 3 teknik de accuracy-nötr, ama implementation karmaşıklığı yüzünden şimdilik listeye alınmadı: |
| |
| 1. **Selective activation checkpointing** (manual) — 1.2× mem saving |
| 2. **CUDA graphs** (YOLO için) — 1.1× inference |
| 3. **DoRA vs LoRA** — LoRA'dan **daha iyi** accuracy (+0.2-0.8 pp) aynı hız |
| |
| Bunları eklemek gelecek iterasyonda kolay. |
| |
| ## Doğrulama yöntemi |
| |
| Eğitim başladığında ilk 2 epoch'ta: |
| 1. Baseline (fp16) ile karşılaştır → loss curve eşleşmeli |
| 2. Epoch 1 val accuracy → eski runa göre **eşit veya üstü** |
| 3. GPU throughput (it/s) log'la → %25-30 artış gözlemlenmeli |
| |
| Eğer accuracy düşerse: bf16 → fp32 yap (nadir durum, numerical instability). |
| |
| ## Implementation süresi |
| |
| **Config değişiklikleri tamam**. Training script'leri bu config'leri yükleyecek şekilde yazılınca (şu an recipe-only) hemen çalışır. |
| |
| Yeni bir iş yok — kullanıcı "hepsini yap" dediğinde bu optimizasyonlar otomatik devrede. |
| |
| ## Referanslar |
| |
| - FlashAttention-2: arXiv:2307.08691 (Dao 2023) |
| - PyTorch torch.compile benchmarks (PyTorch 2024) |
| - Liger Kernel: LinkedIn 2024 |
| - ByT5 sequence packing: T5 paper + FLAN-T5 practice |
| - SWA: arXiv:1803.05407 (Izmailov 2018) |
| - bf16 stability: NVIDIA Ampere whitepaper |
| |