0 / 0
Torna alla versione inglese della documentazione
Scrittura di funzioni Python distribuibili
Ultimo aggiornamento: 04 dic 2024
Scrittura di funzioni Python distribuibili

Imparate a scrivere una funzione Python e a memorizzarla come risorsa da utilizzare per distribuire i modelli.

Per un elenco dei requisiti generali per le funzioni distribuibili, consultare Requisiti generali per le funzioni distribuibili. Per informazioni su cosa accade durante la distribuzione di una funzione, fare riferimento a Processo di distribuzione della funzione

Requisiti generali per le funzioni distribuibili

Per essere distribuita correttamente, una funzione deve soddisfare i requisiti seguenti:

  • Il file di funzione Python durante l'importazione deve avere l'oggetto funzione score come parte del suo ambito. Fare riferimento a Requisiti della funzione di punteggio
  • Il payload di input del calcolo del punteggio deve soddisfare i requisiti elencati in Requisiti di input del calcolo del punteggio
  • Il payload di output previsto come output di score deve includere lo schema della variabile score_response per il codice di stato 200. Si noti che il parametro prediction , con un array di oggetti JSON come valore, è obbligatorio nell'output score .
  • Quando si utilizza il client Python per salvare una funzione Python che contiene un riferimento a una funzione esterna, viene salvato solo il codice nell'ambito della funzione esterna (incluse le relative funzioni nidificate). Pertanto, il codice al di fuori dell'ambito della funzione esterna non verrà salvato e quindi non sarà disponibile quando si distribuisce la funzione.

Requisiti della funzione di punteggio

  • Esistono due modi per aggiungere l'oggetto funzione score :
    • esplicitamente, per utente
    • implicitamente, dal metodo utilizzato per salvare la funzione Python come risorsa nel repository watsonx.ai Runtime
  • La funzione " score può accettare un singolo parametro di ingresso JSON o due parametri: payload e token del portatore.
  • La funzione " score deve restituire un oggetto serializzabile JSON (ad esempio: dizionari o elenchi).

Requisiti di input per il calcolo del punteggio

  • Il payload di input del calcolo del punteggio deve includere un array con il nome values, come mostrato in questo schema di esempio. Il parametro input_data è obbligatorio nel payload. Il parametro input_data può includere anche ulteriori coppie nome - valore.

    {"input_data": [{
       "values": [["Hello world!"]]
                   }]
    }
    
  • Il payload di ingresso del punteggio deve essere passato come valore del parametro di ingresso per 'score. In questo modo è possibile garantire che il valore del parametro di immissione score sia gestito di conseguenza all'interno di score.

  • Il payload di input del calcolo del punteggio deve soddisfare i requisiti di input per la relativa funzione Python .

  • Il payload di input del calcolo del punteggio deve includere un array corrispondente allo Schema dati di input di esempio.

Schema dei dati di input di esempio

 {"input_data": [{
    "values": [["Hello, world!"]]
                }]
 }

Esempio di codice Python (payload e 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()

Testare la funzione Python

Ecco come testare la vostra funzione Python:

input_data = { "input_data": [{ "fields": [ "message" ],
                                "values": [[ "Hello, world!" ]]
                               }
                              ]
             }
function_result = score( input_data )
print( function_result )

Restituisce il messaggio "Hello, world!".

Processo di distribuzione della funzione

Il codice Python della risorsa Function viene caricato come modulo Python dal motore di runtime watsonx.ai utilizzando l'istruzione 'import. Ciò significa che il codice verrà eseguito esattamente una volta (quando la funzione viene distribuita o ogni volta che il pod corrispondente viene riavviato). La funzione score definita dall'asset Funzione viene quindi richiamata in ogni richiesta di previsione.

Gestione delle funzioni distribuibili

Utilizzare uno di questi metodi per creare una funzione Python distribuibile:

Prima di iniziare

È necessario impostare le credenziali dell'attività generando una chiave API. Per ulteriori informazioni, vedere Gestione delle credenziali delle attività.

Creazione di funzioni distribuibili tramite l'API REST

Per le API REST, poiché la funzione Python viene caricata direttamente tramite un file, il file deve contenere già la funzione score . Qualsiasi importazione che deve essere eseguita una sola volta per essere utilizzata successivamente all'interno della funzione score può essere eseguita all'interno dell'ambito globale del file. Quando questo file viene distribuito come funzione Python , le importazioni uniche disponibili nell'ambito globale vengono eseguite durante la distribuzione e successivamente semplicemente riutilizzate con ogni richiesta di previsione.

Importante:

L'archivio funzioni deve essere un file .gz .

File di funzione score di esempio:

Score function.py
---------------------
def score(input_data):
    return {'predictions': [{'values': [['Just a test']]}]}

Funzione score di esempio con importazioni una sola volta:

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__]]}]}

Creazione di funzioni distribuibili mediante il client Python

Per rendere persistente una funzione Python come un asset, il client Python utilizza il metodo wml_client.repository.store_function . È possibile persistere una funzione Python in due modi:

Persistenza di una funzione attraverso un file che contiene la funzione Python

Questo metodo è uguale alla persistenza del file di funzione Python tramite le API REST (score deve essere definito nell'ambito del file origine Python ). Per i dettagli, fare riferimento a Creazione di funzioni distribuibili tramite l'API REST.

Importante:

Quando si richiama il metodo wml_client.repository.store_function , passare il nome file come primo argomento.

Persistenza di una funzione attraverso l'oggetto funzione

Puoi rendere persistenti gli oggetti della funzione Python creando Python Closures con una funzione nidificata denominata score. La funzione score viene restituita dalla funzione esterna memorizzata come oggetto della funzione, quando viene richiamata. Questa funzione score deve soddisfare i requisiti elencati in Requisiti generali per le funzioni distribuibili. In questo caso, tutte le importazioni e la logica di impostazione iniziale devono essere aggiunte nella funzione nidificata esterna in modo che vengano eseguite durante la distribuzione e vengano utilizzate all'interno della funzione score . Qualsiasi logica ricorrente necessaria durante la richiesta prediction deve essere aggiunta all'interno della funzione score nidificata.

Salva la funzione Python di esempio utilizzando il client Python :

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 questo scenario, la funzione Python si occupa di creare un file Python contenente la funzione 'score e di conservare il file della funzione come risorsa nel repository watsonx.ai Runtime:

score = my_deployable_function()

Ulteriori informazioni

Argomento principale: Distribuzione delle funzioni Python

Ricerca e risposta AI generativa
Queste risposte sono generate da un modello di lingua di grandi dimensioni in watsonx.ai basato sul contenuto della documentazione del prodotto. Ulteriori informazioni