¿Cómo podemos minimizar el tiempo de inactividad de la GPU cuando utilizamos TensorFlow?

Una GPU inactiva apunta a la falta de disponibilidad de datos para que la GPU procese.

Hay dos situaciones en que esto puede suceder:

  1. Hay un tiempo significativo de transferencia de datos de la CPU a la GPU.

    Este es el escenario más común. La única forma de resolver este problema es buscar previamente los datos en el dispositivo GPU. De esa manera, mientras la GPU procesa un lote, el siguiente lote se transfiere a la GPU. Por lo tanto, el tiempo de espera de la GPU se reduce.
    En TensorFlow, por lo que sé, solo hay una forma de hacerlo: tf.contrib.data.prefetch_to_device(). Se espera que esto se salga de contrib en r1.8 . Hasta el momento, es compatible con one-shot-iterators , y recientemente se ha comprometido a dominar que también sea compatible con reinitializable iterators . Todavía tengo que probarlo con éxito. Sin embargo, una vez estabilizado, esta será una de las características más importantes de TensorFlow.

  2. La CPU no está preprocesando datos lo suficientemente rápido.

    Este escenario se presenta cuando tiene que realizar un preprocesamiento muy complicado de los datos antes de enviarlos a la GPU. A veces, los datos no se procesan previamente lo suficientemente rápido y esto combinado con el punto anterior ( ver punto 1 ) crea un importante cuello de botella en el rendimiento.
    En TensorFlow puede resolver este problema utilizando el parámetro tf.data.Dataset::map método tf.data.Dataset::map . Establecer este valor en el número de núcleos de CPU permite el preprocesamiento paralelo. También puede ver otros métodos en tf.data.Dataset como __init__ para ver parámetros como num_parallel_reads , que ayudan en la lectura paralela de E / S de datos. Estos métodos funcionan bastante bien para aumentar la velocidad del preprocesamiento de datos, mitigando así este problema.

  1. GPU es <100% pero CPU es 100%:
    Es posible que tenga algunas operaciones que requieran CPU, verifique si lo codificó ( vea la nota al pie ). Tenga en cuenta que algunas operaciones no están disponibles para GPU atm. Necesitaría una mejor CPU o eliminaría otros procesos.
  2. GPU es <100%; CPU <100%:
    Las operaciones de IO pueden ser el cuello de botella. En otras palabras, pasa su tiempo enviando / recuperando datos hacia / desde la GPU. Es posible que desee utilizar lotes más grandes, lo que significa enviar más datos con menos frecuencia. Esto usará más RAM, pero su GPU podrá trabajar más tiempo sin interrupción.

    Lote pequeño: bajo uso de RAM de GPU + bajo tiempo de computación de GPU
    Lote grande: uso elevado de RAM de GPU + cálculos más largos

Solo tenga cuidado con los errores de falta de memoria que pueden ocurrir al aumentar el tamaño del lote.

Espero eso ayude


notas al pie:

lo que parece una operación forzada de CPU:

con tf.device (“/ cpu: 0”):
// hacer smthng

More Interesting

¿Qué debo hacer para que los cursos de aprendizaje automático sean más divertidos y pospongan las cosas?

¿Cuál es la diferencia entre derivada de una función o pendiente de gradiente?

¿Es necesario un conjunto de validación si no se realiza un ajuste de hiperparámetro?

¿Debemos usar el ajuste fino en redes neuronales profundas? La precisión de la clasificación es del 100%, pero después de un ajuste fino, se convierte en el 95.7%, ¿cómo llega esto?

El reciclaje de residuos de construcción urbana necesita usar qué máquina.

¿Qué criterios deberían ser apropiados para terminar el entrenamiento codicioso no supervisado de autoencoder por capas?

Entre JavaScript y la ciencia de datos, ¿qué debo hacer? Tengo que aprender a los dos desde cero.

¿Existen aplicaciones prácticas útiles y serias de redes neuronales que se ejecutan localmente en aplicaciones de teléfonos inteligentes móviles?

¿Qué es el cambio de covariable?

¿Existe un método común para detectar la convergencia de la muestra de Gibbs y el algoritmo de maximización de expectativas?

Cómo hacer una carrera desde el nivel más básico hasta el nivel profesional en ciencia de datos, aprendizaje automático y aprendizaje profundo

¿Qué significa esto exactamente: 'Hay dos estrategias principales para el reconocimiento facial: comparación de características y coincidencia de plantillas'?

¿Qué debo elegir para mi tesis en Machine Learning?

Cómo aprender el aprendizaje automático para crear aplicaciones

¿Cómo debo aprender el aprendizaje automático? ¿Puede proporcionar una hoja de ruta específica desde un principiante hasta un experto?