Genehmigte Modellupdates über MQTT liefern

Senden Sie neue, genehmigte Koeffizienten an einen laufenden Prädiktor über MQTT. Der Prädiktor verwendet sie für nachfolgende Messungen. Das Erhalten des Updates selbst liefert keine Vorhersage.

Dieses Beispiel beginnt mit einem genehmigten Modell aus deiner Anwendung, genannt Supervisor. Der benutzerdefinierte Prädiktor speichert seine Koeffizienten im Speicher.

Wie die Rückkopplungsschleife funktioniert

Diagramm der genehmigten Modellbereitstellung über zwei Graphen. Integrierte Filter- und Zuordnungstransformationen veröffentlichen ein genehmigtes Modell in factory/model-updates. Ein benutzerdefinierter Prädiktor aktiviert es und verwendet es dann für spätere Lesevorgänge. Nur Vorhersagen erreichen factory/predictions-from-updates.

Zwei DataflowGraph-Ressourcen leiten genehmigte Modelle weiter und generieren Vorhersagen. Eine Messung verwendet v8, nachdem diese Prädiktorinstanz sie aktiviert hat.

  1. Extern genehmigen. Der Supervisor veröffentlicht einen genehmigten Umschlag („Envelope“) in factory/approved-envelopes.
  2. Mit integrierten Transformationen erneut veröffentlichen. republish-approved-model filtert die Genehmigung, extrahiert approvedModel und ändert das Zielthema in factory/model-updates.
  3. Aktivieren, dann vorhersagen. predict-from-approved-updates liefert Updates und factory/readings an den vom Kunden erstellten Prädiktor. Ein Update ändert sein Modell ohne eine Vorhersage. Ein späterer Lesevorgang erzeugt eine Vorhersage in factory/predictions-from-updates. Update-Bestätigungen werden unterdrückt.

Die Zuordnung legt $metadata.topic auf "model-updates" fest. Das Ziel löst factory/${outputTopic} in factory/model-updates auf. Ein festes dataDestination: factory/model-updates funktioniert ebenfalls.

Für einen optionalen nächsten Zyklus gleicht eine externe Anwendung Vorhersagen mit gemessenen Gewichtungen ab, passt einen Kandidaten an und überprüft ihn und sendet ihn in factory/model-proposals an den Supervisor. Für die Bereitstellung im Statusspeicher speichern Sie genehmigte Koeffizienten und lesen Sie sie für die Vorhersage.

Voraussetzungen

Erfüllen Sie die gemeinsamen Beispielvoraussetzungen, einschließlich des factory-mqtt Profils und des default Endpunkts. Verwenden Sie YAML zum Debuggen und Azure CLI oder Bicep für das Produktionsmanagement.

Verwenden Sie den bestehenden default Registry-Endpunkt für integrierte Transformationen und factory-artifacts für das benutzerdefinierte Artefakt. Schließen Sie die Einrichtung des gemeinsamen Einzelinstanz-Profils ab, bevor Sie diese Diagramme bereitstellen, damit Messwerte und Updates dieselbe Prädiktorinstanz erreichen. Die Bereitstellungs-Tabs erstellen oder ändern keine Profile oder Registry-Endpunkte.

Legen Sie für CLI-Bereitstellungen AIO_INSTANCE_NAME und RESOURCE_GROUP auf Ihre vorhandene Instanz und Ressourcengruppe fest. Für Bicep-Deployments solltest du auch CUSTOM_LOCATION_NAME auf den bestehenden benutzerdefinierten Standort der Instanz festlegen.

Konfigurieren Sie die Feedback-Graphen

Diese Themen verbinden den Supervisor, den Graphen für die erneute Veröffentlichung und den Vorhersagegraphen:

Thema Herausgeber → Consumer Purpose
factory/readings Sensoren → Vorhersagediagramm Trigger-Vorhersagen
factory/approved-envelopes Supervisor → Graph zur Neuveröffentlichung Genehmigtes Modell plus Überprüfungsinformationen
factory/model-updates Graph für die erneute Veröffentlichung → Vorhersagegraph Extrahierte, genehmigte Modell-Payload
factory/predictions-from-updates Vorhersagegraph → nachgelagerter Korrelator Vorhersagen, keine Modellaktualisierungen

Der Supervisor veröffentlicht diesen synthetischen Umschlag nach der Genehmigung gemäß der Richtlinie Ihrer Anwendung. Die Brokerautorisierung muss die Veröffentlichung in factory/approved-envelopes und factory/model-updates auf vertrauenswürdige Writer beschränken. Die Genehmigung hängt von dieser Vertrauensstellung sowie vom Feld approved: true ab.

Im Beispiel werden Nachrichten nach kind und nicht nach Thema ausgewählt. Nur vertrauenswürdige Herausgeber dürfen in einem der Prädiktoreingabethemen veröffentlichen, einschließlich factory/readings. Bei nicht vertrauenswürdigen Sensor-Publishern sollten Sie das Thema und die Nachrichtenart vor dem Prädiktor validieren.

Stellen Sie beide Graphen mithilfe der Bereitstellungs-Tabs im folgenden Abschnitt bereit. Abonnieren Sie factory/predictions-from-updates, und veröffentlichen Sie dann diesen Umschlag in factory/approved-envelopes. Überprüfen Sie die Prädiktordiagnose auf Aktivierung, bevor Sie den Beispiellesevorgang veröffentlichen. Verwenden Sie die Authentifizierungs- und TLS-Einstellungen Ihres Brokers.

{
  "approval": {"approved": true, "reviewId": "review-42"},
  "approvedModel": {
    "kind": "model",
    "assetId": "line-1",
    "updateId": "update-42",
    "expectedModelVersion": 7,
    "modelVersion": 8,
    "speedCoefficient": 2,
    "temperatureCoefficient": 0.5,
    "intercept": 173
  }
}

Graph für die erneute Veröffentlichung:

  1. Öffnen Sie in der Betriebsumgebung Ihre Instanz, und wählen Sie Datenflussgraph>Datenflussgraph erstellen aus.

  2. Benennen Sie das Diagramm republish-approved-model und wählen Sie das default Profil aus.

  3. Quelle source mit Endpunkt factory-mqtt und Thema factory/approved-envelopeshinzufügen.

  4. Filter-Transform approved-only hinzufügen, mit azureiotoperations/graph-dataflow-filter:1.1.0 vom Registry-Endpunkt default. Legen Sie Eingabe approval.approved ?? false und Ausdruck $1 != true fest. Diese Regel verwirft nicht genehmigte Umschläge.

  5. Fügen Sie die Map-Transformation extract-and-route hinzu, unter Verwendung von azureiotoperations/graph-dataflow-map:1.0.0 aus dem Registry-Endpunkt default. Konfigurieren Sie diese Regeln der Reihe nach:

    Input Ausgabe Ausdruck
    approvedModel.kind kind Leer lassen
    approvedModel.assetId assetId Leer lassen
    approvedModel.updateId updateId Leer lassen
    approvedModel.expectedModelVersion expectedModelVersion Leer lassen
    approvedModel.modelVersion modelVersion Leer lassen
    approvedModel.speedCoefficient speedCoefficient Leer lassen
    approvedModel.temperatureCoefficient temperatureCoefficient Leer lassen
    approvedModel.intercept intercept Leer lassen
    approvedModel.assetId $metadata.topic "model-updates"
  6. Fügen Sie Ziel destination mit Endpunkt factory-mqtt und Topic factory/${outputTopic} hinzu.

  7. Verbinden Sie source → approved-only → extract-and-route → destination und wählen Speichern.

Der Graph veröffentlicht das unten extrahierte Modell in factory/model-updates. Ein Umschlag mit falscher oder fehlender Genehmigung erzeugt keine Ausgabe.

{"kind":"model","assetId":"line-1","updateId":"update-42","expectedModelVersion":7,"modelVersion":8,"speedCoefficient":2,"temperatureCoefficient":0.5,"intercept":173}

Für dynamisches Themenrouting sollten die Ziele innerhalb eines vom Betreiber genehmigten Sets bleiben.

Vorhersagegraph: Verwenden Sie das benutzerdefinierte graph-versioned-predictor Beispiel aus dem factory-artifacts Registry-Endpunkt für ghcr.io, wie in den Beispielvoraussetzungen beschrieben. Das Beispiel startet die Ressource line-1 mit dem Modell v7 und den Koeffizienten 2, 0.5 und 175, bereit, die genehmigte v8-Nachricht zu akzeptieren.

Dieses Beispiel verwendet ein benutzerdefiniertes Artefakt aus ghcr.io. Das Operations-Erlebnis unterstützt benutzerdefinierte Artefakte aus dem Azure Container Registry (ACR), nicht aus GHCR. Verwenden Sie den Tab Azure CLI oder Bicep, um dieses Beispiel unverändert bereitzustellen, inklusive des Filters nach dem benutzerdefinierten Prädiktor.

Für den unterstützten UI-Workflow für benutzerdefinierte Artefakte siehe WASM-Transformationen verwenden. Die Betriebsumgebung generiert Verbindungen aus dem ausgewählten Artefakt. Das Bearbeiten dieser Verbindungen wird nicht unterstützt. Die Neuveröffentlichung des Prädiktors allein in ACR erzeugt nicht die vollständige Prädiktor-und-Filter-Pipeline dieses Beispiels.

Lesevorgang zur Veröffentlichung in factory/readings nach der v8-Aktivierung:

{"kind":"reading","assetId":"line-1","pieceId":"part-44","speed":10,"temperature":20}

Ausgabe auf factory/predictions-from-updates:

{"kind":"prediction","assetId":"line-1","pieceId":"part-44","modelVersion":8,"speed":10,"temperature":20,"speedCoefficient":2,"temperatureCoefficient":0.5,"intercept":173,"predictedWeight":203}

Der Beispielprädiktor besitzt einen begrenzten Status pro Ressource und Überprüfungen der erwarteten Version im Arbeitsspeicher. Sein Graph unterdrückt intern Modell-Aktualisierungsbestätigungen; der zusätzliche reine Vorhersagefilter oben schützt auch das Ziel. Für ein Asset mit fehlendem Anfangsmodell protokolliert es eine Diagnose und überspringt die Vorhersage. Führe eine Verarbeitungsinstanz für diese Demo aus, damit Messwerte und Updates denselben Zustand teilen. Standardmäßig kann jedes Asset 512 Updates akzeptieren; wenn die Kapazität erreicht ist, koordinieren Sie einen Neustart mit dem aktuell genehmigten Modell, anstatt den Update-Verlauf zu verwerfen.

Der externe Supervisor ist für dauerhafte Genehmigungen, Update-IDs und die Wiederherstellung zuständig. Bevor Sie nach einem Neustart Messwerte zulassen, setzen Sie die settings-Konfiguration des Graphen auf ein vollständiges JSON-Objekt, das "role":"versioned-predictor" und das zuletzt genehmigte initialModels enthält. Alternativ können Sie Lesevorgänge anhalten, während Sie genehmigte Updates in der Versionsreihenfolge aus einem bekannten anfänglichen Modell wiedergeben. Durch die Wiederverwendung des Demostandardwerts würde v7 wiederhergestellt.

Verhindern, dass Updates zu neuen Auslösern werden

Behandle ein genehmigtes Modellupdate als Zustandsänderung:

Eingabe für den benutzerdefinierten Prädiktor Zustandsänderung Vorhersageausgabe
Lesen mit einem gültigen aktiven Modell Kein Eine Vorhersage mit ihrer Modellversion
Genehmigtes Update der nächsten Version mit übereinstimmender erwarteter Version Ersetzen Sie die Koeffizienten für dieses Asset Kein
Duplikat- oder älteres Modell-Update Keine; den Grund aufzeichnen Kein

Updates müssen genau eine Version weitergehen: Dieses Beispiel akzeptiert Version 8 nur, während Version 7 aktiv ist. Fehlende Versionen oder widersprüchliche Wiederverwendung einer Update-ID lassen den Status unverändert. Überprüfen Sie die Prädiktor-Diagnostik und das ausgegebene modelVersion; eine erfolgreiche MQTT-Lieferung allein bestätigt die Aktivierung nicht.

Die Anwendung muss die Aktualisierungshäufigkeit begrenzen, veraltete Beobachtungen ablehnen und Vorschläge deduplizieren. Verwenden Sie übereinstimmende Beobachtungen als Trainingsbeispiele. Behalten Sie Bestätigungen und Schreibvorgänge im Statusspeicher auf separaten Pfaden bei.

Halten Sie Graphenverbindungen azyklisch und Quell- und Zielthemen auf demselben nicht zusammenhängenden MQTT-Endpunkt. Siehe Namensregeln und -grenzen.