Gradient Checkpointing
Geri yayılım sırasında aktivasyonları yeniden hesaplayarak gradyan kontrol noktalamanın (gradient checkpointing) GPU belleğini nasıl azalttığını PyTorch örnekleri, ödünleşimler (tradeoffs) ve pratik eğitim rehberliği ile öğren.
Gradyan kontrol noktası oluşturma, ileri geçişten yalnızca seçilen ara aktivasyonları saklayan ve geri yayılım sırasında diğerlerini yeniden hesaplayan, bellek tasarrufu sağlayan bir eğitim tekniğidir. Aktivasyon kontrol noktası oluşturma olarak da adlandırılır, daha düşük tepe bellek kullanımı karşılığında ek hesaplama takası yapar. Adına rağmen bu teknik, parametre gradyanlarını veya model dosyalarını değil aktivasyonları kontrol noktalarına kaydeder; bu da aktivasyon tensörlerinin bir sinir ağının mevcut GPU belleğine sığmasını engellediğinde onu özellikle değerli kılar.
Gradyan Kontrol Noktası Oluşturma Nasıl Çalışır#
Standart bir ileri geçiş sırasında bir sinir ağı, aktivasyonlar adı verilen ara tensörleri hesaplar. Otomatik türev sistemi, PyTorch autograd mekanizmalarında açıklandığı gibi, daha sonra gradyanları hesaplamak için gereken aktivasyonları saklar. Derin ağlar, büyük partiler, yüksek çözünürlüklü görseller ve uzun girdi dizileri, bu kaydedilen tensörlerin önemli miktarda bellek tüketmesine neden olabilir.
Gradyan kontrol noktası oluşturma ağı segmentlere ayırır:
- İleri geçiş, seçilen segmentler için girdileri veya sınır aktivasyonlarını saklar.
- Bu segmentlerin içindeki diğer ara aktivasyonlar atılır.
- Geri geçiş sırasında, kontrol noktası oluşturulmuş her segment, eksik değerleri yeniden oluşturmak için tekrar ileri yönde çalıştırılır.
- Yeniden oluşturulan aktivasyonlar, gradyanları hesaplamak için hemen kullanılır.
PyTorch aktivasyon kontrol noktası oluşturma API'si, bu davranışı torch.utils.checkpoint aracılığıyla dışarı aktarır. Eşdeğer kavramlar JAX gradyan kontrol noktası oluşturma ve yeniden materyalleştirme ile TensorFlow teyp kontrol noktası oluşturma olarak görünür.
Kontrol noktası yerleşimi ödünleşimi belirler. Daha fazla bölgeye kontrol noktası koymak genellikle daha fazla bellek tasarrufu sağlar ancak daha fazla işlemi tekrarlar. Aktivasyon ağırlıklı blokların çevresindeki seçici yerleşim, tüm ağı yeniden hesaplamaya kıyasla daha iyi bir denge sağlayabilir.
Ödünleşimler ve İlgili Teknikler#
Gradyan kontrol noktası oluşturma genellikle model parametrelerini, gradyanları ve optimizer durumlarını değiştirmeden bırakır. Birincil hedefi aktivasyon belleğidir ve bazı ileri hesaplamalar iki kez çalıştığı için eğitim yavaşlar. Tam sonuç mimariye, kontrol noktası sınırlarına, parti şekline ve donanıma bağlıdır.
Birkaç ilgili teknikten farklıdır:
- Gradyan birikimi, model ağırlıklarını güncellemeden önce birden fazla mikro partiyi işleyerek her örneği aynı anda yüklemeden daha büyük etkili bir parti oluşturur. Gradyan kontrol noktası oluşturma ise bunun yerine her mikro parti için tutulan aktivasyonları azaltır.
- Karışık hassasiyet, seçilen işlemler için daha düşük hassasiyetli veri türleri kullanır. PyTorch otomatik karışık hassasiyet iş akışı, belleği azaltabilir ve uyumlu işlemleri hızlandırabilirken, kontrol noktası oluşturma bilerek ek hesaplama ekler.
- Parti boyutu küçültme, daha az örneği birlikte işleyerek belleği düşürür. Kontrol noktası oluşturma, daha büyük bir partinin veya girdi çözünürlüğünün uygun kalmasını sağlayabilir.
- Eğitim kontrol noktaları, kurtarma veya sonraki çıkarım için ağırlıkları ve optimizer durumunu kaydeder. PyTorch model kontrol noktası kılavuzu, aktivasyonun yeniden hesaplanmasıyla ilgisi olmayan bu kalıcılık mekanizmasını açıklar.
Kontrol noktası oluşturulmuş kod, orijinal ve yeniden hesaplanan ileri yürütmeleri arasında işlevsel olarak tutarlı olmalıdır. Kontrol noktası oluşturulmuş bir bölge içindeki değiştirilebilir durum, cihaz aktarımları veya kontrolsüz rastgelelik hatalara veya yanlış gradyanlara neden olabilir. Kod çözücü tarzı transformer'larda, önbelleğe alınmış çıkarım durumu ileri grafiğin yeniden oluşturulmasıyla çakışabileceğinden, kontrol noktası oluşturulmuş eğitim sırasında bir anahtar-değer önbelleğinin de devre dışı bırakılması gerekebilir.
PyTorch Örneği#
Aşağıdaki örnek, bir eğitim adımında belleğe yoğun bir bloğu kontrol noktasına kaydeder:
import torch
from torch import nn
from torch.utils.checkpoint import checkpoint
torch.manual_seed(0)
block = nn.Sequential(
nn.Linear(1024, 4096),
nn.ReLU(),
nn.Linear(4096, 1024),
)
optimizer = torch.optim.AdamW(block.parameters())
inputs = torch.randn(8, 1024, requires_grad=True)
targets = torch.zeros_like(inputs)
optimizer.zero_grad(set_to_none=True)
outputs = checkpoint(block, inputs, use_reentrant=False)
loss = nn.functional.mse_loss(outputs, targets)
loss.backward()
optimizer.step()Yalnızca bloğun girdileri ve gerekli sınır bilgileri saklanır; dahili aktivasyonları loss.backward() sırasında yeniden oluşturulur. Gerçek projeler, PyTorch tepe ayrılmış GPU belleği gibi bir ölçüm kullanarak kontrol noktası olan ve olmayan çalıştırmaları karşılaştırmalıdır.
Gerçek Dünya Uygulamaları#
-
Yüksek çözünürlüklü bilgisayarlı görü: Tıbbi segmentasyon, havadan algılama ve endüstriyel denetim, özellik haritaları model ağırlıklarından daha fazla bellek tüketen büyük görüntüler üzerinde eğitim alabilir. Seçilen iskelet aşamalarına kontrol noktası koymak, girdileri agresif bir şekilde küçültmek yerine görüntü çözünürlüğünü koruyabilir veya parti başına ek örneklere izin verebilir.
-
Uzun dizili transformer eğitimi: Dizi uzunluğu ve katman sayısı arttıkça aktivasyon depolama alanı hızla büyür. Transformer bloklarını yeniden hesaplamak, daha uzun bağlamların veya daha büyük mikro partilerin aynı hızlandırıcıya sığmasını sağlayabilir. NVIDIA aktivasyon yeniden hesaplama kılavuzu, transformer katmanları için tam ve seçici yeniden hesaplamayı gösterir.
Pratik Rehberlik#
Profil oluşturma, parametrelerin veya optimizer durumunun değil aktivasyonların belleğe hakim olduğunu gösterdiğinde gradyan kontrol noktası oluşturma kullanın. Kapsamı genişletmeden önce büyük tekrarlanan bloklarla başlayın ve tepe belleği, iterasyon süresini ve doğrulama davranışını kıyaslayın.
Belgelenmiş Ultralytics YOLO eğitim yapılandırmaları için ilk adım bellek kontrolleri; otomatik karışık hassasiyet, görüntü boyutu ve fiziksel parti boyutunu içerir. Ultralytics AutoBatch referansı, mevcut GPU belleğine dayalı otomatik parti seçimini açıklar. Yerel donanım yetersiz kaldığında, Ultralytics Platform bulut eğitimi, yönetilen eğitim çalıştırmaları için yapılandırılabilir bulut GPU'ları sağlar. Özel bir PyTorch mimarisi daha hassas aktivasyon-bellek yönetimi gerektirdiğinde gradyan kontrol noktası oluşturma bu kontrolleri tamamlayabilir.






