Im zweiten Teil (1:24:34 – 2:05:22) der Tesla AI Präsentation wird Elon Musk zwar erwähnt, spricht aber nicht persönlich. Das Tesla AI Team geht intensiv auf die technischen Details der Entwicklungsschritte zu einer Super-KI ein und präsentiert Superlative auf diesem Gebiet. Es wird ziemlich technisch, und ich bin mir nicht sicher, ob ich alles richtig verstanden habe, da ich nicht in diesem speziellen Bereich arbeite. Wenn Sie also einen Fehler entdecken, melden Sie sich bitte, damit das Transkript und/oder die deutsche Übersetzung verbessert werden kann. Bitte beachten Sie auch, dass viele der im Transkript und dieser Übersetzung enthaltenen Bilder Links zu Videosequenzen enthalten, die auf der Veranstaltung gezeigt wurden. Zu Teil 1 der Präsentation gelangen sie hier.

Andrej Karpathy: (1:24:34) Ja, also die Geschichte der Datensätze ist natürlich entscheidend. Bis jetzt haben wir nur über neuronale Netze gesprochen. Aber neuronale Netze setzen nur eine obere Grenze für die Leistung. Viele dieser neuronalen Netze haben Hunderte von Millionen von Parametern. Und diese Hunderte von Millionen von Parametern müssen richtig eingestellt werden. Wenn Sie die Parameter falsch einstellen, wird es nicht funktionieren. Neuronale Netze sind also nur eine Obergrenze. Man braucht auch riesige Datensätze, um die richtigen Algorithmen darin zu trainieren.
Wie ich bereits erwähnte, benötigen wir Datensätze direkt im Vektorraum. Es stellt sich also die Frage, wie man – da unsere Netze Hunderte von Millionen von Parametern haben – Millionen und Abermillionen von Vektorraumbeispielen sammeln kann, die sauber und vielfältig sind, um diese neuronalen Netze effektiv zu trainieren. Es gibt also eine Historie zu den Datensätzen und wie sie sich neben all den Modellen und Entwicklungen, die wir erreicht haben, entwickelt haben.
(1:25:24) Als ich vor etwa vier Jahren anfing, arbeiteten wir mit einer externen Firma zusammen, um viele unserer Datensätze zu beschaffen. Leider mussten wir sehr schnell feststellen, dass die Zusammenarbeit mit Drittanbietern bei der Beschaffung von Datensätzen – für etwas so Kritisches – einfach nicht ausreicht. Die Latenzzeit bei der Zusammenarbeit war extrem hoch. Und ehrlich gesagt, die Qualität war auch nicht besonders gut. Und so haben wir im Sinne der vollständigen vertikalen Integration bei Tesla die gesamte Beschriftung intern durchgeführt.

So haben wir im Laufe der Zeit eine Datenbeschriftungs-Organisation mit mehr als 1000 Mitarbeitern aufgebaut, die aus professionellen Etikettierern (Labeler) besteht, die sehr eng mit den Ingenieuren zusammenarbeiten. Sie sind hier in den USA und arbeiten ebenfalls mit den Ingenieuren hier in der Gegend zusammen. Wir arbeiten also sehr eng mit ihnen zusammen und bauen auch die gesamte Infrastruktur von Grund auf selbst auf. Wir haben also ein Team, das wir heute noch kennenlernen werden, das die gesamte Infrastruktur für die Datenbeschriftung entwickelt und pflegt.
Hier zeige ich zum Beispiel einige Screenshots der Latenz-, Durchsatz- und Qualitätsstatistiken, die wir über alle Beschriftungs-Workflows, die einzelnen beteiligten Personen und alle Aufgaben führen, und wie die Anzahl der Beschriftungen im Laufe der Zeit wächst. Wir haben dies als sehr entscheidend empfunden und sind sehr stolz darauf.

Am Anfang, vor etwa drei oder vier Jahren, haben wir die meisten unserer Beschriftungen im Bildbereich vorgenommen. Sie können sich also vorstellen, dass es eine ganze Weile dauert, ein Bild wie dieses zu beschriften. Und so sah es aus, als wir sozusagen Polygone und Polylinien auf diese einzelnen Bilder zeichneten. Wie ich bereits erwähnt habe, benötigen wir Millionen von Vektorraumbeschriftungen, so dass dies nicht ausreicht. Also gingen wir sehr schnell zur drei- oder vierdimensionalen Beschriftung über, bei der wir direkt im Vektorraum beschriften und nicht in einzelnen Bildern.

(1:27:04) Was ich hier zeige, ist also ein Clip, und Sie sehen eine sehr kleine Rekonstruktion – Sie werden bald viel mehr Rekonstruktionen sehen – aber es ist eine sehr kleine Rekonstruktion der Bodenebene, auf der das Auto fuhr, und ein kleines Stück der Punkthäufung, die hier rekonstruiert wurde. Sie sehen hier, dass der Labeler die Beschriftungen direkt im Vektorraum ändert. Und dann werden diese Änderungen in die Kamerabilder zurückprojiziert. Wir beschriften also direkt im Vektorraum. Dadurch konnten wir den Durchsatz für viele unserer Beschriftungen massiv erhöhen, da wir einmal in 3D beschriften und dann zurückprojizieren.
Aber selbst das, so wurde uns klar, würde nicht ausreichen, denn Menschen und Computer haben unterschiedliche Vor- und Nachteile. Menschen sind extrem gut in Dingen wie Semantik, aber Computer sind sehr gut in Geometrie, Rekonstruktion, Triangulation, Verfolgung. Für uns stellt sich also eher die Frage, wie Menschen und Computer zusammenarbeiten können, um diese Vektorraum-Datensätze zu erstellen. Wir werden nun über die automatische Beschriftung sprechen, d. h. über die Infrastruktur, die wir für die Beschriftung dieser Clips in großem Maßstab entwickelt haben.
Ashok Elluswamy: (1:28:09) Hallo nochmal. Obwohl wir viele Labeler haben, übersteigt die Menge an Training, die für das Trainieren der Netzwerke benötigt wird, deren Kapazität erheblich. Deshalb haben wir versucht, in eine umfangreiche ‚Auto-Labeling-Pipeline‘ zu investieren. Hier ist ein Beispiel dafür, wie wir einen einzelnen Clip beschriften.

Ein Clip ist eine Einheit mit dichten Sensordaten, wie Videos, IMU-Radar, GPS, Odometrie usw. Er kann zwischen 45 Sekunden und einer Minute lang sein. Sie können von unseren eigenen Fahrzeugen oder von Kundenfahrzeugen hochgeladen werden. Wir sammeln diese Clips und senden sie dann an unsere Server, auf denen wir offline viele neuronale Netze laufen lassen, um Zwischenergebnisse wie Segmentierungsmasken, Tiefe, Punktabgleich usw. zu erzeugen. Das Ganze durchläuft dann eine Reihe von Robotik- und KI-Algorithmen, um einen endgültigen Satz von Beschriftungen zu erzeugen, der zum Trainieren der Netzwerke verwendet werden kann.

(1:28:55) Zunächst wollen wir die Straßenoberfläche beschriften. Normalerweise können wir Splines oder Netze verwenden, um die Straßenoberfläche darzustellen, aber diese sind – aufgrund der Topologiebeschränkungen – nicht differenzierbar und nicht geeignet, um dies zu erzeugen. Stattdessen verwenden wir eine implizite Darstellung der Straßenoberfläche im Stil der neuronalen Strahlungsfelder aus dem letzten Jahr, die sehr beliebt ist …. Hier fragen wir xy-Punkte auf dem Boden ab und bitten das Netzwerk, die Höhe der Bodenoberfläche zusammen mit verschiedenen Semantiken wie Bordsteinen, Fahrbahnbegrenzungen, Straßenoberfläche, Fahrbereich usw. vorherzusagen.
Aus einem einzelnen xy-Wert erhalten wir also einen z-Wert. Zusammen ergeben sie einen 3D-Punkt, der in alle Kameraansichten projiziert werden kann. Wir führen Millionen solcher Abfragen durch und erhalten eine große Anzahl von Punkten. Diese Punkte werden in alle Kameraansichten reprojiziert. Wir zeigen hier oben rechts ein solches Kamerabild mit all diesen Punkten, die wir projiziert haben. Jetzt können wir diesen reprojizierten Punkt mit der bildbasierten Vorhersage der Segmentierungen vergleichen. Durch die gemeinsame Optimierung für alle Kameraansichten sowohl in Raum als auch in Zeit wurde eine hervorragende Rekonstruktion erzielt.

Hier ist ein Beispiel dafür, wie das aussieht. Dies ist also eine optimierte Straßenoberfläche, die die acht Kameras, die das Auto hat, über die gesamte Zeit reproduziert, und Sie können sehen, wie sie sowohl räumlich als auch zeitlich konsistent ist.

(1:30:17) Ein einzelnes Auto, das durch einen Ort fährt, kann mit dieser Technik einen Bereich um den Streckenverlauf herum sauber erfassen. Aber wir müssen hier nicht aufhören. Hier haben wir also verschiedene Clips von ein und demselben Ort gesammelt, vielleicht von verschiedenen Autos, und jeder von ihnen optimiert einen Teil der Straße. Das Tolle daran ist, dass wir sie alle zu einer einzigen riesigen Optimierung zusammenführen können. Hier werden also die 16 verschiedenen Fahrten organisiert und anhand verschiedener Merkmale wie Fahrbahnen und Fahrspurlinien ausgerichtet – sie sollten alle miteinander und mit allen bildbasierten Beobachtungen übereinstimmen.
Zusammen ergibt dies eine effektive Möglichkeit, die Straßenoberfläche nicht nur dort zu kennzeichnen, wo das Auto gefahren ist, sondern auch an anderen Orten, die es noch nicht befahren hat. Auch hier geht es nicht nur um HD-Karten oder Ähnliches. Es geht darum, die Clips an diesen Kreuzungen zu beschriften, damit wir sie nicht ewig pflegen müssen, solange die Beschriftungen mit den Videos übereinstimmen, an denen sie gesammelt wurden. Optional kann der Mensch das Ganze dann noch ergänzen, um Rauschen zu beseitigen oder zusätzliche Metadaten hinzuzufügen, um es noch reichhaltiger zu machen.

(1:31:22) Wir müssen uns nicht nur auf die Straßenoberfläche beschränken, wir können auch statische 3D-Hindernisse beliebig rekonstruieren. Hier sehen Sie eine rekonstruierte 3D-Punkhäufung aus unseren Kameras. Die wichtigste Neuerung hier ist die Dichte der Punkthäufung. Normalerweise benötigen diese Punkte eine Textur, um Assoziationen von einem Bild zum nächsten zu bilden. Aber hier sind wir in der Lage, diese Punkte auch auf texturlosen Oberflächen, wie der Straßenoberfläche oder Wänden, zu erzeugen. Und das ist wirklich nützlich, um beliebige Hindernisse, die wir sehen können, zu beschriften.

(1:31:55) Wenn man das alles auf mehreren Servern offline macht, haben wir außerdem den Vorteil des Rückblicks. Das ist ein sehr nützlicher Hack, denn, sagen wir mal, im Auto muss das Netzwerk die Geschwindigkeit ermitteln, dann muss es nur die historischen Informationen nutzen und einschätzen, wie hoch die Geschwindigkeit ist. Aber in diesem Fall können wir sowohl die Vergangenheit als auch die Zukunft betrachten und im Grunde schummeln und die richtige Antwort zu den kinematischen Daten wie Geschwindigkeit, Beschleunigung usw. erhalten.
Ein weiterer Vorteil ist, dass wir verschiedene – sogar verdeckte – Streckenverläufe zusammenfügen können, weil wir die Zukunft kennen. Wir kennen zukünftige Streckenverläufe, können sie abgleichen und dann miteinander verknüpfen. Hier können Sie also sehen, dass die Fußgänger auf der anderen Straßenseite auch bei mehrfacher Verdeckung durch die Autos erhalten bleiben. Das ist für den Planer sehr wichtig, denn das muss er wissen. Wenn er jemanden gesehen hat, muss er ihn trotzdem berücksichtigen, auch wenn er verdeckt ist. Dies ist also ein enormer Vorteil.

(1:32:49) Indem wir alles miteinander kombinieren, können wir diese erstaunlichen Datensätze produzieren, die die gesamte Straßentextur oder die statischen Objekte und alle sich bewegenden Objekte sogar bei Verdeckungen annotieren und hervorragende kinematische Markierungen erzeugen. Sie können sehen, wie die Autos gleichmäßig abbiegen und wirklich gleichmäßige Beschriftungen erzeugen; oder die Fußgänger werden konsistent verfolgt, die geparkten Autos… – offensichtlich mit einer Geschwindigkeit von Null, damit wir auch wissen, dass sie geparkt sind. Das ist also enorm wichtig für uns.
(zeigt eine neue Szene) Dies ist ein weiteres Beispiel für dieselbe Sache. Sie können sehen, dass alles konsistent ist. Wir wollen eine Million solcher beschrifteter Clips produzieren und unsere Multikamera-Videonetzwerke mit einem so großen Datensatz trainieren, um dieses Problem wirklich zu lösen. Wir wollen die gleiche konsistente Ansicht erhalten, die wir hier im Auto sehen.

(1:33:36) Wir begannen unsere erste Erforschung dieses Themas mit dem ‚Remove Radar‘ Projekt. Wir haben ‚Radar‘ in einer sehr kurzen Zeitspanne entfernt – ich glaube, innerhalb von drei Monaten. Als wir das Netzwerk einführten, haben wir zum Beispiel festgestellt, dass es bei schlechten Sichtverhältnissen nicht verlässlich funktioniert – verständlicherweise, denn ganz offensichtlich ist gerade einen Haufen Schnee vom Lastwagen vor uns auf uns gelandet und die Sicht ist dadurch erheblich erschwert. Wir sollten trotzdem nicht vergessen, dass dieses Auto vor uns war. Aber unsere Netze haben sich anfangs nicht daran erinnert, weil es unter solchen Bedingungen an Daten mangelte.
Wir haben also die Fahrzeugflotte dazu gebracht, viele ähnliche Clips zu produzieren. Und die Flotte hat darauf reagiert. Sie produziert eine Menge Videoclips, in denen alles Mögliche von allen anderen Fahrzeugen heraus- und herunterfällt. Diese haben wir dann durch unsere Auto-Labeling-Pipeline geschickt, die innerhalb einer Woche 10.000 Clips beschriften konnte. Wenn Menschen jeden einzelnen Clip beschriftet hätten, hätte das mehrere Monate gedauert.
Wir haben das also für 200 verschiedene Bedingungen gemacht und konnten sehr schnell große Datensätze erstellen. Und so konnten wir ‚Radar‘ entfernen. Nachdem wir also die Netzwerke mit diesen Daten trainiert haben, können Sie sehen, dass sie vollständig funktionieren und die Erinnerung an Objekte behalten und diese anzeigen.

(1:34:52) Endlich wollten wir mal einen Cybertruck in den Datensatz für das ‚Remove Radar‘ aufnehmen. Könnt ihr erraten, woher wir diesen Clip haben? Ich gebe euch einen Moment Zeit. Jemand hat es gesagt. Ja, ja, das ist gerendert. Das ist unsere Simulation. Anfangs war es für mich schwer zu erkennen, und wenn ich das sagen darf, es sieht gut aus, es sieht sehr gut aus.

Neben der automatischen Beschriftung setzen wir bei der Beschriftung unserer Daten auch stark auf die Simulation. Dies ist also die gleiche Szene wie zuvor, nur aus einem anderen Kamerawinkel. Ein paar Dinge, die ich hervorheben wollte, zum Beispiel die Bodenoberfläche – es ist kein einfacher Asphalt, es gibt viele Narben und Risse und Teernähte, es gibt einige Flickarbeiten, die darauf gemacht wurden. Die Fahrzeuge sind realistischer, der LKW hat ein Gelenk, er fährt sogar über den Bordstein und macht einen weiten Bogen. Die anderen Autos verhalten sich intelligent, sie vermeiden Zusammenstöße, fahren um Autos herum und bremsen und beschleunigen auch sanft.
Das Auto hier, mit dem Logo oben, wird vom Autopiloten gesteuert und biegt unvorhergesehen links ab. Und da es sich um eine Simulation handelt, geht sie vom Vektorraum aus, verfügt also über perfekte Beschriftungen. Hier zeigen wir einige der Beschriftungen, die wir erzeugen. Das sind normale Quader mit Kinematik, Tiefe, Oberflächennormalen, Segmentierung. Aber Andrej kann eine neue Aufgabe nennen, die er nächste Woche haben möchte, und wir können diese sehr schnell erzeugen, weil wir bereits den Vektorraum haben und den Code schreiben können, um diese Beschriftungen sehr, sehr schnell zu erzeugen.

(1:36:28) Wann ist eine Simulation also hilfreich? Sie hilft erstens, wenn die Daten schwer zu beschaffen sind. So groß unser Fuhrpark auch ist, es kann immer noch schwierig sein, so verrückte Szenen wie dieses Paar mit Hund zu bekommen, die auf der Autobahn laufen, während andere Autos mit hoher Geschwindigkeit unterwegs sind. Das ist eine ziemlich seltene Szene, würde ich sagen, aber sie kann trotzdem passieren. Und der Autopilot muss dennoch damit umgehen können, wenn es passiert.
Wenn Daten schwer zu kennzeichnen sind: Hier sind Hunderte von Personen, die die Straße überqueren. Dies könnte in Manhattan in der Innenstadt sein, wo Menschen die Straße überqueren. Es kann mehrere Stunden dauern, bis ein Mensch diesen Clip beschriftet hat. Und selbst für automatische Beschriftungsalgorithmen ist es sehr schwierig, die richtige Zuordnung zu finden, und es kann zu schlechten Geschwindigkeitsangaben führen. In der Simulation ist dies jedoch trivial, da man die Objekte bereits kennt. Man muss nur noch die Quader und die Geschwindigkeiten auswerfen.
Jetzt ist es endlich soweit, dass wir ein Closed-Loop-Verhalten einführen, bei dem das Auto in einer bestimmten Situation sein muss oder die Daten von den Aktionen abhängen. Das ist so ziemlich der einzige Weg, um es zuverlässig zu machen. All das ist großartig. Was ist nötig, um das zu erreichen?

(1:37:28) Erstens: genaue Sensorsimulation. Auch hier geht es bei der Simulation nicht nur darum, schöne Bilder zu erzeugen. Es geht darum, das zu erzeugen, was die Kamera im Auto und andere Sensoren sehen würden. Hier gehen wir also schrittweise durch verschiedene Belichtungseinstellungen der echten Kamera auf der linken Seite und der Simulation auf der rechten Seite.
Wir sind in der Lage, ziemlich genau das zu erreichen, was die echten Kameras tun. Dazu mussten wir viele Eigenschaften der Kamera in unserer Sensorsimulation modellieren, angefangen von Sensorrauschen, Bewegungsunschärfe, optischen Verzerrungen, sogar Scheinwerferübertragungen, Lichtbeugungsmuster der Windschutzscheibe usw. Wir verwenden dies nicht nur für die Autopilot-Software. Wir verwenden es auch, um Hardware-Entscheidungen zu treffen, wie z. B. Objektivdesign, Kameradesign, Sensorplatzierung und sogar Scheinwerferübertragungseigenschaften.

(1:38:19) Zweitens müssen wir das Bildmaterial realistisch darstellen. Es darf nicht zu dem kommen, was man in der Spieleindustrie einen Treppeneffekt nennt. Das sind Aliasing-Artefakte, die verraten, dass es sich um eine Simulation handelt. Die wollen wir nicht haben. Deshalb haben wir einen großen Aufwand betrieben, um ein schönes räumliches und zeitliches Anti-Aliasing zu erzeugen. Wir arbeiten auch an neuronalen Rendering-Techniken, um das Ganze noch realistischer zu machen. Außerdem verwenden wir Raytracing, um eine realistische Beleuchtung und globale Illumination zu erzeugen. Okay, das ist das letzte Polizeiauto, glaube ich (bezieht sich auf die gezeigte Szene).

(1:38:57) Wir können natürlich nicht einfach nur vier oder fünf Autos nehmen (…). Wir brauchen also realistische Objekte wie den Elch auf der Straße hier. Wir haben Tausende von Objekten in unserer Bibliothek. Sie können verschiedene Hemden tragen und sich tatsächlich realistisch bewegen; das ist wirklich cool. Wir haben auch viele verschiedene Orte kartiert und erstellt, um diese Simulationsumgebungen zu schaffen.
Wir haben sogar 2000 Meilen an Straßen angefertigt. Das entspricht fast der Strecke von der Ostküste bis zur Westküste der Vereinigten Staaten, was ich ziemlich cool finde. Darüber hinaus haben wir effiziente Werkzeuge entwickelt, mit denen ein einzelner Künstler an einem einzigen Tag mehrere Meilen mehr bauen kann.

(1:39:36) Aber das ist nur die Spitze des Eisbergs. Die meisten Daten, die wir zum Trainieren verwenden, werden prozedural mit Hilfe von Algorithmen erstellt, nicht von Künstlern, die diese Simulationsszenarien erschaffen. Es handelt sich also um prozedural erstellte Straßen mit vielen Parametern wie Krümmung, verschiedenen Bäumen, Kegeln, Pfosten, Autos mit unterschiedlichen Geschwindigkeiten, und die Interaktion erzeugt einen endlosen Strom an Daten für das Netzwerk.
Aber viele dieser Daten können langweilig sein, weil das Netz sie vielleicht schon richtig erkannt hat. Wir verwenden also auch ML (MachineLerning)-basierte Techniken, um das Netzwerk zu analysieren und zu sehen, wo es versagt, und um mehr Daten über die Fehlerpunkte des Netzwerks zu erzeugen. So versuchen wir, in einem geschlossenen Kreislauf die Leistung des Netzwerks zu verbessern.

(1:40:18) Das ist aber noch nicht alles. Eigentlich wollen wir alle Fehler nachstellen, die dem Autopiloten in der Simulation passieren, damit wir den Autopiloten von da an auf dem gleichen Stand halten können. Hier auf der linken Seite sehen Sie also einen echten Clip, der von einem Auto aufgenommen wurde. Er durchläuft dann unsere Auto-Labeling-Pipeline, um eine 3D-Rekonstruktion der Szene mit allen sich bewegenden Objekten zu erstellen.
In Kombination mit den ursprünglichen visuellen Informationen wird dieselbe Szene synthetisch nachgebildet und daraus ein Simulationsszenario erstellt. Wenn wir das dann mit Autopilot kombinieren, kann der Autopilot völlig neue Dinge tun, und wir können neue Welten, neue Ergebnisse aus dem ursprünglichen Fehler bilden. Das ist erstaunlich, denn wir wollen eigentlich nicht, dass der Autopilot versagt. Und wenn er versagt, wollen wir das erfassen und behalten.

(1:41:07) Aber nicht nur das, wir können den gleichen Ansatz wie vorhin verwenden und noch einen Schritt weiter gehen. Wir können neuronale Rendering-Techniken verwenden, um es noch realistischer aussehen zu lassen. Wir nehmen den Original-Videoclip, erstellen daraus eine synthetische Simulation und wenden dann neuronale Rendering-Techniken an. Das Ergebnis ist meiner Meinung nach erstaunlich, weil es sehr realistisch ist und fast so aussieht, als wäre es von den echten Kameras aufgenommen worden. Das sind die Ergebnisse von gestern Abend. Weil sie so cool sind, wollten wir sie präsentieren. Ich bin wirklich begeistert, was das System leisten kann.

Das ist alles nicht einfach dahingesagt, denn die im Auto trainierten Netze verwenden bereits Simulationsdaten. Wir haben 300 Millionen Bilder mit fast einer halben Milliarde Beschriftungen verwendet, und wir wollen alle Aufgaben, die in den nächsten Monaten anfallen werden, in den Griff bekommen. Damit bitte ich Milan zu erklären, wie wir seine Operationen skalieren und wirklich eine Labelingfabrik aufbauen und Millionen von Beschriftungen erstellen.
Milan Kovac: (1:42:09) Okay, danke Ashok. Hallo zusammen, ich bin Milan. Ich bin verantwortlich für die Integration unserer neuronalen Netze in das Auto, für den Großteil des Trainings der neuronalen Netze und für unsere Auswertungsinfrastruktur. Heute Abend möchte ich Ihnen zunächst einen Einblick in die Menge an Rechenleistung geben, die für diese Art von Datengenerierungsfabrik erforderlich ist.
Im Zusammenhang mit dem Vorstoß, den wir als Team hier vor ein paar Monaten unternommen haben, um die Abhängigkeit vom Radarsensor für den Piloten zu beenden, haben wir über 10 Milliarden Labels für zweieinhalb Millionen Clips generiert. Um dies zu erreichen, mussten wir unsere riesigen Offline-Neuralnetze und unseren Simulations-Engine auf Tausende von GPUs und knapp 20.000 CPU-Kerne skalieren. Darüber hinaus haben wir auch mehr als 2.000 Autopilot-Computer in die Schleife mit unserem Simulations-Engine eingebunden. Und das ist unser kleinster Compute Cluster.

Ich möchte Ihnen eine Vorstellung davon geben, was nötig ist, um unsere neuronalen Netze ins Auto zu bringen. Die beiden wichtigsten Einschränkungen, an denen wir arbeiten, sind vor allem die Latenzzeit und die Bildrate, die für die Sicherheit sehr wichtig sind, aber auch, um die Beschleunigung und die Geschwindigkeit unserer Umgebung richtig einschätzen zu können. Der Kern des Problems ist also der KI-Compiler, den wir hier in der Gruppe, die im Wesentlichen die Computeroperationen meines PyTorch-Modells auf eine Reihe dedizierter und beschleunigter Hardwarekomponenten abbildet, schreiben und erweitern.

Und das tun wir, indem wir einen Zeitplan erstellen, der für den Durchsatz optimiert ist, während wir mit sehr strengen SRAM-Einschränkungen arbeiten. Übrigens machen wir das nicht nur bei einem Engine, sondern bei zwei Engines des Autopilot-Computers. Tesla nutzt diese Engines in der Weise, dass zu einem bestimmten Zeitpunkt nur einer von ihnen tatsächlich Steuerbefehle an das Fahrzeug ausgibt, während der andere als Erweiterung der Rechenleistung genutzt wird. Aber diese Regeln sind austauschbar, sowohl auf der Hardware- als auch auf der Softwareebene.

(1:44:14) Wie schaffen wir es also, in diesen KI-Entwicklungszyklen als Gruppe schnell zu iterieren? Nun, erstens haben wir in den letzten Jahren unsere Kapazität zur Auswertung unseres neuronalen Softwarenetzwerks drastisch erhöht. Heute führen wir über eine Million Evaluierungen pro Woche für jede Codeänderung durch, die das Team vornimmt. Und diese Auswertungen laufen auf über 3000 vollständig selbstfahrenden Computern, die in einem speziellen Cluster zusammengeschlossen sind.

Darüber hinaus haben wir wirklich coole Debugging-Tools entwickelt. Hier ist ein Video von einem unserer Tools, das unseren Entwicklern hilft, die Entwicklung neuronaler Netze zu iterieren und die Ergebnisse verschiedener Revisionen desselben neuronalen Netzmodells live zu vergleichen, indem es live Videoclips durcharbeitet.

Nicht zuletzt haben wir in den letzten Jahren die Rechenleistung für das Training neuronaler Netze drastisch erhöht. Heute sind wir knapp unter 10.000 GPUs, was, nur um Ihnen ein Gefühl zu geben, mehr ist als die fünf bekanntesten Supercomputer der Welt. Aber das ist nicht genug. Und deshalb möchte ich Ganesh bitten, über die nächsten Schritte zu sprechen.
Ganesh Venkataramanan: (1:45:34) Vielen Dank, Milan. Mein Name ist Ganesh, und ich leite das Projekt Dojo. Es ist mir eine Ehre, dieses Projekt im Namen des multidisziplinären Tesla-Teams zu präsentieren, das an diesem Projekt arbeitet. Wie bereits Milan ausführte, gibt es eine unstillbare Nachfrage nach Geschwindigkeit und Kapazität für das Training neuronaler Netze. Und Elon hat dies bereits vorausgesehen. Vor ein paar Jahren hat er uns gebeten, einen superschnellen Trainingscomputer zu entwickeln. Und so haben wir das Projekt Dojo ins Leben gerufen.
Unser Ziel ist es, die beste KI-Trainingsleistung zu erreichen und all diese größeren, komplexeren Modelle zu unterstützen, von denen Andrejs Team träumt, und dabei gleichzeitig energie- und kosteneffizient zu sein. Also haben wir überlegt, wie wir das schaffen können, und sind auf eine verteilte Rechenarchitektur gekommen. Schließlich sind alle Ausbildungscomputer, die es gibt, in der einen oder anderen Form verteilte Computer. Sie haben Rechenelemente in dem Kasten hier, die mit einer Art Netzwerk verbunden sind.
In diesem Fall handelt es sich um ein zweidimensionales Netz. Aber es könnte jedes andere Netzwerk sein: CPU, GPU, Beschleuniger, alle haben einen kleinen Speicher und ein Netzwerk. Ein gemeinsamer Trend ist jedoch, dass es einfach ist, die Rechenleistung zu skalieren, aber es sehr schwierig ist, die Bandbreite zu erhöhen und die Latenzen zu reduzieren. Sie werden sehen, wie unser Design darauf eingeht, wie unsere Philosophie diese Aspekte der traditionellen Grenzen angeht.

(1:47:19) Für Dojo haben wir uns eine große Rechenebene vorgestellt, die mit sehr robusten Rechenelementen gefüllt ist, die mit einem großen Speicherpool unterstützt werden und die über eine Struktur mit sehr hoher Bandbreite und geringer Latenz miteinander verbunden sind, und zwar in einem 2D-Mesh-Format. Und für die extreme Skalierung werden darauf große neuronale Netze partitioniert und abgebildet, um verschiedene Parallelitäten von Modellgraphen zu extrahieren. Dann wird ein neuronaler Compiler von uns die räumliche und zeitliche Lokalität ausnutzen, so dass er den Kommunikationsfußabdruck auf lokale Zonen reduzieren und die globale Kommunikation verringern kann. Wenn wir das tun, kann unsere Bandbreitennutzung mit der Ebene der Berechnung skalieren, die wir uns hier wünschen.

(1:48:12) Wir wollten das Ganze von oben nach unten angehen und alle Engpässe auf jeder dieser Ebenen beseitigen. Starten wir diese Reise von innen nach außen, beginnend mit dem Chip. Wie ich beschrieben habe, haben Chips Rechenelemente. Unsere kleinste Maßeinheit wird als Trainingsknoten bezeichnet. Und die Wahl dieses Knotens ist sehr wichtig, um eine nahtlose Skalierung zu gewährleisten. Wenn Sie ihn zu klein wählen, wird er schnell laufen. Aber die Verwaltungsdaten der Synchronisation wird die Software ausschalten, wird dominieren. Wählt man einen zu großen Knoten, wird die Implementierung in der realen Hardware komplexer und es kommt zu Engpässen im Speicher. Wir wollten die Latenz und die Bandbreite als primären Optimierungspunkt angehen. Schauen wir uns an, wie wir das gemacht haben.

Wir haben den weitesten Weg gewählt, den ein Signal in einem sehr hohen Taktzyklus zurücklegen kann, in diesem Fall 2 Gigahertz und mehr, und haben einen Rahmen darum gezogen. Das ist die kleinste Latenzzeit, die ein Signal in einem Zyklus bei einer sehr hohen Frequenz zurücklegen kann. Und dann haben wir die Box bis zum Rand mit Drähten gefüllt. Das ist die höchste Bandbreite, mit der man die Box füttern kann. Dann fügten wir darunter Recheneinheiten für maschinelles Lernen hinzu, dann einen großen Pool von SRAM und zu guter Letzt einen programmierbaren Kern zur Steuerung. So erhielten wir unseren leistungsstarken Trainingsknoten.
Dabei handelt es sich um eine superskalare 64-Bit-CPU, die auf Matrix-Multiplikationseinheiten und Vektor-SIMD optimiert ist. Sie unterstützt Floating Point 32, bfloat 16 und ein neues Format CFP8, konfigurierbares FP8. Unterstützt wird sie durch eineinviertel Megabyte schnellen ECC-geschützten SRAM und die von uns entwickelte Struktur mit geringer Latenz und hoher Bandbreite. Dies mag unsere kleinste Einheit sein, aber sie hat es in sich: mehr als ein Teraflop an Rechenleistung in unserer kleinsten Einheit der Skala.

(1:50:31) Schauen wir uns also die Architektur dieses Systems an. Die Computerarchitekten unter uns werden das vielleicht erkennen. Sie werden sehen, dass dies eine ziemlich fähige Architektur ist. Es handelt sich um eine superskalare In-Order-CPU mit 4 breiten skalaren und 2 breiten vektoriellen Leitungen. Wir nennen sie ‚in-order‘, obwohl die Vektor- und Skalar-Pipes außer Betrieb (out of order) gehen können – aber für die Puristen nennen wir sie trotzdem ‚in-order‘. Sie hat außerdem ein 4-Wege-Multithreading. Dies erhöht die Auslastung, da wir gleichzeitig Berechnungen und Datenübertragungen durchführen können. Und unsere benutzerdefinierte ISA, d. h. die Befehlssatzarchitektur, ist vollständig für maschinelle Lernprozesse optimiert. Sie verfügt über Funktionen wie Transpose, Gathering, Link Traversals, Broadcast, um nur einige zu nennen.
Selbst im physischen Bereich haben wir sie extrem modular gestaltet, so dass wir diese Trainingsknoten in jede beliebige Richtung ausrichten und die von uns anvisierte Rechenebene bilden können. Wenn wir 354 dieser Trainingsknoten zusammengefügt haben, erhalten wir unser Compute Array. Es ist in der Lage, 362 Teraflops an Rechenleistung für maschinelles Lernen zu liefern. Und natürlich die hohe Bandbreite, mit der diese miteinander verbunden sind.
Dieses Compute Array haben wir mit Hochgeschwindigkeits-SerDes mit niedrigem Stromverbrauch umgeben – 576 Stück -, um eine extreme E/A-Bandbreite aus diesem Chip herauszuholen. Zum Vergleich: Die Bandbreite ist mehr als doppelt so groß wie die der modernsten Netzwerk-Switch-Chips, die heute auf dem Markt sind, und Netzwerke, die als Goldstandard für E/A-Bandbreite gelten.

(1:52:29) Wenn wir das alles zusammennehmen, erhalten wir einen trainingsoptimierten Chip, unseren D1-Chip. Dieser Chip wird in 7-Nanometer-Technologie hergestellt und enthält 50 Milliarden Transistoren auf einer Fläche von nur 645 Quadratmillimetern. Sie werden feststellen, dass 100 % der Fläche hier für das Training von maschinellem Lernen und die Bandbreite verwendet werden. Es gibt kein dunkles Silizium, es gibt keine Unterstützung für alte Systeme. Dies ist eine Maschine speziell für maschinelles Lernen.

Und dies ist der D1-Chip in einem Flip-Chip-BGA-Gehäuse. Dieser Chip wurde vollständig vom Tesla-Team intern entwickelt, von der Architektur bis hin zu GDS OUT und dem Gehäuse. Dieser Chip ist wie ein GPU-Rechner mit einer Flexibilität auf CPU-Ebene und der doppelten E/A-Bandbreite auf Netzwerkchipebene. Wenn ich die E/A-Bandbreite auf einer vertikalen Skala entsprechend der Teraflops an Rechenleistung eintrage, die in den modernsten Chips für maschinelles Lernen verfügbar sind, einschließlich einiger Start-ups, können Sie leicht erkennen, warum unser Design alles übertrifft.

(1:53:56) Da wir nun diesen grundlegenden physikalischen Baustein haben: Wie können wir das System um ihn herum gestalten? Schauen wir mal. Da D1-Chips nahtlos und ohne Klebstoff miteinander verbunden werden können, haben wir einfach angefangen, sie zusammenzusetzen. Wir haben einfach 500.000 Trainingsknoten zusammengesetzt, um unsere Berechnungsebene zu bilden. Das sind 1500 D1-Chips, die nahtlos miteinander verbunden sind.

Und dann fügen wir Dojo-Schnittstellenprozessoren an jedem Ende hinzu. Dies ist die Host-Brücke zu typischen Hosts in den Rechenzentren. Sie ist über PCIe Gen4 auf einer Seite mit einer Struktur mit hoher Bandbreite mit unserer Computerebene verbunden. Die Schnittstellenprozessoren bieten nicht nur die Host-Brücke, sondern auch einen gemeinsamen DRAM-Speicher mit hoher Bandbreite für die Rechenebene. Darüber hinaus können die Schnittstellenprozessoren auch eine höhere Radix-Netzwerkverbindung ermöglichen.
Um diese Rechenebene zu erreichen, mussten wir einen neuen Weg finden, diese Chips zusammen zu integrieren. Und das ist es, was wir als Trainingskachel bezeichnen. Dies ist die Maßstabseinheit für unser System. Es handelt sich um eine bahnbrechende Integration von 25 D1-Kacheln auf einem Fan-out-Wafer-Prozess, der so eng integriert ist, dass die Bandbreite zwischen ihnen erhalten bleibt; die maximale Bandbreite bleibt erhalten. Darüber hinaus haben wir einen Steckverbinder entwickelt, einen Steckverbinder mit hoher Bandbreite und hoher Dichte, der die Bandbreite dieser Trainingskachel aufrecht erhält.

(1:56:00) Diese Kachel bietet uns 9 Petaflops Rechenleistung mit einer enormen E/A-Bandbreite. Dies ist vielleicht das größte organische MCMm in der Chipindustrie – ein Multi-Chip-Modul. Es war nicht einfach, dies zu entwerfen, denn es gab keine Tools, die wir nutzen konnten – sie gaben alle den Geist auf. Selbst unser Compute-Cluster konnte das nicht bewältigen. Unsere Ingenieure haben verschiedene Lösungsansätze gefunden. Sie haben neue Methoden entwickelt, um dies zu verwirklichen.
Nun, da wir unsere Compute-Plane-Kachel mit E/As mit hoher Bandbreite hatten, mussten wir sie mit Strom versorgen. Und hier haben wir einen neuen Weg gefunden, um die Stromversorgung vertikal zu gewährleisten. Wir haben ein anwendungsspezifisches Spannungsreglermodul entwickelt, das direkt auf diesen Fan-out-Wafer aufgesetzt werden kann. Wir haben also ein Chip-Paket entwickelt und die Reflow-Technologie auf PCB-Ebene auf die Fan-out-Wafer-Technologie übertragen. Das ist schon eine Menge Integration, die stattgefunden hat.

Aber es geht noch weiter. Wir haben die gesamten elektrischen, thermischen und mechanischen Teile integriert, um eine voll integrierte Trainingskachel zu erschaffen mit einer Schnittstelle für einen 52-Volt-Gleichstromeingang. Das ist beispiellos. Das ist ein erstaunliches Stück Technik. Unsere Rechnerebene ist völlig unabhängig von der Stromversorgung und der Kühlung. Das macht Rechenebenen mit hoher Bandbreite möglich. Das ist dann eine 9-Petaflop-Trainingskachel, die zur Maßstabseinheit für unser System wird. Und das ist real.

Ich kann nicht glauben, dass ich hier neun Petaflops in den Händen halte. Und in der Tat haben wir letzte Woche unsere erste funktionierende Trainingskachel mit begrenzter Kühlung unter Laborbedingungen installiert. Wir haben einige Netzwerke zum Laufen gebracht. Und mir wurde gesagt, dass Andrej nicht glaubt, dass wir Netzwerke laufen lassen können, bevor wir nicht eine seiner Kreationen laufen lassen können. Andrej, das ist minGPT2, das auf Dojo läuft. Kannst du das glauben?
(1:59:12) Nächster Schritt: Wie kann man daraus einen Compute-Cluster bilden? Inzwischen haben Sie sicher erkannt, dass wir ziemlich stark auf Modularität setzen. Wir stellen einfach ein paar Kacheln zusammen, wir kacheln einfach Kacheln zusammen. Zwei mal drei Kacheln in einem Fach bilden unsere Trainingsmatrix, und zwei Fächer in einem Schrank ergeben 100 Petaflops an Rechenleistung.
Haben wir hier aufgehört? Nein. Wir haben einfach nahtlos integriert; wir haben die Schrankwände durchbrochen. Wir haben diese Kacheln nahtlos integriert, ohne die Bandbreite zu beeinträchtigen; es gibt hier keine Bandbreitentrennung, es gibt keine enge Bandbreite. Alle Kacheln sind nahtlos mit der gleichen Bandbreite verbunden. Und damit haben wir ein ExaPOD. Das ist ein Exaflop an Rechenleistung in 10 Schränken. Das sind mehr als eine Million Trainingsknoten, die Sie gesehen haben. Wir haben diesen Trainingsknoten sehr genau beobachtet, und es gibt hier draußen 1 Million Knoten mit einheitlicher Bandbreite.

Nicht nur die Hardware, sondern auch die Software ist wichtig, um die Skalierung zu gewährleisten. Und nicht jeder Auftrag erfordert einen riesigen Cluster. Deshalb planen wir das von Anfang an mit ein. Unsere Berechnungsebene kann unterteilt werden in Einheiten, die Dojo Processing Unit genannt werden. Eine DPU besteht aus einem oder mehreren D1-Chips. Sie enthält auch unseren Schnittstellenprozessor und einen oder mehrere Hosts. Sie kann je nach den Anforderungen eines beliebigen Algorithmus oder eines beliebigen Netzwerks, das darauf läuft, nach oben oder unten skaliert werden.
(2:01:26) Was muss der Benutzer tun? Er muss seine Skripte nur minimal ändern. Und das liegt an unserer starken Compiler-Suite. Sie kümmert sich um detaillierte Parallelität und bildet die neuronalen Netze sehr effizient auf unserer Rechenebene ab.

Unser Compiler verwendet mehrere Techniken zur Extraktion von Parallelität. Er kann die Netzwerke umwandeln, um mit Hilfe von Datenmodell- und Graphparallelitätstechniken nicht nur eine detaillierte Parallelität zu erreichen, sondern auch Optimierungen vorzunehmen, um den Speicherbedarf zu verringern.
Eine Sache, die aufgrund der hohen Bandbreite dieser Struktur hier möglich ist, ist, dass die Modellparallelität nicht auf das gleiche Niveau erweitert werden konnte, wie wir es können. Sie war auf die Grenzen der Chips beschränkt. Aufgrund unserer hohen Bandbreite können wir sie auf Trainingskacheln und darüber hinaus ausdehnen. So lassen sich hier große Netze bei geringer Datenmenge effizient abbilden, ausnutzen und neue Leistungsstufen erschließen.
Darüber hinaus ist unser Compiler in der Lage, dynamische Kontrollflüsse auf hoher Ebene wie Schleifen, ‚if then else‘ usw. zu verarbeiten. Und unser Compiler-Engine ist nur ein Teil unserer gesamten Software-Suite. Der Stack besteht aus einer Erweiterung von PyTorch, was dieselben Benutzerschnittstellen gewährleistet, die ML-Wissenschaftler gewohnt sind.
Unser Compiler generiert Code im laufenden Betrieb, so dass er für eine spätere Ausführung wiederverwendet werden kann. Er verfügt über ein LLVM-Backend, das die Binärdateien für die Hardware erzeugt. Dadurch wird sichergestellt, dass wir optimierten Code für die Hardware erstellen können, ohne auch nur eine einzige Zeile eines handgeschriebenen Kernels zu benötigen. Unser Treiber-Stack kümmert sich um die Multi-Host-Multi-Partitionierung, die Sie vor ein paar Folien gesehen haben. Und wir haben auch Profiler und Debugger in unserem Software-Stack.

(2:03:49) Mit all dem haben wir also vertikal integriert und die traditionellen Skalierungsbarrieren durchbrochen. Und so haben wir Modularität nach oben und unten im Stack erreicht, um neue Leistungsebenen zu schaffen. Kurz gesagt: Dies wird der schnellste KI-Trainingscomputer sein, mit vierfacher Leistung bei gleichen Kosten, 1,3-fach besserer Leistung pro Watt – also energiesparend – und 5-fach geringerem Platzbedarf. Das wird der Dojo-Computer sein.
Wir sind noch nicht fertig. Schon bald werden wir unsere ersten Schränke zusammenbauen. Und wir haben bereits die nächste Generation geplant. Wir denken bereits über das Zehnfache nach, mit den verschiedenen Aspekten, die wir den ganzen Weg vom Silizium bis zum System wiederholen können. Wir werden diese Reise wieder antreten. Für all diese Bereiche suchen wir händeringend nach Mitarbeitern. Ich danke Ihnen vielmals.

Und als Nächstes wird Elon uns darüber informieren, was über unsere Fahrzeugflotte hinaus in der KI steckt. (2:05:22)