mehreren – chatgpz.de – KI-Tools & Praxiswissen https://chatgpz.de Unabhängige Tests, Anleitungen und Hintergründe zu KI-Tools. Wed, 25 Mar 2026 03:44:35 +0000 de-DE hourly 1 https://wordpress.org/?v=6.4.2 234900186 ChatLLM-Rezension: Haben Sie genug von mehreren KI-Instruments? Hier ist eine intelligentere All-in-One-Various https://chatgpz.de/data-analytics/chatllm-rezension-haben-sie-genug-von-mehreren-ki-instruments-hier-ist-eine-intelligentere-all-in-one-various/ https://chatgpz.de/data-analytics/chatllm-rezension-haben-sie-genug-von-mehreren-ki-instruments-hier-ist-eine-intelligentere-all-in-one-various/#respond Wed, 25 Mar 2026 03:44:35 +0000 https://chatgpz.de/data-analytics/chatllm-rezension-haben-sie-genug-von-mehreren-ki-tools-hier-ist-eine-intelligentere-all-in-one-alternative/ [ad_1]

Gesponserte Inhalte

ChatLLM-Rezension: Haben Sie genug von mehreren KI-Tools? Hier ist eine intelligentere All-in-One-Alternative

ChatLLM von Abacus AI verfolgt einen anderen Ansatz. Anstatt mit einzelnen Instruments zu konkurrieren, werden diese in einem einzigen Arbeitsbereich gebündelt, der das Schreiben, Codieren, die Bilderzeugung, die Videoerstellung und sogar autonome Arbeitsabläufe übernimmt.

ChatLLM basiert auf einer produktionstauglichen KI-Plattform und ist nicht nur ein weiterer Chatbot – es ist als einheitliches System konzipiert, das den Werkzeugwechsel reduziert und die Einbindung von KI in die reale Arbeit vereinfacht.

TL;DR – Das einzige Abonnement, das Ihren KI-Workflow vereinfacht

  • Eine Plattform für Textual content, Code, Bilder, Movies und Agenten
  • Wählt automatisch das beste Modell aus (kein manueller Wechsel)
  • Beginnt bei 10 $/Monat mit 20.000 Credit
  • Kann als Various zu Instruments wie ChatGPT, Claude, Midjourney dienen (für die meisten Benutzer)
  • Deep Agent verwaltet mehrstufige Arbeitsabläufe wie Recherche, Präsentationen und Automatisierung
  • Nachteile: Credit score-System, schwere Aufgaben beanspruchen die Nutzung schnell

Wenn Ihr aktueller Arbeitsablauf mehrere Abonnements umfasst, vereinfacht ChatLLM alles.

Was ist ChatLLM und warum reden alle darüber?

Im Kern läuft ChatLLM darauf hinaus: eine zentralisierte KI-Plattform, die das Jonglieren mehrerer Abonnements überflüssig macht.

Im Gegensatz zu eigenständigen Instruments ChatLLM abacus ai basiert auf einer breiteren Infrastruktur, die für reale Arbeitsabläufe und nicht nur für gelegentliche Eingabeaufforderungen konzipiert ist. Dieser Unterschied wird deutlich, sobald Sie mit der Nutzung beginnen.

Anstatt manuell zwischen Modellen zum Schreiben, Codieren oder Recherchieren auszuwählen, führt die Plattform etwas ein, das „Route LLM“ genannt wird. Stellen Sie sich das wie einen intelligenten Router vor – er analysiert Ihre Eingaben und entscheidet, welches Modell die Aufgabe übernehmen soll.

Erster Eindruck: Weniger wie ein Chatbot, eher wie ein Kontrollzentrum

Bei den meisten KI-Instruments geht es nach einer Weile ähnlich: Eingabeaufforderung, Antwort.

ChatLLM fühlt sich anders an.

Die Benutzeroberfläche ist vertraut genug (denken Sie an ein Structure im ChatGPT-Stil), aber der eigentliche Wandel liegt unter der Haube:

  • Sie müssen Modelle nicht manuell auswählen
  • Sie benötigen keine separaten Instruments für Bilder oder Movies
  • Sie müssen Arbeitsabläufe nicht extern verwalten

Alles ist von einem Ort aus zugänglich.

Dies allein beseitigt eine Menge Reibung, insbesondere wenn Sie den ganzen Tag zwischen Werkzeugen wechseln.

Die Kernfunktion, die wirklich zählt: Route LLM

Abakus

Hier wird es interessant.

Anstatt zu fragen: „Welches Modell soll ich verwenden?“, beantwortet ChatLLM das für Sie.

Das integrierte Routing-System namens RouteLLM führt automatisch Folgendes durch:

  • Analysiert Ihre Eingabeaufforderung
  • Bestimmt die Komplexität
  • Wählt das am besten geeignete Modell aus

Zum Beispiel:

  • Einfache Abfragen → schnellere, günstigere Modelle
  • Codierungsaufgaben → optimierte Codierungsmodelle
  • Komplexes Denken → Hochleistungsmodelle

In der Praxis wird dadurch einer der größten versteckten Kosten beim Einsatz von KI beseitigt: Entscheidungsmüdigkeit.

Und überraschenderweise funktioniert es die meiste Zeit intestine.

Wie ChatLLM alltägliche KI-Aufgaben bewältigt

Schreiben und Erstellen von Inhalten

Mithilfe der integrierten Humanisierungsfunktionen können Sie Artikel erstellen, Inhalte umschreiben oder den Ton anpassen.

Was herausragte:

  • Die Klanganpassung ist flexibel
  • Die Ausgaben fühlen sich im Vergleich zu Customary-LLM-Antworten weniger starr an
  • Nützlich für Web optimization-Content material-Workflows

Codierung und technische Aufgaben

Ich habe grundlegende und fortgeschrittene Codierungsaufforderungen getestet (Python-Skripte, Datenverarbeitung).

Beobachtungen:

  • Das System leitet automatisch an starke Codierungsmodelle weiter
  • Die Ausgabequalität struggle konstant
  • Die modellübergreifende Regeneration lässt sich leicht vergleichen

Für Entwickler entfällt dadurch eine Menge Versuch und Irrtum.

Bilderzeugung (ohne Werkzeugwechsel)

Anstatt eine andere Plattform zu öffnen, können Sie Bilder direkt in ChatLLM generieren.

Was den meisten Benutzern gefallen wird:

  • Zugriff auf mehrere Bildmodelle
  • Gute Kontrolle über die Ausgabe
  • Kein zusätzliches Abonnement erforderlich

Es ist kein Ersatz für spezielle Design-Instruments, aber für die meisten Arbeitsabläufe ist es mehr als ausreichend.

Videoerstellung mit Agenten

Hier geht es über typische KI-Instruments hinaus.

Mit seinem agentenbasierten System können Sie:

  • Konvertieren Sie Bilder in Movies
  • Automatisieren Sie mehrstufige kreative Arbeitsabläufe
  • Generieren Sie Inhalte mit minimalem manuellen Setup

Der entscheidende Unterschied?
Sie geben nicht nur Aufforderungen – Sie geben Anweisungen.

Deep Agent: Die Automatisierungsschicht

Diese Funktion verdient besondere Erwähnung.

Im Gegensatz zu Customary-Chat-Instruments kann der Agent:

  • Unterteilt Aufgaben in Schritte
  • Wählt Werkzeuge automatisch aus
  • Führt mehrstufige Workflows aus

Beispielhafte Anwendungsfälle sind:

  • Recherche und Präsentationserstellung
  • Inhalte, Bilder und Formatierung in einem Fluss
  • Automatisierte Aufgabenausführung

Es ist nicht fehlerfrei, aber es ist derzeit eine der praktischeren Implementierungen von KI-Agenten.

ChatLLM-Preise: Ist es tatsächlich kosteneffektiv?

Lassen Sie uns über die ChatLLM-Preise sprechen, denn hier weckt das Interesse der meisten Menschen.

Anstelle separater Abonnements verwendet ChatLLM ein rechenbasiertes Modell.

Typische Pläne umfassen:

  • Monatliche Rechenguthaben
  • Verwendung für Textual content-, Bild-, Video- und Agentenfunktionen
  • Keine separate Abrechnung professional Funktion

Was das in der Praxis bedeutet:

  • Leichte Aufgaben = niedrige Kosten
  • Schwere Aufgaben (Video/Agenten) = höherer Verbrauch
  • Keine Verschwendung von Ausgaben für ungenutzte Werkzeuge

Hier ein vereinfachter Vergleich:

Werkzeugstapel

Kosten

ChatGPT Plus

$20

Claude Professional

$17

Midjourney-Customary

$30

Andere Instruments (Video, Sprache usw.)

$20–$50

Gesamt

$80–$150/Monat

ChatLLM:
$10–$20/Monat für alles zusammen.

4,4★ von 10.000+ Benutzern? Die ChatLLM-Bewertungen, die Sie überraschen könnten

Bevor Sie einer KI-Plattform vertrauen, erzählen echte Benutzerfeedbacks oft eine ehrlichere Geschichte als Produktseiten oder Demos.

ChatLLM zeigt derzeit:

AbacusAI

Auf den ersten Blick spiegeln diese Zahlen die starke Akzeptanz und das wachsende Interesse an der Plattform wider.

Die aussagekräftigere Bewertung ergibt sich jedoch aus der praktischen Nutzung, der Funktionstiefe und der Frage, wie effektiv sie in reale Arbeitsabläufe passt.

Was sich von Adoptionstrends abhebt

Eine beträchtliche Anzahl von Benutzern hebt einen wesentlichen Vorteil hervor: Konsolidierung.

Anstatt mehrere Abonnements zu verwalten, ermöglicht die Plattform Benutzern Folgendes:

  • Inhalte erstellen
  • Bilder generieren
  • Greifen Sie auf mehrere KI-Modelle zu
  • Erledigen Sie Aufgaben innerhalb einer einzigen Schnittstelle

Dieser Komfort wird in positiven Bewertungen immer wieder erwähnt. Für viele Benutzer liegt der Wert weniger in der Spitzenleistung als vielmehr darin Workflow-Effizienz.

Als großer Vorteil stechen auch Kosteneinsparungen hervor. Benutzer, die von mehreren KI-Instruments wechseln, bemerken häufig sofortige Einsparungen bei den monatlichen Ausgaben.

Vor- und Nachteile (ehrliche Sichtweise)

Vorteile

  • Einheitlicher KI-Arbeitsbereich (größter Vorteil)
  • Intelligentes Modellrouting spart Zeit
  • Multimodale Funktionen an einem Ort
  • Versatile nutzungsbasierte Preisgestaltung
  • Stark für Produktivitätsworkflows

Nachteile

  • Lernkurve für neue Benutzer
  • Schwere Aufgaben können schnell Credit verbrauchen
  • Nicht immer der Klassenbeste professional einzelnem Characteristic
  • Die Arbeitsabläufe der Agenten entwickeln sich immer noch weiter

Wer sollte ChatLLM eigentlich nutzen?

Basierend auf Exams ist dieses Device am sinnvollsten für:

  • Vermarkter, die Inhalte und visuelle Elemente verwalten
  • Entwickler experimentieren mit mehreren Modellen
  • Schöpfer, die formatübergreifend arbeiten
  • Groups versuchen, die Werkzeugvielfalt zu reduzieren

Wenn Ihr Arbeitsablauf einen ständigen Tab-Wechsel beinhaltet, wird dies eine Erleichterung sein.

Endgültiges Urteil: Lohnt sich ChatLLM?

Diese ChatLLM-Rezension läuft auf eine einfache Frage hinaus:

Möchten Sie die besten Einzeltools oder den besten kombinierten Workflow?

ChatLLM ist eindeutig für den Second konzipiert.

Es geht nicht darum, jedes Werkzeug einzeln zu besiegen, sondern darum, sie gemeinsam zu ersetzen.

Und für viele Benutzer ist das tatsächlich wertvoller.

[ad_2]

]]>
https://chatgpz.de/data-analytics/chatllm-rezension-haben-sie-genug-von-mehreren-ki-instruments-hier-ist-eine-intelligentere-all-in-one-various/feed/ 0 17325
KI in mehreren GPUs: ZeRO & FSDP https://chatgpz.de/machine-learning/ki-in-mehreren-gpus-zero-fsdp/ https://chatgpz.de/machine-learning/ki-in-mehreren-gpus-zero-fsdp/#respond Fri, 06 Mar 2026 13:10:19 +0000 https://chatgpz.de/machine-learning/ki-in-mehreren-gpus-zero-fsdp/ [ad_1]

einer Serie über verteilte KI über mehrere GPUs:

Einführung

Im vorherigen Beitrag haben wir gesehen, wie Distributed Knowledge Parallelism (DDP) das Coaching beschleunigt, indem es Stapel auf GPUs aufteilt. DDP löst das Durchsatzproblem, bringt jedoch eine neue Herausforderung mit sich: Speicherredundanz.

In Vanilla DDP enthält jede GPU eine vollständige Kopie der Modellparameter, Verläufe und Optimiererzustände. Bei großen Modellen wie GPT-3 (175B-Parameter) führt diese Redundanz zu einer großen Verschwendung wertvollen VRAMs.

Bild des Autors: Modell, Farbverläufe und Optimierer sind im regulären DDP auf allen GPUs redundant

ZeRO (Zero Redundancy Optimizer) löst dieses Drawback. Es gibt drei Ebenen:

  • ZeRO-1 Partitionen nur Optimiererzustände
  • ZeRO-2 Partitioniert Optimiererzustände + Farbverläufe
  • ZeRO-3 Partitioniert Optimiererzustände + Verläufe + Modellparameter

ZeRO ist keine Parallelitätstechnik, da alle GPUs immer noch die gleichen Vorwärts- und Rückwärtsdurchläufe ausführen. Es ist ein Speicheroptimierung Strategie, die Redundanz zwischen GPUs eliminiert und es Ihnen ermöglicht, größere Modelle auf derselben {Hardware} zu trainieren.

Das Speicherproblem in DDP

Lassen Sie uns aufschlüsseln, was während des Trainings tatsächlich Speicher verbraucht. Für ein Modell mit Parametern:

  • Modellparameter: Werte (die Gewichte Ihres neuronalen Netzwerks)
  • Farbverläufe: Werte (ein Gradient professional Parameter)
  • Optimiererzustände (Adam): Werte (erstes Second und zweites Second für jeden Parameter)
  • Aktivierungen: Zwischenausgaben, die während des Vorwärtsdurchlaufs zur Verwendung im Rückwärtsdurchlauf gespeichert werden

Die ersten drei skalieren mit Modellgröße und sind GPU-übergreifend redundant im DDP. Die Aktivierungen skalieren mit der Batch-Größe, der Sequenzlänge und der Anzahl der Neuronen Einzigartig professional GPU da jede GPU unterschiedliche Daten verarbeitet. ZeRO berührt den Aktivierungsspeicher nicht.

Berechnen wir die Speichernutzung für ein 7B-Parameter-Modell mit Adam und FP32:

  • Parameter: 7 Milliarden * 4 Bytes = 28 GB
  • Farbverläufe: 7 Milliarden * 4 Bytes = 28 GB
  • Der Optimierer gibt an: 7 Milliarden * 2 * 4 Bytes = 56 GB
  • Speicher professional GPU in DDP: 112 GB

Aktivierungen fügen darüber hinaus erheblichen Speicher hinzu, aber da sie professional GPU einzigartig sind, kann ZeRO sie nicht partitionieren. Techniken wie Aktivierungs-Checkpointing kann helfen, es verwirft einige Aktivierungen und berechnet sie dann nach Bedarf während des Rückwärtsdurchlaufs neu. Aber das würde den Rahmen dieses Artikels sprengen.

Lassen Sie uns verstehen, wie ZeRO funktioniert, indem wir es von Grund auf implementieren, beginnend mit ZeRO-1 und uns bis hin zu ZeRO-3 vorarbeiten.

ZeRO-1: Optimierer-Zustandspartitionierung

In ZeRO-1 nur die Optimiererzustände sind partitioniert. Jede GPU:

  • Hält immer noch vollständige Modellparameter und -verläufe
  • Nur Geschäfte 1/N der Optimiererzustände (N = Anzahl der GPUs)
  • Aktualisiert nur das entsprechende 1/N der Parameter

Dies ist die Reihenfolge der während des Trainings durchgeführten Aktionen:

  1. Vorwärtspass: Jede GPU verarbeitet ihren eigenen Mikrobatch
  2. Rückwärtspass: Berechnen Sie Farbverläufe
  3. all-reduce Steigungen: Jede GPU erhält alle Farbverläufe
  4. Optimierungsschritt: Jede GPU aktualisiert ihre Parameterpartition
  5. all-gather Parameter: Synchronisieren Sie das aktualisierte Modell über GPUs hinweg
Bild vom Autor: Zero 1-Animation

Hier ist eine vereinfachte Implementierung:

import torch
import torch.distributed as dist


class ZeRO_1:
    def __init__(self, mannequin, optimizer_cls):
        self.mannequin = mannequin
        self.rank = dist.get_rank()
        self.world_size = dist.get_world_size()

        self.param_shards = listing()  # every rank holds solely its shard of the optimizer states
        self.param_metadata = listing()  # metadata to reconstruct shards

        for param in self.mannequin.parameters():
            original_shape = param.information.form
            flat = param.information.view(-1)
            numel = flat.numel()

            the rest = numel % self.world_size
            pad_size = (self.world_size - the rest) % self.world_size
            padded_numel = numel + pad_size
            shard_size = padded_numel // self.world_size

            shard_start = self.rank * shard_size
            shard_end = shard_start + shard_size

            self.param_metadata.append(
                {
                    "original_shape": original_shape,
                    "numel": numel,
                    "padded_numel": padded_numel,
                    "shard_size": shard_size,
                    "shard_start": shard_start,
                    "shard_end": shard_end,
                }
            )

            if pad_size > 0:
                flat_padded = torch.cat((flat, flat.new_zeros(pad_size)))
            else:
                flat_padded = flat

            shard = flat_padded(shard_start:shard_end).clone()
            shard.requires_grad_(True)
            self.param_shards.append(shard)

        self.optimizer = optimizer_cls(self.param_shards)

    def training_step(self, inputs, targets, loss_fn):
        output = self.mannequin(inputs) # ahead
        loss = loss_fn(output, targets) # compute loss
        loss.backward() # backward

        self._sync_gradients()  # all-reduce gradients throughout GPUs
        self.optimizer.step() # replace native shard of parameters
        self._sync_params() # all collect mannequin params

        # clear gradients for the subsequent step
        for param in self.mannequin.parameters():
            param.grad = None

    def _sync_gradients(self):
        for idx, param in enumerate(self.mannequin.parameters()):
            meta = self.param_metadata(idx)

            dist.all_reduce(param.grad, op=dist.ReduceOp.SUM)
            param.grad /= self.world_size

            self.param_shards(idx).grad = param.grad.view(-1)(meta("shard_start"):meta("shard_end"))

    def _sync_params(self):
        for idx, param in enumerate(self.mannequin.parameters()):
            meta = self.param_metadata(idx)

            full_flat = torch.empty(meta("padded_numel"), gadget=param.gadget, dtype=param.dtype)
            dist.all_gather_into_tensor(
                output_tensor=full_flat,
                input_tensor=self.param_shards(idx).information,
            )
            
            reconstructed = full_flat(:meta("numel")).view(meta("original_shape"))
            param.information.copy_(reconstructed)

Beachten Sie, dass die all-reduce synchronisiert alle Farbverläufe, aber jede GPU verwendet die Farbverläufe nur für ihre eigene Parameterpartition, es kommt zu einer Überkommunikation. ZeRO-2 behebt dieses Drawback, indem es auch die Farbverläufe aufteilt.

In der Praxis würden Sie ZeRO-1 niemals verwenden, da Sie mit ZeRO-2 bei im Wesentlichen gleichen Kosten bessere Speichereinsparungen erzielen. Aber es lohnt sich trotzdem, es zu Lernzwecken noch einmal durchzugehen.

Speicher mit ZeRO-1, 7B-Modell, 8 GPUs:

  • Parameter: 28 GB (vollständig repliziert)
  • Farbverläufe: 28 GB (vollständig repliziert)
  • Optimierer gibt an: 56 GB / 8 = 7 GB
  • Insgesamt professional GPU: 63 GB (von GB)

ZeRO-2: Gradientenpartitionierung

ZeRO-2 partitioniert beide Optimiererzustände und Farbverläufe. Da jede GPU nur eine Partition von Parametern aktualisiert, benötigt sie nur die entsprechenden Farbverläufe.

ZeRO-1 verwendet all-reducewas jeder GPU alle Farbverläufe verleiht. ZeRO-2 ersetzt dies durch reduce-scattererhält jede GPU nur die Farbverläufe, die sie tatsächlich benötigt. Dies spart sowohl Speicher als auch Kommunikationsbandbreite.

Trainingsschritte:

  1. Vorwärtspass: Jede GPU verarbeitet ihren eigenen Mikrobatch
  2. Rückwärtspass: Berechnen Sie Farbverläufe
  3. reduce-scatter Steigungen: Jede GPU erhält nur ihre Partition
  4. Optimierungsschritt: Jede GPU aktualisiert ihre Parameterpartition
  5. all-gather Parameter: Synchronisieren Sie das aktualisierte Modell über GPUs hinweg
Bild vom Autor: Zero 2-Animation

Die Implementierung ist ZeRO-1 sehr ähnlich, verwendet jedoch den Gradientensynchronisationsschritt reduce-scatter anstatt all-reduce:
Aber Second, wenn jede GPU während des Backprops alle Farbverläufe berechnet, wie spart das dann tatsächlich VRAM? So geht’s:

  • Da die Parameterverläufe Schicht für Schicht berechnet werden, sind sie sofort sichtbar reduce-scattered und die lokale Kopie wird freigegeben (unsere vereinfachte Implementierung führt dies nicht durch).
  • Beim Backprop benötigen Sie nur den Gradienten der nächsten Neuronenaktivierung, um den Gradienten des aktuellen Parameters zu berechnen, dh Sie benötigen nicht das gesamte Gradientendiagramm.
  • Auf diese Weise können Sie den Speicher für Farbverläufe freigeben, während Sie sich rückwärts bewegen, wobei nur die zugewiesene Partition für jede GPU erhalten bleibt.

Speicher mit ZeRO-2, 7B-Modell, 8 GPUs:

  • Parameter: 28 GB (vollständig repliziert)
  • Farbverläufe: 28 GB / 8 = 3,5 GB
  • Optimierer gibt an: 56 GB / 8 = 7 GB
  • Gesamt professional GPU: 38,5 GB (vorher 112 GB)

ZeRO-3: Parameterpartitionierung

ZeRO-3 partitioniert Optimiererzustände, -verläufe usw Parameter. Jede GPU speichert nur 1/N des gesamten Modellstatus.

Bei Vorwärts- und Rückwärtsdurchläufen benötigt jede Schicht ihre vollständigen Parameter, aber jede GPU speichert nur einen Bruchteil. Additionally wir Alle Parameter Simply-in-Time erfassenverwenden Sie sie und entsorgen Sie sie sofort danach.

Trainingsschritte:

  • Vorwärtspass:
    • Sammeln Sie alle Parameter der Ebene von allen GPUs
    • Führen Sie den Vorwärtsdurchlauf der Ebene aus und verwenden Sie dabei die Aktivierungen der vorherigen Ebene als Eingabe
    • Verwerfen Sie die gesammelten Parameter (behalten Sie nur die lokale Partition bei)
    • Wiederholen Sie diese Schritte, bis alle Schichten fertig sind
  • Rückwärtsdurchlauf (professional Schicht, rückwärts):
    • Erfassen Sie erneut alle Parameter der Ebene
    • Berechnen Sie die Farbverläufe für die aktuelle Ebene mithilfe der Aktivierungsgradienten der nächsten Ebene
    • Reduzieren Sie die Streuung der Farbverläufe (jede GPU behält ihren Shard)
    • Verwerfen Sie die gesammelten Parameter (behalten Sie nur die lokale Partition bei)
    • Wiederholen Sie diese Schritte, bis alle Schichten fertig sind
  • Jede GPU führt einen Optimierungsschritt auf ihrer Partition aus
  • Es ist keine abschließende Gesamterfassung erforderlich, da die Parameter während des Vorwärtsdurchlaufs Schicht für Schicht erfasst werden
Bild vom Autor: Zero 3-Animation

Hier ist eine vereinfachte Implementierung:

class ZeRO_3(ZeRO_2):
    """
    ZeRO-3: Shard optimizer states (stage 1) + gradients (stage 2) + mannequin parameters (stage 3).

    At relaxation, every rank holds solely param_shards(idx) — a 1/world_size slice
    of every parameter. Full parameters are materialised briefly throughout
    the ahead and backward passes by way of all_gather, then instantly freed.
    """

    def __init__(self, mannequin, optimizer_cls):
        self.mannequin = mannequin
        self.rank = dist.get_rank()
        self.world_size = dist.get_world_size()

        self.param_metadata = ()
        shard_list = ()

        self._param_to_idx = {}

        for idx, param in enumerate(self.mannequin.parameters()):
            original_shape = param.information.form
            flat = param.information.view(-1)
            numel = flat.numel()

            the rest = numel % self.world_size
            pad_size = (self.world_size - the rest) % self.world_size
            padded_numel = numel + pad_size
            shard_size = padded_numel // self.world_size

            shard_start = self.rank * shard_size
            shard_end = shard_start + shard_size

            self.param_metadata.append(
                {
                    "original_shape": original_shape,
                    "numel": numel,
                    "padded_numel": padded_numel,
                    "shard_size": shard_size,
                    "shard_start": shard_start,
                    "shard_end": shard_end,
                }
            )

            if pad_size > 0:
                flat_padded = torch.cat((flat, flat.new_zeros(pad_size)))
            else:
                flat_padded = flat

            shard = flat_padded(shard_start:shard_end).clone()
            shard_list.append(shard)

            # Substitute the total tensor with solely this rank's shard.
            # The mannequin's param.information now factors to a tiny slice; the total
            # weight will likely be reconstructed on demand throughout ahead/backward.
            param.information = shard.detach()
            self._param_to_idx(param) = idx

        self.param_shards = (s.requires_grad_(True) for s in shard_list)
        self.optimizer = optimizer_cls(self.param_shards)

        self._register_hooks()

    def _gather_param(self, idx, gadget, dtype):
        """All-gather the total parameter tensor for parameter `idx`."""
        meta = self.param_metadata(idx)
        full_flat = torch.empty(meta("padded_numel"), gadget=gadget, dtype=dtype)
        dist.all_gather_into_tensor(
            output_tensor=full_flat,
            input_tensor=self.param_shards(idx).information,
        )
        return full_flat(: meta("numel")).view(meta("original_shape"))

    def _gather_module_params(self, module):
        """Collect full params for each parameter that belongs to this module solely (not kids)."""
        for param in module.parameters(recurse=False):
            idx = self._param_to_idx(param)
            param.information = self._gather_param(idx, param.gadget, param.dtype)

    def _reshard_module_params(self, module):
        """Reshard params again to native shard for each direct param of this module."""
        for param in module.parameters(recurse=False):
            idx = self._param_to_idx(param)
            param.information = self.param_shards(idx).information

    def _register_hooks(self):
        self._hooks = ()
        for module in self.mannequin.modules():
            # Skip container modules that haven't any direct parameters
            if not listing(module.parameters(recurse=False)):
                proceed

            # Ahead: collect -> run -> reshard
            h1 = module.register_forward_pre_hook(
                lambda mod, _inputs: self._gather_module_params(mod)
            )
            h2 = module.register_forward_hook(
                lambda mod, _inputs, _output: self._reshard_module_params(mod)
            )

            # Backward: collect earlier than grad computation → reshard after
            h3 = module.register_full_backward_pre_hook(
                lambda mod, _grad_output: self._gather_module_params(mod)
            )
            h4 = module.register_full_backward_hook(
                lambda mod, _grad_input, _grad_output: self._reshard_module_params(mod)
            )

            self._hooks.lengthen((h1, h2, h3, h4))

    def training_step(self, inputs, targets, loss_fn):
        # Hooks deal with all collect/reshard round every module robotically
        output = self.mannequin(inputs)
        loss = loss_fn(output, targets)
        loss.backward()

        self._sync_gradients()

        # Every rank updates solely its native shard
        self.optimizer.step()

        for param in self.mannequin.parameters():
            param.grad = None

Die Parameter jeder Ebene werden unmittelbar vor ihrem Bedarf erfasst und unmittelbar danach freigegeben. Dadurch wird der Spitzenspeicher auf ein Minimal reduziert, allerdings auf Kosten einer höheren Kommunikation. In der Praxis überlappen Implementierungen das All-Collect für Layer N+1 mit dem Ahead von Layer N, um die Latenz zu verbergen.

Speicher mit ZeRO-3, 7B-Modell, 8 GPUs:

  • Parameter: 28 GB / 8 = 3,5 GB
  • Farbverläufe: 28 GB / 8 = 3,5 GB
  • Optimierer gibt an: 56 GB / 8 = 7 GB
  • Insgesamt professional GPU: 14 GB (vorher 112 GB)

Das ist ein 8-fache Reduzierung bei der Speichernutzung, was genau das ist, was wir von einer Partitionierung auf 8 GPUs erwarten würden.

Verwendung von ZeRO in PyTorch

PyTorch wird mit zwei Implementierungen von ZeRO-3 ausgeliefert: FSDP1 (älter, weniger optimiert) und FSDP2 (neuer, empfohlen). Verwenden Sie immer FSDP2.

FSDP (Absolutely Sharded Knowledge Parallel) übernimmt automatisch die Parametererfassung, Gradientenstreuung, Kommunikationsüberlappung und Speicherverwaltung:

from torch.distributed.fsdp import fully_shard

mannequin = Transformer()
for layer in mannequin.layers:
    fully_shard(layer)
fully_shard(mannequin)

Sie müssen sich bewerben fully_shard Schicht für Schicht und wickeln Sie dann das gesamte Modell ein.

Abschluss

ZeRO tauscht Erinnerung gegen Kommunikation aus, es ist additionally kein kostenloses Mittagessen. Im Allgemeinen lohnt es sich für kleinere Modelle (z. B. BERT) nicht, aber für größere Modelle ist es ein Recreation Changer.

Herzlichen Glückwunsch, dass Sie es bis zum Ende geschafft haben! In diesem Beitrag haben Sie Folgendes erfahren:

  • Das Speicherredundanzproblem im Commonplace-DDP
  • Wie ZeRO Optimiererzustände, Verläufe und Parameter auf GPUs verteilt
  • Die drei Phasen von ZeRO und ihre Kompromisse zwischen Gedächtnis und Kommunikation
  • So verwenden Sie ZeRO-3 über PyTorchs FSDP

Im nächsten Artikel befassen wir uns mit der Tensor-Parallelität, einer Modellparallelitätstechnik, die die Berechnung einer Ebene beschleunigt, indem sie die Arbeit auf GPUs verteilt.

Referenzen

  1. ZeRO: Speicheroptimierungen für das Coaching von Billionen-Parametermodellen (Originalpapier)
  2. PyTorch FSDP-Tutorial
  3. FSDP-API-Referenz
  4. Das Extremely-Scale-Playbook von Huggging Face

[ad_2]

]]>
https://chatgpz.de/machine-learning/ki-in-mehreren-gpus-zero-fsdp/feed/ 0 16841
KI in mehreren GPUs: Wie GPUs kommunizieren https://chatgpz.de/machine-learning/ki-in-mehreren-gpus-wie-gpus-kommunizieren/ https://chatgpz.de/machine-learning/ki-in-mehreren-gpus-wie-gpus-kommunizieren/#respond Thu, 19 Feb 2026 12:29:06 +0000 https://chatgpz.de/machine-learning/ki-in-mehreren-gpus-wie-gpus-kommunizieren/ [ad_1]

ist Teil einer Serie über verteilte KI über mehrere GPUs:

Einführung

Bevor wir uns mit fortgeschrittenen Parallelitätstechniken befassen, müssen wir die Schlüsseltechnologien verstehen, die es GPUs ermöglichen, miteinander zu kommunizieren.

Aber warum müssen GPUs überhaupt kommunizieren? Beim Coaching von KI-Modellen auf mehreren GPUs verarbeitet jede GPU unterschiedliche Datenstapel, aber alle müssen synchronisiert bleiben, indem sie während der Backpropagation Farbverläufe teilen oder Modellgewichte austauschen. Die Einzelheiten darüber, was wann kommuniziert wird, hängen von Ihrer Parallelitätsstrategie ab, die wir in den nächsten Blogbeiträgen ausführlich untersuchen werden. Bedenken Sie vorerst nur, dass modernes KI-Coaching kommunikationsintensiv ist und eine effiziente Datenübertragung von GPU zu GPU für die Leistung von entscheidender Bedeutung ist.

Der Kommunikationsstapel

PCIe

PCIe (Peripheral Part Interconnect Categorical) verbindet Erweiterungskarten wie GPUs über unabhängige serielle Punkt-zu-Punkt-Lanes mit dem Motherboard. Das bieten verschiedene PCIe-Generationen für eine GPU mit 16 Lanes:

  • Gen4 x16: ~32 GB/s bidirektional
  • Gen5 x16: ~64 GB/s bidirektional
  • Gen6 x16: ~128 GB/s bidirektional (zu Ihrer Data: 16 Lanes × 8 GB/s/Lane = 128 GB/s)

Excessive-Finish-Server-CPUs bieten typischerweise 128 PCIe-Lanes und moderne GPUs benötigen 16 Lanes für optimale Bandbreite. Aus diesem Grund sehen Sie normalerweise 8 GPUs professional Server (128 = 16 x 8). Der Stromverbrauch und der physische Platz im Servergehäuse machen es außerdem unpraktisch, mehr als 8 GPUs in einem einzelnen Knoten zu verwenden.

NVLink

NVLink ermöglicht die direkte GPU-zu-GPU-Kommunikation innerhalb desselben Servers (Knotens) unter vollständiger Umgehung der CPU. Diese von NVIDIA entwickelte Verbindung schafft einen direkten Speicher-zu-Speicher-Pfad zwischen GPUs mit enormer Bandbreite:

  • NVLink 3 (A100): ~600 GB/s professional GPU
  • NVLink 4 (H100): ~900 GB/s professional GPU
  • NVLink 5 (Blackwell): Bis zu 1,8 TB/s professional GPU
Quelle: GitHub (MIT-Lizenz)

Hinweis: auf NVLink für die CPU-GPU-Kommunikation

Bestimmte CPU-Architekturen unterstützen NVLink als PCIe-Ersatz und beschleunigen die CPU-GPU-Kommunikation erheblich, indem der PCIe-Engpass bei Datenübertragungen überwunden wird, z. B. beim Verschieben von Trainingsstapeln von der CPU auf die GPU. Diese CPU-GPU-NVLink-Funktion macht CPU-Offloading (eine Technik, die VRAM spart, indem Daten stattdessen im RAM gespeichert werden) für reale KI-Anwendungen praktisch. Da die Skalierung des RAM in der Regel kostengünstiger ist als die Skalierung des VRAM, bietet dieser Ansatz erhebliche wirtschaftliche Vorteile.

Zu den CPUs mit NVLink-Unterstützung gehören IBM POWER8, POWER9 und NVIDIA Grace.

Allerdings gibt es einen Haken. In einem Server mit 8x H100 muss jede GPU mit 7 anderen kommunizieren und diese 900 GB/s auf sieben Punkt-zu-Punkt-Verbindungen mit jeweils etwa 128 GB/s aufteilen. Hier kommt NVSwitch ins Spiel.

NVSwitch

NVSwitch fungiert als zentraler Hub für die GPU-Kommunikation und leitet Daten bei Bedarf dynamisch zwischen GPUs weiter (wechselt, wenn Sie so wollen). Mit NVSwitch kann jede Hopper-GPU mit 900 GB/s gleichzeitig mit allen anderen Hopper-GPUs kommunizieren, d. h. die Spitzenbandbreite hängt nicht davon ab, wie viele GPUs kommunizieren. Dies macht NVSwitch „nicht blockierend“. Jede GPU stellt über mehrere NVLink-Verbindungen eine Verbindung zu mehreren NVSwitch-Chips her und sorgt so für maximale Bandbreite.

Während NVSwitch als knoteninterne Lösung begann, wurde es erweitert, um mehrere Knoten miteinander zu verbinden und GPU-Cluster zu schaffen, die bis zu 256 GPUs mit All-to-All-Kommunikation bei nahezu lokalen NVLink-Geschwindigkeiten unterstützen.

Die Generationen von NVSwitch sind:

  • Erste Era: Unterstützt bis zu 16 GPUs professional Server (kompatibel mit Tesla V100)
  • Zweite Era: Unterstützt auch bis zu 16 GPUs mit verbesserter Bandbreite und geringerer Latenz
  • Dritte Era: Entwickelt für H100-GPUs, unterstützt bis zu 256 GPUs

InfiniBand

InfiniBand übernimmt die Kommunikation zwischen Knoten. Obwohl es viel langsamer (und billiger) als NVSwitch ist, wird es häufig in Rechenzentren zur Skalierung auf Tausende von GPUs verwendet. Modernes InfiniBand unterstützt NVIDIA GPUDirect® RDMA (Distant Direct Reminiscence Entry), sodass Netzwerkadapter ohne CPU-Beteiligung direkt auf den GPU-Speicher zugreifen können (kein teures Kopieren in den Host-RAM).

Zu den aktuellen InfiniBand-Geschwindigkeiten gehören:

  • HDR: ~25 GB/s professional Port
  • NDR: ~50 GB/s professional Port
  • NDR200: ~100 GB/s professional Port

Diese Geschwindigkeiten sind aufgrund des Netzwerkprotokoll-Overheads und der Notwendigkeit zweier PCIe-Durchläufe (einer beim Sender und einer beim Empfänger) deutlich langsamer als bei knoteninternem NVLink.

Wichtige Designprinzipien

Lineare Skalierung verstehen

Die lineare Skalierung ist der heilige Gral des verteilten Rechnens. Vereinfacht ausgedrückt bedeutet dies, dass eine Verdoppelung Ihrer GPUs Ihren Durchsatz verdoppeln und Ihre Trainingszeit halbieren sollte. Dies geschieht, wenn der Kommunikationsaufwand im Vergleich zur Rechenzeit minimal ist und jede GPU mit voller Kapazität arbeiten kann. Allerdings ist eine perfekte lineare Skalierung bei KI-Workloads selten, da die Kommunikationsanforderungen mit der Anzahl der Geräte wachsen und es normalerweise unmöglich ist, eine perfekte Überlappung zwischen Pc und Kommunikation zu erreichen (wird im Folgenden erläutert).

Die Bedeutung der Überschneidung von Pc und Kommunikation

Wenn eine GPU im Leerlauf darauf wartet, dass Daten übertragen werden, bevor sie verarbeitet werden können, verschwenden Sie Ressourcen. Kommunikationsvorgänge sollten sich so weit wie möglich mit Berechnungen überschneiden. Wenn dies nicht möglich ist, bezeichnen wir diese Kommunikation als „exponierte Operation“.

Intra-Node vs. Inter-Node: Die Efficiency-Klippe

Moderne Motherboards der Serverklasse unterstützen bis zu 8 GPUs. Innerhalb dieses Bereichs können Sie dank der knoteninternen Kommunikation mit hoher Bandbreite und geringer Latenz oft eine nahezu lineare Skalierung erreichen.

Sobald Sie über 8 GPUs hinaus skalieren und mehrere über InfiniBand verbundene Knoten verwenden, werden Sie einen starken Leistungsabfall feststellen. Die Kommunikation zwischen Knoten ist viel langsamer als NVLink zwischen Knoten, was zu Netzwerkprotokoll-Overhead, höherer Latenz und Bandbreitenbeschränkungen führt. Wenn Sie weitere GPUs hinzufügen, muss sich jede GPU mit mehr Friends koordinieren, sodass mehr Zeit im Leerlauf auf den Abschluss der Datenübertragungen wartet.

Abschluss

Folgen Sie mir auf X für weitere kostenlose KI-Inhalte @l_cesconetto

Herzlichen Glückwunsch, dass Sie es bis zum Ende geschafft haben! In diesem Beitrag haben Sie Folgendes erfahren:

  • Die Grundlagen der CPU-GPU- und GPU-GPU-Kommunikation:
    • PCIe, NVLink, NVSwitch und InfiniBand
  • Wichtige Designprinzipien für verteiltes GPU-Computing
  • Sie sind jetzt in der Lage, beim Entwerfen Ihrer KI-Workloads wesentlich fundiertere Entscheidungen zu treffen

Im nächsten Blogbeitrag befassen wir uns mit unserer ersten Parallelitätstechnik, der Distributed Knowledge Parallelism.

  1. NVIDIA-Weblog
  2. GPU Direct

[ad_2]

]]>
https://chatgpz.de/machine-learning/ki-in-mehreren-gpus-wie-gpus-kommunizieren/feed/ 0 16438
KI in mehreren GPUs: Punkt-zu-Punkt- und kollektive Operationen https://chatgpz.de/machine-learning/ki-in-mehreren-gpus-punkt-zu-punkt-und-kollektive-operationen/ https://chatgpz.de/machine-learning/ki-in-mehreren-gpus-punkt-zu-punkt-und-kollektive-operationen/#respond Sat, 14 Feb 2026 06:15:09 +0000 https://chatgpz.de/machine-learning/ki-in-mehreren-gpus-punkt-zu-punkt-und-kollektive-operationen/ [ad_1]

ist Teil einer Serie über verteilte KI über mehrere GPUs:

  • Teil 1: Das Host- und Geräteparadigma verstehen
  • Teil 2: Punkt-zu-Punkt- und Sammeloperationen (dieser Artikel)
  • Teil 3: Wie GPUs kommunizieren (kommt bald)
  • Teil 4: Gradientenakkumulation und verteilte Datenparallelität (DDP) (kommt bald)
  • Teil 5: ZeRO (kommt bald)
  • Teil 6: Tensorparallelität (kommt bald)

Einführung

Im vorherigen Beitrag haben wir das Host-Gerät-Paradigma etabliert und das Konzept der Ränge für Multi-GPU-Workloads eingeführt. Jetzt untersuchen wir die spezifischen Kommunikationsmuster, die PyTorch bietet torch.distributed Modul zur Koordinierung der Arbeit und zum Datenaustausch zwischen diesen Ebenen. Diese Operationen, bekannt als Kollektivesind die Bausteine ​​verteilter Workloads.

Obwohl PyTorch diese Vorgänge offenlegt, ruft es letztendlich ein Backend-Framework auf, das die Kommunikation tatsächlich implementiert. Für NVIDIA-GPUs ist es so NCCL (NVIDIA Collective Communications Library), während es sich bei AMD um RCCL (ROCm Communication Collectives Library) handelt.

NCCL implementiert Multi-GPU- und Multi-Node-Kommunikationsprimitive, die für NVIDIA-GPUs und Netzwerke optimiert sind. Es erkennt automatisch die aktuelle Topologie (Kommunikationskanäle wie PCIe, NVLink, InfiniBand) und wählt die effizienteste aus.

Haftungsausschluss 1: Da NVIDIA-GPUs am häufigsten vorkommen, konzentrieren wir uns auf die NCCL Backend für diesen Beitrag.

Haftungsausschluss 2: Der Kürze halber stellt der unten dargestellte Code nur die Hauptargumente jeder Methode anstelle aller verfügbaren Argumente bereit.

Haftungsausschluss 3: Der Einfachheit halber zeigen wir nicht die Speicherfreigabe von Tensoren, sondern Operationen wie scatter wird den Speicher des Quellrangs nicht automatisch freigeben (wenn Sie nicht verstehen, was ich meine, ist das in Ordnung, es wird sehr bald klar werden).

Kommunikation: Blockieren vs. Nicht-Blockieren

Um zusammenzuarbeiten, müssen GPUs Daten austauschen. Die CPU initiiert die Kommunikation, indem sie NCCL-Kernel in CUDA-Streams einreiht (wenn Sie nicht wissen, was CUDA-Streams sind, schauen Sie sich die an erster Blogbeitrag dieser Serie), aber die eigentliche Datenübertragung erfolgt direkt zwischen GPUs über die Verbindung, wobei der Hauptspeicher der CPU vollständig umgangen wird. Idealerweise sind die GPUs mit einer Hochgeschwindigkeitsverbindung wie NVLink oder InfiniBand verbunden (diese Verbindungen werden im behandelt). Dritter Beitrag dieser Serie).

Diese Kommunikation kann synchron (blockierend) oder asynchron (nicht blockierend) sein, was wir weiter unten untersuchen.

Synchrone (blockierende) Kommunikation

  • Verhalten: Wenn Sie eine synchrone Kommunikationsmethode aufrufen, wird der Hostprozess aufgerufen bleibt stehen und wartet bis der NCCL-Kernel erfolgreich in den aktuell aktiven CUDA-Stream eingereiht wurde. Sobald die Funktion in die Warteschlange gestellt wird, kehrt sie zurück. Dies ist in der Regel einfach und zuverlässig. Beachten Sie, dass der Host nicht auf den Abschluss der Übertragung wartet, sondern nur darauf, dass der Vorgang in die Warteschlange gestellt wird. Allerdings blockiert es verhindert, dass dieser spezifische Stream zum nächsten Vorgang übergeht bis der NCCL-Kernel vollständig ausgeführt ist.

Asynchrone (nicht blockierende) Kommunikation

  • Verhalten: Wenn Sie eine asynchrone Kommunikationsmethode aufrufen, wird der Aufruf zurückgegeben sofortund der Einreihungsvorgang erfolgt im Hintergrund. Es wird nicht in den aktuell aktiven Stream eingereiht, sondern in einen dedizierten internen NCCL-Stream professional Gerät. Dadurch kann Ihre CPU mit anderen Aufgaben fortfahren, eine Technik, die als bekannt ist Überschneidung von Berechnung und Kommunikation. Die asynchrone API ist komplexer, da sie bei unsachgemäßer Verwendung zu undefiniertem Verhalten führen kann .wait() (unten erklärt) und Daten während der Übertragung ändern. Die Beherrschung ist jedoch der Schlüssel zur Erzielung maximaler Leistung bei groß angelegten verteilten Schulungen.

Punkt-zu-Punkt (Eins-zu-Eins)

Diese Operationen werden nicht berücksichtigt Kollektiveaber sie sind grundlegende Kommunikationsprimitive. Sie erleichtern die direkte Datenübertragung zwischen zwei spezifischen Rängen und sind von grundlegender Bedeutung für Aufgaben, bei denen eine GPU bestimmte Informationen an eine andere senden muss.

  • Synchron (Blockierend): Der Hostprozess wartet darauf, dass der Vorgang in den CUDA-Stream eingereiht wird, bevor er fortfährt. Der Kernel wird in den aktuell aktiven Stream eingereiht.
    • torch.distributed.ship(tensor, dst): Sendet einen Tensor an einen angegebenen Zielrang.
    • torch.distributed.recv(tensor, src): Empfängt einen Tensor von einem Quellrang. Dem empfangenden Tensor muss vorab die richtige Type zugewiesen werden dtype.
  • Asynchron (nicht blockierend): Der Hostprozess initiiert den Enqueue-Vorgang und fährt sofort mit anderen Aufgaben fort. Der Kernel wird professional Gerät in einen dedizierten internen NCCL-Stream eingereiht, was eine überlappende Kommunikation mit der Berechnung ermöglicht. Diese Operationen geben a zurück request(technisch gesehen a Work Objekt), mit dem der Warteschlangenstatus verfolgt werden kann.
    • request = torch.distributed.isend(tensor, dst): Initiiert einen asynchronen Sendevorgang.
    • request = torch.distributed.irecv(tensor, src): Initiiert einen asynchronen Empfangsvorgang.
    • request.wait(): Blockiert den Host nur, bis der Vorgang erfolgreich conflict eingereiht im CUDA-Stream. Es blockiert jedoch die Ausführung späterer Kernel durch den aktuell aktiven CUDA-Stream, bis dieser bestimmte asynchrone Vorgang abgeschlossen ist.
    • request.wait(timeout): Wenn Sie ein Timeout-Argument angeben, ändert sich das Hostverhalten. Das wird es Blockieren Sie die CPU Thread, bis die NCCL-Arbeit abgeschlossen ist oder eine Zeitüberschreitung auftritt (was eine Ausnahme auslöst). Im Normalfall müssen Benutzer das Timeout nicht festlegen.
    • request.is_completed(): Retouren True ob der Vorgang erfolgreich conflict eingereiht auf einen CUDA-Stream. Es kann für Umfragen verwendet werden. Es kann nicht garantiert werden, dass die tatsächlichen Daten übertragen wurden.

Wenn PyTorch einen NCCL-Kernel startet, fügt es automatisch einen ein Abhängigkeit (dh erzwingt eine Synchronisierung) zwischen Ihrem aktuell aktiven Stream und dem NCCL-Stream. Das bedeutet, dass der NCCL-Stream erst startet, wenn alle zuvor in die Warteschlange gestellten Arbeiten am aktiven Stream abgeschlossen sind – was garantiert, dass der gesendete Tensor bereits die endgültigen Werte enthält.

Ebenso anrufen req.wait() fügt eine Abhängigkeit in die andere Richtung ein. Alle Arbeiten, die Sie anschließend in den aktuellen Stream einreihen req.wait() wird erst ausgeführt, wenn die Der NCCL-Vorgang ist abgeschlossensodass Sie die empfangenen Tensoren sicher verwenden können.

Große „Fallstricke“ in NCCL

Während ship Und recv Da sie als „synchron“ gekennzeichnet sind, kann ihr Verhalten in NCCL verwirrend sein. Ein synchroner Aufruf eines CUDA-Tensors blockiert den Host-CPU-Thread nur, bis der Datenübertragungskernel in die Warteschlange des Streams eingereiht wird. erst wenn die Datenübertragung abgeschlossen ist. Die CPU kann dann andere Aufgaben in die Warteschlange stellen.

Es gibt eine Ausnahme: die allererstes Ruf an torch.distributed.recv() in einem Prozess ist wirklich blockierend und wartet auf den Abschluss der Übertragung, wahrscheinlich aufgrund des internen NCCL Aufwärmvorgänge. Nachfolgende Aufrufe werden nur blockiert, bis der Vorgang in die Warteschlange gestellt wird.

Betrachten Sie dieses Beispiel, wo rank 1 hängt, weil die CPU versucht, auf einen Tensor zuzugreifen, den die GPU noch nicht erhalten hat:

rank = torch.distributed.get_rank()
if rank == 0:
   t = torch.tensor((1,2,3), dtype=torch.float32, system=system)
   # torch.distributed.ship(t, dst=1) # No ship operation is carried out
else: # rank == 1 (assuming solely 2 ranks)
   t = torch.empty(3, dtype=torch.float32, system=system)
   torch.distributed.recv(t, src=0) # Blocks solely till enqueued (after first run)
   print("This WILL print if NCCL is warmed-up")
   print
   print("This can NOT print")

Der CPU-Prozess bei rank 1 bleibt hängen print

Beachten Sie dies, wenn Sie diesen Code mehrmals ausführen This WILL print if NCCL is warmed-up wird in den späteren Ausführungen nicht gedruckt, da die CPU immer noch feststeckt print

Kollektive

Jede Sammeloperationsfunktion unterstützt sowohl synchrone als auch asynchrone Operationen durch async_op Argument. Der Standardwert ist False, was synchrone Vorgänge bedeutet.

One-to-All-Kollektive

Bei diesen Vorgängen sendet ein Rang Daten an alle anderen Ränge in der Gruppe.

Übertragen

  • torch.distributed.broadcast(tensor, src): Kopiert einen Tensor aus einem einzelnen Quellrang (src) zu allen anderen Rängen. Jeder Prozess führt zu einer identischen Kopie des Tensors. Der tensor Der Parameter dient zwei Zwecken: (1) wenn der Rang des Prozesses mit dem übereinstimmt srcDie tensor werden die Daten gesendet? (2) andernfalls, tensor dient der Speicherung der empfangenen Daten.
rank = torch.distributed.get_rank()
if rank == 0: # supply rank
  tensor = torch.tensor((1,2,3), dtype=torch.int64, system=system)
else: # vacation spot ranks
  tensor = torch.empty(3, dtype=torch.int64, system=system)
torch.distributed.broadcast(tensor, src=0)
Bild des Autors: Visuelle Animation übertragen

Streuen

  • torch.distributed.scatter(tensor, scatter_list, src): Verteilt Datenblöcke von einem Quellrang über alle Ränge. Der scatter_list auf dem Quellrang enthält mehrere Tensoren, und jeder Rang (einschließlich der Quelle) erhält einen Tensor aus dieser Liste in seinen tensor Variable. Die Zielränge gehen einfach vorbei None für die scatter_list.
# The scatter_list should be None for all non-source ranks.
scatter_list = None if rank != 0 else (torch.tensor((i, i+1)).to(system) for i in vary(0,4,2))
tensor = torch.empty(2, dtype=torch.int64).to(system)
torch.distributed.scatter(tensor, scatter_list, src=0)
print(f'Rank {rank} obtained: {tensor}')
Bild des Autors: Visuelle Streuanimation

All-to-One-Kollektive

Diese Vorgänge sammeln Daten von allen Rängen und konsolidieren sie auf einem einzigen Zielrang.

Reduzieren

  • torch.distributed.cut back(tensor, dst, op): Nimmt einen Tensor von jedem Rang und wendet eine Reduktionsoperation an (wie SUM, MAX, MIN) und speichert das Endergebnis auf dem Zielrang (dst) nur.
rank = torch.distributed.get_rank()
tensor = torch.tensor((rank+1, rank+2, rank+3), system=system)
torch.distributed.cut back(tensor, dst=0, op=torch.distributed.ReduceOp.SUM)
print(tensor)
Bild des Autors: Reduzieren Sie visuelle Animationen

Versammeln

  • torch.distributed.collect(tensor, gather_list, dst): Sammelt einen Tensor von jedem Rang in einer Liste von Tensoren auf dem Zielrang. Der gather_list muss eine Liste von Tensoren (richtige Größe und Typ) am Ziel und sein None überall sonst.
# The gather_list should be None for all non-destination ranks.
rank = torch.distributed.get_rank()
world_size = torch.distributed.get_world_size()
gather_list = None if rank != 0 else (torch.zeros(3, dtype=torch.int64).to(system) for _ in vary(world_size))
t = torch.tensor((0+rank, 1+rank, 2+rank), dtype=torch.int64).to(system)
torch.distributed.collect(t, gather_list, dst=0)
print(f'After op, Rank {rank} has: {gather_list}')

Die Variable world_size ist die Gesamtzahl der Ränge. Es kann mit erhalten werden torch.distributed.get_world_size(). Aber machen Sie sich zunächst keine Gedanken über die Implementierungsdetails. Das Wichtigste ist, die Konzepte zu verstehen.

Bild des Autors: Sammeln Sie visuelle Animationen

All-to-All-Kollektive

Bei diesen Operationen sendet und empfängt jeder Rang Daten von allen anderen Rängen.

Alles reduzieren

  • torch.distributed.all_reduce(tensor, op): Das Gleiche wie cut backaber das Ergebnis wird gespeichert jederRang statt nur ein Ziel.
# Instance for torch.distributed.all_reduce
rank = torch.distributed.get_rank()
tensor = torch.tensor((rank+1, rank+2, rank+3), dtype=torch.float32, system=system)
torch.distributed.all_reduce(tensor, op=torch.distributed.ReduceOp.SUM)
print(f"Rank {rank} after all_reduce: {tensor}")
Bild des Autors: Alle visuellen Animationen reduzieren

Alle versammeln sich

  • torch.distributed.all_gather(tensor_list, tensor): Das Gleiche wie collectaber die gesammelte Liste der Tensoren ist auf verfügbar jeder Rang.
# Instance for torch.distributed.all_gather
rank = torch.distributed.get_rank()
world_size = torch.distributed.get_world_size()
input_tensor = torch.tensor((rank), dtype=torch.float32, system=system)
tensor_list = (torch.empty(1, dtype=torch.float32, system=system) for _ in vary(world_size))
torch.distributed.all_gather(tensor_list, input_tensor)
print(f"Rank {rank} gathered: {(t.merchandise() for t in tensor_list)}")
Bild des Autors: All Collect visuelle Animation

Streuung reduzieren

  • torch.distributed.reduce_scatter(output, input_list): Äquivalent zur Durchführung einer Reduzierungsoperation für eine Liste von Tensoren und der anschließenden Streuung der Ergebnisse. Jeder Rang erhält einen anderen Teil der reduzierten Leistung.
# Instance for torch.distributed.reduce_scatter
rank = torch.distributed.get_rank()
world_size = torch.distributed.get_world_size()
input_list = (torch.tensor((rank + i), dtype=torch.float32, system=system) for i in vary(world_size))
output = torch.empty(1, dtype=torch.float32, system=system)
torch.distributed.reduce_scatter(output, input_list, op=torch.distributed.ReduceOp.SUM)
print(f"Rank {rank} obtained lowered worth: {output.merchandise()}")
Bild des Autors: Visuelle Animation „Scatter reduzieren“.

Synchronisation

Die beiden am häufigsten verwendeten Operationen sind request.wait() Und torch.cuda.synchronize(). Es ist wichtig, den Unterschied zwischen diesen beiden zu verstehen:

  • request.wait(): Dies wird für asynchrone Vorgänge verwendet. Es synchronisiert den aktuell aktiven CUDA-Stream für diesen Vorgang und stellt sicher, dass der Stream auf den Abschluss der Kommunikation wartet, bevor er fortfährt. Mit anderen Worten: Es blockiert den aktuell aktiven CUDA-Stream, bis die Datenübertragung abgeschlossen ist. Auf der Host-Seite bewirkt es nur, dass der Host wartet, bis der Kernel in die Warteschlange gestellt wird; der Gastgeber tut es nicht Warten Sie, bis die Datenübertragung abgeschlossen ist.
  • torch.cuda.synchronize(): Dies ist ein energischerer Befehl, der den Host-CPU-Thread bis pausiert alle Zuvor auf der GPU eingereihte Aufgaben sind abgeschlossen. Es stellt sicher, dass die GPU vollständig im Leerlauf ist, bevor die CPU weitermacht, kann jedoch bei unsachgemäßer Verwendung zu Leistungsengpässen führen. Wann immer Sie Benchmark-Messungen durchführen müssen, sollten Sie diese verwenden, um sicherzustellen, dass Sie genau den Second erfassen, in dem die GPUs fertig sind.

Abschluss

Herzlichen Glückwunsch, dass Sie es bis zum Ende geschafft haben! In diesem Beitrag haben Sie Folgendes erfahren:

  • Punkt-zu-Punkt-Operationen
  • Synchronisierung und Asynchronisierung in NCCL
  • Kollektive Operationen
  • Synchronisationsmethoden

Im nächsten Blogbeitrag befassen wir uns mit PCIe, NVLink und anderen Mechanismen, die die Kommunikation in einer verteilten Umgebung ermöglichen!

Referenzen

[ad_2]

]]>
https://chatgpz.de/machine-learning/ki-in-mehreren-gpus-punkt-zu-punkt-und-kollektive-operationen/feed/ 0 16305
KI in mehreren GPUs: Das Host- und Geräteparadigma verstehen https://chatgpz.de/machine-learning/ki-in-mehreren-gpus-das-host-und-geraeteparadigma-verstehen/ https://chatgpz.de/machine-learning/ki-in-mehreren-gpus-das-host-und-geraeteparadigma-verstehen/#respond Fri, 13 Feb 2026 12:12:55 +0000 http://chatgpz.de/machine-learning/ki-in-mehreren-gpus-das-host-und-geraeteparadigma-verstehen/ [ad_1]

ist Teil einer Serie über verteilte KI über mehrere GPUs:

  • Teil 1: Das Host- und Geräteparadigma verstehen (dieser Artikel)
  • Teil 2: Punkt-zu-Punkt- und Sammeloperationen (kommt bald)
  • Teil 3: Wie GPUs kommunizieren (kommt bald)
  • Teil 4: Gradientenakkumulation und verteilte Datenparallelität (DDP) (kommt bald)
  • Teil 5: ZeRO (kommt bald)
  • Teil 6: Tensorparallelität (kommt bald)

Einführung

In diesem Handbuch werden die grundlegenden Konzepte erläutert, wie eine CPU und eine separate Grafikkarte (GPU) zusammenarbeiten. Es handelt sich um eine allgemeine Einführung, die Ihnen dabei helfen soll, ein mentales Modell des Host-Gerät-Paradigmas zu erstellen. Wir werden uns speziell auf NVIDIA-GPUs konzentrieren, die am häufigsten für KI-Workloads verwendet werden.

Bei integrierten GPUs, wie sie beispielsweise in Apple-Silicon-Chips zu finden sind, ist die Architektur etwas anders und wird in diesem Beitrag nicht behandelt.

Das große Ganze: Der Host und das Gerät

Das wichtigste Konzept, das es zu verstehen gilt, ist die Beziehung zwischen den Gastgeber und die Gerät.

  • Der Gastgeber: Das ist Ihr CPU. Es führt das Betriebssystem aus und führt Ihr Python-Skript Zeile für Zeile aus. Der Gastgeber ist der Kommandant; Es ist für die Gesamtlogik verantwortlich und teilt dem Gerät mit, was es tun soll.
  • Das Gerät: Das ist Ihr GPU. Es handelt sich um einen leistungsstarken, aber spezialisierten Coprozessor, der für massiv parallele Berechnungen entwickelt wurde. Das Gerät ist der Beschleuniger; Es führt nichts aus, bis der Host ihm eine Aufgabe gibt.

Ihr Programm startet immer auf der CPU. Wenn die GPU eine Aufgabe ausführen soll, beispielsweise das Multiplizieren zweier großer Matrizen, sendet die CPU die Anweisungen und Daten an die GPU.

Die CPU-GPU-Interaktion

Der Host kommuniziert mit dem Gerät über ein Warteschlangensystem.

  1. CPU initiiert Befehle: Ihr Skript, das auf der CPU ausgeführt wird, stößt auf eine Codezeile, die für die GPU bestimmt ist (z. B. tensor.to('cuda')).
  2. Befehle stehen in der Warteschlange: Die CPU wartet nicht. Dieser Befehl wird einfach in eine spezielle To-Do-Liste für die GPU mit dem Namen a eingefügt CUDA-Stream – mehr dazu im nächsten Abschnitt.
  3. Asynchrone Ausführung: Die CPU wartet nicht darauf, dass der eigentliche Vorgang von der GPU abgeschlossen wird, der Host fährt mit der nächsten Zeile Ihres Skripts fort. Das nennt man asynchrone Ausführungund es ist ein Schlüssel zur Erzielung hoher Leistung. Während die GPU damit beschäftigt ist, Zahlen zu verarbeiten, kann die CPU anderen Aufgaben nachgehen, beispielsweise der Vorbereitung des nächsten Datenstapels.

CUDA-Streams

A CUDA-Stream ist eine geordnete Warteschlange von GPU-Operationen. An einen einzelnen Stream übermittelte Vorgänge werden ausgeführt in Ordnungeiner nach dem anderen. Allerdings Operationen quer anders Streams können ausgeführt werden gleichzeitig – Die GPU kann mehrere unabhängige Arbeitslasten gleichzeitig bewältigen.

Standardmäßig wird jede PyTorch-GPU-Operation in die Warteschlange gestellt aktuell aktiver Stream (Normalerweise ist es der Commonplace-Stream, der automatisch erstellt wird). Das ist einfach und vorhersehbar: Jeder Vorgang wartet, bis der vorherige abgeschlossen ist, bevor er beginnt. Bei den meisten Codes merkt man das nie. Aber die Leistung bleibt auf dem Tisch, wenn man damit zu tun hat könnte überlappen.

Mehrere Streams: Parallelität

Der klassische Anwendungsfall für mehrere Streams ist Überlappende Berechnung mit Datenübertragungen. Während die GPU Batch N verarbeitet, können Sie Batch N+1 gleichzeitig vom CPU-RAM in den GPU-VRAM kopieren:

Stream 0 (compute): (course of batch 0)────(course of batch 1)───
Stream 1 (information):   ────(copy batch 1)────(copy batch 2)───

Diese Pipeline ist möglich, weil Rechen- und Datenübertragung auf separaten Hardwareeinheiten innerhalb der GPU erfolgen, was echte Parallelität ermöglicht. In PyTorch erstellen Sie Streams und planen die Arbeit daran mit Kontextmanagern:

compute_stream = torch.cuda.Stream()
transfer_stream = torch.cuda.Stream()

with torch.cuda.stream(transfer_stream):
    # Enqueue the switch on transfer_stream
    next_batch = next_batch_cpu.to('cuda', non_blocking=True)

with torch.cuda.stream(compute_stream):
    # This runs concurrently with the switch above
    output = mannequin(current_batch)

Beachten Sie die non_blocking=True Flagge an .to(). Ohne sie würde die Übertragung immer noch den CPU-Thread blockieren, selbst wenn Sie eine asynchrone Ausführung beabsichtigen.

Synchronisierung zwischen Streams

Da Streams unabhängig sind, müssen Sie explizit signalisieren, wenn einer von einem anderen abhängt. Das stumpfe Werkzeug ist:

torch.cuda.synchronize()  # waits for ALL streams on the system to complete

Ein eher chirurgischer Ansatz wird verwendet CUDA-Ereignisse. Ein Ereignis markiert einen bestimmten Punkt in einem Stream und ein anderer Stream kann darauf warten, ohne den CPU-Thread anzuhalten:

occasion = torch.cuda.Occasion()

with torch.cuda.stream(transfer_stream):
    next_batch = next_batch_cpu.to('cuda', non_blocking=True)
    occasion.document()  # mark: switch is finished

with torch.cuda.stream(compute_stream):
    compute_stream.wait_event(occasion)  # do not begin till switch completes
    output = mannequin(next_batch)

Das ist effizienter als stream.synchronize() Da dadurch nur der abhängige Stream auf der GPU-Seite blockiert wird, bleibt der CPU-Thread frei, um weiterhin Arbeit in die Warteschlange zu stellen.

Für alltäglichen PyTorch-Trainingscode müssen Sie Streams nicht manuell verwalten. Aber Funktionen wie DataLoader(pin_memory=True) und Prefetching hängen stark von diesem Mechanismus unter der Haube ab. Das Verständnis von Streams hilft Ihnen zu erkennen, warum diese Einstellungen vorhanden sind, und gibt Ihnen die Instruments an die Hand, mit denen Sie subtile Leistungsengpässe diagnostizieren können, wenn sie auftreten.

PyTorch-Tensoren

PyTorch ist ein leistungsstarkes Framework, das viele Particulars abstrahiert, aber diese Abstraktion kann manchmal verschleiern, was unter der Haube passiert.

Wenn Sie einen PyTorch-Tensor erstellen, besteht dieser aus zwei Teilen: Metadaten (wie Kind und Datentyp) und den tatsächlichen numerischen Daten. Wenn Sie additionally so etwas ausführen t = torch.randn(100, 100, system=system)werden die Metadaten des Tensors im RAM des Hosts gespeichert, während seine Daten im VRAM der GPU gespeichert werden.

Diese Unterscheidung ist wichtig. Wenn du rennst print(t.form)kann die CPU sofort auf diese Informationen zugreifen, da sich die Metadaten bereits im eigenen RAM befinden. Aber was passiert, wenn man rennt? print

Host-Gerät-Synchronisierung

Der Zugriff auf GPU-Daten von der CPU kann einen Fehler auslösen Host-Gerät-Synchronisierungein häufiger Leistungsengpass. Dies geschieht immer dann, wenn die CPU ein Ergebnis von der GPU benötigt, das noch nicht im RAM der CPU verfügbar ist.

Betrachten Sie zum Beispiel die Linie print(gpu_tensor) Dadurch wird ein Tensor ausgegeben, der noch von der GPU berechnet wird. Die CPU kann die Tensorwerte erst drucken, wenn die GPU alle Berechnungen abgeschlossen hat, um das Endergebnis zu erhalten. Wenn das Skript diese Zeile erreicht, wird die CPU dazu gezwungen Blockdh es stoppt und wartet, bis die GPU fertig ist. Erst nachdem die GPU ihre Arbeit abgeschlossen und die Daten von ihrem VRAM in den RAM der CPU kopiert hat, kann die CPU fortfahren.

Als weiteres Beispiel: Was ist der Unterschied zwischen torch.randn(100, 100).to(system) Und torch.randn(100, 100, system=system)? Die erste Methode ist weniger effizient, da sie die Daten auf der CPU erstellt und sie dann an die GPU überträgt. Die zweite Methode ist effizienter, da sie den Tensor direkt auf der GPU erstellt; Die CPU sendet nur den Erstellungsbefehl.

Diese Synchronisierungspunkte können die Leistung erheblich beeinträchtigen. Bei einer effektiven GPU-Programmierung geht es darum, sie zu minimieren, um sicherzustellen, dass sowohl der Host als auch das Gerät so ausgelastet wie möglich bleiben. Schließlich möchten Sie, dass Ihre GPUs funktionieren brrrrr.

Bild vom Autor: generiert mit ChatGPT

Skalierung: Verteiltes Rechnen und Ränge

Das Coaching großer Modelle, wie etwa Giant Language Fashions (LLMs), erfordert oft mehr Rechenleistung, als eine einzelne GPU bieten kann. Durch die Koordinierung der Arbeit über mehrere GPUs hinweg gelangen Sie in die Welt des verteilten Computings.

In diesem Zusammenhang entsteht ein neues und wichtiges Konzept: das Rang.

  • Jede Rang ist ein CPU-Prozess, dem ein einzelnes Gerät (GPU) und eine eindeutige ID zugewiesen werden. Wenn Sie ein Trainingsskript auf zwei GPUs starten, erstellen Sie zwei Prozesse: einen mit rank=0 und noch einer mit rank=1.

Das bedeutet, dass Sie zwei separate Instanzen Ihres Python-Skripts starten. Auf einer einzelnen Maschine mit mehreren GPUs (einem einzelnen Knoten) werden diese Prozesse auf derselben CPU ausgeführt, bleiben jedoch unabhängig, ohne Speicher oder Standing gemeinsam zu nutzen. Rank 0 befiehlt seiner zugewiesenen GPU (cuda:0), während Rank 1 befiehlt eine andere GPU (cuda:1). Obwohl auf beiden Rängen derselbe Code ausgeführt wird, können Sie eine Variable nutzen, die die Rang-ID enthält, um jeder GPU unterschiedliche Aufgaben zuzuweisen, z. B. dass jede GPU einen anderen Teil der Daten verarbeitet (Beispiele hierfür sehen wir im nächsten Blogbeitrag dieser Serie).

Abschluss

Herzlichen Glückwunsch, dass Sie den Textual content bis zum Ende gelesen haben! In diesem Beitrag haben Sie Folgendes erfahren:

  • Die Host/Gerät-Beziehung
  • Asynchrone Ausführung
  • CUDA-Streams und wie sie gleichzeitige GPU-Arbeit ermöglichen
  • Host-Gerät-Synchronisierung

Im nächsten Blogbeitrag werden wir uns eingehender mit Punkt-zu-Punkt- und kollektiven Operationen befassen, die es mehreren GPUs ermöglichen, komplexe Arbeitsabläufe wie das Coaching verteilter neuronaler Netzwerke zu koordinieren.

[ad_2]

]]> https://chatgpz.de/machine-learning/ki-in-mehreren-gpus-das-host-und-geraeteparadigma-verstehen/feed/ 0 16285 Meta-KI-Forscher stellen Matrix: A Ray Native vor, ein dezentrales Framework für die Generierung synthetischer Daten mit mehreren Agenten https://chatgpz.de/artificial-intelligence/meta-ki-forscher-stellen-matrix-a-ray-native-vor-ein-dezentrales-framework-fuer-die-generierung-synthetischer-daten-mit-mehreren-agenten/ https://chatgpz.de/artificial-intelligence/meta-ki-forscher-stellen-matrix-a-ray-native-vor-ein-dezentrales-framework-fuer-die-generierung-synthetischer-daten-mit-mehreren-agenten/#respond Mon, 01 Dec 2025 04:30:37 +0000 https://chatgpz.de/artificial-intelligence/meta-ki-forscher-stellen-matrix-a-ray-native-vor-ein-dezentrales-framework-fuer-die-generierung-synthetischer-daten-mit-mehreren-agenten/ [ad_1]

Wie halten Sie synthetische Daten für moderne KI-Modelle aktuell und vielfältig, ohne dass eine einzige Orchestrierungspipeline zum Engpass wird? Meta-KI-Forscher stellen vor Matrixein dezentrales Framework, in dem sowohl Kontrolle als auch Datenfluss in Nachrichten serialisiert werden, die sich durch verteilte Warteschlangen bewegen. Da das LLM-Coaching zunehmend auf synthetischen Gesprächen, Instrument-Traces und Argumentationsketten basiert, sind die meisten bestehenden Systeme immer noch auf einen zentralen Controller oder domänenspezifische Setups angewiesen, was GPU-Kapazität verschwendet, den Koordinationsaufwand erhöht und die Datenvielfalt einschränkt. Matrix nutzt stattdessen Peer-to-Peer-Agentenplanung auf einem Ray-Cluster und liefert einen 2- bis 15-mal höheren Token-Durchsatz bei realen Arbeitslasten bei gleichbleibender Qualität.

https://arxiv.org/pdf/2511.21686

Von zentralisierten Controllern bis hin zu Peer-to-Peer-Agenten

Herkömmliche Agenten-Frameworks behalten den Workflow-Standing und die Kontrolllogik in einem zentralen Orchestrator. Jeder Agentenaufruf, Toolaufruf und jeder Wiederholungsversuch läuft über diesen Controller. Über dieses Modell lässt sich leicht nachdenken, es lässt sich jedoch nicht intestine skalieren, wenn Sie Zehntausende gleichzeitiger synthetischer Dialoge oder Werkzeugtrajektorien benötigen.

Matrix verfolgt einen anderen Ansatz. Es serialisiert sowohl den Kontrollfluss als auch den Datenfluss in ein Nachrichtenobjekt, das als Orchestrator bezeichnet wird. Der Orchestrator speichert den Aufgabenstatus, einschließlich Konversationsverlauf, Zwischenergebnisse und Routing-Logik. Zustandslose Agenten, die als Ray-Akteure implementiert sind, ziehen einen Orchestrator aus einer verteilten Warteschlange, wenden ihre rollenspezifische Logik an, aktualisieren den Standing und senden ihn dann direkt an den nächsten vom Orchestrator ausgewählten Agenten. Es gibt keinen zentralen Scheduler in der inneren Schleife. Jede Aufgabe schreitet unabhängig auf Zeilenebene voran, anstatt wie in Spark oder Ray Knowledge auf Barrieren auf Batch-Ebene zu warten.

Dieses Design reduziert die Leerlaufzeit, wenn verschiedene Flugbahnen sehr unterschiedliche Längen haben. Dadurch wird die Fehlerbehandlung auch lokal für eine Aufgabe ermöglicht. Wenn ein Orchestrator ausfällt, wird ein Batch nicht angehalten.

https://arxiv.org/pdf/2511.21686

Systemstapel und Dienste

Matrix läuft auf einem Ray-Cluster, der normalerweise auf SLURM gestartet wird. Ray stellt verteilte Akteure und Warteschlangen bereit. Ray Serve stellt LLM-Endpunkte hinter vLLM und SGLang bereit und kann auch über Proxyserver an externe APIs wie Azure OpenAI oder Gemini weiterleiten.

Toolaufrufe und andere komplexe Dienste werden in Apptainer-Containern ausgeführt. Dadurch wird die Agentenlaufzeit von Sandboxes zur Codeausführung, HTTP-Instruments oder benutzerdefinierten Evaluatoren isoliert. Hydra verwaltet die Konfiguration für Agentenrollen, Orchestratortypen, Ressourcenzuweisungen und I- oder O-Schemata. Grafana lässt sich in Ray-Metriken integrieren, um die Warteschlangenlänge, ausstehende Aufgaben, den Token-Durchsatz und die GPU-Auslastung in Echtzeit zu verfolgen.

Matrix führt auch das Offloading von Nachrichten ein. Wenn der Konversationsverlauf einen Größenschwellenwert überschreitet, werden große Nutzlasten im Objektspeicher von Ray gespeichert und im Orchestrator werden nur Objektkennungen gespeichert. Dadurch wird die Clusterbandbreite reduziert, während die Agenten dennoch bei Bedarf Eingabeaufforderungen rekonstruieren können.

Fallstudie 1: Kollaborativer Denker

Collaborative Reasoner, auch bekannt als Coral, wertet den Multi-Agenten-Dialog aus, bei dem zwei LLM-Agenten eine Frage diskutieren, bei Bedarf anderer Meinung sind und eine endgültige Antwort finden. In der ursprünglichen Implementierung verwaltet ein zentraler Controller Tausende von Trajektorien für die Selbstkollaboration. Matrix implementiert dasselbe Protokoll mithilfe von Peer-to-Peer-Orchestratoren und zustandslosen Agenten erneut.

Auf 31 A100-Knoten konfiguriert Matrix mit LLaMA 3.1 8B Instruct die Parallelität als 248 GPUs mit 50 Abfragen professional GPU, additionally 12.400 gleichzeitige Gespräche. Die Coral-Basislinie wird mit der optimalen Parallelität von 5.000 ausgeführt. Unter identischer {Hardware} generiert Matrix etwa 2 Milliarden Token in etwa 4 Stunden, während Coral etwa 0,62 Milliarden Token in etwa 9 Stunden produziert. Das ist eine 6,8-fache Steigerung des Token-Durchsatzes bei nahezu identischer Übereinstimmungskorrektheit um 0,47.

https://arxiv.org/pdf/2511.21686

Fallstudie 2: NaturalReasoning Internet-Datenkuration

NaturalReasoning erstellt einen Argumentationsdatensatz aus großen Webkorpora. Matrix modelliert die Pipeline mit drei Agenten. Ein Filteragent verwendet ein kleineres Klassifikationsmodell, um englische Passagen auszuwählen, die wahrscheinlich Begründungen enthalten. Ein Rating-Agent verwendet ein größeres, auf Anweisungen abgestimmtes Modell, um Qualitätsbewertungen zuzuweisen. Ein Frageagent extrahiert Fragen, Antworten und Argumentationsketten.

Von 25 Millionen DCLM-Webdokumenten überleben nur etwa 5,45 Prozent alle Filter, was etwa 1,19 Millionen Frage-Antwort-Paare mit zugehörigen Argumentationsschritten ergibt. Matrix vergleicht dann verschiedene Parallelitätsstrategien für eine Teilmenge von 500.000 Dokumenten. Die beste Konfiguration kombiniert Datenparallelität und Aufgabenparallelität mit 20 Datenpartitionen und 700 gleichzeitigen Aufgaben professional Partition. Dadurch wird ein etwa 1,61-mal höherer Durchsatz erreicht als mit einer Einstellung, die nur die Aufgabengleichzeitigkeit skaliert.

Über den gesamten Lauf von 25 Millionen Dokumenten erreicht Matrix 5.853 Token professional Sekunde, verglichen mit 2.778 Token professional Sekunde bei einer Ray Knowledge-Batch-Basislinie mit 14.000 gleichzeitigen Aufgaben. Das entspricht einem 2,1-fachen Durchsatzgewinn, der ausschließlich auf der Peer-to-Peer-Zeilenebenenplanung und nicht auf verschiedenen Modellen beruht.

https://arxiv.org/pdf/2511.21686

Fallstudie 3, Verwendungsverläufe des Tau2-Bench-Werkzeugs

Tau2-Bench bewertet Konversationsagenten, die in einer Kundensupportumgebung Instruments und eine Datenbank verwenden müssen. Matrix repräsentiert diese Umgebung mit vier Agenten, einem Benutzersimulator, einem Assistenten, einem Instrument-Executor und einem Belohnungsrechner sowie einer Senke, die Metriken sammelt. Instrument-APIs und Belohnungslogik werden aus der Tau2-Referenzimplementierung wiederverwendet und in Container verpackt.

Auf einem Cluster mit 13 H100-Knoten und Dutzenden LLM-Replikaten generiert Matrix 22.800 Trajektorien in etwa 1,25 Stunden. Das entspricht etwa 41.000 Token professional Sekunde. Die grundlegende Tau2-Agent-Implementierung auf einem einzelnen Knoten, konfiguriert mit 500 gleichzeitigen Threads, erreicht etwa 2.654 Token professional Sekunde und 1.519 Trajektorien. Die durchschnittliche Belohnung bleibt in beiden Systemen nahezu unverändert, was bestätigt, dass die Beschleunigung nicht auf Abstriche in der Umgebung zurückzuführen ist. Insgesamt liefert Matrix bei diesem Benchmark einen etwa 15,4-mal höheren Token-Durchsatz.

https://arxiv.org/pdf/2511.21686

Wichtige Erkenntnisse

  • Matrix ersetzt zentralisierte Orchestratoren durch eine nachrichtengesteuerte Peer-to-Peer-Agentenarchitektur, die jede Aufgabe als unabhängige Zustandsmaschine behandelt, die sich über zustandslose Agenten bewegt.
  • Das Framework basiert vollständig auf einem Open-Supply-Stack, SLURM, Ray, vLLM, SGLang und Apptainer, und lässt sich auf Zehntausende gleichzeitiger Multi-Agent-Workflows für die Generierung synthetischer Daten, Benchmarking und Datenverarbeitung skalieren.
  • In drei Fallstudien, Collaborative Reasoner, NaturalReasoning und Tau2-Bench, liefert Matrix einen etwa 2- bis 15,4-mal höheren Token-Durchsatz als spezialisierte Baselines unter identischer {Hardware} und behält dabei vergleichbare Ausgabequalität und Belohnungen bei.
  • Matrix verlagert große Konversationsverläufe in den Objektspeicher von Ray und speichert nur leichte Referenzen in Nachrichten, was die Spitzennetzwerkbandbreite reduziert und die LLM-Bereitstellung mit hohem Durchsatz mit gRPC-basierten Modell-Backends unterstützt.

Redaktionelle Anmerkungen

Matrix ist ein pragmatischer Systembeitrag, der die Generierung synthetischer Daten mit mehreren Agenten von maßgeschneiderten Skripten zu einer betriebsbereiten Laufzeit führt. Durch die Codierung des Kontrollflusses und des Datenflusses in Orchestratoren und die anschließende Übertragung der Ausführung an zustandslose P2P-Agenten auf Ray werden Planung, LLM-Inferenz und Instruments sauber getrennt. Die Fallstudien zu Collaborative Reasoner, NaturalReasoning und Tau2-Bench zeigen, dass sorgfältiges Systemdesign und nicht neue Modellarchitekturen heute der Haupthebel für die Skalierung synthetischer Datenpipelines sind.


Schauen Sie sich das an Papier Und Repo. Schauen Sie sich gerne bei uns um GitHub-Seite für Tutorials, Codes und Notebooks. Sie können uns auch gerne weiter folgen Twitter und vergessen Sie nicht, bei uns mitzumachen 100.000+ ML SubReddit und Abonnieren Unser E-newsletter. Warten! Bist du im Telegram? Jetzt können Sie uns auch per Telegram kontaktieren.


Michal Sutter ist ein Knowledge-Science-Experte mit einem Grasp of Science in Knowledge Science von der Universität Padua. Mit einer soliden Grundlage in statistischer Analyse, maschinellem Lernen und Datentechnik ist Michal hervorragend darin, komplexe Datensätze in umsetzbare Erkenntnisse umzuwandeln.

[ad_2]

]]> https://chatgpz.de/artificial-intelligence/meta-ki-forscher-stellen-matrix-a-ray-native-vor-ein-dezentrales-framework-fuer-die-generierung-synthetischer-daten-mit-mehreren-agenten/feed/ 0 14437 OceanBase veröffentlicht seendb: Eine Open-Supply-KI-native-Hybrid-Suchdatenbank für RAG- und KI-Agenten mit mehreren Modellen https://chatgpz.de/artificial-intelligence/oceanbase-veroeffentlicht-seendb-eine-open-supply-ki-native-hybrid-suchdatenbank-fuer-rag-und-ki-agenten-mit-mehreren-modellen/ https://chatgpz.de/artificial-intelligence/oceanbase-veroeffentlicht-seendb-eine-open-supply-ki-native-hybrid-suchdatenbank-fuer-rag-und-ki-agenten-mit-mehreren-modellen/#respond Fri, 28 Nov 2025 06:21:31 +0000 http://chatgpz.de/artificial-intelligence/oceanbase-veroeffentlicht-seendb-eine-open-source-ki-native-hybrid-suchdatenbank-fuer-rag-und-ki-agenten-mit-mehreren-modellen/ [ad_1]

KI-Anwendungen arbeiten selten mit einer einzigen sauberen Tabelle. Sie vermischen Benutzerprofile, Chatprotokolle, JSON-Metadaten, Einbettungen und manchmal auch räumliche Daten. Die meisten Groups beantworten diese Frage mit einem Flickenteppich aus einer OLTP-Datenbank, einem Vektorspeicher und einer Suchmaschine. OceanBase freigegeben suchdbeine Open-Supply-Datenbank mit KI-Fokus (unter der Apache 2.0-Lizenz). seedb wird als native KI-Suchdatenbank beschrieben, die relationale Daten, Vektordaten, Textual content, JSON und GIS in einer Engine vereint und Hybridsuche und KI-Workflows in Datenbanken ermöglicht.

Was ist seedb?

suchdb ist als leichte, eingebettete Model der OceanBase-Engine positioniert, die eher auf KI-Anwendungen als auf verteilte Allzweckbereitstellungen abzielt. Es läuft als Einzelknotendatenbank, unterstützt den eingebetteten Modus sowie den Shopper- oder Servermodus und bleibt mit MySQL-Treibern und SQL-Syntax kompatibel.

In der Fähigkeitsmatrix suchdb ist gekennzeichnet als:

  • Eingebettete Datenbank wird unterstützt
  • Eigenständige Datenbank unterstützt
  • Verteilte Datenbank wird nicht unterstützt

während das vollständige OceanBase-Produkt den verteilten Fall abdeckt.

Aus Sicht des Datenmodells suchdb unterstützt:

  • Relationale Daten mit Commonplace-SQL
  • Vektorsuche
  • Volltextsuche
  • JSON-Daten
  • Räumliche GIS-Daten

alles innerhalb einer Speicher- und Indexierungsschicht.

Hybride Suche als Kernfunktion

Das Hauptmerkmal von OceanBase ist die Hybridsuche. Hierbei handelt es sich um eine Suche, die vektorbasiertes semantisches Abrufen, Volltext-Schlüsselwortabruf und Skalarfilter in einer einzigen Abfrage und einem einzigen Rating-Schritt kombiniert.

suchdb implementiert die Hybridsuche über ein Systempaket namens DBMS_HYBRID_SEARCH mit zwei Einstiegspunkten:

  • DBMS_HYBRID_SEARCH.SEARCH gibt Ergebnisse als JSON zurück, sortiert nach Relevanz
  • DBMS_HYBRID_SEARCH.GET_SQL, das den konkreten SQL-String zurückgibt, der für die Ausführung verwendet wird

Der Hybridsuchpfad kann Folgendes ausführen:

  • reine Vektorsuche
  • reine Volltextsuche
  • kombinierte Hybridsuche

und kann relationale Filter und Verknüpfungen in den Speicher verschieben. Es unterstützt auch Strategien zur Neubewertung von Abfragen wie gewichtete Bewertungen und reziproke Rangfusion und kann auf großen Sprachmodellen basierende Neubewertungen integrieren.

Für Retrieval Augmented Era (RAG) und Agentenspeicher bedeutet dies, dass Sie eine einzige SQL-Abfrage schreiben können, die semantische Übereinstimmungen bei Einbettungen, exakte Übereinstimmungen bei Produktcodes oder Eigennamen und relationale Filterung bei Benutzer- oder Mandantenbereichen durchführt.

Particulars zur Vektor- und Volltext-Engine

Im Kern stellt seedb a zur Verfügung moderner Vektor Und Volltextstapel.

Für Vektoren, seendb:

  • unterstützt dichte Vektoren und spärliche Vektoren
  • unterstützt Manhattan-, Euklidische, innere Produkt- und Kosinus-Distanzmetriken
  • stellt im Speicher Indextypen wie HNSW, HNSW SQ, HNSW BQ bereit
  • bietet festplattenbasierte Indextypen, einschließlich IVF und IVF PQ

Der Hybrid-Vektorindex zeigt, wie Sie Rohtext speichern, seedb automatisch ein Einbettungsmodell aufrufen lassen und das System den entsprechenden Vektorindex ohne separate Vorverarbeitungspipeline verwalten lassen können.

Für Textual content bietet seedb eine Volltextsuche mit:

  • Schlüsselwort-, Phrasen- und boolesche Abfragen
  • BM25-Rating für Relevanz
  • mehrere Tokenizer-Modi

Der entscheidende Punkt ist, dass Volltext- und Vektorindizes erstklassig sind und in denselben Abfrageplaner integriert sind wie Skalarindizes und GIS-Indizes, sodass für die Hybridsuche keine externe Orchestrierung erforderlich ist.

KI-Funktionen innerhalb der Datenbank

suchdb Enthält integrierte KI-Funktionsausdrücke, mit denen Sie Modelle direkt aus SQL aufrufen können, ohne dass jeder Aufruf von einem separaten Anwendungsdienst vermittelt wird. Die Hauptfunktionen sind:

  • AI_EMBED zum Konvertieren von Textual content in Einbettungen
  • AI_COMPLETE für die Textgenerierung mithilfe eines Chat- oder Vervollständigungsmodells
  • AI_RERANK, um eine Kandidatenliste neu zu ordnen
    AI_PROMPT zum Zusammenstellen von Eingabeaufforderungsvorlagen und dynamischen Werten in einem JSON-Objekt für AI_COMPLETE

Modellmetadaten und Endpunkte werden vom DBMS_AI_SERVICE-Paket verwaltet, mit dem Sie externe Anbieter registrieren, URLs festlegen und Schlüssel konfigurieren können – alles auf der Datenbankseite.

Multimodale Daten und Workloads

suchdb ist für die Verarbeitung mehrerer Datenmodalitäten in einem Knoten ausgelegt. Es verfügt über eine multimodale Daten- und Indexierungsebene, die Vektoren, Textual content, JSON und GIS abdeckt, sowie über eine Multimodell-Rechenebene für hybride Arbeitslasten über Vektor-, Volltext- und Skalarbedingungen hinweg.

Es stellt außerdem JSON-Indizes für Metadatenabfragen und GIS-Indizes für räumliche Bedingungen bereit. Dies ermöglicht Abfragen wie:

  • semantisch ähnliche Dokumente finden
  • Filtern Sie nach JSON-Metadaten wie Mandant, Area oder Kategorie
  • durch räumlichen Bereich oder Polygon einschränken

ohne den gleichen Motor zu verlassen.

Da seedb von der OceanBase-Engine abgeleitet ist, erbt es ACID-Transaktionen, Zeilen- und Spalten-Hybridspeicher und vektorisierte Ausführung, obwohl hochskalierte verteilte Bereitstellungen weiterhin eine Aufgabe für die gesamte OceanBase-Datenbank sind.

Vergleichstabelle

Wichtige Erkenntnisse

  1. KI-native Hybridsuche: seekdb vereint Vektorsuche, Volltextsuche und relationale Filterung in einer einzigen SQL- und DBMS_HYBRID_SEARCH-Schnittstelle, sodass RAG- und Agent-Workloads den Abruf mehrerer Signale in einer Abfrage ausführen können, anstatt mehrere Engines zusammenzufügen.
  2. Multimodale Daten in einer Engine: seedb speichert und indiziert relationale Daten, Vektoren, Textual content, JSON und GIS in derselben Engine, wodurch KI-Anwendungen Dokumente, Einbettungen und Metadaten konsistent halten können, ohne separate Datenbanken zu pflegen.
  3. In Datenbank-KI-Funktionen für RAG: Mit AI_EMBED, AI_COMPLETE, AI_RERANK und AI_PROMPT kann seedb Einbettungsmodelle, LLMs und Reranker direkt aus SQL aufrufen, was RAG-Pipelines vereinfacht und mehr Orchestrierungslogik in die Datenbankebene verlagert.
  4. Einzelner Knoten, eingebettetes benutzerfreundliches Design: seedb ist eine MySQL-kompatible Einzelknoten-Engine, die eingebettete und eigenständige Modi unterstützt, während verteilte, groß angelegte Bereitstellungen weiterhin die Rolle von vollständigem OceanBase übernehmen, wodurch seedb für lokale, Edge- und Service-eingebettete KI-Workloads geeignet ist.
  5. Open-Supply- und Software-Ökosystem: seekdb ist Open Supply unter Apache 2.0 und lässt sich in ein wachsendes Ökosystem von KI-Instruments und Frameworks integrieren, mit Python-Unterstützung über pyseekdb und MCP-basierter Integration für Code-Assistenten und Agenten, sodass es als einheitliche Datenebene für KI-Anwendungen fungieren kann.

Schauen Sie sich das an Repo Und Projekt. Schauen Sie sich gerne bei uns um GitHub-Seite für Tutorials, Codes und Notebooks. Sie können uns auch gerne weiter folgen Twitter und vergessen Sie nicht, bei uns mitzumachen 100.000+ ML SubReddit und Abonnieren Unser Publication. Warten! Bist du im Telegram? Jetzt können Sie uns auch per Telegram kontaktieren.


Asif Razzaq ist CEO von Marktechpost Media Inc.. Als visionärer Unternehmer und Ingenieur setzt sich Asif dafür ein, das Potenzial der künstlichen Intelligenz für das soziale Wohl zu nutzen. Sein jüngstes Unterfangen ist die Einführung einer Medienplattform für künstliche Intelligenz, Marktechpost, die sich durch eine ausführliche Berichterstattung über maschinelles Lernen und Deep-Studying-Nachrichten auszeichnet, die sowohl technisch fundiert als auch für ein breites Publikum leicht verständlich ist. Die Plattform verfügt über mehr als 2 Millionen monatliche Aufrufe, was ihre Beliebtheit beim Publikum verdeutlicht.

[ad_2]

]]>
https://chatgpz.de/artificial-intelligence/oceanbase-veroeffentlicht-seendb-eine-open-supply-ki-native-hybrid-suchdatenbank-fuer-rag-und-ki-agenten-mit-mehreren-modellen/feed/ 0 14370
Gemini Deep Analysis kann neue Daten aus mehreren Quellen integrieren https://chatgpz.de/artificial-intelligence/gemini-deep-analysis-kann-neue-daten-aus-mehreren-quellen-integrieren/ https://chatgpz.de/artificial-intelligence/gemini-deep-analysis-kann-neue-daten-aus-mehreren-quellen-integrieren/#respond Fri, 07 Nov 2025 05:09:14 +0000 http://chatgpz.de/artificial-intelligence/gemini-deep-research-kann-neue-daten-aus-mehreren-quellen-integrieren/ [ad_1]

  • Gemini Deep Analysis kann Daten aus Gmail, Drive, Docs, Slides, Sheets, PDF-Filer und Google Chat integrieren
  • Kombiniert interne Datenanalyse mit Webbrowser für einen Analyseanalysator
  • Perfekt für Marknadsanalysatoren, Kursberichterstatter und Tagesforscher
  • Klicken Sie jetzt über Instruments-Menüs auf den Desktop und klicken Sie auf Mobilgeräte

Google verfügt über die höchste Funktionalität, die es bietet Gemini Deep Analysis – Es ist wichtig, dass Sie Ihre Workspace-Daten nicht mehr verwenden. Nachdem Sie Deep Analysis on-line gestellt und manuell geladen haben, kann AI:nun alles von Ihrer Seite bis zum Gesprächsteam mit anderen teilen.

Das ist der Funke

Öffnen Sie Gemini auf dem Desktop und sehen Sie „Deep Analysis“ im Instruments-Menü. Unter „Quellen“ finden Sie weitere Alternativen zu den Web sites: Gmail, Drive und Chat. Sie müssen Ihr Variety nicht analysieren, und es wird Ihnen nichts ausmachen.​

Deep Analysis beginnt mit einem Arbeitsplan und sucht nach Hunderten von Webbrowsern, die gleichzeitig den Workspace-Service nutzen. Nachdem Sie eine Minute lang einen detaillierten Bericht erstellt haben, der von der Webseite und Ihrem neuen Dokument zitiert wurde.

Die Funktionen sind für alle Gemini-Benutzer verfügbar. Desktop-Versionen auf gemini.google.com sind stay, mit mobilen Apps für Funktionen vor Ort. Sie sind verpflichtet, sich weiterzuentwickeln – alle, die Gemini besuchen.

Weitere Informationen:

https://weblog.google/merchandise/gemini/deep-research-workspace-app-integration

[ad_2]

]]>
https://chatgpz.de/artificial-intelligence/gemini-deep-analysis-kann-neue-daten-aus-mehreren-quellen-integrieren/feed/ 0 13776
Erstellen eines Dungeons & Dragons-Spiels mit mehreren Agenten mit LangChain https://chatgpz.de/data-analytics/erstellen-eines-dungeons-dragons-spiels-mit-mehreren-agenten-mit-langchain/ https://chatgpz.de/data-analytics/erstellen-eines-dungeons-dragons-spiels-mit-mehreren-agenten-mit-langchain/#respond Wed, 29 Oct 2025 11:43:30 +0000 https://chatgpz.de/data-analytics/erstellen-eines-dungeons-dragons-spiels-mit-mehreren-agenten-mit-langchain/ [ad_1]

Stellen Sie sich eine Welt vor, in der KI-Agenten nicht nur Gespräche führen, sondern sich auch auf große Quests begeben, böse Gegner besiegen und zusammenarbeiten, um die Zaubererwelt zu retten. Heute schauen wir uns einen der spannendsten Anwendungsfälle an Große Sprachmodelle. Wir werden mit LangChain ein völlig autonomes Multiplayer-Dungeons & Dragons-Spiel entwickeln.

Dies ist nicht nur eine Einführung Chatbot-Tutorial. Was wir erreichen wollen, ist komplexer: eine funktionierende Zusammenarbeit mehrerer KI-Agenten mit ihren eigenen Persönlichkeiten, ihren eigenen Zielen, die alle in Echtzeit aufeinander reagieren, innerhalb desselben Erzähluniversums. Betrachten Sie es als eine Artwork Animation von Figuren, die eigenständig denken, planen und handeln können und dabei der Figur treu bleiben.

Warum ist das wichtig?

Bevor wir uns mit dem Code befassen, nehmen wir uns einen Second Zeit, um den Wert von zu verstehen Multiagentensysteme und warum sie so transformativ sind:

Bei herkömmlichen KI-Interaktionen ist es ganz einfach: Sie stellen eine Frage und die KI antwortet, und das ist Ihr Gespräch, aber in einem Multi-Agenten-System interagieren Sie im Wesentlichen mit mehreren KI-Agenten gleichzeitig. In unserem Weblog befassen wir uns mit dem Fall des Dungeons & Dragons-Spiels (D&D). Hier sehen wir, wie eine Entität mit einer anderen interagiert, was zu Verhaltensweisen und Narrativen führen kann, bei denen selbst wir als Entwickler nicht wirklich vorhersehen können, was als nächstes passieren wird. Es bietet uns die Möglichkeiten:

  • Dynamische Model des Geschichtenerzählens und der Spieleentwicklung
  • Forschungszwecke bei der Simulation komplexer sozialer Interaktionen
  • Coaching von KI-Systemen durch kollaborative Interaktionen
  • Ansprechende Lehrmittel, die an verschiedene Modalitäten und Lernstile angepasst werden können

Der Anwendungsfall, den wir heute entwickeln, wird die oben genannten Szenarien in der Praxis demonstrieren. Dieser spezielle Anwendungsfall bietet uns ein Beispiel für ein Phänomen von Mensch zu KI und KI-zu-KI-Kooperation oder Interaktion.

Die Architektur: Wie alles zusammenwirkt

Unser System besteht aus drei Hauptklassen, die gleichzeitig arbeiten:

Die DialogueAgent-Klasse

Sie können sich diese Klasse als das Gehirn jedes Charakters vorstellen. Jeder Agent hat nur seine eigene Erinnerung an das Gespräch, hat seine eigene Persönlichkeit (basierend auf den von uns definierten Systemnachrichten), in der er sprechen und zuhören kann. Das Tolle an diesem System ist seine Einfachheit und Geradlinigkeit. Jeder Agent weiß nur, was er gehört hat, was sich für authentische Interaktionen eignet, die Interaktionen mit begrenztem Wissen simulieren.

class DialogueAgent:
    """Agent that may take part in conversations."""

    def __init__(self, identify: str, system_message: SystemMessage, mannequin: ChatOpenAI) -> None:
        self.identify = identify
        self.system_message = system_message
        self.mannequin = mannequin
        self.prefix = f"{self.identify}:"
        self.reset()

    def reset(self):
        self.message_history = ("Right here is the dialog to date.")

    def ship(self) -> str:
        message = self.mannequin(
            (
                self.system_message,
                HumanMessage(content material="n".be a part of(self.message_history + (self.prefix))),
            )
        )
        return message.content material

    def obtain(self, identify: str, message: str) -> None:
        self.message_history.append(f"{identify}: {message}")

Die DialogueSimulator-Klasse

Diese Klasse ist im Grunde das Haupthirn hinter dem Spiel, da sie die Möglichkeit bietet, abwechselnd zwischen den ausgewählten Charakteren und ihren Dialogen zu wechseln. Außerdem können wir festlegen, welcher Charakter wann zuerst spricht, und haben so die volle Kontrolle. Dieser Kurs bietet uns die Flexibilität, komplexe Sprechbefehle anstelle eines starren rundenbasierten Methods zu entwerfen. Es ist wie eine Debatte oder ein Gespräch zwischen den Charakteren, bei dem sie sich zwischendurch gegenseitig unterbrechen dürfen.

class DialogueSimulator:
    """Manages the dialog circulation between brokers."""

    def __init__(
        self,
        brokers: Record(DialogueAgent),
        selection_function: Callable((int, Record(DialogueAgent)), int),
    ) -> None:
        self.brokers = brokers
        self._step = 0
        self.select_next_speaker = selection_function

    def reset(self):
        for agent in self.brokers:
            agent.reset()

    def inject(self, identify: str, message: str):
        for agent in self.brokers:
            agent.obtain(identify, message)
        self._step += 1

    def step(self) -> tuple:
        speaker_idx = self.select_next_speaker(self._step, self.brokers)
        speaker = self.brokers(speaker_idx)
        message = speaker.ship()

        for receiver in self.brokers:
            receiver.obtain(speaker.identify, message)

        self._step += 1
        return speaker.identify, message

Dynamische Charaktergenerierung

Die dynamische Charaktergenerierung ist die Klasse, die dieses Spiel am interessantesten macht und Einzigartigkeit hervorbringt. Wir müssen die Eigenschaften nicht vordefinieren oder Particulars zu den stattfindenden Quests angeben. Stattdessen nutzen wir KI-Modelle (LLMs), um kontextbezogene und detaillierte Hintergrundgeschichten mit angemessenen Beschreibungen der Charaktere und kontextbezogenen Parametern ihrer Missionen bereitzustellen. Dadurch wird das Spiel bei jedem Spiel dynamisch, anstatt sich zu wiederholen. Die Charaktere verhalten sich so, als wären sie am Leben und auf einer Mission, während sie sich automatisch an die Quests anpassen.

# Generate detailed quest
quest_specifier_prompt = (
    SystemMessage(content material="You can also make a job extra particular."),
    HumanMessage(
        content material=f"""{game_description}

You're the storyteller, {storyteller_name}.
Please make the hunt extra particular. Be artistic and imaginative.
Please reply with the required quest in {word_limit} phrases or much less.
Converse on to the characters: {', '.be a part of(character_names)}.
Don't add the rest."""
    ),
)

Die technische Umsetzung

Lassen Sie uns Schicht für Schicht aufschlüsseln, wie der gesamte Code-Workflow funktioniert. Der Code implementiert einen strategischen Ablauf, der dem entspricht, was Menschen tatsächlich tun, wenn sie zusammenarbeiten, beispielsweise in einem Gruppenprojekt oder bei der Zusammenarbeit.

Zeichen werden in Ebenen instanziiert

Zuerst erstellen wir generische Rollen, wie zum Beispiel Harry Potter, Ron Weasley usw. Dann rufen wir einen LLM an, um Charakterbeschreibungen zu erstellen, die Persönlichkeit, Motivationen und Macken zusammenfassen. Schließlich werden diese Charakterbeschreibungen zur Systemnachricht für jeden Agenten und geben ihm eine Identität, in die er eintreten kann.

def get_character_emoji(identify: str) -> str:
    """Return emoji for character."""
    emoji_map = {
        "Harry Potter": "⚡",
        "Ron Weasley": "🦁",
        "Hermione Granger": "📚",
        "Argus Filch": "🐈",
        "Dungeon Grasp": "👾",
    }
    return emoji_map.get(identify, "⚪")

def get_character_color(identify: str) -> str:
    """Return shade class for character."""
    color_map = {
        "Harry Potter": "badge-harry",
        "Ron Weasley": "badge-ron",
        "Hermione Granger": "badge-hermione",
        "Argus Filch": "badge-filch",
    }
    return color_map.get(identify, "")
def generate_character_description(character_name: str, game_description: str, word_limit: int, api_key: str) -> str:
    """Generate character description utilizing LLM."""
    os.environ("OPENAI_API_KEY") = api_key

    player_descriptor_system_message = SystemMessage(
        content material="You possibly can add element to the outline of a Dungeons & Dragons participant."
    )

    character_specifier_prompt = (
        player_descriptor_system_message,
        HumanMessage(
            content material=f"""{game_description}
Please reply with a artistic description of the character, {character_name}, in {word_limit} phrases or much less.
Converse on to {character_name}.
Don't add the rest."""
        ),
    )

    character_description = ChatOpenAI(temperature=1.0)(character_specifier_prompt).content material
    return character_description

Die Konversationsschleife ist unkompliziert

Ein Agent wird ausgewählt, um abwechselnd zu sprechen. Der designierte Agent erstellt den Inhalt der nächsten Nachricht basierend auf dem Gesprächsverlauf, der im Speicher abgelegt wird. Die anderen Agenten empfangen die neue Nachricht und speichern sie. In der Auswahlfunktion findet die Magie statt: Da wir in unserem D&D-Spiel die Verantwortung des Dungeon-Meisters und der anderen Spieler teilten, wechselten wir uns im Kreis ab, um eine narrative Kontinuität zu schaffen.

Speicherverwaltung ist ebenfalls von entscheidender Bedeutung, da es die Grundlage für die Nachrichtenerstellung bildet. Jeder Agent speichert eine Abschrift des Gesprächsverlaufs. Es handelt sich nicht einfach nur um die Aufbewahrung von Speicher. Es ist der Kontext, der jede Antwort beeinflusst. Jeder Charakter erinnert sich an die vorherige(n) Interaktion(en), lernt aus seinen Fehlern und übernimmt im Verlauf des Abenteuers alte Aktionen.

def generate_character_system_message(
    character_name: str,
    character_description: str,
    game_description: str,
    storyteller_name: str,
    word_limit: int,
) -> SystemMessage:
    """Create system message for character."""
    return SystemMessage(
        content material=f"""{game_description}
Your identify is {character_name}.
Your character description is as follows: {character_description}.
You'll suggest actions you intend to take and {storyteller_name} will clarify what occurs whenever you take these actions.
Converse within the first individual from the attitude of {character_name}.
For describing your individual physique actions, wrap their description in '*'.
Don't change roles!
Don't converse from the attitude of anybody else.
Keep in mind you're {character_name}.
Cease talking the second you end talking out of your perspective.
Always remember to maintain your response to {word_limit} phrases!
Don't add the rest."""
    )

Den Code ausführen

In diesem Abschnitt werden wir die gesamte Implementierung durchgehen. Für diesen Schritt sollten Sie einen OpenAI-API-Schlüssel und bestimmte Abhängigkeiten in Ihrer Umgebung installiert haben.

Schritt 1: Installieren Sie die Abhängigkeiten, um die Anwendung in Ihrer Umgebung auszuführen

pip set up streamlit langchain openai python-dotenv streamlit-extras

Folgende Pakete sind notwendig:

  • Streamlit: Das Webframework zum Hosten der Schnittstelle
  • LangChain: Ein Orchestrierungsframework für Multiagentensysteme
  • OpenAI: Bietet Zugriff auf GPT-Modelle für intelligente Agenten
  • python-dotenv: Verwaltet Umgebungsvariablen sicher

Schritt 2: Richten Sie Ihren OpenAI-API-Schlüssel ein, indem Sie ihn entweder direkt im Skript fest codieren oder ihn in .env als Umgebungsvariable speichern und ihn dann aufrufen über:

api_key=

Schritt 3: Starten Sie das Abenteuer

Nachdem die Abhängigkeiten installiert sind, sind Sie nun bereit, das Multiagenten-D&D-Spiel zum Leben zu erwecken! Sie können die Streamlit-App mit dem folgenden Befehl starten:

streamlit run dnd_app.py

Ihr Browser öffnet sich automatisch für „localhost:8501“ und Ihnen wird die App-Oberfläche angezeigt.

Schritt 4: Konfigurieren Sie Ihr Abenteuer über individuelle Optionen

Wenn die App geladen wurde:

  • Geben Sie Ihren API-Schlüssel ein: Kopieren Sie Ihren OpenAI-API-Schlüssel und fügen Sie ihn in die Seitenleiste ein (es sei denn, Sie verwenden .env-Variablen).
  • Wählen Sie Ihre Charaktere aus: Wählen Sie 2–5 Helden aus der Liste aus
  • Passen Sie Ihre Quest an: Ändern Sie das Questziel oder belassen Sie es als Customary-Horkruxjagd
  • Legen Sie Ihre Parameter fest: Legen Sie das Antwortwortlimit und die Länge des Abenteuers fest
  • Beginnen Sie das Abenteuer: Klicken Sie auf „Abenteuer starten“
  • Beobachten Sie, wie die Magie geschieht: Die Charaktere werden mit einzigartigen Persönlichkeiten generiert
  • Bringen Sie die Geschichte voran: Klicken Sie auf „Nächste Runde“, um das Abenteuer voranzutreiben

Bitte denken Sie daran, dass dies ein kleiner Schritt ist. Nachdem Sie den D&D-Anwendungsfall in Aktion gesehen haben, fragen Sie sich vielleicht, was Sie sonst noch entwerfen können. Ein Krimi? Eine Erzählung zur Erforschung des Weltraums? Ein Geschäftsverhandlungssimulator? In dieser Hinsicht handelt es sich um die gleiche zugrunde liegende Architektur, und Ihre Kreativität ist die einzige Grenze.

Was macht diesen Ansatz besonders?

Es gibt eine Facette von Nicht-Spieler-Charakteren in Standardspielen, die eng an das Skript gebunden ist; Sie verfügen über vorgefertigte Gesprächsbäume und definierte Verhaltensgewohnheiten. Mit diesem LangChain-basierten System können wir die Zeichen jedoch so programmieren:

  • Im Kontext improvisieren: Wenn der Spieler eine überraschende Lösung für eine State of affairs vorschlägt, würde ein Charakter normalerweise natürlich reagieren, anstatt den Charakter abrupt zu unterbrechen.
  • Kontinuität der Persönlichkeit zeigen: Die Systemnachricht wirkt als Persönlichkeitsstabilisator und sorgt dafür, dass Harrys Tapferkeit und Rons Loyalität während des gesamten Abenteuers beständig bleiben.
  • Emergentes Storytelling generieren: Wenn wir den NPCs erlauben, sich frei zu unterhalten, passieren erzählerisch interessante Dinge auf eine Weise, die nicht vollständig geschrieben oder geplant ist.

Denken Sie an diesen Second aus unserem früheren Beispiel der Benutzeroberfläche zurück: Als die Gruppe zum ersten Mal auf die Dementoren trifft, überlegt Hermine sofort, ob sie die Abkürzungen vorschlagen soll oder nicht, und Argus Filch äußert Bedenken, sie zu beobachten. Diese Verhaltensweisen ergeben sich direkt aus der definierten Rolle der Figur und der jeweiligen State of affairs.

Wichtige Designmuster, die Sie verwenden werden

Dieser Code veranschaulicht einige starke und nützliche Muster, die in vielen KI-Anwendungen nützlich sind:

  • Das Spherical-Robin mit verschachtelter Planung garantiert, dass der Dungeon-Grasp (DM) den Konflikt und die Konsequenzen für die Aktion jedes Spielers beschreibt. Darüber hinaus conflict die Auswahlfunktion, die ziemlich genial erfasste, ob die nächste Aktion im Schritt die des DM (Schritt % 2 == 0) oder die Aktion eines Spielers conflict, eine sehr einfache und nützliche Struktur zur Statusverwaltung.
  • Die Systemmeldungen sind Ihr zentrales Schema zur Steuerung des Agentenverhaltens. Beachten Sie, wie jede Systemmeldung für jeden Charakter diesem erklärt, dass er stets in der Ich-Perspektive sprechen soll. Oder wie die Aktion durch Sternchen angezeigt und eine Wortbeschränkung angegeben wird (in diesem Fall 50). In gewisser Weise unterliegt jeder Charakter den gleichen Systembeschränkungen und daher ist das resultierende Verhalten konsistent, obwohl die Entscheidungsfreiheit jedes Spielers innerhalb der kreativen Grenzen des Methods liegt.
  • Schließlich kann eine Änderung der Temperatur indirekt auch eine Persönlichkeitsveränderung bewirken. Die Charakterbeschreibung basiert auf der Temperatur = 1,0 für Kreativität, aber die Charaktergewöhnung im Spiel zeigt eine fokussiertere und konsistentere Leistung, wenn die Temperatur = 0,2 eingestellt ist. Dieses Temperaturgleichgewicht ist einfach richtig, nicht zu zufällig, hat aber dennoch den gewissen „Interessanten“-Ingredient von den Anfangseinstellungen an.

Reale Anwendungen jenseits von Spielen

Während unser Beispiel aus Dungeons & Dragons amüsant ist, deutet es auf andere, ernstere Anwendungen der Technologie hin, für die wir Multiagenten verwenden können:

  • Für Bildungszwecke: In einer Bildungssimulation stellen Schüler historische Ereignisse mit einer KI-Darstellung historischer Persönlichkeiten nach. Zum Beispiel könnten Schüler in einem Klassenzimmer den Vertrag von Versailles aushandeln und dabei am Tisch sitzen KI-Avatare der politischen Führer.
  • Für Geschäftstreffen: Bei der Planung von Geschäftsszenarien können Multi-Agenten-Systeme zum Einsatz kommen, die die Dynamik eines Marktes simulieren oder Stakeholder untersuchen, die ein Downside diskutieren oder auf eine Krise reagieren. Groups könnten schwierige Gespräche in einer Umgebung üben, in der es keine Einsätze gibt.
  • Für Forschungszwecke: Forschung und Psychologie haben eine einzigartige Dimension bei der Untersuchung von Themen wie Entscheidungsfindung, Gruppendynamik und sozialer Interaktion und bieten intuitive Möglichkeiten, Studien zu geringeren Kosten und in größerem Maßstab durchzuführen. Forscher könnten Tausende von agentenbasierten Studien zum Testen erstellen.
  • Für Schreibanforderungen: Kreatives Schreiben oder Worldbuilding würden von einer originellen Zusammenarbeit mit einer KI profitieren. Ein Drehbuch könnte Charaktere koordinieren, um Dialoge zu testen, Handlungsstränge zu erstellen oder aufzubauen oder different Handlungsstränge zu erkunden und dabei die ursprüngliche Absicht und Konsistenz des Charakters beizubehalten.

Abschluss

Das von uns entwickelte Spiel dient nicht nur dem Spielerlebnis. Es spiegelt einen schnellen Einstieg in die Entwicklung umfassender interaktiver Erlebnisse durch KI wider. Egal, ob Sie Lehrmittel, kreative Schreibhilfen, Geschäftssimulationen oder sogar das Spielen mit einer KI, die eine Geschichte generiert, erstellen, die Muster, die Sie hier finden, können Ihnen leicht helfen.

Und das Beste daran? Diese Technologie ist jetzt da! Sie benötigen kein Labor, um diese Artwork von Forschung durchzuführen, und Sie müssen auch nicht in die Infrastruktur eines Unternehmens investieren. Mit LangChainSie können Erfahrungen schaffen, die sich vor nicht allzu langer Zeit wie Science-Fiction angefühlt haben.

Starten Sie additionally Ihre IDE, geben Sie Ihren API-Schlüssel ein und beginnen Sie damit, dieses Multi-Agent-Erlebnis vom Papier in die Realität umzusetzen.

Gen AI-Praktikant bei Analytics Vidhya
Abteilung für Informatik, Vellore Institute of Expertise, Vellore, Indien

Derzeit arbeite ich als Gen AI-Praktikant bei Analytics Vidhya, wo ich zu innovativen KI-gesteuerten Lösungen beitrage, die Unternehmen in die Lage versetzen, Daten effektiv zu nutzen. Als Informatikstudent im Abschlussjahr am Vellore Institute of Expertise bringe ich solide Grundlagen in Softwareentwicklung, Datenanalyse und maschinellem Lernen in meine Rolle ein.

Kontaktieren Sie mich gerne unter (e mail protected)

Melden Sie sich an, um weiterzulesen und von Experten kuratierte Inhalte zu genießen.

[ad_2]

]]>
https://chatgpz.de/data-analytics/erstellen-eines-dungeons-dragons-spiels-mit-mehreren-agenten-mit-langchain/feed/ 0 13554
Wie verbindet ich mich mit mehreren Datenquellen in Energy BI? https://chatgpz.de/data-analytics/wie-verbindet-ich-mich-mit-mehreren-datenquellen-in-energy-bi/ https://chatgpz.de/data-analytics/wie-verbindet-ich-mich-mit-mehreren-datenquellen-in-energy-bi/#respond Wed, 11 Jun 2025 17:52:17 +0000 http://chatgpz.de/data-analytics/wie-verbindet-ich-mich-mit-mehreren-datenquellen-in-power-bi/ [ad_1]

Sie haben Energy BI in Ihrem System und fragen sich: „Kann ich tatsächlich Daten von mehr als einer Quelle holen?“ Wie vielleicht sechs verschiedene Quellen oder einige Excel -Dateien mit einer SQL -Datenbank oder sogar einige Reside -Wechselkurse aus dem Web anziehen?

Lassen Sie mich das kurz beantworten – ja, Sie können es complete. Und es ist buchstäblich eines der besten Dinge an Energy BI – es ist für die Verbindung, Mischen und Visualisierung von Daten aus mehreren Quellen erstellt.

In diesem Artikel werde ich Sie durch die Verbindung zu mehreren Datenquellen in Energy BI unter Verwendung realer Beispiele führen. Ich werde auch einige wichtige Tipps zur richtigen Kombination von Daten mitteilen, damit Ihre Berichte nicht später auseinanderfallen.

Datenquellen in Energy BI verstehen

Bevor Sie einspringen, klären wir einfach klar, was genau als „Datenquelle“ zählt?

Nun, in Energy BI kann eine Datenquelle quick alles sein, was Daten enthält. Es könnte sein:

  • Eine Datei wie Excel oder CSV
  • Eine Datenbank (SQL Server, PostgreSQLusw.)
  • Eine Cloud -Plattform (wie Azure oder SharePoint)
  • Ein Reside -Daten -Feed oder eine Net -API
  • Auch ein weiterer Energy BI -Datensatz

Und ja, du kannst eine Verbindung zu mehr als einem davon gleichzeitig herstellen in einem einzigen Bericht. Aber Sie müssen sie intestine verwalten (besonders wenn es um die Beziehungen und die Aktualisierung geht).

Arten von Datenquellen

Um Ihnen eine Perspektive zu geben, so fallen die Quellen im Allgemeinen in Kategorien:

Kategorie Beispiele
Dateien Excel, CSV, XML, JSON, PDF
Datenbanken SQL Server, MySQL, PostgreSQL
Cloud -Dienste SharePoint, OneDrive, Azure
Net & APIs Web sites mit Tabellen, Relaxation -APIs

Hier sind alle von ihnen in Energy BI gelistet.

Arten von Datenquellen in Power BI

Energy BI glänzt wirklich, wenn es darum geht, sich mit allen Arten von Datenquellen zu verbinden. Unabhängig davon, ob Ihre Daten in einer einfachen Excel -Datei, einer soliden SQL -Server -Datenbank, einem Cloud -Dienst oder sogar einer Reside -Net -API leben, kann Energy BI alles nahtlos ziehen. Diese unglaubliche Flexibilität bedeutet, dass Sie leicht Informationen von buchstäblich überall zusammenbringen können, sodass Sie umfassende Dashboards erstellen und Erkenntnisse freischalten können, die das vollständige Bild für Ihr Unternehmen malen.

So stellen Sie eine Verbindung zu mehreren Quellen in Energy BI

Kommen wir nun zum Kernteil des Artikels: Wie genau verbinden Sie all diese verschiedenen Quellen in Energy BI? Lassen Sie mich Sie Schritt für Schritt durchführen.

  1. Open Energy BI Desktop
  2. Klicken „Daten abrufen“ „ Aus dem Hausband.
So stellen Sie eine Verbindung zu mehreren Datenquellen in Power BI | her Schritt 2
  1. Wählen Sie Ihre erste Quelle, sagen Sie: “Excel -Arbeitsmappe “ und klicken Sie auf „Verbinden“.
So stellen Sie eine Verbindung zu mehreren Datenquellen in Power BI | her Schritt 3
  1. Navigieren Sie zur Excel -Datei und öffnen Sie sie.
So stellen Sie eine Verbindung zu mehreren Datenquellen in Power BI | her Schritt 4
  1. Wählen Sie im Navigator nun die Dateien aus, die Sie in die Energy BI importieren müssen, und laden Sie die von Ihnen benötigten Daten. Sie können es in Energy Question transformieren, indem Sie darauf klicken „Daten transformieren“.
So stellen Sie eine Verbindung zu mehreren Datenquellen in Power BI | her Schritt 5
  1. Jetzt werden Ihre Daten in Energy BI geladen.
So stellen Sie eine Verbindung zu mehreren Datenquellen in Power BI | her Schritt 6
  1. Anschließend klicken Sie auf „Daten abrufen“ „ wieder. Diesmal wählen Sie vielleicht wählen Netz.
So stellen Sie eine Verbindung zu mehreren Datenquellen in Power BI | her Schritt 7
  1. Fügen Sie eine URL mit einigen öffentlichen Daten ein (z. B. Ergebnisetabelle auf der Wikipedia -Seite der UEFA European Soccer Championship unter: https://en.wikipedia.org/wiki/uefa_european_football_championship)
So stellen Sie eine Verbindung zu mehreren Datenquellen in Power BI | her Schritt 8
  1. Wählen Sie nach dem Lasten der Daten im Navigator das von Ihnen benötigte Blatt oder die Tabelle aus und Laden in Energy bi. Bei Bedarf können Sie auch Verwandeln Die Daten.
So stellen Sie eine Verbindung zu mehreren Datenquellen in Power BI | her Schritt 9
  1. Wiederholen Sie sich nach Bedarf weiter. Jede Quelle, mit der Sie eine Verbindung herstellen, wird zu einer neuen Tabelle in Ihrem Modell.
So stellen Sie eine Verbindung zu mehreren Datenquellen in Power BI | her Schritt 10

Arten von Verbindungsmodi in Energy BI

Wenn Sie eine Verbindung zu Daten in Energy BI herstellen, haben Sie die Wahl zwischen zwei Hauptverbindungsmodi: Import (was wir zuvor verwendet haben) Und DirektQuery. Jeder Modus hat seine eigenen Stärken und Kompromisse, und das Verständnis ist entscheidend, um effiziente, reaktionsschnelle Dashboards aufzubauen.

1. Importmodus

Dies ist für die meisten Szenarien der am häufigsten verwendete und empfohlene Verbindungsmodus. In dieser Methode zieht Energy BI die Daten aus Ihrer Quelle und speichert sie lokal Innerhalb der .pbix -Datei. Es funktioniert am besten, wenn sich Daten nicht häufig ändern oder wenn hohe Leistung und vollständige Modellierungsfunktionen erforderlich sind.

Vorteile:

  • Hohe Leistung: Da die Daten in die In-Reminiscence-Engine von Energy BI geladen werden, sind die Berichte schnell und sehr reaktionsschnell.
  • Reiche Merkmale: Sie können DAX, komplexe Datentransformationen, berechnete Spalten und benutzerdefinierte Maßnahmen voll ausnutzen.
  • Offline -Zugang: Nach dem Import können die Daten auch ohne Reside -Verbindung zur Datenquelle analysiert werden.

Nachteile:

  • Datenfrische: Da die Daten bis zum Aktualisieren statisch sind, kann Ihr Bericht veraltet sein, es sei denn, Sie planen regelmäßige Aktualisierungen.
  • Dateigrößengrenzen: Sehr große Datensätze können die .pbix -Dateigröße erhöhen und zu Leistungsproblemen führen, wenn sie nicht optimiert sind.

2. DirectQuery -Modus

Im DirectQuery -Modus macht Energy BI nicht Speichern Sie die Daten. Stattdessen sendet es jedes Mal, wenn Sie mit dem Bericht interagieren, Anfragen an die Quelle. Die Daten bestehen im Quellsystem, und Energy BI holt nur das, was erforderlich ist, sobald erforderlich. Es ist die bessere Wahl in Szenarien, in denen Daten in Echtzeit- oder Nahverkehrszeiten von wesentlicher Bedeutung sind. Stellen Sie sicher, dass die zugrunde liegende Datenquelle bei der Verwendung häufiger Abfragelasten effizient verarbeiten kann.

Vorteile:

  • Echtzeitzugriff: Sie sehen immer die neuesten Daten, die preferrred für operative oder überwachen Dashboards sind.
  • Keine Größenbeschränkungen: Da die Daten nicht in der Berichtsdatei gespeichert sind, gibt es keine Bedenken, Speicher- oder Dateigrößengrenzen zu treffen.

Nachteile:

  • Langsamere Leistung: Jede Klick oder Interaktion sendet eine Abfrage an die Quelle, die zu Verzögerungen führen kann, abhängig von der Geschwindigkeit und Arbeitsbelastung der Quelle.
  • Begrenzte Funktionalität: Einige Energy BI -Merkmale (wie bestimmte DAX -Funktionen, Datentransformationen und berechnete Tabellen) sind eingeschränkt oder nicht verfügbar.
  • Abhängigkeit von der Quellenverfügbarkeit: Wenn Ihre Quelle ausfällt, bricht oder lädt Ihr Bericht langsam.

Wenn Sie dies ausprobieren oder ein Tutorial schreiben (wie ich es hier mache), verwenden Sie am besten Datenquellen, die kostenlos und einfach zugreifen können. Hier sind meine Lieblingsaussichten:

Quelle Warum ist es nützlich
Excel / CSV Leicht zu erstellen Scheindaten
Webseite / API Abrufen Reside -Daten wie Wechselkurse oder Wetter
Odata Feed Microsoft bietet öffentliche Odata -Feeds (Northwind)
Lokaler SQL -Server Bietet Daten in einer Struktur im Datenbankstil

Bei all diesen kostenlosen Optionen können Sie Quellen wie Salesforce oder Azure überspringen, es sei denn, Sie bezahlen bereits für diese Plattformen.

Kombination von Daten aus mehreren Quellen in Energy BI

Jetzt haben Sie all diese Quellen in Ihrem Bericht, aber wie können Sie sie zusammenarbeiten?

Hier Energy -Abfrage und die Modellansicht Komm ins Spiel.

In Energy Question können Sie:

  • Verwandeln Jeder Datensatz, benennt sich Spalten um, filtere Zeilen und Ändern von Datentypen
  • Verwenden Anhängen Wenn Tabellen ähnlich sind (Stapelreihen)
  • Verwenden Verschmelzen Wenn Sie Tische mit einem Schlüssel beitreten möchten (wie a Vlookup)

In der Modellansicht können Sie:

  • Definieren Beziehungen Zwischen Tabellen (z. B. Bestellentabelle Hyperlinks zur Produkttabelle)
  • Immer nach Eins-zu-Many oder Viele zu vielen Probleme
  • Erstellen Sie keine kreisförmigen Referenzen, Energy BI magazine diese nicht

Überlegungen zur Leistung und Aktualisierung

Sie müssen beim Mischen von Datenquellen vorsichtig sein, insbesondere wenn einige von ihnen aus der Cloud stammen und einige lokal sind. Hier sind ein paar Dinge zu beachten:

  • Importmodus = Schnellster Weg, um die Daten zu erhalten, und unterstützt alle Energy BI -Funktionen.
  • DirektQuery = bleibt aktualisiert, aber langsamer, mit begrenzten Transformationen.
  • Einige Quellen aktualisieren sich nicht automatisch, Sie benötigen eine Tor für sie (besonders für On-Prem SQL).
  • Die geplante Aktualisierung kann fehlschlagen, wenn Anmeldeinformationen nicht korrekt eingerichtet sind.

Professional -Tipp: Wenn möglich, behalten Sie alle Ihre Daten im selben Modus (entweder alle Import oder alle DirektQuery), um Kompatibilitätskopfschmerzen zu vermeiden.

Beispiel für Anwendungsfall

Angenommen, Sie möchten ein Dashboard zeigen, das zeigt:

  • Monatliches Price range: aus einer CSV -Datei
  • Tatsächliche Verkäufe: aus einer SQL-Servertabelle (vor Ort)
  • Wechselkurse: von einer öffentlichen API (wie Exchangeate-api.com)

So können Sie es tun:

  1. Schließen Sie eine Verbindung zum Take a look at/CSV an
  1. Laden Sie die Price range -Tabelle. Ich benutze hier eine Beispieltabelle. Laden Sie Ihren eigenen Datensatz gerne.
  1. Stellen Sie eine Verbindung zum SQL Server her.
  1. Laden Sie den Verkauf nach Regionslaten (oder andere Daten Ihrer Wahl). Geben Sie im Dialogfeld SQL Server Database die Namen Server und Datenbank (non-obligatory) ein und stellen Sie sicher, dass der Datenkonnektivitätsmodus auf den Import gesetzt ist.
  1. Wählen Sie OK und überprüfen Sie im nächsten Bildschirm Ihre Anmeldeinformationen und wählen Sie dann Join.
  2. Wählen Sie die erforderlichen Tabellen aus und laden Sie die Daten.
  3. Verwenden Information> Net abrufen Wechselkurse ziehen (https://app.exchangangerate-api.com).
  1. In Energy -Abfrage transformieren und formatieren Sie alle Tabellen.
  1. Führen Sie den Wechselkurs mit dem Umsatz zusammen, um Werte zu konvertieren.
  2. Erstellen Sie Visuals (Balkendiagramme, KPIs, Karten).

Growth, jetzt haben Sie einen Bericht, der mit Daten aus 3 sehr unterschiedlichen Quellen kommuniziert.

Denken Sie daran:

  • Verwenden Importmodus Es sei denn, Sie benötigen Reside -Daten.
  • Kombinieren Sie die Daten sorgfältig, reinigen Sie sie zuerst und beziehen Sie sich dann nach Bedarf.
  • Mischen Sie nicht verrückt, jede mögliche Quelle zu mischen. Fangen Sie klein an und wachsen Sie nach Bedarf.
  • Wenn Sie neu sind, versuchen Sie es mit Excel + Odata + Net -APIalles frei und einfach zu bedienen.

Wichtiger Hinweis für SQL-Serverdaten (lokale)

Für Ihre SQL Server-Daten müssen Sie, da es sich um eine lokale Quelle handelt, ein Energy BI-On-Premises-Datengateway einrichten. Stellen Sie sich dieses Gateway als eine sichere Brücke vor, die es ermöglicht, dass Energy BI (der in der Cloud arbeitet) sicher zu einer Verbindung zu Ihrem lokalen SQL Server -Datenbank.

Sobald das Gateway konfiguriert ist, können Sie automatische Daten -Aktualisierungen für Ihren Bericht planen. Dies bedeutet, dass Ihr Dashboard mit den neuesten Verkaufszahlen auf dem Laufenden bleibt, ohne dass Sie die Daten im Energy BI-Desktop manuell aktualisieren müssen. Sie können die Aktualisierungsfrequenz (z. B. täglich, stündlich) direkt in den Energy BI -Dienst einstellen.

Ohne das Gateway könnte Energy BI Ihren lokalen SQL -Server nicht erreichen, und Sie würden die Verkaufsdaten jedes Mal manuell importieren, wenn Sie Ihren Bericht aktualisieren möchten.

Abschluss

Die Verbindung zu mehreren Datenquellen in Energy BI ist nicht nur möglich, sondern eine der stärksten Fähigkeiten der Plattform. Energy BI macht es tremendous einfach (und leistungsfähig), Daten aus lokalen Excel -Dateien, Cloud -Plattformen, SQL -Datenbanken, Reside -APIs zu ziehen – Sie nennen es. Es gibt Ihnen die Flexibilität, alle diese Daten in einen einzelnen, einheitlichen und aufschlussreichen Bericht zu mischen. Der Schlüssel zum Erfolg liegt jedoch in der Verwaltung Ihrer Datenbeziehungen, der Auswahl der richtigen Verbindungsmodi und der Planung von Aktualisierungsanforderungen. Mit ein wenig Übung bauen Sie leistungsstarke, Multi-Supply-Dashboards, die die komplette Geschichte erzählen, ohne Schwitzen zu brechen.

Melden Sie sich an, um weiter zu lesen und Experten-Kuratinhalte zu genießen.

[ad_2]

]]>
https://chatgpz.de/data-analytics/wie-verbindet-ich-mich-mit-mehreren-datenquellen-in-energy-bi/feed/ 0 9868