6 votes

Performances de service de Tensorflow très lentes par rapport à l'inférence directe

Je me trouve dans le scénario suivant :

  • Cluster Kubernetes à un seul nœud (1x i7-8700K, 1x RTX 2070, 32GB RAM)
  • 1 Tensorflow Serving Pod
  • 4 Pods clients d'inférence

Les clients d'inférence obtiennent des images de 4 caméras distinctes (1 chacune) et les transmettent à TF-Serving pour inférence afin de comprendre ce qui est vu sur les flux vidéo.

Auparavant, j'effectuais l'inférence à l'intérieur des pods du client d'inférence individuellement en appelant directement TensorFlow, mais cela n'était pas bon pour la RAM de la carte graphique. Tensorflow Serving a été introduit dans le mélange assez récemment afin d'optimiser la RAM car nous ne chargeons pas de modèles dupliqués sur la carte graphique.

Et les performances ne sont pas bonnes, pour une image 1080p, cela ressemble à ceci :

TF directe : 20 ms pour la création du tenseur d'entrée, 70 ms pour l'inférence. Service TF : 80 ms pour la sérialisation GRPC, 700-800 ms pour l'inférence.

Le pod TF-Serving est le seul à avoir accès au GPU et il est lié exclusivement. Tout le reste fonctionne sur le CPU.

Y a-t-il des améliorations que je pourrais apporter aux performances ?

Le modèle que j'utilise est Faster R-CNN Inception V2 du TF Model Zoo.

Merci d'avance !

0voto

Amir Mousavi Points 116

Ceci est extrait de la documentation de TF Serving :

Veuillez noter que si la latence moyenne de l'inférence avec TensorFlow Serving n'est généralement pas inférieure à celle de l'utilisation directe de TensorFlow, là où TensorFlow Serving brille, c'est dans la réduction de la latence de queue pour de nombreux clients interrogeant de nombreux modèles différents, tout en utilisant efficacement le matériel sous-jacent pour maximiser le débit.

D'après ma propre expérience, j'ai trouvé que TF Serving était utile pour fournir une abstraction sur le service de modèle qui est cohérent, et qui fait ne nécessitent pas la mise en œuvre de fonctionnalités de service personnalisées . Le versionnage des modèles et le multi-modèle, qui sont des fonctionnalités prêtes à l'emploi, vous font gagner beaucoup de temps et sont d'excellents compléments.

En outre, je recommande également la mise en lot de vos demandes si vous ne l'avez pas déjà fait. Je vous suggère également de jouer avec l'option TENSORFLOW_INTER_OP_PARALLELISM , TENSORFLOW_INTRA_OP_PARALLELISM , OMP_NUM_THREADS arguments à TF Serving. Voici une explication de ce qu'ils sont

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X