Soll ich GPU oder CPU für Inferenz verwenden?

11

Ich betreibe ein tief lernendes neuronales Netzwerk, das von einer GPU trainiert wurde. Ich möchte dies jetzt auf mehreren Hosts bereitstellen, um darauf schließen zu können. Die Frage ist, unter welchen Bedingungen ich entscheiden soll, ob ich GPUs oder CPUs als Inferenz verwenden soll.


Weitere Details aus den Kommentaren unten hinzufügen.

Ich bin neu in diesem Bereich, daher wird die Anleitung geschätzt.

  • Speicher : GPU ist K80

  • Framework : Cuda und cuDNN

  • Datengröße pro Workload : 20G

  • Zu verbrauchende Rechenknoten : einer pro Job, möchte jedoch eine Skalierungsoption in Betracht ziehen

  • Kosten : Ich kann mir eine GPU-Option leisten, wenn die Gründe sinnvoll sind

  • Bereitstellung : Wird auf eigenen gehosteten Bare-Metal-Servern ausgeführt, nicht in der Cloud.

Im Moment laufe ich auf CPU, einfach weil die Anwendung in Ordnung läuft. Abgesehen von diesem Grund bin ich mir nicht sicher, warum man überhaupt eine GPU in Betracht ziehen würde.

Dan
quelle
Um Ratschläge zum Vergleich zwischen zwei möglichen Ansätzen zu erhalten, ist es für andere hilfreich, einige Details Ihrer Aufgabe zu kennen. Zum Beispiel, wie groß Ihre Daten sind, wie groß die Speicherkapazität Ihrer GPU ist, wie viele Rechenknoten Sie verwenden möchten und möglicherweise auch, welches Framework zur Kartenreduzierung Sie im Auge haben.
Dynamic Stardust
@ DynamicStardust ... und die Kosten. Günstige EC2-CPU-Knoten oder teure ECW-GPU-Knoten? Dies ist eine viel zu vage Frage.
Spacedman

Antworten:

7

@Dan @SmallChess, ich stimme nicht ganz zu. Es ist wahr, dass für das Training ein Großteil der Parallalisierung von den GPUs ausgenutzt werden kann, was zu einem viel schnelleren Training führt. Für Inferenz kann diese Parallalisierung viel geringer sein, jedoch erhalten CNNs immer noch einen Vorteil daraus, was zu einer schnelleren Inferenz führt. Jetzt müssen Sie sich nur noch fragen: Ist eine schnellere Schlussfolgerung wichtig? Möchte ich diese zusätzlichen Abhängigkeiten (eine gute GPU, die richtigen installierten Dateien usw.)?

Wenn Geschwindigkeit kein Problem ist, wählen Sie die CPU. Beachten Sie jedoch, dass GPUs meiner Erfahrung nach eine Größenordnung schneller machen können.

Laurens Meeus
quelle
Interessanter Punkt, den Sie ansprechen, warum sollte CNN während der Inferenz von der Parallelverarbeitung profitieren?
Dan
1
Beim Training können die parallelen Berechnungen offensichtlich sein: Sie haben mehrere Eingaben, die jeweils unabhängig voneinander weitergeleitet werden müssen. Für eine Faltung wird der Kernel über mehrere Eingabe-Patches multipliziert. Diese können auch parallel durchgeführt werden. Das macht CNN so leistungsfähig: Sie benötigen nicht nur weniger Parameter zum Trainieren, sondern sind auch paralleler, wodurch GPUs so leistungsfähig werden. Ich weiß nicht, woran Sie arbeiten, aber ich arbeite an der Segmentierung (pixelweisen Klassifizierung) von Bildern, und wenn ich GPUs als Inferenz verwende, erhalte ich eine enorme Geschwindigkeitsverbesserung (> x10).
Laurens Meeus
@LaurensMeeus Ich bin auch neu in diesem Spektrum und mache eine Kostenanalyse von Cloud-VMs. Würde ich die GPU immer noch für das Training verwenden, wenn ich nur die Textanalyse und nicht die Bilder trainiere?
Squ1rr3lz
1
@ Squ1rr3lz Ich bin 95% du solltest. Jede Form des parallelen Rechnens sollte einen Vorteil für GPUs haben. Ich bin kein Experte auf diesem Gebiet, aber da die Textanalyse auch mit Faltungsebenen erfolgt (sei es 1D anstelle von 2D), ist dies bereits ein Grund, warum sie schneller sein könnte / sollte. Versuchen Sie nach Möglichkeit selbst, welchen Einfluss das Aktivieren / Deaktivieren der GPU hat.
Laurens Meeus
5

Wenn Sie Inferenz auf einer GPU anstelle einer CPU ausführen, erhalten Sie nahezu die gleiche Geschwindigkeit wie beim Training, weniger Speicheraufwand.

Wie Sie bereits sagten, läuft die Anwendung auf der CPU einwandfrei. Wenn Sie den Punkt erreichen, an dem die Inferenzgeschwindigkeit ein Engpass in der Anwendung ist, wird dieser Engpass durch ein Upgrade auf eine GPU behoben.

mpotma
quelle
Stimme voll und ganz zu. Verstehe immer noch nicht, warum der CPU-Beitrag überstiegen ist.
Laurens Meeus
1
Die GeForce GTX Titan X bietet eine 5,3- bis 6,7-mal höhere Leistung als die 16-Kern-Intel Xeon E5-CPU - das ist viel weniger als die Geschwindigkeit, die während des Trainings erreicht wurde - aus NVidias eigenem Blog: devblogs.nvidia.com/…
seanhalle
4

Sie würden die GPU nur für das Training verwenden, da für tiefes Lernen umfangreiche Berechnungen erforderlich sind, um zu einer optimalen Lösung zu gelangen. Für die Bereitstellung benötigen Sie jedoch keine GPU-Computer .

Nehmen wir als Beispiel das neue iPhone X von Apple. Das neue iPhone X verfügt über einen fortschrittlichen Algorithmus für maschinelles Lernen zur Gesichtserkennung. Apple-Mitarbeiter müssen über eine Reihe von Computern für Schulungen und Validierungen verfügen. Ihr iPhone X benötigt jedoch keine GPU, um nur das Modell auszuführen.

Hallo Welt
quelle
Danke für diese Erklärung. Was ich dann nicht verstehe, ist, warum Nvidia die Verwendung von GPUs als beste Lösung für Inferenz fördert, wenn die CPU dies gut kann. Warum drängt Google auch auf TPU, um Rückschlüsse zu ziehen, wenn dies alles mit CPU geschieht? Hat es etwas mit parallelem Rechnen zu tun?
Dan
3
@SmallChess hatte IPhone X keinen fortschrittlichen TPU-ähnlichen Prozessor, der nur als Rückschluss diente? extremetech.com/mobile/…
Laurens Meeus
3
@SmallChess Aber warum kann es nicht sein? Vielleicht verstehe ich es einfach nicht ganz. Bekommst du nicht noch eine Verbesserung der Geschwindigkeit?
Laurens Meeus
2
Ehrlich gesagt hat NVidia eine fantastische Marketingabteilung, und es liegt in ihrem besten Interesse, die Verwendung von NVidia-GPUs für Rückschlüsse zu fördern. Es ist in ihrem besten Interesse, nicht in deinem.
Seanhalle
1
Aus NVidias Blog: "258 vs. 242 Bilder / Sekunde" für NVIDIA Tegra X1 vs i7 6700K CPU bei der Durchführung von Inferenz: devblogs.nvidia.com/…
Seanhalle