El consumo de memoria de una red neuronal depende de muchos factores y variables que son muy difíciles de explicar de una vez. Entonces, si tiene en mente una arquitectura específica y desea estimar la cantidad de memoria de GPU que necesitará antes de ejecutar cualquier cosa, a menos que conozca todas las partes internas (y quiero decir, el backend real de CUDA) del marco que usa, será Se duro.
¿Por qué?
- Algunas operaciones están en su lugar, lo que ahorra memoria. Saber cuáles, así como cuáles se pueden hacer en el lugar es muy útil.
- Asignar nuevas variables puede ser complicado: si tiene memoria fija para sus lotes, es más fácil, porque el consumo de memoria se vuelve menos volátil.
- La topología de la red es lo que te volverá loco. Si tiene una red FC secuencial, está bien, pero ¿qué pasa si tiene un montón de conexiones residuales concatenadas con salidas de ramas paralelas? Un algoritmo para calcular gradientes puede o no elegir la forma más práctica en cuanto a memoria.
A todos los efectos prácticos, ni siquiera me molesto. Acabo de ejecutar el código y miro lo que nvidia-smi
me dice:
- Además de las universidades mejor clasificadas (# 1-20), ¿qué otra universidad ofrece un buen programa de maestría en informática con especialización en IA / ML en EE. UU.?
- ¿Es el modelo de análisis factorial una versión multivariada del modelo de mezcla gaussiana?
- ¿Dónde puedo obtener más información sobre los métodos y algoritmos informáticos que coinciden y resumen diferentes partes del texto?
- ¿Cómo funcionan las redes neuronales convolucionales?
- ¿Cuáles son los desafíos tecnológicos involucrados en alimentar el código fuente de una máquina Linux y hacer que aprenda a codificar un núcleo Linux similar?
batch_size == 1
batch_size == 2
batch_size == 4
batch_size == 8
Estoy bastante seguro de que el usuario de Quora me regañaría por tal descuido, pero esta estimación es suficiente si no trabajas específicamente en la optimización de la memoria.
La generalización a través de los modelos por la gran cantidad de parámetros no tiene sentido, solo observe BPTT: consume mucha memoria, aunque la mayoría de los pesos en la red son compartidos.
FC : cantidad moderada de parámetros, topología simple, gradientes muy pequeños
CNN ; pocos parámetros, topología compleja, el tamaño de los gradientes puede variar
RNN : pocos parámetros, topología relativamente simple, gradientes ENORMES
También depende en gran medida de su método de optimización. Calcular el impulso de segundo orden no es lo mismo que el SGD de vainilla, por lo que para la misma arquitectura puede terminar con una imagen diferente.
Después de todo, cuando está diseñando el experimento, el 99.99% de las veces, la única pregunta relacionada con la memoria que tiene es “¿encajará en una GPU de 6/8/12/16 GB?”