PyTorch'ta OOM'u Yenmek: Sıradan Bir GPU'da Dev Grafik Eğitimi
Disk Sparse Adam
Bir geliştirici, PyTorch için Disk Sparse Adam (DSA) adlı, bellek dışı bir iyileştirici oluşturdu. Bu iyileştirici, iyileştirici anlık durumlarını mmap aracılığıyla diske taşıyarak büyük seyrek modellerin eğitimi için bellek kullanımını büyük ölçüde azaltıyor. Bu sayede tüketici GPU'larında ve hatta ücretsiz Google Colab'de eğitim yapılabiliyor; kıyaslamalar, bir milyon varlıkta sıfır video belleği (VRAM) ek yükü gösteriyor.
Makale, PyTorch için tasarlanmış yeni bir dış çekirdek (out-of-core) optimize edici olan Disk Sparse Adam'ı (DSA) tanıtmaktadır. Bu optimize edici, bilgi grafiği gömme modelleri gibi milyonlarca düğüm içeren devasa seyrek modelleri, tüketici sınıfı GPU'larda eğitmek amacıyla geliştirilmiştir. Standart torch.optim.SparseAdam, birinci ve ikinci moment durumlarını bellekte depolar; 10 milyon varlık ve 128 boyutlu vektörler içeren bir model için bu, yaklaşık 10,24 GB ekstra bellek kullanımı anlamına gelir ve sıklıkla CUDA bellek yetersizliği hatalarına yol açar. DSA ise bu moment matrislerini ikili dosyalar olarak diskte saklar ve işletim sisteminin mmap mekanizmasını kullanarak bunları bellekle eşler; her optimize edici adımında yalnızca aktif grubun durumlarını okur ve yazar. Optimize edici, standart PyTorch iş akışları için doğrudan değiştirilebilir bir çözüm olarak tasarlanmıştır ve hem Öklidyen hem de hiperbolik (Poincaré topu) uzayları destekler. Yazar, optimize edici durumları için bellek kullanımının gigabaytlardan megabaytlara düştüğünü ve 1 milyon varlık içeren Kaggle üzerinde yapılan bir kıyaslamada 0,00 MB VRAM ek yükü ve saniyede 134.212 örnek işleme hızı elde edildiğini bildirmektedir. DSA, MIT lisansı altında GitHub'da mevcuttur; en iyi performans için NVMe SSD gerektirmesi ve yalnızca torch.nn.Embedding veya EmbeddingBag gibi seyrek gradyanlarla uyumlu olması gibi sınırlamaları bulunmaktadır.
Kaynak: Habr — хаб ИИ —
orijinal
