¿Por qué el entrenamiento de RNNs no usa el 100% de la GPU?


8

Me pregunto por qué el entrenamiento de RNN generalmente no usa el 100% de la GPU.

Por ejemplo, si ejecuto este punto de referencia RNN en un Maxwell Titan X en Ubuntu 14.04.4 LTS x64, la utilización de la GPU es inferior al 90%:

ingrese la descripción de la imagen aquí

El punto de referencia se lanzó con el comando:

python rnn.py -n 'fastlstm' -l 1024 -s 30 -b 128

¿Cómo puedo diagnosticar cuál es el cuello de botella?

Respuestas:


5

Obtengo esta misma tasa de utilización cuando entreno modelos con Tensorflow. La razón es bastante clara en mi caso, elijo manualmente un lote aleatorio de muestras y llamo a la optimización para cada lote por separado.

Eso significa que cada lote de datos está en la memoria principal, luego se copia en la memoria de la GPU donde está el resto del modelo, luego la propagación y actualización hacia adelante / atrás se realiza en la gpu, luego la ejecución se devuelve a mi código donde agarro otro lote y llame a optimizar en él.

Hay una forma más rápida de hacerlo si pasa algunas horas configurando Tensorflow para realizar la carga por lotes en paralelo desde los registros TF preparados previamente.

Me doy cuenta de que puede o no estar usando tensorflow bajo keras, pero dado que mi experiencia tiende a producir números de utilización muy similares, me estoy arriesgando sugiriendo que hay un vínculo causal razonablemente probable para extraer de estas correlaciones. Si su marco está cargando cada lote desde la memoria principal en la GPU sin la eficiencia / complejidad adicional de la carga asincrónica (que la GPU puede manejar), entonces este sería un resultado esperado.



No puedo decir que alguna vez haya considerado tratar de controlar eso, pero ahora me da curiosidad.
davidparks21

Siempre obtengo alrededor del 90% con keras también. Nunca he verificado su código fuente, pero esperaría que un marco como ese alimente lotes a la gpu en paralelo (al menos opcionalmente si puede permitirse la memoria ... ¿por qué no debería?).
stmax

1
Keras es una envoltura alrededor de Tensorflow o Theano. Solo tengo experiencia en Tensorflow, por lo que, desde esa perspectiva, el proceso necesario para habilitar la carga de datos asincrónica requiere que procese previamente los datos en un formato binario específico de Tensorflow. Asumiré que Theano tiene una forma equivalente de hacer esto. La mayoría de los modelos probablemente comiencen con la carga de memoria por lote (póngalo a funcionar antes de optimizar la velocidad). Y dado que el estatuto de Keras es "mantenerlo simple", puede que no sea inesperado que adopten el enfoque más directo / simple por solo una pérdida de eficiencia de ~ 10%.
davidparks21
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.