0 / 0
Zurück zur englischen Version der Dokumentation

Implementierbare Python -Funktionen schreiben

Letzte Aktualisierung: 04. Dez. 2024
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 Variablen score_response für den Statuscode 200 enthalten. Beachten Sie, dass die Angabe des Parameters prediction mit einem Array aus JSON-Objekten als Wert in der Ausgabe score 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 Parameter input_data ist in den Nutzdaten obligatorisch. Der Parameter input_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 Eingabeparameters score im scoreentsprechend 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.

Wichtig:

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.

Wichtig:

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

Übergeordnetes Thema: Python-Funktionen bereitstellen