stas00/ml-engineering: ein Erfahrungsbuch für das Training großer Modelle, kein Framework
Machine Learning Engineering Open Book
Auf einen Blick
- Was ist das?
- Das Repository sammelt Methoden, Skripte und Kommandos aus den Trainings von BLOOM-176B, IDEFICS-80B und RAG-Systemen. Wer eine Bibliothek zum Installieren sucht, ist hier falsch; wer nach dem vierten hängenden NCCL-Job eine Antwort braucht, richtig.
- Für wen ist es gedacht?
- Wer verteiltes Training auf mehreren Knoten betreibt und die Fehlerbilder von NCCL, SLURM und PyTorch bereits kennt, findet hier die Kommandos, die sonst nur in Chat-Threads kursieren. Wer eine installierbare Abstraktion über PyTorch sucht, sollte zu torchrun, DeepSpeed oder Lightning greifen; dieses Repository liefert keine davon.
- Darf ich es kommerziell nutzen?
- Ja, mit Namensnennung. CC-BY-SA-4.0 erlaubt die kommerzielle Nutzung, wenn Sie die Urheber nennen und Ihre Änderungen kennzeichnen. Die Lizenz ist für kreative Inhalte gedacht; prüfen Sie daher, wie sie für Code gilt.
- Wird es noch gepflegt?
- Ja. Die letzten Commits kamen vor 4 Tagen.
- In welcher Sprache ist es geschrieben?
- Hauptsächlich Python, laut der Sprachstatistik von GitHub.
Die Antworten beruhen auf den GitHub-Daten des Projekts (zuletzt abgeglichen am 15. September 2026) und auf unserer Analyse. Sie sind keine Rechtsberatung.
TIEFGEHENDE OPEN-SOURCE-ANALYSE
Ein Buch, das sich als Repository verkleidet
Die README beginnt mit einem Satz, der den Charakter der Sammlung festlegt: "This is an open collection of methodologies, tools and step by step instructions". Das ist wörtlich zu nehmen. Es gibt kein setup.py für einen Nutzer, keine importierbare Bibliothek, keine Versionierung von APIs. Die Primärsprache ist Python, aber das liegt an den enthaltenen Diagnoseskripten, nicht an einem Paket. Die Ordnerstruktur folgt einer Buchgliederung: insights, compute, storage, network, orchestration, training, inference, debug, testing, resources. Wer eine Abhängigkeit in die requirements.txt aufnehmen will, wird in dieser Struktur nichts finden. Wer verstehen will, warum ein Job auf acht Knoten langsamer läuft als auf vier, findet in network und compute die Tabellen, die zur Diagnose nötig sind. Der Autor beschreibt die Sammlung selbst als "an ongoing brain dump of my experiences", entstanden beim Training von BLOOM-176B und IDEFICS-80B sowie bei RAG-Arbeiten. Das erklärt, warum die Tiefe ungleich verteilt ist: Hardware- und Netzwerkkapitel sind detailliert, weil dort die teuren Fehler passieren.
Zielgruppe sind Operatoren, nicht Anwender
Die README adressiert "LLM/VLM training engineers and operators" und verspricht "lots of scripts and copy-n-paste commands". Diese Zielgruppenangabe ist eng. Ein Data Scientist, der ein vortrainiertes Modell für eine Klassifikationsaufgabe finetuned, wird mit den Kapiteln zu SLURM, InfiniBand-Topologien und Shared Filesystems wenig anfangen. Der Nutzen skaliert mit der Zahl der GPUs: ab dem Punkt, an dem ein einzelner Knoten nicht mehr ausreicht und Kommunikation über das Netzwerk zum Flaschenhals wird, werden die Abschnitte zu intra- und inter-node networking relevant. Die Table of Contents führt das explizit als getrennte Themen, mit Verweis auf Vergleichstabellen für theoretische Inter- und Intra-Node-Geschwindigkeit. Das ist ein Hinweis darauf, wo der Autor den häufigsten Fehler vermutet: nicht in der Modellarchitektur, sondern in der Annahme, das Netzwerk sei schnell genug.
Was tatsächlich an ausführbarem Material vorhanden ist
Der Abschnitt Shortcuts listet konkrete Dateien auf, die sich direkt verwenden lassen. all_reduce_bench.py im Ordner network/benchmarks wird als "a much easier way to benchmark network throughput than nccl-tests" beschrieben. torch-distributed-gpu-test.py unter debug/ dient laut README dazu, "your inter-node connectivity" schnell zu prüfen. mamf-finder.py unter compute/accelerator/benchmarks beantwortet die Frage, welche TFLOPS sich real aus einer Beschleunigerkarte holen lassen. Das sind drei Werkzeuge mit klar umrissener Aufgabe. Der Rest der Sammlung besteht aus Anleitungen, etwa debugging pytorch applications mit "quick copy-n-paste solutions to resolve hanging or breaking pytorch applications", einer SLURM-Cheatsheet für Nutzer und einer Anleitung zum Erzeugen winziger Modelle, Tokenizer und Datensätze für schnellere Debug-Zyklen. Wer aus diesem Repository ein Produkt bauen will, wird enttäuscht; wer ein Problem eingrenzen will, bekommt pro Problem in der Regel genau ein Skript oder eine Kommandofolge.
Der Weg zur Laufzeit führt über Klonen und Lesen
Es gibt keine Installationsanweisung, weil es nichts zu installieren gibt. Der praktische Ablauf ist: Repository klonen, in den betreffenden Ordner wechseln, das Skript mit den Abhängigkeiten ausführen, die im jeweiligen Kapitel genannt werden. Für die Ebook-Versionen verweist die README auf zwei fertige Downloads auf dem HuggingFace-Hub, eine PDF und eine EPUB, mit dem Hinweis, dass diese "once in a few weeks" neu gebaut werden und die Bauanleitung im Ordner build liegt. Wer die aktuellste Fassung braucht, liest also die Markdown-Dateien im Repository statt der Ebooks. Ein Punkt, der in der Materiallage auffällt: es gibt keine abgerufenen Releases. Das Repository wird über Commits auf dem master-Branch gepflegt, nicht über versionierte Schnappschüsse. Für ein Nachschlagewerk ist das vertretbar, für Code, den man in eine CI einbinden will, ist es eine Einschränkung, die man vorher kennen sollte.
Ein Buch mit einem Autor und ohne Release-Zyklus
Die Wartung hängt an einer Person. Der Autor kündigt Aktualisierungen über einen Twitter-Kanal an und verweist für Diskussionen auf den Discussions-Bereich des Repositories. Es gibt keine abgerufenen Releases, also auch keine Changelogs, an denen sich ein Upgrade festmachen ließe. Das ist die zentrale Betriebsfrage: Wer Skripte aus diesem Repository in eine eigene Pipeline kopiert, übernimmt damit auch die Verantwortung für deren Pflege, denn es gibt keinen Versionsvertrag. Umgekehrt bedeutet das Fehlen von Releases, dass sich nichts still ändern kann, ohne im Commit-Verlauf sichtbar zu sein. Die Lizenz ist CC-BY-SA-4.0, eine Creative-Commons-Lizenz mit Namensnennung und Share-Alike. Das ist für ein Buch naheliegend und für kopierte Codeausschnitte in einem proprietären Produkt ein Punkt, den man vor der Übernahme klären sollte; eine rechtliche Bewertung kann dieser Text nicht leisten. Wer die Skripte nur lokal zur Diagnose ausführt, berührt diese Frage ohnehin nicht.
Wo das Material an seine Grenzen stößt
Die README nennt keine Versionen der behandelten Software. Das ist die größte Schwäche für einen Leser im Jahr nach der Veröffentlichung: Kommandos für SLURM, PyTorch und die verteilte Initialisierung ändern sich, und ein Buch, das aus Erfahrung statt aus einer Versionsmatrix entsteht, altert an genau diesen Stellen. Der Autor schreibt selbst, er habe das Material "mostly for myself" zusammengestellt, damit er bereits recherchierte Lösungen schnell wiederfindet. Diese Herkunft erklärt den Ton und die Auswahl, sie erklärt aber auch, warum es keine systematische Abdeckung gibt. Ein weiterer Punkt: die README verweist auf die eigene Debugging-Sammlung und ein Python-Cookbook als Schwesterprojekte. Wer wissen will, welche Inhalte dort statt hier liegen, muss den Links folgen. Und schließlich ist der Ansatz grundsätzlich reaktiv. Das Repository erklärt, wie man einen hängenden Job diagnostiziert, nicht wie man eine Trainingsinfrastruktur entwirft, die gar nicht erst hängt. Wer Planungssicherheit für ein neues Cluster sucht, findet hier Erfahrungswerte, aber keine Garantien.
Was man stattdessen nimmt, und wann
Für das Ausführen verteilter Trainingsjobs gibt es Alternativen mit anderem Ansatz: torchrun als Teil von PyTorch startet Prozesse über einen festen Kommandozeilenaufruf, DeepSpeed kapselt Optimierungen wie ZeRO hinter einer Konfigurationsdatei, PyTorch Lightning abstrahiert die Trainingsschleife hinter einem Trainer-Objekt. Diese Projekte liefern eine API, eine Versionsnummer und einen Upgrade-Pfad. Der Unterschied zu ml-engineering ist grundsätzlich: dort bekommt man eine Schnittstelle, hier bekommt man eine Erklärung, warum die Schnittstelle unter Last zusammenbricht. Das schließt sich nicht aus. Man kann torchrun verwenden und bei einem Hänger in debug/pytorch.md nachsehen. Aber wer erwartet, dass ml-engineering die Rolle eines dieser Frameworks übernimmt, wird die falsche Datei öffnen. Die Entscheidung lautet nicht entweder oder, sondern: Framework für den Normalbetrieb, dieses Repository für den Ausnahmefall.
Ein Hinweis auf die KI-Agenten-Datei
Am Ende der README steht ein Abschnitt, der in einem Buchprojekt zunächst überrascht: der Autor pflegt eine SKILL.md, mit der sich einem KI-Agenten beibringen lässt, große Modelle besser zu trainieren und zu betreiben, ergänzt um zwei Schwesterdateien aus den anderen Projekten. Das ist bemerkenswert, weil es die Sammlung von einem reinen Lesetext zu einer Wissensquelle macht, die sich in Werkzeuge einspeisen lässt. Ob das in der Praxis trägt, lässt sich aus der Materiallage nicht beurteilen; es gibt keine Angaben dazu, wie die Datei aufgebaut ist oder wie sie getestet wurde. Wer diesen Weg gehen will, sollte die Datei vorher selbst lesen, statt sich auf die Beschreibung zu verlassen. Für die Frage, ob das Repository adoptiert wird, ist dieser Teil zweitrangig, aber er zeigt, wie der Autor die Sammlung positioniert: als destilliertes Wissen, das auch außerhalb eines Browserfensters nutzbar sein soll.
Redaktionelles Fazit
Wer verteiltes Training auf mehreren Knoten betreibt und die Fehlerbilder von NCCL, SLURM und PyTorch bereits kennt, findet hier die Kommandos, die sonst nur in Chat-Threads kursieren. Wer eine installierbare Abstraktion über PyTorch sucht, sollte zu torchrun, DeepSpeed oder Lightning greifen; dieses Repository liefert keine davon. Vor dem ersten Einsatz lohnt sich ein Blick in compute/accelerator/benchmarks/mamf-finder.py und network/benchmarks/all_reduce_bench.py: nur wenn die dort gemessenen Werte von den theoretischen Tabellen abweichen, ist die Lektüre der jeweiligen Kapitel überhaupt relevant.
Community-Notizen