2017-07-03 3 views
1

J'utilise Keras, sur le flux tensor du backend sous Windows 7 avec le GPU NVIDIA Quadro M2000M. Lorsque j'initialise mon modèle qui contient 5 GRU, 5 Dropout et 1 couches Dense, l'utilisation de la mémoire GPU saute à 3800 Mo de 4096 Mo et reste là jusqu'à ce que je redémarre ma session spyder. Effacer la session dans spyder avec:La mémoire du GPU est pleine directement après l'initialisation du modèle séquentiel et ne changera pas pendant l'entraînement

K.clear_session() 

ne fonctionne pas. L'utilisation de la mémoire reste à ce niveau élevé.

Est-il normal qu'un tel modèle alloue autant de mémoire au GPU? Que puis-je changer afin que l'utilisation de la mémoire puisse être utilisée plus facilement? Je veux améliorer la vitesse d'entraînement et je pense que cette utilisation de mémoire élevée empêche le GPU d'utiliser tout son potentiel.

Mise à jour

Mon modèle ressemble à ceci:

model = Sequential() 
layers = [1, 70, 50,100, 50,20, 1] 

model.add(GRU(
     layers[1], 
     #batch_size = 32, 
     input_shape=(sequence_length, anzahl_features), 
     return_sequences=True)) 
model.add(Dropout(dropout_1)) 
model.add(GRU(
     layers[2], 
     #batch_size = 32, 
     return_sequences=True)) 
model.add(Dropout(dropout_2)) 
model.add(GRU(
     layers[3], 
     #batch_size = 32, 
     return_sequences=True)) 
model.add(Dropout(dropout_3)) 
model.add(GRU(
     layers[4], 
     #batch_size = 32, 
     return_sequences=True)) 
model.add(Dropout(dropout_4)) 
model.add(GRU(
     layers[5], 
     #batch_size = 32, 
     return_sequences=False)) 
model.add(Dropout(dropout_5)) 
model.add(Dense(
     layers[6])) 
model.add(Activation('sigmoid')) 

Ma matrice de fonction a la taille 506x500x35 (506 exemples, 500 longueur de la séquence et 35 caractéristiques). La taille du lot est fixée à 128. Note de site: Je ne dis pas que c'est la matrice de caractéristiques parfaite ou la configuration du modèle.

Ici aussi une capture d'écran de GPU-Z où je remis en marche spyder et a commencé le modèle jusqu'à ce que la seconde époque:

enter image description here

Model Summary

+0

combien de données chargez-vous dans le modèle? –

+0

Il n'y a pas assez d'informations pour estimer l'empreinte mémoire. Quelle est la taille des entrées et des couches? Vous semblez également avoir une idée fausse concernant l'utilisation de la mémoire GPU. Si les données et les résultats de calcul nécessaires ne sont pas dans la mémoire du GPU, ils doivent être récupérés ailleurs, ce qui rend le processus de formation _slower_. –

+0

me semble OK, vous ne semblez pas mélanger beaucoup de données sur le bus. Pouvez-vous lancer 'model.summary()' et nous donner le nombre de paramètres de votre modèle s'il vous plaît? De cette façon, nous pouvons calculer si cela est justifié. –

Répondre

2

Par défaut tensorflow alloue toute la mémoire du GPU.

Si vous voulez avoir un meilleur contrôle sur l'utilisation de la mémoire GPU, vous pouvez utiliser ces méthodes:

  • l'option de configuration per_process_gpu_memory_fraction ou
  • l'option de configuration allow_growth.
+0

Cela a fonctionné mais mon principal problème avec ça, c'est que quand je cours la même configuration avec mes 8 processeurs, le GPU n'est pas beaucoup plus rapide? Est-ce que cela est lié au petit ensemble de données, donc pas grand chose peut être parallélisé? –