¿Cuál es la ventaja de mantener el tamaño del lote con una potencia de 2?

15

Mientras entrena modelos en aprendizaje automático, ¿por qué a veces es ventajoso mantener el tamaño del lote a una potencia de 2? Pensé que sería mejor usar un tamaño que sea el más grande en la memoria / RAM de tu GPU.

Esta respuesta afirma que para algunos paquetes, una potencia de 2 es mejor como tamaño de lote. ¿Alguien puede proporcionar una explicación detallada / enlace a una explicación detallada de esto? ¿Es esto cierto para todos los algoritmos de optimización (descenso de gradiente, retropropagación, etc.) o solo para algunos de ellos?

James Bond
fuente

Respuestas:

19

Este es un problema de alineación de los procesadores virtuales (VP) en los procesadores físicos (PP) de la GPU. Dado que el número de PP es a menudo una potencia de 2, el uso de un número de VP diferente de una potencia de 2 conduce a un bajo rendimiento.
Puede ver el mapeo del VP en el PP como una pila de cortes del tamaño del número de PP .
Digamos que tienes 16 PP.
Puede asignar 16 VP en ellos: 1 VP se asigna a 1 PP.
Puede asignar 32 VP en ellos: 2 rebanadas de 16 VP, 1 PP será responsable de 2 VP.
Etc. Durante la ejecución, cada PP ejecutará el trabajo del 1er VP del que es responsable, luego el trabajo del 2do VP, etc.
Si usa 17 VP, cada PP ejecutará el trabajo de su 1er PP, luego 1 PP ejecutar el trabajo del 17 ylos otros no harán nada (se detalla a continuación).
Esto se debe al paradigma SIMD (llamado vector en los años 70) utilizado por las GPU. Esto a menudo se llama Paralelismo de datos: todos los PP hacen lo mismo al mismo tiempo pero con datos diferentes. Ver https://en.wikipedia.org/wiki/SIMD .
Más precisamente, en el ejemplo con 17 VP, una vez que el trabajo de la primera porción está hecho (por todos los PP que hacen el trabajo de su 1er VP), todos los PP harán el mismo trabajo (2do VP), pero solo uno tiene datos para trabajar .
Nada que ver con el aprendizaje. Esto es solo material de programación.

jcm69
fuente
¿Sería más exacto decir que los tamaños de lote deberían ser un múltiplo del número de PP? Es decir, en su ejemplo, ¿podríamos asignar 16x3 = 48 VP a 16 PP?
oeste
Si. bueno ... Si haces el VP de mapeo -> PP, tú mismo, seguro que tienes el 100% de razón Si usa una biblioteca y solicita 80 VP. No estoy seguro. No digo que te equivoques. Si la relación es una potencia de 2, puede utilizar optimizaciones muy clásicas y fáciles. Piense en los accesos a la memoria. Si el número de vecinos de arriba de un VP no es una potencia de 2, digamos 5, la biblioteca no podrá usar los accesos clásicos O (log_2 (n)) a la memoria de los vecinos tan fácilmente.
jcm69
@ jcm69 ¿puede explicar o dar el enlace para el tiempo de acceso log_2 (n) para el acceso a la memoria de VP?
Arayan Singh
Eso es solo una consideración general sobre el manejo de objetos en informática. Cuando esté seguro de que los objetos siguen el poder de 2 reglas, pueden ser manejados de manera fácil y segura mediante árboles de búsqueda binarios, cambios binarios, etc. Cuando no esté seguro, puede que tenga que hacer algunas pruebas adicionales y algo más complicado. De todos modos, eso está un poco lejos de la pregunta inicial;)
jcm69