NVLink demystified

0
179
NVLink demystified
Photo by Mathew Schwartz on Unsplash

Damit GPUs untereinander schnell kommunizieren können, hat NVIDIA bereits Anfang 2016 eine Hochgeschwindigkeitsverbindung namens NVLink auf den Markt gebracht. Die Praxis zeigt, dass es immer wieder Verwirrung gibt über die Geschwindigkeit dieser Verbindung. Mit diesem Artikel versucht der Autor, Licht ins Dunkel zu bringen und die Verwirrung endgültig auszuräumen. NVLink ist nicht(!) NVMe.

Grundlage für eine NVLink-Verbindung ist der sog. Nvidia Highspeed Signaling Interconnect, kurz NVHS. Für die Nachrichtentechniker: Die Übertragung erfolgt auf Basis einer symmetrischen Signalübertragung (engl.: differential signaling) in einem Adernpaar. Ein solches Adernpaar kann Signale immer nur in eine Richtung übertragen. Jeweils 8 solcher Adernpaare formen innerhalb NVHS einen Sublink. Weil eine Kommunikation immer bidirektional abläuft, also in beide Richtungen, braucht es mindestens zwei Sublinks, um eine vollwertige Kommunikation zwischen zwei Kommunikationspartnern bereit zu stellen.

NVLINK 1.0

In der ersten Inkarnation NVLink 1.0 kann ein Sublink maximal 20 GByte/s übertragen, ein kompletter NVLink damit also 40 GByte/s bidirektional. Einzelne Komponenten für NVLink 1.0 stellen üblicherweise 4 einzelne NVLinks zur Verfügung. Eine Tesla P100 GPU ist deshalb in Datenblättern auch immer mit 160 GByte/s NVLink-Durchsatz angegeben: das entspricht 4x 40 GByte/s, also 4 einzelnen NVLinks. Das nachstehende Bild zeigt den Zusammenhang graphisch.

NVLink 1.0 Bandbreite

NVLINK 2.0

Ende 2017 führte NVIDIA dann GPUs auf Basis der Volta Mikroarchitektur am Markt ein, zusammen mit Version 2.0 des NVLink. Das Grundprinzip bleibt identisch: symmetrische Signalübertragung, jeweils 8 Adernpaare je Sublink, je ein Sublink pro Richtung in einem NVLink. Es ändert sich aber die mögliche Übertragungsgeschwindigkeit innerhalb eines Adernpaares, und damit die insgesamt mögliche Bandbreite. Ein einzelner NVLink 2.0 kann jetzt 50 Gbyte/s bidirektional übertragen. Gleichzeitig bekamen die GPUs insgesamt sechs NVLink-Kanäle, anstatt wie bisher  nur vier.

Für eine einzelne GPU mit Volta-Architektur sind damit 6x 50 GByte/s = 300 GByte/s bidirektionaler Datentransfer möglich. Die Hälfte davon in Richtung GPU, die andere Hälfte von der GPU weg. Das nachstehende Bild zeigt den Zusammenhang für NVLink 2.0 graphisch.

NVLink 2.0 Bandbreite

Auch IBM hat in ihrer POWER9-CPU nachgezogen, und stellt sechs NVLink 2.0 Ports zur Verfügung (POWER8: 4x NVLink 1.0). Im einfachsten Fall wäre damit die Anbindung einer einzelnen GPU an eine POWER9 CPU mit allen sechs NVLinks denkbar. Am Markt erhältliche Systeme arbeiten z. B. mit einer POWER9 CPU je zwei NVIDIA V100 GPUs. Die Verschaltung innerhalb eines solchen Systems zeigt das nachstehende Bild schematisch.

NVLink mit POWER9

Für die 16-GPU-Variante DGX-2, die NVIDIA vor wenigen Tagen vorstellte, kommt dann zusätzlich noch ein sog. NVSwitch zum Einsatz, ein von NVIDIA entwickelter Switch für NVLink. Damit ist keine direkte Verschaltung per NVLink zwischen den GPUs mehr erforderlich, was die Anzahl der innerhalb eines Systems nutzbaren GPUs deutlich erhöht.

Die spezifizierten und in diesem Artikel genannten Bandbreiten sind theoretischer Natur. Wie bei jedem Protokoll werden nicht ausschließlich Nutzdaten übertragen. Die Datenübertragung muss synchronisiert werden, und es gibt Steuernachrichten, u. a. zur Synchronisation. Es gibt Fehlerkorrektur, wofür zusätzliche Bits mit übertragen werden müssen (128b/130b Kodierung). Nachrichten, die kein ganzes Paket brauchen, werden mit Nullen aufgefüllt (Padding). Zudem spielen Pufferfähigkeiten der beteiligten Kommunikationspartner eine Rolle. In der Praxis werden Transferraten von 90%-95% des theoretischen Maximums erreicht.

Dieser Artikel erschien im Original am 31. März 2018 im Boston-Blog.