Parti boyutunu 2'lik bir güçte tutmanın avantajı nedir?


19

Makine öğreniminde modelleri eğitirken, bazen parti boyutunu 2'lik bir güçte tutmak neden avantajlıdır? GPU belleğinize / RAM'inize en uygun boyutu kullanmanın en iyisi olacağını düşündüm.

Bu cevap , bazı paketler için, 2'lik bir gücün parti boyutu olarak daha iyi olduğunu iddia ediyor. Birisi bunun için ayrıntılı bir açıklama / bağlantı verebilir mi? Bu, tüm optimizasyon algoritmaları (gradyan inişi, geri yayılım, vb.) İçin mi yoksa yalnızca bazıları için mi geçerli?

Yanıtlar:


24

Bu, sanal işlemcilerin (VP) GPU'nun fiziksel işlemcilerine (PP) hizalanması sorunudur. PP sayısı genellikle 2 güç olduğundan, 2 güçten farklı bir sayıda VP kullanmak düşük performansa neden olur.
VP'nin PP'ye eşlemesini, PP sayısı büyüklüğünde bir dilim yığını olarak görebilirsiniz .
Diyelim ki 16 PP var.
Onları 16 VP eşleyebilirsiniz: 1 VP 1 PP üzerine eşlenir.
Üzerinde 32 VP eşleştirebilirsiniz: 2 VP'den 2 dilim, 1 PP sorumlu olacaktır.
Vb Yürütme sırasında, her PP sorumlu olduğu 1. VP'nin işini, daha sonra 2. VP'nin işini vb. Yürütür.
17 VP kullanırsanız, her PP 1. PP'lerinin işini yürütür, o zaman 1 PP 17. işini yürütmek VEDiğerleri hiçbir şey yapmaz (aşağıda belirtilmiştir).
Bunun nedeni GPU'lar tarafından kullanılan SIMD paradigmasıdır ( 70'lerde vektör olarak adlandırılır ). Buna genellikle Veri Paralellik denir: tüm PP aynı şeyi aynı anda ama farklı veriler üzerinde yapar. Bkz. Https://en.wikipedia.org/wiki/SIMD .
Daha kesin olarak, 17 VP'li örnekte, 1. dilimin işi yapıldıktan sonra (1. VP'lerinin işini yapan tüm PP'ler tarafından), tüm PP aynı işi yapacaktır (2. VP), ancak sadece bir tanesi üzerinde çalışılacak veriler .
Öğrenmeyle ilgisi yok. Bu sadece programlama.


parti boyutlarının PP sayısının katı olması gerektiğini söylemek daha doğru olur mu? Yani, örneğinizde 16x3 = 48 VP ila 16 PP'yi eşleyebiliriz?
1

Evet. iyi ... VP -> PP eşlemesini yaparsanız,% 100 doğru olduğunuzdan emin olun. Bir kütüphane kullanıyorsanız ve 80 VP isteyin. Emin değilim. Yanlış olduğunu söylemiyorum. Oran 2'nin gücüyse, çok klasik ve kolay optimizasyonları kullanabilirsiniz. Bir VP'nin üst komşularının sayısı 2 gibi bir güç değilse, diyelim ki, lib komşuların belleğine klasik O (log_2 (n)) erişimini kolayca kullanamaz.
jcm69

@ jcm69, VP bellek erişimi için log_2 (n) erişim süresi bağlantısını açıklayabilir veya verebilir
Arayan Singh

Bu sadece bilgisayar bilimindeki nesneleri ele alma konusunda genel bir husustur. Nesnelerin 2 kuralın gücünü izlediğinden emin olduğunuzda, ikili arama ağaçları, ikili vardiyalar vb. Tarafından kolayca ve güvenli bir şekilde yönetilebilirler. Emin olmadığınız zaman, bazı ek testler ve daha karmaşık algo yapmanız gerekebilir. Her neyse, bu ilk sorudan biraz uzakta;)
jcm69

1

Tüm fikir, mini partinizi tamamen CPU / GPU'ya sığdırmaktır. Tüm CPU / GPU, iki kişilik bir depolama kapasitesine sahip olduğundan, mini parti boyutunu iki kişilik bir güçte tutmanız tavsiye edilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.