Training: Experimente, Compute und Cloud-Maschinen

Jeden Run verfolgen. Auf eigenen GPUs trainieren.

Experiment-Tracking in der Tiefe eines spezialisierten Trackers und ein Scheduler, der denselben Code auf Ihrem Kubernetes-Cluster, einer einzelnen GPU-Workstation oder stundenweise gemieteten Maschinen ausführt. Jeder Job endet als Run mit Kosten und vollständigem Log.

Die Run-Seite eines Projekts zur Triage von Röntgenaufnahmen: Trainingsverlust und Validierungs-AUC der zehn neuesten Runs.

Experiment-Tracking

euvyra.init() hält Konfiguration, Git-Commit samt Diff-Hash, Paketversionen und Systemlast fest. Alles Weitere loggen Sie dazu.

  • Runs und Metriken

    Live-Metriken pro Schritt, GPU- und CPU-Last, Tags, Notizen, Gruppen und Job-Typen. Abgestürzte Runs werden als solche markiert, fortgesetzte Runs zählen die Schritte weiter.

  • Medien

    Bilder, Audio, Video, HTML in einer Sandbox, Histogramme, Plots, Tabellen und Konfusionsmatrizen, außerdem 3D-Modelle, Punktwolken mit Boxen und Moleküle.

  • Diagramme über viele Runs

    Beliebige Runs nebeneinander vergleichen und Diagramm-Layouts als Arbeitsbereiche speichern, für das Projekt oder nur für Sie. Eigene Vega-Lite-Diagramme können nichts von einer URL laden.

  • Berichte

    Dokumente aus Markdown, Diagrammen, Run-Tabellen, Medien, Sweeps und Herkunftsgraphen, die beim Öffnen aktuelle Zahlen zeigen und von mehreren Personen gleichzeitig bearbeitet werden.

  • Sweeps

    Raster-, Zufalls- und Bayes-Suche (Tree-structured Parzen Estimator) mit frühem Abbruch nach Hyperband-Art. Parameterdateien nutzen das W&B-Format, bestehende Sweeps laufen weiter.

  • Artefakte und Herkunft

    Versionierte Artefakte mit Aliasen wie best oder production und ein Herkunftsgraph von der Datensatzversion über Run und Modellversion bis zum Release.

  • Daten bleiben in Ihren Buckets

    Verweise auf Dateien in S3, Google Cloud Storage, Azure, per HTTPS oder im Dateisystem. EUVYRA speichert das Manifest mit Prüfsummen und liest die Dateien nie.

  • Modellgraphen

    Die Struktur von PyTorch-, Keras-3- und ONNX-Modellen oder eines safetensors-Checkpoints, nur aus dessen Header gelesen, mit dem Datenfluss zwischen den Schichten.

  • Offline und Integrationen

    Auf einer Maschine ohne Netz loggen und später synchronisieren. Callbacks für Hugging Face, Lightning, Keras, XGBoost, LightGBM und scikit-learn.

Ihre GPUs holen sich die Arbeit. Niemand greift in Ihr Netz.

Ein Agent läuft direkt bei der Hardware: in einem eigenen Kubernetes-Namespace mit Rechten nur für diesen Namespace oder als systemd-Dienst auf einem einzelnen Docker-Host wie einer DGX Spark. Er meldet seine freie Kapazität, übernimmt passende Jobs aus der Warteschlange, startet sie und berichtet Zustand und Logs. Der Cluster braucht weder eingehenden Zugriff noch VPN.

  • Warteschlangen und Kontingente. Prioritäten pro Job, GPU-Stunden pro Monat und parallele Jobs pro Projekt sowie die erlaubten Ziele.
  • Kosten pro Run. Laufzeit mal Stunden- und GPU-Preis des Ziels, am Job und in der Run-Zusammenfassung.
  • Training über mehrere Knoten. Ein Job mit nodes: 4 wird zu vier Pods mit NNODES, NODE_RANK und MASTER_ADDR für torchrun.
  • Sweeps als Jobs. Jeder Job holt sich seine Konfiguration erst beim Start, die Bayes-Suche lernt also laufend weiter.
  • Eine Seite pro Cluster. Knoten, GPUs mit Auslastung, Speicher, Temperatur und Leistung, sieben Tage Verlauf, Wartungsmodus und ausgeschlossene Knoten.
Die Seite einer GPU-Maschine: eine NVIDIA GB10 mit 61 Prozent Auslastung durch einen Modell-Endpunkt, dazu CPU- und Speicherbelegung.

Was beim Start eines Jobs passiert

Der Trainingscode bleibt derselbe wie auf dem Laptop. Der Agent gibt dem Container alles mit, was euvyra.init() braucht, um sich an den Run des Jobs zu hängen.

  1. In die Warteschlange stellen

    Über die CLI, das Python-SDK, die Konsole oder einen KI-Assistenten.

    euvyra launch --project medical-ai \
      --image registry.example.eu/ml/train:1.4 \
      --gpus 1 --wait -- python train.py
  2. Ein Agent übernimmt

    Der erste Agent mit genug freier Kapazität oder das Ziel, das Sie angegeben haben. Ein Job mit GPU-Typ geht nur an Ziele, die diesen Typ haben.

  3. EUVYRA bereitet den Run vor

    Es legt den Run mit der Konfiguration des Jobs an und erzeugt einen API-Schlüssel nur für dieses Projekt, der mit dem Timeout des Jobs abläuft und bei dessen Ende widerrufen wird.

  4. Der Container trainiert

    Auf Kubernetes als Job, dessen Schlüssel in einem Secret liegt, mit Requests gleich Limits, ohne Rechteausweitung und ohne Service-Account-Token. Auf Docker mit ganzen GPUs pro Job.

  5. Der Datensatz ist vollständig

    Status, Exit-Code, GPU-Stunden, Kosten und das vollständige Container-Log hängen am Run, und die Änderung steht im Audit-Log.

Cloud-Maschinen innerhalb eines Budgets

Sind die eigenen GPUs belegt, bestellt EUVYRA auf Wunsch selbst Maschinen. Eine bestellte Maschine installiert beim ersten Start Docker, den NVIDIA-Treiber und den Agenten und verhält sich danach wie jedes andere Ziel. Ein Pool bestellt Maschinen, solange ihm zugewiesene Jobs oder Endpunkte warten, und löscht sie, sobald sie leer laufen. Eine GPU kostet also nur Geld, solange es Arbeit für sie gibt.

Anbieter und standardmäßig angebotene Regionen
AnbieterStandardregionenGPUs
Hetzner CloudFalkenstein, Nürnberg, HelsinkiÜber die Cloud-API nur CPU; dedizierte GPU-Server von Hetzner kommen per Installationsskript hinzu
ScalewayParis, Amsterdam, WarschauL4, L40S, H100, RTX 6000 und weitere
OVHcloudGravelines, Straßburg, Frankfurt, WarschauL4, L40S, A100, H100, V100
AWSFrankfurt, Irland, Paris, Stockholm, Mailand, Spanieng4dn, g5, g6, g6e, p4d, p5 und neuer
Google CloudNiederlande, Belgien, Frankfurt, Paris, Finnland, WarschauL4, A100, H100

Grenzen, die ein Mensch festlegt

  • Ein Monatsbudget pro Cloud-Konto. Vor jeder Bestellung rechnet EUVYRA die Ausgaben des Monats zusammen und lehnt ab, was das Budget überschreiten würde. Ist das Budget aufgebraucht, laufen die Maschinen leer und werden gelöscht.
  • Eine Höchstzahl an Maschinen pro Konto und pro Pool, eine Leerlaufzeit, nach der eine Maschine geht, und ein Höchstalter.
  • Regionen außerhalb der EU lassen sich einem Konto hinzufügen, werden aber nie von sich aus angeboten.
  • Maschinen bestellen, Konten verbinden und Pools vergrößern darf nur ein Organisations-Admin, KI-Assistenten nie.

Jede Maschine meldet sich mit einem Bootstrap-Token an, das einmal gilt und nach zwei Stunden verfällt. Was der Metadatendienst eines Anbieters von den Startdaten zeigt, ist danach wertlos. Zugangsdaten der Anbieter werden verschlüsselt gespeichert, nie von der API zurückgegeben und nie an eine Maschine geschickt.

Fragen zum Training

Muss unser Cluster von EUVYRA aus erreichbar sein?

Nein. Der Agent baut die Verbindung zu EUVYRA auf und holt sich die Arbeit. Erreichbar sein müssen nur Modell-Endpunkte, die das Gateway aufruft.

Müssen wir unseren Trainingscode ändern?

Nicht, um ihn als Job laufen zu lassen: Auch Container ohne SDK bekommen einen Run mit Status, Laufzeit, Exit-Code, Kosten und Log. Mit euvyra.init() kommen Metriken, Medien und Herkunft dazu.

Können wir unsere W&B-Sweep-Dateien weiter nutzen?

Ja. Sweep-Parameter folgen dem W&B-Format, einschließlich log_uniform_values und der Hyperband-Einstellungen, und euvyra sweep create sweep.yaml liest sie ein.

Auf welcher Hardware lief das schon?

Der Kubernetes-Weg lief vollständig auf einem k3s-Cluster, der Docker-Weg mit GPU-Jobs auf einer NVIDIA DGX Spark (GB10), während vLLM auf derselben Maschine Modelle bereitstellte. Agent-Images gibt es für amd64 und arm64.