Gradient Checkpointing
Gradyan kontrol noktası oluşturma, ileri geçiş sırasında yalnızca bazı aktivasyonları kaydeder ve geriye yayılım sırasında geri kalanları yeniden hesaplar; daha az bellek kullanmak için ek hesaplama maliyetini göze alır.
Gradyan kontrol noktası oluşturma, ileri geçişteki yalnızca seçili ara aktivasyonları saklayan ve diğerlerini geri yayılım sırasında yeniden hesaplayan, bellek tasarrufu sağlayan bir eğitim tekniğidir. Aktivasyon kontrol noktası oluşturma olarak da adlandırılan bu yöntem, en yüksek bellek kullanımını azaltmak karşılığında ek hesaplama gerektirir. Adına rağmen teknik, parametre gradyanları veya model dosyaları yerine aktivasyonları kontrol noktalarına kaydeder; bu nedenle aktivasyon tensörleri sinir ağının kullanılabilir GPU belleğine sığmasını engellediğinde özellikle yararlıdır.
Gradyan Kontrol Noktası Oluşturma Nasıl Çalışır?#
Standart bir ileri geçiş sırasında sinir ağı, aktivasyonlar adı verilen ara tensörleri hesaplar. Otomatik türev sistemi, PyTorch otomatik türev mekaniklerinde açıklandığı üzere, daha sonra gradyanları hesaplamak için gereken aktivasyonları tutar. Derin ağlar, büyük gruplar, yüksek çözünürlüklü görüntüler ve uzun giriş dizileri, kaydedilen bu tensörlerin önemli miktarda bellek tüketmesine yol açabilir.
Gradyan kontrol noktası oluşturma, ağı bölümlere ayırır:
- İleri geçişte seçilen bölümlerin girdileri veya sınır aktivasyonları saklanır.
- Bu bölümlerdeki diğer ara aktivasyonlar atılır.
- Geri geçiş sırasında, eksik değerleri yeniden oluşturmak için kontrol noktası eklenen her bölüm yeniden ileri çalıştırılır.
- Yeniden oluşturulan aktivasyonlar, gradyanları hesaplamak için hemen kullanılır.
PyTorch aktivasyon kontrol noktası API'si bu davranışı torch.utils.checkpoint üzerinden sunar. Benzer kavramlar JAX gradyan kontrol noktası oluşturma ve yeniden materyalleştirme ile TensorFlow bant kontrol noktası oluşturma biçiminde de kullanılır.
Kontrol noktalarının yerleşimi ödünleşimi belirler. Daha fazla bölüme kontrol noktası eklemek genellikle daha çok bellek kazandırır ancak daha fazla işlemin yinelenmesine yol açar. Aktivasyon ağırlıklı blokların çevresinde seçici yerleşim, tüm ağı yeniden hesaplamaktan daha iyi bir denge sağlayabilir.
Ödünleşimler ve İlgili Teknikler#
Gradyan kontrol noktası oluşturma genellikle model parametrelerini, gradyanları ve iyileştirici durumlarını değiştirmez. Öncelikli hedefi aktivasyon belleğidir ve bazı ileri hesaplamalar iki kez çalıştırıldığından eğitimi yavaşlatır. Kesin sonuç mimariye, kontrol noktası sınırlarına, grup şekline ve donanıma bağlıdır.
Bu yöntem, ilgili birkaç teknikten farklıdır:
- Gradyan biriktirme, model ağırlıklarını güncellemeden önce birden fazla mikro grubu işler ve tüm örnekleri aynı anda yüklemeden daha büyük bir etkin grup oluşturur. Gradyan kontrol noktası oluşturma ise her mikro grup için tutulan aktivasyonları azaltır.
- Karma hassasiyet, seçili işlemler için daha düşük hassasiyetli veri türleri kullanır. PyTorch otomatik karma hassasiyet iş akışı, belleği azaltıp uyumlu işlemleri hızlandırabilir; kontrol noktası oluşturma ise bilerek ek hesaplama gerektirir.
- Grup boyutunu azaltma, birlikte işlenen örnek sayısını düşürerek bellek kullanımını azaltır. Kontrol noktası oluşturma daha büyük bir grubun veya girdi çözünürlüğünün uygulanabilir olmasını sağlayabilir.
- Eğitim kontrol noktaları, kurtarma veya daha sonraki çıkarım için ağırlıkları ve iyileştirici durumunu kaydeder. PyTorch model kontrol noktası kılavuzu, aktivasyonları yeniden hesaplamayla ilgisi olmayan bu kalıcılık mekanizmasını açıklar.
Kontrol noktası eklenmiş kod, özgün ve yeniden hesaplanan ileri geçişleri arasında işlevsel açıdan tutarlı olmalıdır. Kontrol noktası eklenmiş bir bölgedeki değişebilir durum, cihazlar arası aktarımlar veya denetlenmeyen rastgelelik hatalara ya da yanlış gradyanlara yol açabilir. Kod çözücü tarzı Transformer'larda, önbelleğe alınmış çıkarım durumu ileri geçiş grafiğinin yeniden oluşturulmasıyla çakışabileceğinden, kontrol noktası eklenmiş eğitim sırasında anahtar-değer önbelleğinin devre dışı bırakılması da gerekebilir.
PyTorch Örneği#
Aşağıdaki örnek, tek bir eğitim adımında bellek yoğun bir bloğa kontrol noktası ekler:
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 gereken sınır bilgileri tutulur; bloğun iç aktivasyonları loss.backward() sırasında yeniden oluşturulur. Gerçek projelerde, PyTorch en yüksek ayrılmış GPU belleği gibi bir ölçüm kullanarak kontrol noktası oluşturma özelliği açık ve kapalı çalıştırmaları karşılaştır.
Gerçek Dünya Uygulamaları#
-
Yüksek çözünürlüklü bilgisayarlı görü: Tıbbi bölütleme, hava görüntülerinde algılama ve endüstriyel inceleme; özellik haritaları model ağırlıklarından daha fazla bellek tüketen büyük görüntülerle eğitim gerektirebilir. Seçilmiş omurga aşamalarına kontrol noktası eklemek, girdileri agresif biçimde küçültmek yerine görüntü çözünürlüğünü koruyabilir veya grup başına daha fazla örneğe olanak sağlayabilir.
-
Uzun dizilerle Transformer eğitimi: Dizi uzunluğu ve katman sayısı arttıkça aktivasyon depolama gereksinimi hızla büyür. Transformer bloklarını yeniden hesaplamak, aynı hızlandırıcıda daha uzun bağlamların veya daha büyük mikro grupların belleğe sığmasını sağlayabilir. NVIDIA aktivasyon yeniden hesaplama kılavuzu, Transformer katmanları için tam ve seçici yeniden hesaplamayı gösterir.
Uygulamaya Yönelik Kılavuz#
Profil oluşturma sonucunda belleğe parametreler veya iyileştirici durumu yerine aktivasyonların hâkim olduğu görülüyorsa gradyan kontrol noktası oluşturmayı kullan. Büyük, yinelenen bloklarla başla ve kapsamı genişletmeden önce en yüksek bellek kullanımını, yineleme süresini ve doğrulama davranışını kıyasla.
Belgelenmiş Ultralytics YOLO eğitim yapılandırmalarında ilk aşamadaki bellek denetimleri arasında otomatik karma hassasiyet, görüntü boyutu ve fiziksel grup boyutu bulunur. Ultralytics AutoBatch başvurusu, kullanılabilir GPU belleğine göre otomatik grup 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ı sunar. Özel bir PyTorch mimarisinde aktivasyon belleğinin daha ayrıntılı yönetilmesi gerektiğinde gradyan kontrol noktası oluşturma bu denetimleri tamamlayabilir.










