Benutzerdefinierte Fähigkeiten für maschinelles Lernen
Die Verwendung eines benutzerdefinierten Azure Machine Learning-Skillsets funktioniert genauso wie das Hinzufügen jedes anderen benutzerdefinierten Skillsets zu einem Suchindex.
Hier erfahren Sie, welche Unterschiede es bei der Verwendung des benutzerdefinierten Skills AmlSkill
gibt, und welche Überlegungen zu dessen effizienter Nutzung angestellt werden müssen.
Schema für benutzerdefinierte Azure Machine Learning-Skills
Wenn Sie einen Suchindex mit einem benutzerdefinierten AML-Skill (Azure Machine Learning) anreichern, erfolgt diese Anreicherung auf Dokumentenebene. Das von Ihrem Dokumentindexer verwendete Skillset muss einen AmlSkill
enthalten. Das Schema für diesen Skill lautet wie folgt:
{
"@odata.type": "#Microsoft.Skills.Custom.AmlSkill",
"name": "AML name",
"description": "AML description",
"context": "/document",
"uri": "https://[Your AML endpoint]",
"key": "Your AML endpoint key",
"resourceId": null,
"region": null,
"timeout": "PT30S",
"degreeOfParallelism": 1,
"inputs": [
{
"name": "field name in the AML model",
"source": "field from the document in the index"
},
{
"name": "field name in the AML model",
"source": "field from the document in the index"
},
],
"outputs": [
{
"name": "result field from the AML model",
"targetName": "result field in the document"
}
]
}
Wichtig
Der URI muss einen HTTPS-Endpunkt verwenden. Dabei kann es sich entweder um eine verwaltete, benutzerdefinierte URL-Adresse handeln, die von Microsoft bereitgestellt wird, oder um Ihren eigenen Domänennamen und Ihr eigenes Zertifikat.
Beachten Sie, dass der benutzerdefinierte Skill keine Einstellungen für batchSize
enthält, für die das AML-Modell jeweils ein einzelnes Dokument verarbeitet. Die verbleibenden Einstellungen, die die Leistung des Skills steuern, lauten timeout
und degreeOfParallelism
. Im oben gezeigten Schema wurde ein Timeoutwert von 30 Sekunden festgelegt. Der Parallelitätsgrad sollte bei 1 beginnen. Abhängig von Ihrer Infrastruktur können Sie diesen Wert erhöhen.
Der beste Ansatz zur Steuerung der Effizienz eines AML-Skills ist die angemessene Skalierung des Kubernetes-Rückschlussclusters zum Verwalten Ihrer Workload.
Der Index für das Dokument benötigt ein Feld zum Speichern der Ergebnisse aus dem AML-Modell. Anschließend fügen Sie eine Ausgabefeldzuordnung hinzu, um die Ergebnisse aus dem benutzerdefinierten Skillset im Feld des Dokuments im Index zu speichern.
Der JSON-Code für diese Ausgabefeldzuordnung lautet folgendermaßen:
"outputFieldMappings": [
{
"sourceFieldName": "/result field in the document",
"targetFieldName": "result field from the AML model"
}
]
Sie erstellen Ihr Azure Machine Learning-Modell mithilfe von Entwicklertools wie dem Python-SDK, REST-APIs oder Azure CLI. Eine weitere Option besteht darin, das Azure AI Machine Learning Studio zu nutzen, eine grafische Benutzeroberfläche, mit der Sie Modelle erstellen, trainieren und bereitstellen können, ohne Code zu schreiben.
Mit einem erstellten Modell ändern Sie, wie der Bewertungscode das Modell aufruft, damit es von Ihren benutzerdefinierten Suchskills verwendet werden kann.
Die letzten Schritte sind das Erstellen eines Kubernetes-Clusters zum Hosten eines Endpunkts für Ihr Modell.
Erstellen eines AML-Arbeitsbereichs
Wenn Sie den AML-Arbeitsbereich (Azure Machine Learning) erstellen, erstellt Azure auch Speicherkonten, einen Schlüsselspeicher und Ressourcen für Anwendungserkenntnisse. Im Bereich AML-Arbeitsbereichsübersicht erhalten Sie einen Link zum Starten des Azure AI Machine Learning-Studios.
Erstellen und Trainieren eines Modells in Azure Machine Learning Studio
Mit dem Azure AI Machine Learning-Studio können Sie einen Designer verwenden, um mit Drag & Drop Pipelines zu erstellen, die Modelle erstellen und trainieren. Es gibt eine noch einfachere Möglichkeit zum Erstellen von Modellen mithilfe vordefinierter Vorlagen.
Wie auch immer Sie beim Erstellen Ihrer Modelle vorgehen möchten, Sie müssen im Azure AI Machine Learning-Studio registriert werden, damit Sie das Modell in einem Webdienst bereitstellen können.
Ändern der Funktionsweise des Modells, damit es vom benutzerdefinierten AML-Skill aufgerufen werden kann
Die Modelle, die Sie trainieren, verwenden normalerweise viele Beispiele für die Daten. Die Datasets verfügen über viele Zeilen und werden geteilt und verwendet, um das Modell zu trainieren und zu testen. Der Code, der diese Daten behandelt und an das Modell übergibt, muss geändert werden, um einzelne Zeilen zu behandeln.
Die JSON-Antwort des Modells sollte auch nur die Ausgabevorhersage enthalten.
Wenn Ihre Daten beispielsweise ein Array von JSON-Objekten sind:
[
{
"attribute-1": null,
"attribute-2": null
},
{
"attribute-1": null,
"attribute-2": null
},
{
"attribute-1": null,
"attribute-2": null
}
]
Muss der Python-Bewertungscode die Daten zeilenweise verarbeiten:
data = json.loads(data)
for row in data:
for key, val in row.items():
input_entry[key].append(decode_nan(val))
Zum Ändern des Eingabedatasets in einen einzelnen Datensatz:
{
"attribute-1": null,
"attribute-2": null
}
Muss der Python-Code geändert werden in:
data = json.loads(data)
for key, val in data.items():
input_entry[key].append(decode_nan(val))
Für die Antwort aus dem Bewertungscode gibt der Standardcode das gesamte JSON-Dokument zurück:
return json.dumps({"result": result.data_frame.values.tolist()})
Die benutzerdefinierten Skills müssen in der Lage sein, eine einzelne Antwort aus dem Modell zuzuordnen. Daher sollte der Code JSON zurückgeben, das nur das letzte Attribut ist.
output = result.data_frame.values.tolist()
# return the last column of the the first row of the dataframe
return {
"predicted_outcome": output[0][-1]
}
Erstellen eines Endpunkts zur Verwendung durch das Modell
Das Modell wird für einen Endpunkt bereitgestellt. Das Azure AI Machine Learning Studio unterstützt die Bereitstellung eines Modells für einen Echtzeitendpunkt, einen Batchendpunkt oder einen Webdienst. Derzeit unterstützt der benutzerdefinierte Skill AmlSkill
in Azure KI-Suche nur Webdienstendpunkte.
Die andere Einschränkung besteht darin, dass der Endpunkt ein Azure Kubernetes Service-Cluster (AKS) sein muss. Container Instances werden nicht unterstützt.
Wenn Sie Erfahrung mit dem Erstellen und Verwalten von AKS-Clustern haben, können Sie die Cluster manuell im Azure-Portal erstellen und beim Erstellen Ihres Endpunkts darauf verweisen. Eine einfachere Option besteht jedoch darin, Azure AI Machine Learning Studio das Erstellen und Verwalten des Clusters für Sie zu ermöglichen.
Wenn Sie zum Computeabschnitt des Studios navigieren, können Sie Rückschlusscluster erstellen. Das AML Studio führt Sie dann durch die Auswahl der Größe des Clusters und aktiviert sogar HTTPS und erstellt einen Domänennamen für Sie. Sie wird im Format location.cloudapp.azure.com:443
angegeben.
Verbinden des benutzerdefinierten AML-Skills mit dem Endpunkt
Wenn alles wie oben beschrieben eingerichtet ist, müssen Sie Ihren Azure KI-Suche-Dienst aktualisieren. Die Schritte dazu ähneln den in diesem Modul gezeigten Beispielen, so dass wir hier nicht auf die Einzelheiten eingehen, sondern die zu befolgenden Schritte auflisten werden.
- Zum Anreichern Ihres Suchindex fügen Sie dem Index zunächst ein neues Feld hinzu, um die Ausgabe für das Modell einzuschließen.
- Anschließend aktualisieren Sie Ihr Indexskillset und fügen den benutzerdefinierten Skill
#Microsoft.Skills.Custom.AmlSkill
hinzu. - Als Nächstes ändern Sie Ihren Indexer, um die Ausgabe vom benutzerdefinierten Skill dem Feld zuzuordnen, das Sie im Index erstellt haben.
- Der letzte Schritt besteht darin, den Indexer erneut auszuführen, um Ihren Index mit dem AML-Modell anzureichern.