Je suis en train d'obtenir une poignée rugueuse sur l'empreinte mémoire GPU de mes tensorflow modèles d'apprentissage en profondeur, et je suis compter sur a heuristic I've found avec suggère:Comment estimer l'empreinte GPU de mon modèle TensorFlow?
Le plus grand goulot d'étranglement pour être au courant lors de la construction des architectures ConvNet est le goulot d'étranglement de la mémoire. Beaucoup de GPU modernes ont une limite de 3/4/6 Go de mémoire, avec les meilleurs GPU ayant environ 12 Go de mémoire. Il existe trois principales sources de mémoire pour garder une trace de:
De la taille des volumes intermédiaires: Ce sont le nombre brut de activations à toutes les couches de la ConvNet, ainsi que leurs gradients (de taille égale). Habituellement, la plupart des activations sont sur les couches antérieures d'un réseau ConvNet (c'est-à-dire les premières couches de Conv). Ceux-ci sont conservés autour de parce qu'ils sont nécessaires pour la rétropropagation, mais une mise en œuvre intelligente qui exécute un ConvNet seulement au moment du test pourrait en réduire considérablement le nombre, en ne stockant que les activations actuelles à n'importe quel calque et en rejetant les précédentes activations sur couches ci-dessous.
De la taille des paramètres: Ce sont les chiffres qui tiennent les paramètres réseau, leurs gradients pendant rétropropagation, et souvent aussi un cache étape si l'optimisation utilise la dynamique, Adagrad ou RMSProp. Par conséquent, la mémoire pour stocker le paramètre vecteur seul doit habituellement être multipliée par un facteur d'au moins 3 ou ainsi.
Chaque mise en œuvre ConvNet doit maintenir la mémoire divers, tels que les lots de données d'image, peut-être leurs versions augmentée, etc.
Une fois que vous avez une estimation approximative du nombre total de valeurs (pour activations, dégradés et divers), le nombre doit être converti en taille en GB. Prenez le nombre de valeurs, il faut multiplier par 4 pour obtenir la première nombre d'octets (puisque chaque virgule flottante est de 4 octets, ou peut-être de 8 pour double précision), puis diviser par 1024 plusieurs fois pour obtenir la quantité de mémoire en Ko, Mo, et enfin GB. Si votre réseau ne correspond pas, une heuristique commune à « l'adapter » est de diminuer la taille du lot , puisque la plupart de la mémoire est généralement consommée par les activations.
Mais je ne suis pas sûr de quelques choses:
- Quel est le rôle de la taille des lots dans ce calcul? Il semble que cela n'affecte que les activations (c'est-à-dire que je devrais multiplier les activations par taille de lot). Est-ce exact?
- Comment puis-je savoir que ces choses se repose sur mon GPU (avec 12GiB) et qui sur ma RAM CPU (en tensorflow)? En général à peu près tous ceux-ci résident sur le GPU?
- Où dois-je chercher « divers »? Est-ce que les données d'entrée sont la source principale de ceci? Et si oui, est-ce que je compte un seul lot de telles données ou tout?
Pouvez-vous traduire cela en questions 1-3 comme ils se rapportent à l'interprétation du texte original? – orome
Il y a 3 paragraphes différents, un par point. Cependant je vais éditer – nessuno