Implementierbare Python -Funktionen schreiben
Lernen Sie, wie man eine Python schreibt und sie dann als Asset speichert, das Sie zur Bereitstellung von Modellen verwenden können.
Eine Liste der allgemeinen Anforderungen für bereitstellbare Funktionen finden Sie unter Allgemeine Anforderungen für bereitstellbare Funktionen. Informationen zu den Vorgängen während einer Funktionsbereitstellung finden Sie unter Prozess zur Bereitstellung von Funktionen
Allgemeine Anforderungen für bereitstellbare Funktionen
Für eine erfolgreiche Bereitstellung muss eine Funktion die folgenden Anforderungen erfüllen:
- Die Python-Funktionsdatei muss beim Import das Funktionsobjekt
score
als Teil seines Geltungsbereichs enthalten. Weitere Informationen finden Sie unter Anforderungen an die Funktion 'score' - Scoring-Eingabenutzdaten müssen die Anforderungen erfüllen, die in Scoring-Eingabeanforderungen aufgelistet sind.
- Die Ausgabenutzdaten, die als Ausgabe von
score
erwartet werden, müssen das Schema der Variablenscore_response
für den Statuscode 200 enthalten. Beachten Sie, dass die Angabe des Parametersprediction
mit einem Array aus JSON-Objekten als Wert in der Ausgabescore
verbindlich ist. - Wenn Sie den Python-Client verwenden, um eine Python-Funktion zu speichern, die einen Verweis auf eine übergeordnete Funktion enthält, wird nur der Code im Geltungsbereich der übergeordneten Funktion (einschließlich der verschachtelten Funktionen) gespeichert. Daher wird der Code außerhalb des Bereichs der übergeordneten Funktion nicht gespeichert und ist daher beim Bereitstellen der Funktion nicht verfügbar.
Anforderungen an die Funktion 'score'
- Es gibt zwei Möglichkeiten, das Funktionsobjekt
score
hinzuzufügen:- explizit, nach Benutzer
- implizit durch die Methode, die verwendet wird, um die Python als Asset im watsonx.ai Runtime Repository zu speichern
- Die Funktion "
score
kann einen einzelnen JSON-Eingabeparameter oder zwei Parameter annehmen: Nutzlast und Überbringer-Token. - Die Funktion
score
muss ein serialisierbares JSON-Objekt (z. B. Wörterverzeichnisse oder Listen) zurückgeben.
Anforderungen an Scoring-Eingabe
Die Scoring-Eingabenutzdaten müssen ein Array mit dem Namen
values
enthalten, wie in diesem Beispielschema gezeigt. Der Parameterinput_data
ist in den Nutzdaten obligatorisch. Der Parameterinput_data
kann auch zusätzliche Name/Wert-Paare enthalten.{"input_data": [{ "values": [["Hello world!"]] }] }
Die Scoring-Input-Payload muss als Eingabeparameterwert für "
score
übergeben werden. Auf diese Weise können Sie sicherstellen, dass der Wert des Eingabeparametersscore
imscore
entsprechend verarbeitet wird.Die Scoring-Eingabenutzdaten müssen den Anforderungen für die Eingabe der betreffenden Python-Funktion entsprechen.
Die Scoring-Eingabenutzdaten müssen ein Array enthalten, das dem Datenschema der Beispieleingabe entspricht.
Datenschema der Beispieleingabe
{"input_data": [{
"values": [["Hello, world!"]]
}]
}
Beispiel Python (Nutzlast und Token)
#wml_python_function
def my_deployable_function():
def score(payload, token):
message_from_input_payload = payload.get("input_data")[0].get("values")[0][0]
response_message = "Received message - {0}".format(message_from_input_payload)
# Score using the pre-defined model
score_response = {
'predictions': [{'fields': ['Response_message_field'],
'values': [[response_message]]
}]
}
return score_response
return score
score = my_deployable_function()
Testen Ihrer Python
So können Sie Ihre Python testen:
input_data = { "input_data": [{ "fields": [ "message" ],
"values": [[ "Hello, world!" ]]
}
]
}
function_result = score( input_data )
print( function_result )
Er gibt die Nachricht "Hallo, Welt!" zurück.
Prozess zur Bereitstellung von Funktionen
Der Python Ihres Funktions-Assets wird von der watsonx.ai Runtime Engine als Python geladen, indem eine ' import
Anweisung verwendet wird. Dies bedeutet, dass der Code genau einmal ausgeführt wird (wenn die Funktion bereitgestellt wird oder bei jedem Neustart des entsprechenden Pods). Die vom Funktionsasset definierte Funktion score
wird dann in jeder Vorhersageanforderung aufgerufen.
Verarbeitung bereitstellbarer Funktionen
Verwenden Sie eine der folgenden Methoden, um eine bereitstellbare Python-Funktion zu erstellen:
Vorbereitende Schritte
Sie müssen Ihre Anmeldedaten für die Aufgabe einrichten, indem Sie einen API-Schlüssel erstellen. Weitere Informationen finden Sie unter Verwalten von Berechtigungsnachweisen für Aufgaben.
Bereitstellbare Funktionen über REST-API erstellen
Für REST-APIs muss die Datei bereits die Funktion score
enthalten, da die Funktion Python direkt über eine Datei hochgeladen wird. Jeder einzelne Import, der ausgeführt werden muss, um später in der Funktion score
verwendet zu werden, kann im globalen Geltungsbereich der Datei ausgeführt werden. Wenn diese Datei als Python-Funktion bereitgestellt wird, werden die im globalen Bereich verfügbaren einmaligen Importe während der Bereitstellung ausgeführt und später bei jeder Vorhersageanforderung einfach erneut verwendet.
Das Funktionsarchiv muss eine .gz
-Datei sein.
Beispielfunktionsdatei score
:
Score function.py
---------------------
def score(input_data):
return {'predictions': [{'values': [['Just a test']]}]}
Beispielfunktion score
mit einmaligen Importen:
import subprocess
subprocess.check_output('pip install gensim --user', shell=True)
import gensim
def score(input_data):
return {'predictions': [{'fields': ['gensim_version'], 'values': [[gensim.__version__]]}]}
Bereitstellbare Funktionen über den Python-Client erstellen
Um eine Python-Funktion als Asset als persistent zu definieren, verwendet der Python-Client die Methode wml_client.repository.store_function
. Sie können eine Python auf zwei Arten aufrechterhalten:
Funktion über eine Datei persistent speichern, die die Funktion Python enthält
Diese Methode entspricht dem persistenten Speichern der Python-Funktionsdatei über REST-APIs (score
muss im Geltungsbereich der Python-Quellendatei definiert sein). Weitere Informationen finden Sie unter Bereitstellbare Funktionen über REST-API erstellen.
Wenn Sie die Methode wml_client.repository.store_function
aufrufen, übergeben Sie den Dateinamen als erstes Argument.
Funktion über das Funktionsobjekt als persistent definieren
Sie können Python-Funktionsobjekte persistent speichern, indem Sie Python-Abschlüsse mit einer verschachtelten Funktion namens score
erstellen. Die Funktion score
wird von der übergeordneten Funktion zurückgegeben, die beim Aufruf als Funktionsobjekt gespeichert wird. Diese score
-Funktion muss die Anforderungen erfüllen, die unter Allgemeine Anforderungen für implementierbare Funktionenaufgelistet sind. In diesem Fall müssen alle Einmalimporte und Erstkonfigurationslogik in der äußeren verschachtelten Funktion hinzugefügt werden, sodass sie während der Implementierung ausgeführt und in der Funktion score
verwendet werden. Jede wiederholt auftretende Logik, die während der Anforderung prediction
erforderlich ist, muss in der verschachtelten Funktion score
hinzugefügt werden.
Beispiel für das Speichern einer Python -Funktion mit dem Python -Client:
def my_deployable_function():
import subprocess
subprocess.check_output('pip install gensim', shell=True)
import gensim
def score(input_data):
import
message_from_input_payload = payload.get("input_data")[0].get("values")[0][0]
response_message = "Received message - {0}".format(message_from_input_payload)
# Score using the pre-defined model
score_response = {
'predictions': [{'fields': ['Response_message_field', 'installed_lib_version'],
'values': [[response_message, gensim.__version__]]
}]
}
return score_response
return score
function_meta = {
client.repository.FunctionMetaNames.NAME:"test_function",
client.repository.FunctionMetaNames.SOFTWARE_SPEC_ID: sw_spec_id
}
func_details = client.repository.store_function(my_deployable_function, function_meta)
In diesem Szenario übernimmt die Python die Aufgabe, eine Python zu erstellen, die die Funktion " score
enthält, und die Funktionsdatei als Asset im watsonx.ai Runtime Repository zu speichern:
score = my_deployable_function()
Weitere Informationen
- Python-Schließungen
- Abschlüsse
- Verschachtelte Funktion, Geltungsbereich von Variablen und Schließungen in Python
Übergeordnetes Thema: Python-Funktionen bereitstellen