Dois-je utiliser le GPU ou le CPU pour l'inférence?

12

J'exécute un réseau neuronal d'apprentissage en profondeur qui a été formé par un GPU. Je veux maintenant déployer cela sur plusieurs hôtes pour l'inférence. La question est de savoir quelles sont les conditions pour décider si je dois utiliser des GPU ou des CPU pour l'inférence?


Ajout de plus de détails à partir des commentaires ci-dessous.

Je suis nouveau dans ce domaine, donc les conseils sont appréciés.

  • Mémoire : le GPU est K80

  • Cadre : Cuda et cuDNN

  • Taille des données par charge de travail : 20G

  • Nœuds de calcul à consommer : un par tâche, mais souhaiterait envisager une option d'échelle

  • Coût : je peux me permettre une option GPU si les raisons ont du sens

  • Déploiement : exécuté sur ses propres serveurs bare metal hébergés, pas dans le cloud.

En ce moment, je fonctionne sur CPU simplement parce que l'application fonctionne correctement. Mais en dehors de cette raison, je ne sais pas pourquoi on envisagerait même le GPU.

Dan
la source
Pour vous conseiller sur la comparaison entre deux approches potentielles, il sera utile pour les autres de connaître certains détails de votre tâche. Par exemple, quelle est la taille de vos données, quelle est la capacité de mémoire de votre GPU, le nombre de nœuds de calcul que vous prévoyez d'utiliser et peut-être aussi le cadre de réduction de carte que vous avez en tête.
Dynamic Stardust
@DynamicStardust ... et le coût. Noeuds CPU EC2 bon marché ou noeuds GPU ECW chers? C'est une question beaucoup trop vague.
Spacedman

Réponses:

7

@Dan @SmallChess, je ne suis pas complètement d'accord. Il est vrai que pour la formation, une grande partie de la parallalisation peut être exploitée par les GPU, ce qui entraîne une formation beaucoup plus rapide. Pour l'inférence, cette parallalisation peut être bien moindre, mais les CNN en tireront toujours un avantage, ce qui se traduira par une inférence plus rapide. Il ne vous reste plus qu'à vous demander: une inférence plus rapide est-elle importante? Est-ce que je veux ces dépendances supplémentaires (un bon GPU, les bons fichiers installés, etc.)?

Si la vitesse n'est pas un problème, optez pour le CPU. Cependant, notez que les GPU peuvent accélérer l'ordre de grandeur de mon expérience.

Laurens Meeus
la source
Point intéressant que vous soulevez, pourquoi CNN bénéficierait-il d'un traitement parallèle lors de l'inférence?
Dan
1
Avec la formation, les calculs parallèles peuvent être évidents: vous avez plusieurs entrées, chacune devant être transmise, totalement indépendante les unes des autres. Pour une convolution, le noyau est multiplié sur plusieurs «correctifs» d'entrée. Celles-ci peuvent également être effectuées en parallèle. C'est ce qui rend CNN si puissant: non seulement ils ont besoin de moins de paramètres pour s'entraîner, mais il est également plus parallélisé, ce qui rend les GPU si puissants. Je ne sais pas sur quoi vous travaillez, mais je travaille sur la segmentation (classification pixel par pixel) des images et lorsque j'utilise des GPU pour l'inférence, j'obtiens une énorme amélioration de la vitesse (> x10).
Laurens Meeus
@LaurensMeeus Je suis également nouveau dans ce spectre et je fais l'analyse des coûts des machines virtuelles cloud. Est-ce que j'utiliserais toujours le GPU pour la formation si je ne fais que de l'analyse de texte et non des images?
Squ1rr3lz
2
@ Squ1rr3lz Je suis à 95%, vous devriez. Chaque forme de calcul parallèle devrait avoir un avantage sur les GPU. Je ne suis pas un expert dans ce domaine, mais étant donné que l'analyse de texte est également avec des couches convolutionnelles (que ce soit 1D au lieu de 2D), c'est déjà une des raisons pour lesquelles elle pourrait / devrait être plus rapide. Si possible, essayez par vous-même quelle influence l'activation / la désactivation du GPU a.
Laurens Meeus
6

L'exécution de l'inférence sur un GPU au lieu du CPU vous donnera presque la même accélération que lors de l'entraînement, moins un peu de surcharge de mémoire.

Cependant, comme vous l'avez dit, l'application fonctionne correctement sur le CPU. Si vous arrivez au point où la vitesse d'inférence est un goulot d'étranglement dans l'application, la mise à niveau vers un GPU atténuera ce goulot d'étranglement.

mpotma
la source
Entièrement d'accord. Je ne comprends toujours pas pourquoi le poste du processeur est dépassé.
Laurens Meeus
1
GeForce GTX Titan X offre des performances 5,3 à 6,7 fois supérieures à celles du processeur Intel Xeon E5 à 16 cœurs - ce qui est bien inférieur à l'accélération obtenue lors de la formation - sur le propre blog de NVidia: devblogs.nvidia.com/…
seanhalle
4

Vous utiliseriez uniquement le GPU pour la formation, car l'apprentissage en profondeur nécessite un calcul massif pour arriver à une solution optimale. Cependant, vous n'avez pas besoin de machines GPU pour le déploiement .

Prenons l'exemple du nouvel iPhone X d'Apple. Le nouvel iPhone X dispose d'un algorithme avancé d'apprentissage automatique pour la détection faciale. Les employés Apple doivent disposer d'un cluster de machines pour la formation et la validation. Mais votre iPhone X n'a ​​pas besoin d'un GPU pour simplement exécuter le modèle.

Bonjour le monde
la source
Merci pour cette explication. Ce que je ne comprends pas, c'est pourquoi Nvidia encourage l'utilisation des GPU comme meilleure solution pour déterminer si le processeur peut le faire correctement. Aussi pourquoi Google pousse-t-il également le TPU à l'inférence s'il fait tout avec le CPU? Cela a-t-il quelque chose à voir avec le calcul parallèle?
Dan
3
@SmallChess IPhone X n'avait-il pas de processeur avancé de type TPU uniquement pour l'inférence? extremetech.com/mobile/…
Laurens Meeus
3
@SmallChess Mais pourquoi ne peut-il pas en être ainsi? Peut-être que je ne comprends tout simplement pas complètement. N'obtiendrez-vous toujours pas une amélioration de la vitesse?
Laurens Meeus
2
Honnêtement, NVidia a un département marketing fantastique, et il est dans leur intérêt de promouvoir l'utilisation des GPU NVidia pour l'inférence. C'est dans leur meilleur intérêt, pas le vôtre.
seanhalle
1
Du blog de NVidia: "258 contre 242 images / seconde" pour le processeur NVIDIA Tegra X1 vs i7 6700K lors de l'inférence: devblogs.nvidia.com/…
seanhalle