Ich arbeite an einem Webprojekt, das die Transcodierung mehrerer kurzer Videoclips (6-10 Sekunden) erfordert, die von Benutzern in ein webfreundliches H.264-Format auf meinem Linux-Server hochgeladen wurden. Ich konnte die NVIDIA NVENC-Hardwarebeschleunigung mit ffmpeg und einer 4 Jahre alten GeForce GTX 670 aktivieren, und ich erhalte Hardware-Codierungsgeschwindigkeiten, die doppelt so hoch sind wie die meiner Software-Codierung (Xeon E5-1620 v3). Mit einem Videokartenbudget von 800 US-Dollar möchte ich diese kurzen Videoclips so schnell wie möglich transcodieren können, da mehrere Benutzer sie gleichzeitig hochladen werden.
Die NVENC-Engine hat Lizenzbeschränkungen, wenn sie auf einer NVIDIA-Karte auf Verbraucherebene implementiert wird: Es können nur 2 Video-Transcoding-Threads gleichzeitig ausgeführt werden, selbst wenn Sie mehrere Karten haben. Wenn ich mich für eine der teuren Quadro-Kartenserien entscheide, dann bin ich nur durch die andere Hardware an anderer Stelle in meinem System eingeschränkt, was die Anzahl der Threads betrifft, die ich ausführen kann. Bei meinem speziellen Projekt ist es jedoch viel besser, diese Clips in einer Reihe als parallel zu transcodieren, da die Clips in der Reihenfolge angezeigt werden, in der sie hochgeladen wurden. Später in der Warteschlange befindliche Clips können transkodiert werden, wenn frühere Clips angezeigt werden. Wenn Clips parallel auf derselben Karte transcodiert werden, ist die Leistung umgekehrt proportional zur Anzahl gleichzeitiger Threads.
Nachdem ich dies gesagt habe, ist mein Plan, zwei NVIDIA-Karten einzurichten und auf jeder einen einzelnen Thread auszuführen, um den Durchsatz zu maximieren. Das NVIDIA-Codec-SDK ist vage bezüglich der NVENC-Leistungsunterschiede zwischen verschiedenen Karten, aber es scheint, dass es einen großen Unterschied zwischen den GPU-Generationen Maxwell Gen 2 > Maxwell Gen 1 > Kepler gibt. Ich kann keine zuverlässigen Benchmarks für die NVENC-Codierung finden (im Gegensatz zum CUDA-Benchmarking, das leicht zu finden ist).
In Ermangelung harter Benchmarking-Daten zum Vergleich verschiedener Karten, welche Funktionen der derzeit verfügbaren Karten hätten den größten Einfluss auf die Single-Thread-NVENC-Codierungsgeschwindigkeit? Da die tatsächliche GPU während der Transcodierung nicht vollständig ausgelastet wird, wird diese Funktion stark von der GPU- und Speichertaktrate beeinflusst? Ich muss 400 US-Dollar pro Karte ausgeben, aber wenn die Maxwell Gen 2 GeForce GTX 960 der Einstiegsklasse so gut ist wie die neueren Karten, dann werde ich zusätzliches Geld in andere Aspekte des Servers stecken (CPU/RAM/SSD usw.). Ich weiß, dass dies wie eine subjektive Frage erscheinen mag (was das Beste ist ), aber ich versuche, eine selbstgebildete Vermutung anzustellen, die auf einem Verständnis der Transcodierungshardware basiert.
Es gibt zwei Hauptfunktionen bei der NVIDIA NVENC-Codierung:
Gemäß der Lizenzbeschränkung: Es ist möglich, nur 2 Codierungsthreads gleichzeitig auf den NVIDIA-Karten der Verbraucherebene (jede GTX-Karte) auszuführen. Es wird auf Treiberebene geregelt, es ist jedoch möglich, diese Einschränkung aufzuheben. In diesem Fall hängt der Wert der maximalen Transcodierungs-Threads von der Größe des Videospeichers und der Auslastung der Video-Engine ab. Die Größe des Videospeichers, die für einen Transcodierungsstrom erforderlich ist, ist unterschiedlich und hängt vom Videokartenmodell ab. Für die Codierung des SD-Streams auf dem QUADRO K4200 (4 GB) sind 100 MB Videospeicher erforderlich, aber für die Codierung desselben Streams auf der GTX 980TI (6 GB) benötigen wir 170 MB.
Meine Ergebnisse beim Transkodieren von SD-Quellen in Echtzeit sind:
Mein Fazit (für 2016): Wenn Sie nicht mehr als 2 Threads parallel transkodieren müssen, dann ist GTX 960 eine gute Variante. Außerdem können Sie etwas Geld für eine andere Hardware sparen und nach einer anderen Grafikkarte mit Maxwell Gen1 suchen. Wenn Sie den Hack-Weg gehen, dann ist GTX 960 eine gute Variante, aber nur mit 4 GB Videospeicher.
UPDATE AUS 2018: Heutzutage hat sich die Situation in diesem Bereich in eine bessere Richtung verändert. Die Karte mit dem besten Encoder ist Tesla V100, aber sie ist zu teuer. Die beste Arbeitsvariante sind die Grafikkarten auf Basis von Pascal CHIPs. Wenn Sie den Hack-Weg bevorzugen, dann GTX1050TI (4GB), wird es perfekt für Ihr Budget in 800 $ sein. Ansonsten hat Quadro P2000 keine Lizenzbeschränkungen und ist für das gleiche Budget auch sehr komfortabel.
An der Spitze Ihres 800-Dollar-Budgets können Sie eine Quadro M4000 erwerben, die NICHT die Lizenzbeschränkung von 2 gleichzeitigen Transcodierungen hat. Wir verwenden diese Karten, um 5–10 eingehende Livestreams in 2–3 Ausgangsbitraten zu transcodieren.
kimgroth
Benutzer255406
Benutzer255406