Accelerate documentation

Dağıtık kurulumlar arasında performans karşılaştırması

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v1.15.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Dağıtık kurulumlar arasında performans karşılaştırması

Farklı kurulumlardan elde edilen performansı değerlendirmek ve karşılaştırmak, neye bakmanız gerektiğini bilmiyorsanız oldukça zor olabilir. Örneğin, Accelerate ile aynı betiği, TPU, çoklu GPU ve tek GPU arasında aynı batch boyutuyla çalıştırıp sonuçlarınızın eşleşmesini bekleyemezsiniz.

Ama neden?

Bu konunun bu öğreticide ele alınmasının üç nedeni var:

  1. Doğru tohumları ayarlama
  2. Gözlemlenen Toplu Boyutları
  3. Öğrenme Hızları

Tohumu Ayarlama

Bu sorun o kadar sık karşılaşılmamış olsa da, eğitim sürecinin yeniden üretilebilir olması için tüm dağıtık durumlarda tohumu tamamen ayarlamak üzere utils.set_seed() kullanıldığından emin olun:

from accelerate.utils import set_seed

set_seed(42)

Neden bu önemli? Arka planda bu, 5 farklı tohum ayarını belirleyecektir:

    random.seed(seed)
    np.random.seed(seed)
    torch.manual_seed(seed)
    torch.cuda.manual_seed_all(seed) # or torch.xpu.manual_seed_all, etc
    # ^^ safe to call this function even if cuda is not available
    if is_torch_xla_available():
        xm.set_rng_state(seed)

Rastgele durum, numpy durumu, torch, torch cihaz durumu ve TPU'lar kullanılabilirse torch_xla cuda durumu.

Gözlemlenen Toplu Boyutları

Accelerate ile eğitim sırasında dataloader'a geçirilen batch size, GPU başına batch size'dır. Bu, iki GPU üzerinde 64 olan bir batch size'ın aslında 128'lik bir batch size olduğu anlamına gelir. Sonuç olarak, tek bir GPU üzerinde test ederken bunun dikkate alınması gerekir; TPU'lar için de benzer şekilde.

Aşağıdaki tablo, farklı parti boyutlarını denemek için hızlı bir başvuru olarak kullanılabilir:

Bu örnekte, “Multi-GPU” için iki GPU ve 8 işçili bir TPU pod bulunur

Tek GPU Toplu BoyutuÇoklu GPU Eşdeğer Toplu BoyutuTPU Eşdeğer Toplu Boyutu
25612832
1286416
64328
32164

Öğrenme Hızları

Birden fazla kaynakta belirtildiği üzere[1][2], öğrenme oranı, mevcut cihaz sayısına göre doğrusal olarak ölçeklendirilmelidir. Aşağıdaki kod parçası bunu Accelerate ile nasıl yapacağınızı göstermektedir:

Kullanıcıların kendi öğrenme hızı zamanlayıcılarını tanımlayabilmesi nedeniyle, öğrenme hızlarını ölçekleyip ölçeklememeye karar vermek kullanıcıya bırakılmıştır.

learning_rate = 1e-3
accelerator = Accelerator()
learning_rate *= accelerator.num_processes

optimizer = AdamW(params=model.parameters(), lr=learning_rate)

Ayrıca, accelerate'in öğrenme hızını, eğitim yapılan süreç sayısına göre adım adım ilerlettiğini göreceksiniz. Bunun nedeni, daha önce belirtildiği üzere gözlemlenen parti boyutudur. Dolayısıyla 2 GPU durumunda, parti boyutunun iki katı büyüklükte olması (tek GPU örneğinde parti boyutunda herhangi bir değişiklik yapılmadığı varsayıldığında) telafi edilmek üzere öğrenme hızı, tek GPU durumuna kıyasla iki kat daha sık adım atar.

Gradyan Biriktirme ve Karışık Hassasiyet

Gradyan biriktirme ve karma hassasiyet kullanıldığında, gradyan ortalama işleyişinin (biriktirme) ve hassasiyet kaybının (karma hassasiyet) etkisiyle performansta bazı düşüşler beklenir. Bu durum, farklı hesaplama yapılandırmaları arasındaki parti bazlı kaybın karşılaştırılmasında açıkça görülecektir. Ancak, eğitimin sonunda genel kayıp, metrik ve genel performans yaklaşık olarak aynı olmalıdır.

Update on GitHub