Python >> Tutoriel Python >  >> Python Tag >> TensorFlow

Comment exécuter l'inférence tensorflow pour plusieurs modèles sur GPU en parallèle ?

D'ACCORD. Je pense avoir trouvé la solution maintenant.

J'utilise tensorflow 2 et il existe essentiellement 2 méthodes pour gérer l'utilisation de la mémoire du GPU.

  1. définir la croissance de la mémoire sur vrai
  2. définir la limite de mémoire sur un certain nombre

Vous pouvez utiliser les deux méthodes, ignorer tous les messages d'avertissement concernant les éléments de mémoire insuffisante. Je ne sais toujours pas ce que cela signifie exactement, mais le modèle fonctionne toujours et c'est ce qui m'importe. J'ai mesuré le temps exact utilisé par le modèle pour fonctionner et c'est bien mieux que de fonctionner sur le processeur. Si j'exécute les deux processus en même temps, la vitesse diminue un peu, mais c'est toujours bien mieux que de fonctionner sur le processeur.

Pour l'approche de la croissance de la mémoire, mon GPU est de 3 Go, donc le premier processus essaie de tout allouer, puis le 2e processus dit qu'il manque de mémoire. Mais cela fonctionne toujours.

Pour l'approche de la limite de mémoire, j'ai défini la limite sur un certain nombre, par ex. 1024 Mo. Les deux processus fonctionnent.

Alors, quel est le bon nombre minimum que vous pouvez définir ?

J'ai essayé de réduire la limite de mémoire jusqu'à ce que je trouve que mon modèle fonctionne bien avec une limite de 64 Mo. La vitesse de prédiction est toujours la même que lorsque j'ai défini la limite de mémoire à 1024 Mo. Lorsque j'ai défini la limite de mémoire sur 32 Mo, j'ai remarqué une baisse de vitesse de 50 %. Lorsque je règle à 16 Mo, le modèle refuse de fonctionner car il n'a pas assez de mémoire pour stocker le tenseur d'image. Cela signifie que mon modèle nécessite un minimum de 64 Mo, ce qui est très peu compte tenu du fait que j'ai 3 Go de réserve. Cela me permet également d'exécuter le modèle tout en jouant à des jeux vidéo.

Conclusion :j'ai choisi d'utiliser l'approche de limite de mémoire avec une limite de 64 Mo. Vous pouvez vérifier comment utiliser la limite de mémoire ici :https://www.tensorflow.org/guide/gpu

Je vous suggère d'essayer de modifier la limite de mémoire pour voir le minimum dont vous avez besoin pour votre modèle. Vous verrez une baisse de vitesse ou un modèle refusant de fonctionner lorsque la mémoire n'est pas suffisante.


Outre la définition de la fraction de mémoire GPU, vous devez activer MPS dans CUDA pour obtenir une meilleure vitesse si vous exécutez simultanément plusieurs modèles sur GPU. Sinon, la vitesse d'inférence sera plus lente par rapport à un modèle unique fonctionnant sur GPU.

sudo nvidia-smi -i 0 -c EXCLUSIVE_PROCESS
sudo nvidia-cuda-mps-control -d

Ici 0 est votre numéro de GPU
Après avoir terminé, arrêtez le démon MPS

echo quit | sudo nvidia-cuda-mps-control