web-dev-qa-db-fra.com

Utiliser la mémoire GPU partagée avec TensorFlow?

J'ai donc installé la version GPU de TensorFlow sur un ordinateur Windows 10 doté d'une carte graphique GeForce GTX 980.

Certes, je connais très peu les cartes graphiques, mais selon Dxdiag, il aurait:

4060MB de mémoire dédiée (VRAM) et;

8163MB de mémoire partagée

pour un total d'environ 12224MB.

Ce que j'ai remarqué, cependant, c'est que cette mémoire "partagée" semble être à peu près inutile. Lorsque je commence à former un modèle, la VRAM se remplit et si les besoins en mémoire dépassent ces 4GB, TensorFlow se bloque avec le message d'erreur "ressources épuisées".

Je peux, bien sûr, éviter d’atteindre ce point en choisissant une taille de lot suffisamment basse, mais je me demande s’il est possible d’utiliser ces "extra" 8GB de RAM, ou si c’est tout et TensorFlow nécessite que la mémoire soit dédiée .

9
User1291

La mémoire partagée est une zone du système principal RAM réservée aux graphiques. Références:

https://en.wikipedia.org/wiki/Shared_graphics_memory

https://www.makeuseof.com/tag/can-shared-graphics-finally-compete-with-a-dedicated-graphics-card/

https://youtube.com/watch?v=E5WyJY1zwcQ

Ce type de mémoire est ce que les graphiques intégrés, par exemple les séries Intel HD, utilisent généralement.

Ce n'est pas sur votre GPU NVIDIA, et CUDA ne peut pas l'utiliser. Tensorflow ne peut pas l'utiliser lorsqu'il est exécuté sur un processeur graphique, car CUDA ne peut pas l'utiliser, et également lorsqu'il est exécuté sur un processeur, car il est réservé aux graphiques. 

Même si CUDA pourrait l'utiliser d'une manière ou d'une autre. Cela ne sera pas utile car la bande passante du système RAM est environ 10 fois moins que la bande passante de la mémoire du processeur graphique, et vous devez obtenir les données en provenance et à destination du processeur graphique sur le bus PCIE lent (et à latence élevée) .

Numéros de bande passante pour référence: GeForce GTX 980: 224 Go/s DDR4 sur carte mère de bureau: environ 25 Go/s PCIe 16x: 16 Go/s

Cela ne prend pas en compte la latence. En pratique, l'exécution d'une tâche de calcul GPU sur des données trop volumineuses pour tenir dans la mémoire du GPU et devant être transférées sur PCIe à chaque accès, est si lente pour la plupart des types de calcul que le même calcul sur CPU serait beaucoup plus rapide. .

Pourquoi voyez-vous ce type de mémoire être alloué quand vous avez une carte NVIDIA dans votre ordinateur? Bonne question. Je peux penser à quelques possibilités:

(a) Vous avez les deux pilotes graphiques NVIDIA et Intel actifs (par exemple, comme cela se produit lorsque vous utilisez différents écrans sur les deux). Désinstallez les pilotes Intel et/ou désactivez les graphiques Intel HD dans le BIOS et la mémoire partagée disparaîtra. 

(b) NVIDIA l’utilise. Cela peut être par exemple une mémoire de texture supplémentaire, etc. Il pourrait également ne pas s'agir d'une mémoire réelle, mais simplement d'une zone mappée en mémoire qui correspond à la mémoire du GPU. Recherchez dans les paramètres avancés du pilote NVIDIA un paramètre qui le contrôle.

Dans tous les cas, non, il n'y a rien que Tensorflow puisse utiliser. 

6
Alex I

CUDA peut également utiliser la RAM. Dans CUDA, la mémoire partagée entre VRAM et RAM est appelée mémoire unifiée. Cependant, TensorFlow ne le permet pas pour des raisons de performances. 

0
Ferry