reconocimiento - TensorFlow: ¿Cómo medir cuánta memoria GPU toma cada tensor?
tensorflow reconocimiento de imagen (3)
Ver la descripción en este ( commit ). La asignación de memoria es información sin procesar, aunque necesita una secuencia de comandos para recopilar la información en una forma fácil de leer.
Actualmente estoy implementando YOLO en TensorFlow y estoy un poco sorprendido de la cantidad de memoria que está tomando. En mi GPU puedo entrenar YOLO usando su marco Darknet con el tamaño de lote 64. En TensorFlow solo puedo hacerlo con el tamaño de lote 6, con 8 ya me quedo sin memoria. Para la fase de prueba, puedo ejecutar el lote 64 sin agotar la memoria.
Me pregunto cómo puedo calcular cuánta memoria está consumiendo cada tensor. ¿Están todos los tensores guardados por defecto en la GPU? ¿Puedo simplemente calcular el consumo total de memoria con la forma * 32 bits?
Me di cuenta de que dado que estoy usando impulso, todos mis tensores también tienen un tensor
/Momentum
. ¿Podría eso también estar usando mucha memoria?Estoy aumentando mi conjunto de datos con un método
distorted_inputs
, muy similar al definido en el tutorial CIFAR-10 . ¿Podría ser que esta parte ocupa una gran parte de la memoria? Creo que Darknet hace las modificaciones en la CPU.
Perdón por la lenta respuesta. Desafortunadamente, en este momento, la única forma de establecer el nivel de registro es editar tensorflow / core / platform / logging.h y recompilar con, por ejemplo,
#define VLOG_IS_ON(lvl) ((lvl) <= 1)
Hay un error abierto 1258 para controlar el registro de forma más elegante.
MemoryLogTensorOutput
entradas MemoryLogTensorOutput
se registran al final de cada ejecución Op e indican los tensores que contienen las salidas de Op. Es útil conocer estos tensores ya que la memoria no se libera hasta que el Op opuesto consume los tensores, lo que puede ser mucho más adelante en un gráfico grande.
Ahora que se ha cerrado 1258 , puede habilitar el registro de memoria en Python estableciendo una variable de entorno antes de importar TensorFlow:
import os
os.environ[''TF_CPP_MIN_VLOG_LEVEL'']=''3''
import tensorflow as tf
Habrá una gran cantidad de registros como resultado de esto. Querrá grep los resultados para encontrar las líneas adecuadas. Por ejemplo:
grep MemoryLogTensorAllocation train.log