Schnellstart: Verwenden der Clientbibliothek für die multivariate Anomalieerkennung
Wichtig
Ab dem 20. September 2023 können Sie keine neuen Ressourcen für die Anomalieerkennung mehr erstellen. Der Anomalieerkennungsdienst wird am 1. Oktober 2026 eingestellt.
Hier finden Sie Informationen zu den ersten Schritten mit der multivariaten Clientbibliothek für die Anomalieerkennung für C#. Führen Sie die hier angegebenen Schritte aus, um das Paket zu installieren und mit der Verwendung der bereitgestellten Algorithmen zu beginnen. Die neuen APIs für die multivariate Anomalieerkennung ermöglichen Entwicklern die einfache Integration fortschrittlicher KI zur Erkennung von Anomalien in Metrikgruppen ganz ohne Machine Learning-Kenntnisse oder gekennzeichnete Daten. Abhängigkeiten und Interkorrelationen zwischen verschiedenen Signalen werden automatisch als Schlüsselfaktoren gewertet. Dadurch können Sie Ihre komplexen Systeme leichter proaktiv vor Fehlern schützen.
Die multivariate Clientbibliothek für die Anomalieerkennung für C# kann für Folgendes verwendet werden:
- Erkennen von Anomalien auf Systemebene in einer Gruppe von Zeitreihen
- Betrachten sämtlicher Signale, um ein Problem zu erkennen, wenn die Betrachtung einzelner Zeitreihen nicht ausreicht
- Prädikative Wartung teurer physischer Ressourcen mit dutzenden bis hunderten verschiedenen Arten von Sensoren zur Messung diverser Aspekte der Systemintegrität
Referenzdokumentation der Bibliothek | Quellcode der Bibliothek | Paket (NuGet)
Voraussetzungen
- Azure-Abonnement – Erstellen eines kostenlosen Kontos
- Aktuelle Version von .NET Core
- Sobald Sie über Ihr Azure-Abonnement verfügen, können Sie im Azure-Portal eine Anomalieerkennungsressource erstellen , um Ihren Schlüssel und Endpunkt zu erhalten. Warten Sie die Bereitstellung ab, und wählen Sie dann die Schaltfläche Zu Ressource wechseln aus.
- Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Anomalieerkennungs-API zu verbinden. Der Schlüssel und der Endpunkt werden weiter unten in der Schnellstartanleitung in den Code eingefügt.
Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden.
- Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Anomalieerkennungs-API zu verbinden. Der Schlüssel und der Endpunkt werden weiter unten in der Schnellstartanleitung in den Code eingefügt.
Sie können den kostenlosen Tarif (
Einrichten
Speicherkonto erstellen
Für die multivariate Anomalieerkennung ist es erforderlich, dass Ihre Beispieldatei in Azure Blob Storage gespeichert wird.
- Erstellen Sie ein Azure Storage-Konto.
- Wechseln Sie zu Access Control (IAM), und wählen Sie HINZUFÜGEN aus, um eine Rollenzuweisung hinzuzufügen.
- Suchen Sie die Rolle Storage-Blobdatenleser, markieren Sie diesen Kontotyp, und wählen Sie dann Weiter aus.
- Wählen Sie Zugriff auf verwaltete Identität zuweisen, anschließend Mitglieder auswählen und dann die zuvor erstellte Anomalieerkennungsressource aus. Wählen Sie dann Überprüfen + zuweisen aus.
Diese Konfiguration kann manchmal etwas verwirrend sein. Wenn Sie Probleme haben, können Sie Jupyter Notebook-Beispiel in mehreren Varianten nutzen, in dem dieser Prozess ausführlich beschrieben wird.
Herunterladen von Beispieldaten
Dieser Schnellstart verwendet eine Datei für die Beispieldaten sample_data_5_3000.csv
. Diese Datei können Sie von unseren GitHub-Beispieldaten herunterladen.
Sie können die Beispieldaten auch herunterladen, indem Sie folgenden Befehl ausführen:
curl "https://github.com/Azure-Samples/AnomalyDetector/blob/master/sampledata/multivariate/sample_data_5_3000.csv" --output sample_data_5_3000_.csv
Hochladen von Beispieldaten in ein Speicherkonto
- Wechseln Sie zu Ihrem Speicherkonto, wählen Sie „Container“ aus, und erstellen Sie einen neuen Container.
- Wählen Sie Hochladen aus, und laden Sie die Datei „sample_data_5_3000.csv“ hoch.
- Wählen Sie die hochgeladenen Daten aus, und kopieren Sie die Blob-URL, da Sie diese in einigen Schritten dem Codebeispiel hinzufügen müssen.
Abrufen von Schlüssel und Endpunkt
Für einen erfolgreichen Aufruf des Anomalieerkennungsdiensts benötigen Sie die folgenden Werte:
Variablenname | Wert |
---|---|
ANOMALY_DETECTOR_ENDPOINT |
Diesen Wert finden Sie im Abschnitt Schlüssel und Endpunkt, wenn Sie die Ressource über das Azure-Portal untersuchen. Beispiel für einen Endpunkt: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/ |
ANOMALY_DETECTOR_API_KEY |
Den Wert des API-Schlüssels finden Sie im Abschnitt Schlüssel und Endpunkt, wenn Sie die Ressource über das Azure-Portal untersuchen. Sie können KEY1 oder KEY2 verwenden. |
Wechseln Sie zu Ihrer Ressource im Azure-Portal. Die Werte für Endpunkt und Schlüssel finden Sie im Abschnitt Ressourcenverwaltung. Kopieren Sie die Werte für Endpunkt und Zugriffsschlüssel, da Sie beide für die Authentifizierung Ihrer API-Aufrufe benötigen. Sie können KEY1
oder KEY2
verwenden. Wenn Sie jederzeit zwei Schlüssel zur Verfügung haben, können Sie die Schlüssel auf sichere Weise rotieren und neu generieren, ohne Dienstunterbrechungen zu verursachen.
Erstellen von Umgebungsvariablen
Erstellen und Zuweisen von beständigen Umgebungsvariablen für Ihren Schlüssel und Endpunkt.
Wichtig
Wenn Sie einen API-Schlüssel verwenden, speichern Sie ihn an einer anderen Stelle sicher, z. B. in Azure Key Vault. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und machen Sie ihn nicht öffentlich zugänglich.
Weitere Informationen zur Sicherheit von KI Services finden Sie unter Authentifizieren von Anforderungen an Azure KI Services.
setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"
Erstellen einer neuen .NET Core-Anwendung
Verwenden Sie in einem Konsolenfenster (z. B. cmd, PowerShell oder Bash) den Befehl dotnet new
zum Erstellen einer neuen Konsolen-App mit dem Namen anomaly-detector-quickstart-multivariate
. Dieser Befehl erstellt ein einfaches „Hallo Welt“-Projekt mit einer einzigen C#-Quelldatei: Program.cs.
dotnet new console -n anomaly-detector-quickstart-multivariate
Wechseln Sie zum Ordner der neu erstellten App. Sie können die Anwendung mit folgendem Befehl erstellen:
dotnet build
Die Buildausgabe sollte keine Warnungen oder Fehler enthalten.
...
Build succeeded.
0 Warning(s)
0 Error(s)
...
Installieren der Clientbibliothek
Installieren Sie im Anwendungsverzeichnis mit dem folgenden Befehl die Anomalieerkennungs-Clientbibliothek für .NET:
dotnet add package Azure.AI.AnomalyDetector --prerelease
Öffnen Sie im Projektverzeichnis die Datei program.cs, und ersetzen Sie den Inhalt durch den folgenden Code:
using Azure.AI.AnomalyDetector;
using Azure;
using static System.Environment;
internal class Program
{
private static void Main(string[] args)
{
string endpoint = GetEnvironmentVariable("ANOMALY_DETECTOR_ENDPOINT");
string apiKey = GetEnvironmentVariable("ANOMALY_DETECTOR_API_KEY");
string datasource = "Path-to-sample-file-in-your-storage-account"; // example path:https://docstest001.blob.core.windows.net/test/sample_data_5_3000.csv
Console.WriteLine(endpoint);
var endpointUri = new Uri(endpoint);
var credential = new AzureKeyCredential(apiKey);
//create client
AnomalyDetectorClient client = new AnomalyDetectorClient(endpointUri, credential);
// train
TimeSpan offset = new TimeSpan(0);
DateTimeOffset start_time = new DateTimeOffset(2021, 1, 2, 0, 0, 0, offset);
DateTimeOffset end_time = new DateTimeOffset(2021, 1, 2, 5, 0, 0, offset);
string model_id = null;
try
{
model_id = TrainModel(client, datasource, start_time, end_time);
// detect
end_time = new DateTimeOffset(2021, 1, 2, 1, 0, 0, offset);
MultivariateDetectionResult result = BatchDetect(client, datasource, model_id, start_time, end_time);
if (result != null)
{
Console.WriteLine(string.Format("Result ID: {0}", result.ResultId.ToString()));
Console.WriteLine(string.Format("Result summary: {0}", result.Summary.ToString()));
Console.WriteLine(string.Format("Result length: {0}", result.Results.Count));
Console.WriteLine(string.Format("Anomalies found: {0}", result.Results.Where(r => r.Value.IsAnomaly).Count()));
}
// delete
DeleteModel(client, model_id);
}
catch (Exception e)
{
string msg = string.Format("Multivariate error. {0}", e.Message);
Console.WriteLine(msg);
throw;
}
int GetModelNumber(AnomalyDetectorClient client)
{
int model_number = 0;
foreach (var multivariateModel in client.GetMultivariateModels())
{
model_number++;
}
return model_number;
}
string TrainModel(AnomalyDetectorClient client, string datasource, DateTimeOffset start_time, DateTimeOffset end_time, int max_tryout = 500)
{
try
{
Console.WriteLine("Training new model...");
Console.WriteLine(string.Format("{0} available models before training.", GetModelNumber(client)));
ModelInfo request = new ModelInfo(datasource, start_time, end_time);
request.SlidingWindow = 200;
Console.WriteLine("Training new model...(it may take a few minutes)");
AnomalyDetectionModel response = client.TrainMultivariateModel(request);
string trained_model_id = response.ModelId;
Console.WriteLine(string.Format("Training model id is {0}", trained_model_id));
// Wait until the model is ready. It usually takes several minutes
ModelStatus? model_status = null;
int tryout_count = 1;
response = client.GetMultivariateModel(trained_model_id);
while (tryout_count < max_tryout & model_status != ModelStatus.Ready & model_status != ModelStatus.Failed)
{
Thread.Sleep(1000);
response = client.GetMultivariateModel(trained_model_id);
model_status = response.ModelInfo.Status;
Console.WriteLine(string.Format("try {0}, model_id: {1}, status: {2}.", tryout_count, trained_model_id, model_status));
tryout_count += 1;
};
if (model_status == ModelStatus.Ready)
{
Console.WriteLine("Creating model succeeds.");
Console.WriteLine(string.Format("{0} available models after training.", GetModelNumber(client)));
return trained_model_id;
}
if (model_status == ModelStatus.Failed)
{
Console.WriteLine("Creating model failed.");
Console.WriteLine("Errors:");
try
{
Console.WriteLine(string.Format("Error code: {0}, Message: {1}", response.ModelInfo.Errors[0].Code.ToString(), response.ModelInfo.Errors[0].Message.ToString()));
}
catch (Exception e)
{
Console.WriteLine(string.Format("Get error message fail: {0}", e.Message));
}
}
return null;
}
catch (Exception e)
{
Console.WriteLine(string.Format("Train error. {0}", e.Message));
throw;
}
}
MultivariateDetectionResult BatchDetect(AnomalyDetectorClient client, string datasource, string model_id, DateTimeOffset start_time, DateTimeOffset end_time, int max_tryout = 500)
{
try
{
Console.WriteLine("Start batch detect...");
MultivariateBatchDetectionOptions request = new MultivariateBatchDetectionOptions(datasource, 10, start_time, end_time);
Console.WriteLine("Start batch detection, this might take a few minutes...");
MultivariateDetectionResult response = client.DetectMultivariateBatchAnomaly(model_id, request);
string result_id = response.ResultId;
Console.WriteLine(string.Format("result id is: {0}", result_id));
// get detection result
MultivariateDetectionResult resultResponse = client.GetMultivariateBatchDetectionResult(result_id);
MultivariateBatchDetectionStatus result_status = resultResponse.Summary.Status;
int tryout_count = 0;
while (tryout_count < max_tryout & result_status != MultivariateBatchDetectionStatus.Ready & result_status != MultivariateBatchDetectionStatus.Failed)
{
Thread.Sleep(1000);
resultResponse = client.GetMultivariateBatchDetectionResult(result_id);
result_status = resultResponse.Summary.Status;
Console.WriteLine(string.Format("try: {0}, result id: {1} Detection status is {2}", tryout_count, result_id, result_status.ToString()));
Console.Out.Flush();
}
if (result_status == MultivariateBatchDetectionStatus.Failed)
{
Console.WriteLine("Detection failed.");
Console.WriteLine("Errors:");
try
{
Console.WriteLine(string.Format("Error code: {}. Message: {}", resultResponse.Summary.Errors[0].Code.ToString(), resultResponse.Summary.Errors[0].Message.ToString()));
}
catch (Exception e)
{
Console.WriteLine(string.Format("Get error message fail: {0}", e.Message));
}
return null;
}
return resultResponse;
}
catch (Exception e)
{
Console.WriteLine(string.Format("Detection error. {0}", e.Message));
throw;
}
}
void DeleteModel(AnomalyDetectorClient client, string model_id)
{
client.DeleteMultivariateModel(model_id);
int model_number = GetModelNumber(client);
Console.WriteLine(string.Format("{0} available models after deletion.", model_number));
}
}
}
Ausführen der Anwendung
Führen Sie die Anwendung mit dem Befehl dotnet run
aus dem Anwendungsverzeichnis aus.
dotnet run
Bereinigen von Ressourcen
Wenn Sie ein Azure KI Services-Abonnement bereinigen und entfernen möchten, können Sie die Ressource oder die Ressourcengruppe löschen. Wenn Sie die Ressourcengruppe löschen, werden auch alle anderen Ressourcen gelöscht, die der Ressourcengruppe zugeordnet sind.
Nächste Schritte
Hier finden Sie Informationen zu den ersten Schritten mit der multivariaten Clientbibliothek für die Anomalieerkennung für JavaScript. Führen Sie die hier angegebenen Schritte aus, um das Paket zu installieren und mit der Verwendung der bereitgestellten Algorithmen zu beginnen. Die neuen APIs für die multivariate Anomalieerkennung ermöglichen Entwicklern die einfache Integration fortschrittlicher KI zur Erkennung von Anomalien in Metrikgruppen ganz ohne Machine Learning-Kenntnisse oder gekennzeichnete Daten. Abhängigkeiten und Interkorrelationen zwischen verschiedenen Signalen werden automatisch als Schlüsselfaktoren gewertet. Dadurch können Sie Ihre komplexen Systeme leichter proaktiv vor Fehlern schützen.
Die Clientbibliothek für die multivariate Anomalieerkennung für JavaScript kann für Folgendes verwendet werden:
- Erkennen von Anomalien auf Systemebene in einer Gruppe von Zeitreihen
- Betrachten sämtlicher Signale, um ein Problem zu erkennen, wenn die Betrachtung einzelner Zeitreihen nicht ausreicht
- Prädikative Wartung teurer physischer Ressourcen mit dutzenden bis hunderten verschiedenen Arten von Sensoren zur Messung diverser Aspekte der Systemintegrität
Referenzdokumentation der Bibliothek | Quellcode der Bibliothek | Paket (npm) | Beispielcode
Voraussetzungen
- Azure-Abonnement – Erstellen eines kostenlosen Kontos
- Die aktuelle Version von Node.js
- Sobald Sie über Ihr Azure-Abonnement verfügen, können Sie im Azure-Portal eine Anomalieerkennungsressource erstellen , um Ihren Schlüssel und Endpunkt zu erhalten. Warten Sie die Bereitstellung ab, und wählen Sie dann die Schaltfläche Zu Ressource wechseln aus.
- Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Anomalieerkennungs-API zu verbinden. Der Schlüssel und der Endpunkt werden weiter unten in der Schnellstartanleitung in den Code eingefügt.
Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden.
- Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Anomalieerkennungs-API zu verbinden. Der Schlüssel und der Endpunkt werden weiter unten in der Schnellstartanleitung in den Code eingefügt.
Sie können den kostenlosen Tarif (
Einrichten
Erstellen einer neuen Node.js-Anwendung
Erstellen Sie in einem Konsolenfenster (etwa cmd, PowerShell oder Bash) ein neues Verzeichnis für Ihre App, und rufen Sie es auf.
mkdir myapp && cd myapp
Führen Sie den Befehl npm init
aus, um eine Knotenanwendung mit der Datei package.json
zu erstellen.
npm init
Erstellen Sie eine Datei namens index.js
, und importieren Sie die folgenden Bibliotheken:
'use strict'
const fs = require('fs');
const parse = require("csv-parse/lib/sync");
const { AnomalyDetectorClient } = require('@azure/ai-anomaly-detector');
const { AzureKeyCredential } = require('@azure/core-auth');
Erstellen Sie Variablen für den Azure-Endpunkt und -Schlüssel Ihrer Ressource. Erstellen Sie eine weitere Variable für die Beispieldatendatei.
Hinweis
Sie haben stets die Möglichkeit, einen von zwei Schlüsseln zu verwenden. Dies ermöglicht eine sichere Schlüsselrotation. Verwenden Sie für diesen Schnellstart den ersten Schlüssel.
const apiKey = "YOUR_API_KEY";
const endpoint = "YOUR_ENDPOINT";
const data_source = "YOUR_SAMPLE_ZIP_FILE_LOCATED_IN_AZURE_BLOB_STORAGE_WITH_SAS";
Wichtig
Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Weitere Informationen finden Sie im Artikel zur Sicherheit von Azure KI-Diensten.
Wenn Sie die multivariaten APIs für die Anomalieerkennung verwenden möchten, müssen Sie zunächst Ihre eigenen Modelle trainieren. Bei den Trainingsdaten handelt es sich um mehrere Zeitreihen, die die folgenden Anforderungen erfüllen:
Bei den Zeitreihen muss es sich jeweils um eine CSV-Datei mit genau zwei Spalten in der Headerzeile handeln: „timestamp“ und „value“ (in Kleinbuchstaben). Die „timestamp“-Werte müssen ISO 8601 entsprechen. Für „value“ können ganze Zahlen oder Dezimalzahlen mit einer beliebigen Anzahl von Dezimalstellen verwendet werden. Beispiel:
timestamp | value |
---|---|
2019-04-01T00:00:00Z | 5 |
2019-04-01T00:01:00Z | 3.6 |
2019-04-01T00:02:00Z | 4 |
... |
... |
Jede CSV-Datei muss nach einer anderen Variablen benannt werden, die für das Modelltraining verwendet wird. Beispiel: „temperature.csv“ und „humidity.csv“. Alle CSV-Dateien müssen ohne Unterordner in einer ZIP-Datei verpackt werden. Die ZIP-Datei kann einen beliebigen Namen haben. Die ZIP-Datei muss in Azure Blob Storage hochgeladen werden. Nach dem Generieren der Blob-SAS-URL (Shared Access Signature) für die ZIP-Datei kann sie für das Training verwendet werden. Informationen zum Generieren von SAS-URLs aus Azure Blob Storage finden Sie in diesem Dokument.
Installieren der Clientbibliothek
Installieren Sie die npm-Pakete ms-rest-azure
und azure-ai-anomalydetector
. Die Bibliothek „csv-parse“ wird auch in diesem Schnellstart verwendet:
npm install @azure/ai-anomaly-detector csv-parse
Die Datei package.json
Ihrer App wird mit den Abhängigkeiten aktualisiert.
Codebeispiele
Diese Codeausschnitte veranschaulichen, wie folgende Vorgänge mit der Anomalieerkennungs-Clientbibliothek für Node.js durchgeführt werden:
- Authentifizieren des Clients
- Trainieren eines Modells
- Erkennen von Anomalien
- Exportieren des Modells
- Löschen des Modells
Authentifizieren des Clients
Instanziieren Sie ein AnomalyDetectorClient
-Objekt mit ihrem Endpunkt und Ihren Anmeldeinformationen.
const client = new AnomalyDetectorClient(endpoint, new AzureKeyCredential(apiKey));
Trainieren eines Modells
Erstellen eines Modellergebnisses
Zunächst müssen wir eine Modellanforderung erstellen. Achten Sie darauf, dass Start- und Endzeit mit Ihrer Datenquelle übereinstimmen.
const Modelrequest = {
source: data_source,
startTime: new Date(2021,0,1,0,0,0),
endTime: new Date(2021,0,2,12,0,0),
slidingWindow:200
};
Trainieren eines neuen Modells
Sie übergeben Ihre Modellanforderung an die Methode trainMultivariateModel
des Anomalieerkennungsclients.
console.log("Training a new model...")
const train_response = await client.trainMultivariateModel(Modelrequest)
const model_id = train_response.location?.split("/").pop() ?? ""
console.log("New model ID: " + model_id)
Um zu überprüfen, ob das Training Ihres Modells abgeschlossen ist, können Sie den Status des Modells nachverfolgen:
let model_response = await client.getMultivariateModel(model_id);
let model_status = model_response.modelInfo.status;
while (model_status != 'READY' && model_status != 'FAILED'){
await sleep(10000).then(() => {});
model_response = await client.getMultivariateModel(model_id);
model_status = model_response.modelInfo.status;
}
if (model_status == 'FAILED') {
console.log("Training failed.\nErrors:");
for (let error of model_response.modelInfo?.errors ?? []) {
console.log("Error code: " + error.code + ". Message: " + error.message);
}
}
console.log("TRAINING FINISHED.");
Erkennen von Anomalien
Verwenden Sie die Funktionen detectAnomaly
und getDectectionResult
, um zu ermitteln, ob in Ihrer Datenquelle Anomalien vorhanden sind.
console.log("Start detecting...");
const detect_request = {
source: data_source,
startTime: new Date(2021,0,2,12,0,0),
endTime: new Date(2021,0,3,0,0,0)
};
const result_header = await client.detectAnomaly(model_id, detect_request);
const result_id = result_header.location?.split("/").pop() ?? "";
let result = await client.getDetectionResult(result_id);
let result_status = result.summary.status;
while (result_status != 'READY' && result_status != 'FAILED'){
await sleep(2000).then(() => {});
result = await client.getDetectionResult(result_id);
result_status = result.summary.status;
}
if (result_status == 'FAILED') {
console.log("Detection failed.\nErrors:");
for (let error of result.summary.errors ?? []) {
console.log("Error code: " + error.code + ". Message: " + error.message)
}
}
console.log("Result status: " + result_status);
console.log("Result Id: " + result.resultId);
Exportieren des Modells
Hinweis
Der Exportbefehl dient dazu, multivariate Modelle der Anomalieerkennung in einer containerisierten Umgebung ausführen zu können. Dies wird derzeit nicht für multivariate Modelle unterstützt, aber in Zukunft unterstützt werden.
Verwenden Sie die Funktion exportModel
, um Ihr trainiertes Modell zu exportieren.
const export_result = await client.exportModel(model_id)
const model_path = "model.zip"
const destination = fs.createWriteStream(model_path)
export_result.readableStreamBody?.pipe(destination)
console.log("New model has been exported to "+model_path+".")
Löschen des Modells
Verwenden Sie die Funktion deleteMultivariateModel
, um ein vorhandenes Modell zu löschen, das für die aktuelle Ressource verfügbar ist.
client.deleteMultivariateModel(model_id)
console.log("New model has been deleted.")
Ausführen der Anwendung
Vor der Ausführung der Anwendung kann es hilfreich sein, Ihren Code anhand des vollständigen Beispielcodes zu überprüfen.
Führen Sie die Anwendung mit dem Befehl node
für die Schnellstartdatei aus.
node index.js
Bereinigen von Ressourcen
Wenn Sie ein Azure KI Services-Abonnement bereinigen und entfernen möchten, können Sie die Ressource oder die Ressourcengruppe löschen. Wenn Sie die Ressourcengruppe löschen, werden auch alle anderen Ressourcen gelöscht, die der Ressourcengruppe zugeordnet sind.
Nächste Schritte
Bibliotheksreferenzdokumentation |Quellcode der Bibliothek | Paket (PyPi) |Codebeispiele auf GitHub
Hier finden Sie Informationen zu den ersten Schritten mit der multivariaten Clientbibliothek für die Anomalieerkennung für Python. Führen Sie die hier angegebenen Schritte aus, um das Paket zu installieren und mit der Verwendung der bereitgestellten Algorithmen zu beginnen. Die neuen APIs für die multivariate Anomalieerkennung ermöglichen Entwicklern die einfache Integration fortschrittlicher KI zur Erkennung von Anomalien in Metrikgruppen ganz ohne Machine Learning-Kenntnisse oder gekennzeichnete Daten. Abhängigkeiten und Interkorrelationen zwischen verschiedenen Signalen werden automatisch als Schlüsselfaktoren gewertet. Dadurch können Sie Ihre komplexen Systeme leichter proaktiv vor Fehlern schützen.
Die Clientbibliothek für die multivariate Anomalieerkennung für Python kann für Folgendes verwendet werden:
- Erkennen von Anomalien auf Systemebene in einer Gruppe von Zeitreihen
- Betrachten sämtlicher Signale, um ein Problem zu erkennen, wenn die Betrachtung einzelner Zeitreihen nicht ausreicht
- Prädikative Wartung teurer physischer Ressourcen mit dutzenden bis hunderten verschiedenen Arten von Sensoren zur Messung diverser Aspekte der Systemintegrität
Voraussetzungen
- Azure-Abonnement: Kostenloses Azure-Konto
- Python 3.x
- Sobald Sie über Ihr Azure-Abonnement verfügen, können Sie im Azure-Portal eine Anomalieerkennungsressource erstellen , um Ihren Schlüssel und Endpunkt zu erhalten. Warten Sie die Bereitstellung ab, und wählen Sie dann die Schaltfläche Zu Ressource wechseln aus. Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden.
Einrichten
Installieren der Clientbibliothek Sie können die Clientbibliothek wie folgt installieren:
pip install --upgrade azure.ai.anomalydetector
Speicherkonto erstellen
Für die multivariate Anomalieerkennung ist es erforderlich, dass Ihre Beispieldatei in Azure Blob Storage gespeichert wird.
- Erstellen Sie ein Azure Storage-Konto.
- Wechseln Sie zu Access Control (IAM), und wählen Sie HINZUFÜGEN aus, um eine Rollenzuweisung hinzuzufügen.
- Suchen Sie die Rolle Storage-Blobdatenleser, markieren Sie diesen Kontotyp, und wählen Sie dann Weiter aus.
- Wählen Sie Zugriff auf verwaltete Identität zuweisen, anschließend Mitglieder auswählen und dann die zuvor erstellte Anomalieerkennungsressource aus. Wählen Sie dann Überprüfen + zuweisen aus.
Diese Konfiguration kann manchmal etwas verwirrend sein. Wenn Sie Probleme haben, können Sie Jupyter Notebook-Beispiel in mehreren Varianten nutzen, in dem dieser Prozess ausführlich beschrieben wird.
Herunterladen von Beispieldaten
Dieser Schnellstart verwendet eine Datei für die Beispieldaten sample_data_5_3000.csv
. Diese Datei können Sie von unseren GitHub-Beispieldaten herunterladen.
Sie können die Beispieldaten auch herunterladen, indem Sie folgenden Befehl ausführen:
curl "https://github.com/Azure-Samples/AnomalyDetector/blob/master/sampledata/multivariate/sample_data_5_3000.csv" --output sample_data_5_3000_.csv
Hochladen von Beispieldaten in ein Speicherkonto
- Wechseln Sie zu Ihrem Speicherkonto, wählen Sie „Container“ aus, und erstellen Sie einen neuen Container.
- Wählen Sie Hochladen aus, und laden Sie die Datei „sample_data_5_3000.csv“ hoch.
- Wählen Sie die hochgeladenen Daten aus, und kopieren Sie die Blob-URL, da Sie diese in einigen Schritten dem Codebeispiel hinzufügen müssen.
Abrufen von Schlüssel und Endpunkt
Für einen erfolgreichen Aufruf des Anomalieerkennungsdiensts benötigen Sie die folgenden Werte:
Variablenname | Wert |
---|---|
ANOMALY_DETECTOR_ENDPOINT |
Diesen Wert finden Sie im Abschnitt Schlüssel und Endpunkt, wenn Sie die Ressource über das Azure-Portal untersuchen. Beispiel für einen Endpunkt: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/ |
ANOMALY_DETECTOR_API_KEY |
Den Wert des API-Schlüssels finden Sie im Abschnitt Schlüssel und Endpunkt, wenn Sie die Ressource über das Azure-Portal untersuchen. Sie können KEY1 oder KEY2 verwenden. |
Wechseln Sie zu Ihrer Ressource im Azure-Portal. Die Werte für Endpunkt und Schlüssel finden Sie im Abschnitt Ressourcenverwaltung. Kopieren Sie die Werte für Endpunkt und Zugriffsschlüssel, da Sie beide für die Authentifizierung Ihrer API-Aufrufe benötigen. Sie können KEY1
oder KEY2
verwenden. Wenn Sie jederzeit zwei Schlüssel zur Verfügung haben, können Sie die Schlüssel auf sichere Weise rotieren und neu generieren, ohne Dienstunterbrechungen zu verursachen.
Erstellen von Umgebungsvariablen
Erstellen und Zuweisen von beständigen Umgebungsvariablen für Ihren Schlüssel und Endpunkt.
Wichtig
Wenn Sie einen API-Schlüssel verwenden, speichern Sie ihn an einer anderen Stelle sicher, z. B. in Azure Key Vault. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und machen Sie ihn nicht öffentlich zugänglich.
Weitere Informationen zur Sicherheit von KI Services finden Sie unter Authentifizieren von Anforderungen an Azure KI Services.
setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"
Erstellen einer neuen Python-Anwendung
Erstellen Sie eine neue Python-Datei namens sample_multivariate_detect.py. Öffnen Sie diese anschließend in Ihrem bevorzugten Editor oder Ihrer bevorzugten IDE.
Ersetzen Sie den Inhalt von „sample_multivariate_detect.py“ durch den folgenden Code. Sie müssen die Pfade für die Variable
blob_url
ändern.
import time
from datetime import datetime, timezone
from azure.ai.anomalydetector import AnomalyDetectorClient
from azure.core.credentials import AzureKeyCredential
from azure.ai.anomalydetector.models import *
import os
SUBSCRIPTION_KEY = os.environ['ANOMALY_DETECTOR_API_KEY']
ANOMALY_DETECTOR_ENDPOINT = os.environ['ANOMALY_DETECTOR_ENDPOINT']
ad_client = AnomalyDetectorClient(ANOMALY_DETECTOR_ENDPOINT, AzureKeyCredential(SUBSCRIPTION_KEY))
time_format = "%Y-%m-%dT%H:%M:%SZ"
blob_url = "Path-to-sample-file-in-your-storage-account" # example path: https://docstest001.blob.core.windows.net/test/sample_data_5_3000.csv
train_body = ModelInfo(
data_source=blob_url,
start_time=datetime.strptime("2021-01-02T00:00:00Z", time_format),
end_time=datetime.strptime("2021-01-02T05:00:00Z", time_format),
data_schema="OneTable",
display_name="sample",
sliding_window=200,
align_policy=AlignPolicy(
align_mode=AlignMode.OUTER,
fill_n_a_method=FillNAMethod.LINEAR,
padding_value=0,
),
)
batch_inference_body = MultivariateBatchDetectionOptions(
data_source=blob_url,
top_contributor_count=10,
start_time=datetime.strptime("2021-01-02T00:00:00Z", time_format),
end_time=datetime.strptime("2021-01-02T05:00:00Z", time_format),
)
print("Training new model...(it may take a few minutes)")
model = ad_client.train_multivariate_model(train_body)
model_id = model.model_id
print("Training model id is {}".format(model_id))
## Wait until the model is ready. It usually takes several minutes
model_status = None
model = None
while model_status != ModelStatus.READY and model_status != ModelStatus.FAILED:
model = ad_client.get_multivariate_model(model_id)
print(model)
model_status = model.model_info.status
print("Model is {}".format(model_status))
time.sleep(30)
if model_status == ModelStatus.READY:
print("Done.\n--------------------")
# Return the latest model id
# Detect anomaly in the same data source (but a different interval)
result = ad_client.detect_multivariate_batch_anomaly(model_id, batch_inference_body)
result_id = result.result_id
# Get results (may need a few seconds)
anomaly_results = ad_client.get_multivariate_batch_detection_result(result_id)
print("Get detection result...(it may take a few seconds)")
while anomaly_results.summary.status != MultivariateBatchDetectionStatus.READY and anomaly_results.summary.status != MultivariateBatchDetectionStatus.FAILED:
anomaly_results = ad_client.get_multivariate_batch_detection_result(result_id)
print("Detection is {}".format(anomaly_results.summary.status))
time.sleep(5)
print("Result ID:\t", anomaly_results.result_id)
print("Result status:\t", anomaly_results.summary.status)
print("Result length:\t", len(anomaly_results.results))
# See detailed inference result
for r in anomaly_results.results:
print(
"timestamp: {}, is_anomaly: {:<5}, anomaly score: {:.4f}, severity: {:.4f}, contributor count: {:<4d}".format(
r.timestamp,
r.value.is_anomaly,
r.value.score,
r.value.severity,
len(r.value.interpretation) if r.value.is_anomaly else 0,
)
)
if r.value.interpretation:
for contributor in r.value.interpretation:
print(
"\tcontributor variable: {:<10}, contributor score: {:.4f}".format(
contributor.variable, contributor.contribution_score
)
)
Ausführen der Anwendung
Führen Sie die Anwendung mit dem Befehl python
für die Schnellstartdatei aus.
python sample_multivariate_detect.py
Output
10 available models before training.
Training new model...(it may take a few minutes)
Training model id is 3a695878-a88f-11ed-a16c-b290e72010e0
{'modelId': '3a695878-a88f-11ed-a16c-b290e72010e0', 'createdTime': '2023-02-09T15:34:23Z', 'lastUpdatedTime': '2023-02-09T15:34:23Z', 'modelInfo': {'dataSource': 'https://docstest001.blob.core.windows.net/test/sample_data_5_3000 (1).csv', 'dataSchema': 'OneTable', 'startTime': '2021-01-02T00:00:00Z', 'endTime': '2021-01-02T05:00:00Z', 'displayName': 'sample', 'slidingWindow': 200, 'alignPolicy': {'alignMode': 'Outer', 'fillNAMethod': 'Linear', 'paddingValue': 0.0}, 'status': 'CREATED', 'errors': [], 'diagnosticsInfo': {'modelState': {'epochIds': [], 'trainLosses': [], 'validationLosses': [], 'latenciesInSeconds': []}, 'variableStates': []}}}
Model is CREATED
{'modelId': '3a695878-a88f-11ed-a16c-b290e72010e0', 'createdTime': '2023-02-09T15:34:23Z', 'lastUpdatedTime': '2023-02-09T15:34:55Z', 'modelInfo': {'dataSource': 'https://docstest001.blob.core.windows.net/test/sample_data_5_3000 (1).csv', 'dataSchema': 'OneTable', 'startTime': '2021-01-02T00:00:00Z', 'endTime': '2021-01-02T05:00:00Z', 'displayName': 'sample', 'slidingWindow': 200, 'alignPolicy': {'alignMode': 'Outer', 'fillNAMethod': 'Linear', 'paddingValue': 0.0}, 'status': 'READY', 'errors': [], 'diagnosticsInfo': {'modelState': {'epochIds': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100], 'trainLosses': [1.0493712276220322, 0.5454281121492386, 0.42524269968271255, 0.38019897043704987, 0.3472398854792118, 0.34301353991031647, 0.3219067454338074, 0.3108387663960457, 0.30357857793569565, 0.29986055195331573], 'validationLosses': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 'latenciesInSeconds': [0.3412797451019287, 0.25798678398132324, 0.2556419372558594, 0.3165152072906494, 0.2748451232910156, 0.26111531257629395, 0.2571413516998291, 0.257282018661499, 0.2549862861633301, 0.25806593894958496]}, 'variableStates': [{'variable': 'series_0', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_1', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_2', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_3', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_4', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}]}}}
Model is READY
Done.
--------------------
10 available models after training.
Get detection result...(it may take a few seconds)
Detection is CREATED
Detection is READY
Result ID: 70a6cdf8-a88f-11ed-a461-928899e62c38
Result status: READY
Result length: 301
timestamp: 2021-01-02 00:00:00+00:00, is_anomaly: 0 , anomaly score: 0.1770, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:01:00+00:00, is_anomaly: 0 , anomaly score: 0.3446, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:02:00+00:00, is_anomaly: 0 , anomaly score: 0.2397, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:03:00+00:00, is_anomaly: 0 , anomaly score: 0.1270, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:04:00+00:00, is_anomaly: 0 , anomaly score: 0.3321, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:05:00+00:00, is_anomaly: 0 , anomaly score: 0.4053, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:06:00+00:00, is_anomaly: 0 , anomaly score: 0.4371, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:07:00+00:00, is_anomaly: 1 , anomaly score: 0.6615, severity: 0.3850, contributor count: 5
contributor variable: series_3 , contributor score: 0.2939
contributor variable: series_1 , contributor score: 0.2834
contributor variable: series_4 , contributor score: 0.2329
contributor variable: series_0 , contributor score: 0.1543
contributor variable: series_2 , contributor score: 0.0354
Die Ausgabeergebnisse wurden aus Gründen der Übersichtlichkeit abgeschnitten.
Bereinigen von Ressourcen
Wenn Sie eine Ressource der Anomalieerkennung bereinigen und entfernen möchten, können Sie die eigentliche Ressource oder die Ressourcengruppe löschen. Wenn Sie die Ressourcengruppe löschen, werden auch alle anderen Ressourcen gelöscht, die ihr zugeordnet sind. Möglicherweise sollten Sie auch die von Ihnen erstellten Umgebungsvariablen löschen, wenn Sie diese nicht mehr verwenden möchten.
Hier finden Sie Informationen zu den ersten Schritten mit der multivariaten Clientbibliothek für die Anomalieerkennung für Java. Führen Sie diese Schritte aus, um das Paket zu installieren und mit der Verwendung der vom Dienst zur Verfügung gestellten Algorithmen zu beginnen. Die neuen APIs für die multivariate Anomalieerkennung ermöglichen Entwicklern die einfache Integration fortschrittlicher KI zur Erkennung von Anomalien in Metrikgruppen ganz ohne Machine Learning-Kenntnisse oder gekennzeichnete Daten. Abhängigkeiten und Interkorrelationen zwischen verschiedenen Signalen werden automatisch als Schlüsselfaktoren gewertet. Dadurch können Sie Ihre komplexen Systeme leichter proaktiv vor Fehlern schützen.
Die Clientbibliothek für die multivariate Anomalieerkennung für Java kann für Folgendes verwendet werden:
- Erkennen von Anomalien auf Systemebene in einer Gruppe von Zeitreihen
- Betrachten sämtlicher Signale, um ein Problem zu erkennen, wenn die Betrachtung einzelner Zeitreihen nicht ausreicht
- Prädikative Wartung teurer physischer Ressourcen mit dutzenden bis hunderten verschiedenen Arten von Sensoren zur Messung diverser Aspekte der Systemintegrität
Referenzdokumentation der Bibliothek | Quellcode der Bibliothek | Paket (Maven) | Beispielcode
Voraussetzungen
- Azure-Abonnement – Erstellen eines kostenlosen Kontos
- Aktuelle Version des Java Development Kit (JDK)
- Gradle-Buildtool oder einen anderen Abhängigkeit-Manager
- Sobald Sie über Ihr Azure-Abonnement verfügen, können Sie im Azure-Portal eine Anomalieerkennungsressource erstellen , um Ihren Schlüssel und Endpunkt zu erhalten. Warten Sie die Bereitstellung ab, und wählen Sie dann die Schaltfläche Zu Ressource wechseln aus.
- Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Anomalieerkennungs-API zu verbinden. Der Schlüssel und der Endpunkt werden weiter unten in der Schnellstartanleitung in den Code eingefügt.
Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden.
- Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Anomalieerkennungs-API zu verbinden. Der Schlüssel und der Endpunkt werden weiter unten in der Schnellstartanleitung in den Code eingefügt.
Sie können den kostenlosen Tarif (
Einrichten
Erstellen eines neuen Gradle-Projekts
In dieser Schnellstartanleitung wird der Gradle-Abhängigkeits-Manager verwendet. Weitere Informationen zur Clientbibliothek finden Sie im Maven Central Repository.
Erstellen Sie in einem Konsolenfenster (etwa cmd, PowerShell oder Bash) ein neues Verzeichnis für Ihre App, und rufen Sie es auf.
mkdir myapp && cd myapp
Führen Sie den Befehl gradle init
in Ihrem Arbeitsverzeichnis aus. Mit diesem Befehl werden grundlegende Builddateien für Gradle erstellt, u. a. die Datei build.gradle.kts. Diese Datei wird zur Laufzeit zum Erstellen und Konfigurieren Ihrer Anwendung verwendet.
gradle init --type basic
Wenn Sie zur Auswahl einer DSL aufgefordert werden, wählen Sie Kotlin aus.
Installieren der Clientbibliothek
Navigieren Sie zur Datei build.gradle.kts, und öffnen Sie sie in Ihrer bevorzugten IDE bzw. Ihrem bevorzugten Text-Editor. Kopieren Sie anschließend diese Buildkonfiguration. Achten Sie darauf, dass Sie die Projektabhängigkeiten einbinden.
dependencies {
compile("com.azure:azure-ai-anomalydetector")
}
Erstellen einer Java-Datei
Erstellen Sie einen Ordner für Ihre Beispiel-App. Führen Sie in Ihrem Arbeitsverzeichnis den folgenden Befehl aus:
mkdir -p src/main/java
Navigieren Sie zum neuen Ordner, und erstellen Sie eine Datei mit dem Namen MetricsAdvisorQuickstarts.java. Öffnen Sie sie in Ihrem bevorzugten Editor bzw. Ihrer bevorzugten IDE, und fügen Sie die folgenden import
-Anweisungen hinzu:
package com.azure.ai.anomalydetector;
import com.azure.ai.anomalydetector.models.*;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.http.*;
import com.azure.core.http.policy.*;
import com.azure.core.http.rest.PagedIterable;
import com.azure.core.http.rest.PagedResponse;
import com.azure.core.http.rest.Response;
import com.azure.core.http.rest.StreamResponse;
import com.azure.core.util.Context;
import reactor.core.publisher.Flux;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.ByteBuffer;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
Erstellen Sie Variablen für den Azure-Endpunkt und -Schlüssel Ihrer Ressource. Erstellen Sie eine weitere Variable für die Beispieldatendatei.
Hinweis
Sie haben stets die Möglichkeit, einen von zwei Schlüsseln zu verwenden. Dies ermöglicht eine sichere Schlüsselrotation. Verwenden Sie für diesen Schnellstart den ersten Schlüssel.
String key = "YOUR_API_KEY";
String endpoint = "YOUR_ENDPOINT";
Wichtig
Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Weitere Informationen finden Sie im Artikel zur Sicherheit von Azure KI-Diensten.
Wenn Sie die multivariaten APIs für die Anomalieerkennung verwenden möchten, müssen Sie zunächst Ihre eigenen Modelle trainieren. Bei den Trainingsdaten handelt es sich um mehrere Zeitreihen, die die folgenden Anforderungen erfüllen:
Bei den Zeitreihen muss es sich jeweils um eine CSV-Datei mit genau zwei Spalten in der Headerzeile handeln: „timestamp“ und „value“ (in Kleinbuchstaben). Die „timestamp“-Werte müssen ISO 8601 entsprechen. Für „value“ können ganze Zahlen oder Dezimalzahlen mit einer beliebigen Anzahl von Dezimalstellen verwendet werden. Beispiel:
timestamp | value |
---|---|
2019-04-01T00:00:00Z | 5 |
2019-04-01T00:01:00Z | 3.6 |
2019-04-01T00:02:00Z | 4 |
... |
... |
Jede CSV-Datei muss nach einer anderen Variablen benannt werden, die für das Modelltraining verwendet wird. Beispiel: „temperature.csv“ und „humidity.csv“. Alle CSV-Dateien müssen ohne Unterordner in einer ZIP-Datei verpackt werden. Die ZIP-Datei kann einen beliebigen Namen haben. Die ZIP-Datei muss in Azure Blob Storage hochgeladen werden. Nach dem Generieren der Blob-SAS-URL (Shared Access Signature) für die ZIP-Datei kann sie für das Training verwendet werden. Informationen zum Generieren von SAS-URLs aus Azure Blob Storage finden Sie in diesem Dokument.
Codebeispiele
Diese Codeausschnitte veranschaulichen, wie folgende Vorgänge mit der Anomalieerkennungs-Clientbibliothek für Node.js durchgeführt werden:
- Authentifizieren des Clients
- Trainieren eines Modells
- Erkennen von Anomalien
- Exportieren des Modells
- Löschen des Modells
Authentifizieren des Clients
Instanziieren Sie ein anomalyDetectorClient
-Objekt mit ihrem Endpunkt und Ihren Anmeldeinformationen.
HttpHeaders headers = new HttpHeaders()
.put("Accept", ContentType.APPLICATION_JSON);
HttpPipelinePolicy authPolicy = new AzureKeyCredentialPolicy("Ocp-Apim-Subscription-Key",
new AzureKeyCredential(key));
AddHeadersPolicy addHeadersPolicy = new AddHeadersPolicy(headers);
HttpPipeline httpPipeline = new HttpPipelineBuilder().httpClient(HttpClient.createDefault())
.policies(authPolicy, addHeadersPolicy).build();
// Instantiate a client that will be used to call the service.
HttpLogOptions httpLogOptions = new HttpLogOptions();
httpLogOptions.setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS);
AnomalyDetectorClient anomalyDetectorClient = new AnomalyDetectorClientBuilder()
.pipeline(httpPipeline)
.endpoint(endpoint)
.httpLogOptions(httpLogOptions)
.buildClient();
Trainieren eines Modells
Erstellen eines Modellergebnisses und Trainieren des Modells
Zunächst müssen wir eine Modellanforderung erstellen. Achten Sie darauf, dass Start- und Endzeit mit Ihrer Datenquelle übereinstimmen.
Um die multivariaten APIs für die Anomalieerkennung verwenden zu können, müssen wir unser eigenes Modell vor der Erkennung trainieren. Für das Training wird ein Batch von Zeitreihendaten verwendet. Die einzelnen Zeitreihen müssen jeweils in einer CSV-Datei mit nur zwei Spalten enthalten sein: timestamp und value. (Die Spaltennamen müssen genau übereinstimmen.) Jede CSV-Datei sollte jeweils nach den einzelnen Variablen für die Zeitreihe benannt werden. Alle Zeitreihen müssen in einer ZIP-Datei zusammengefasst und in Azure Blob Storage hochgeladen werden. Für den Namen der ZIP-Datei gelten keine besonderen Anforderungen. Alternativ kann eine zusätzliche Datei vom Typ „meta.json“ in die ZIP-Datei eingeschlossen werden, wenn sich der Name der Variablen vom Namen der ZIP-Datei unterscheiden soll. Nach dem Generieren der BLOB-SAS-URL (Shared Access Signatures) können wir die URL der ZIP-Datei für das Training verwenden.
Path path = Paths.get("test-data.csv");
List<String> requestData = Files.readAllLines(path);
List<TimeSeriesPoint> series = requestData.stream()
.map(line -> line.trim())
.filter(line -> line.length() > 0)
.map(line -> line.split(",", 2))
.filter(splits -> splits.length == 2)
.map(splits -> {
TimeSeriesPoint timeSeriesPoint = new TimeSeriesPoint();
timeSeriesPoint.setTimestamp(OffsetDateTime.parse(splits[0]));
timeSeriesPoint.setValue(Float.parseFloat(splits[1]));
return timeSeriesPoint;
})
.collect(Collectors.toList());
Integer window = 28;
AlignMode alignMode = AlignMode.OUTER;
FillNAMethod fillNAMethod = FillNAMethod.LINEAR;
Integer paddingValue = 0;
AlignPolicy alignPolicy = new AlignPolicy()
.setAlignMode(alignMode)
.setFillNAMethod(fillNAMethod)
.setPaddingValue(paddingValue);
String source = "YOUR_SAMPLE_ZIP_FILE_LOCATED_IN_AZURE_BLOB_STORAGE_WITH_SAS";
OffsetDateTime startTime = OffsetDateTime.of(2021, 1, 2, 0, 0, 0, 0, ZoneOffset.UTC);
OffsetDateTime endTime = OffsetDateTime.of(2021, 1, 3, 0, 0, 0, 0, ZoneOffset.UTC);
String displayName = "Devops-MultiAD";
ModelInfo request = new ModelInfo()
.setSlidingWindow(window)
.setAlignPolicy(alignPolicy)
.setSource(source)
.setStartTime(startTime)
.setEndTime(endTime)
.setDisplayName(displayName);
TrainMultivariateModelResponse trainMultivariateModelResponse = anomalyDetectorClient.trainMultivariateModelWithResponse(request, Context.NONE);
String header = trainMultivariateModelResponse.getDeserializedHeaders().getLocation();
String[] substring = header.split("/");
UUID modelId = UUID.fromString(substring[substring.length - 1]);
System.out.println(modelId);
//Check model status until the model is ready
Response<Model> trainResponse;
while (true) {
trainResponse = anomalyDetectorClient.getMultivariateModelWithResponse(modelId, Context.NONE);
ModelStatus modelStatus = trainResponse.getValue().getModelInfo().getStatus();
if (modelStatus == ModelStatus.READY || modelStatus == ModelStatus.FAILED) {
break;
}
TimeUnit.SECONDS.sleep(10);
}
if (trainResponse.getValue().getModelInfo().getStatus() != ModelStatus.READY){
System.out.println("Training failed.");
List<ErrorResponse> errorMessages = trainResponse.getValue().getModelInfo().getErrors();
for (ErrorResponse errorMessage : errorMessages) {
System.out.println("Error code: " + errorMessage.getCode());
System.out.println("Error message: " + errorMessage.getMessage());
}
}
Erkennen von Anomalien
DetectionRequest detectionRequest = new DetectionRequest().setSource(source).setStartTime(startTime).setEndTime(endTime);
DetectAnomalyResponse detectAnomalyResponse = anomalyDetectorClient.detectAnomalyWithResponse(modelId, detectionRequest, Context.NONE);
String location = detectAnomalyResponse.getDeserializedHeaders().getLocation();
String[] substring = location.split("/");
UUID resultId = UUID.fromString(substring[substring.length - 1]);
DetectionResult detectionResult;
while (true) {
detectionResult = anomalyDetectorClient.getDetectionResult(resultId);
DetectionStatus detectionStatus = detectionResult.getSummary().getStatus();;
if (detectionStatus == DetectionStatus.READY || detectionStatus == DetectionStatus.FAILED) {
break;
}
TimeUnit.SECONDS.sleep(10);
}
if (detectionResult.getSummary().getStatus() != DetectionStatus.READY){
System.out.println("Inference failed");
List<ErrorResponse> detectErrorMessages = detectionResult.getSummary().getErrors();
for (ErrorResponse errorMessage : detectErrorMessages) {
System.out.println("Error code: " + errorMessage.getCode());
System.out.println("Error message: " + errorMessage.getMessage());
}
}
Exportieren des Modells
Hinweis
Der Exportbefehl dient dazu, multivariate Modelle der Anomalieerkennung in einer containerisierten Umgebung ausführen zu können. Dies wird derzeit nicht für multivariate Modelle unterstützt, aber in Zukunft unterstützt werden.
Verwenden Sie exportModelWithResponse
, um Ihr trainiertes Modell zu exportieren.
StreamResponse response_export = anomalyDetectorClient.exportModelWithResponse(model_id, Context.NONE);
Flux<ByteBuffer> value = response_export.getValue();
FileOutputStream bw = new FileOutputStream("result.zip");
value.subscribe(s -> write(bw, s), (e) -> close(bw), () -> close(bw));
Löschen des Modells
Verwenden Sie die Funktion deleteMultivariateModelWithResponse
, um ein vorhandenes Modell zu löschen, das für die aktuelle Ressource verfügbar ist.
Response<Void> deleteMultivariateModelWithResponse = anomalyDetectorClient.deleteMultivariateModelWithResponse(model_id, Context.NONE);
Ausführen der Anwendung
Sie können die App mit folgendem Befehl erstellen:
gradle build
Ausführen der Anwendung
Vor der Ausführung kann es hilfreich sein, Ihren Code anhand des vollständigen Beispielcodes zu überprüfen.
Führen Sie die Anwendung mit dem Ziel run
aus:
gradle run
Bereinigen von Ressourcen
Wenn Sie ein Azure KI Services-Abonnement bereinigen und entfernen möchten, können Sie die Ressource oder die Ressourcengruppe löschen. Wenn Sie die Ressourcengruppe löschen, werden auch alle anderen Ressourcen gelöscht, die der Ressourcengruppe zugeordnet sind.