Was ist der Vorteil einer Batch-Größe von 2?

14

Warum ist es manchmal von Vorteil, die Batch-Größe bei der Schulung von Modellen für maschinelles Lernen auf einer Potenz von 2 zu halten? Ich dachte, es wäre am besten, eine Größe zu verwenden, die am besten zu Ihrem GPU-Speicher / RAM passt.

Diese Antwort besagt, dass für einige Pakete eine Zweierpotenz besser als eine Stapelgröße ist. Kann jemand eine ausführliche Erklärung / einen Link zu einer ausführlichen Erklärung dafür bereitstellen? Gilt dies für alle Optimierungsalgorithmen (Gradientenabstieg, Rückausbreitung usw.) oder nur für einige davon?

James Bond
quelle

Antworten:

18

Dies ist ein Problem der Ausrichtung der virtuellen Prozessoren (VP) auf die physischen Prozessoren (PP) der GPU. Da die Anzahl der PP oft eine Potenz von 2 ist, führt die Verwendung einer von einer Potenz von 2 verschiedenen Anzahl von VP zu einer schlechten Leistung.
Sie können die Abbildung des VP auf das PP als einen Stapel von Scheiben mit der Größe der Anzahl der PP sehen .
Angenommen, Sie haben 16 PP.
Sie können 16 SP auf sie abbilden: 1 SP wird auf 1 PP abgebildet.
Sie können 32 SP auf sie abbilden: 2 Scheiben mit 16 SP, 1 PP sind für 2 SP verantwortlich.
Während der Ausführung führt jedes PP den Job des ersten VP aus, für den es verantwortlich ist, dann den Job des zweiten VP usw.
Wenn Sie 17 VP verwenden, führt jedes PP den Job des ersten PP aus, dann führt 1 PP aus Führe den Job des 17. AND ausDie anderen tun nichts (siehe unten).
Dies ist auf das SIMD-Paradigma ( in den 70er Jahren als Vektor bezeichnet ) zurückzuführen, das von GPUs verwendet wurde. Dies wird oft als Datenparallelität bezeichnet: Alle PPs tun zur gleichen Zeit dasselbe, jedoch mit unterschiedlichen Daten. Siehe https://en.wikipedia.org/wiki/SIMD .
Genauer gesagt, im Beispiel mit 17 SP erledigt, sobald die Arbeit des ersten Slice erledigt ist (von allen PPs, die die Arbeit ihres ersten SP erledigen), alle PPs die gleiche Arbeit (2. SP), aber nur einer hat einige Daten, an denen gearbeitet werden soll .
Mit Lernen nichts zu tun. Dies ist nur Programmiermaterial.

jcm69
quelle
Wäre es genauer zu sagen, dass die Losgrößen dann ein Vielfaches der Anzahl der PP sein sollten? Das heißt, in Ihrem Beispiel könnten wir 16x3 = 48 VP auf 16 PP abbilden?
1west
Ja. Nun ... Wenn Sie das Mapping VP -> PP selbst durchführen, sind Sie sicher, dass Sie zu 100% richtig liegen. Wenn Sie eine Bibliothek verwenden und um 80 SP bitten. Ich bin mir nicht sicher. Ich sage nicht, dass du falsch liegst. Wenn das Verhältnis eine Potenz von 2 ist, können Sie sehr klassische und einfache Optimierungen verwenden. Denken Sie an Speicherzugriffe. Wenn die Anzahl der Nachbarn im oberen Bereich eines VP keine Potenz von 2 ist, z. B. 5, kann die Bibliothek den klassischen O-Zugriff (log_2 (n)) auf den Speicher des Nachbarn nicht so einfach verwenden.
Jcm69
@ Jcm69 können Sie erklären oder geben Sie den Link für log_2 (n) Zugriffszeit für VP Speicherzugriff
Arayan Singh
Das ist nur eine allgemeine Überlegung zum Umgang mit Objekten in der Informatik. Wenn Sie sicher sind, dass Objekte Regeln der Potenz 2 folgen, können sie einfach und sicher durch binäre Suchbäume, binäre Verschiebungen usw. verwaltet werden. Wie auch immer, das ist ein bisschen weit von der anfänglichen Frage entfernt;)
jcm69