0 / 0
Volver a la versión inglesa de la documentación
Escritura de funciones de Python desplegables
Última actualización: 04 dic 2024
Escritura de funciones de Python desplegables

Aprenda a escribir una función Python y a almacenarla como un activo que puede utilizar para desplegar modelos.

Para obtener una lista de requisitos generales para las funciones desplegables, consulte Requisitos generales para funciones desplegables. Para obtener información sobre lo que sucede durante un despliegue de función, consulte Proceso de despliegue de funciones

Requisitos generales para funciones desplegables

Para que se despliegue correctamente, una función debe cumplir estos requisitos:

  • El archivo de función Python en la importación debe tener el objeto de función score como parte de su ámbito. Consulte Requisitos de función de puntuación
  • La carga útil de entrada de puntuación debe cumplir los requisitos que se listan en Requisitos de entrada de puntuación
  • La carga útil de salida esperada como salida de score debe incluir el esquema de la variable score_response para el código de estado 200. Tenga en cuenta que el parámetro prediction, con una matriz de objetos JSON como valor, es obligatorio en la salida de score.
  • Cuando utiliza el cliente Python para guardar una función de Python que contiene una referencia a una función externa, solo se guarda el código del ámbito de la función externa (incluidas sus funciones anidadas). Por lo tanto, el código que está fuera del ámbito de la función externa no se guardará y no estará disponible cuando despliegue la función.

Requisitos de la función de puntuación

  • Existen dos formas de añadir el objeto de función score :
    • explícitamente, por usuario
    • implícitamente, por el método que se utiliza para guardar la función Python como un activo en el repositorio watsonx.ai Runtime
  • La función " score " puede aceptar un único parámetro de entrada JSON o dos parámetros: payload y bearer token.
  • La función score debe devolver un objeto serializable por JSON (por ejemplo, diccionarios o listas).

Requisitos de entrada de puntuación

  • La carga útil de entrada de puntuación debe incluir una matriz con el nombre values, tal como se muestra en este esquema de ejemplo. El parámetro input_data es obligatorio en la carga útil. El parámetro input_data también puede incluir pares nombre-valor adicionales.

    {"input_data": [{
       "values": [["Hello world!"]]
                   }]
    }
    
  • La carga útil de entrada de puntuación debe pasarse como valor de parámetro de entrada para " score. De esta forma, puede asegurarse de que el valor del parámetro de entrada score se maneja en consecuencia dentro de score.

  • La carga útil de la entrada de puntuación debe coincidir con los requisitos de entrada para la función de Python en cuestión.

  • La carga útil de entrada de puntuación debe incluir una matriz que coincida con el Esquema de datos de entrada de ejemplo.

Esquema de datos de entrada de ejemplo

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

Ejemplo de código Python (payload y 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()

Pruebe su función Python

Así es como puedes probar tu función Python:

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

Devuelve el mensaje "¡Hola, mundo!".

Proceso de despliegue de funciones

El código Python de su activo Function es cargado como un módulo Python por el motor watsonx.ai Runtime utilizando una sentencia ' import '. Esto significa que el código se ejecutará exactamente una vez (cuando se despliegue la función o cada vez que se reinicie el pod correspondiente). A continuación, se llama a la función score definida por el activo de función en cada solicitud de predicción.

Manejo de funciones desplegables

Utilice uno de estos métodos para crear una función Python desplegable:

Antes de empezar

Debe configurar sus credenciales de tarea generando una clave API. Para obtener más información, consulte Gestión de credenciales de tareas.

Creación de funciones desplegables mediante la API REST

Para las API REST, puesto que la función Python se carga directamente a través de un archivo, el archivo ya debe contener la función score . Cualquier importación única que sea necesario realizar para utilizarla más adelante dentro de la función score se puede realizar dentro del ámbito global del archivo. Cuando este archivo se despliega como una función de Python, las importaciones de una sola vez disponibles en el ámbito global se ejecutan durante el despliegue y más tarde simplemente se reutilizan con cada solicitud de predicción.

Importante:

El archivador de función debe ser un archivo .gz .

Archivo de función score de ejemplo:

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

Función de ejemplo de score con importaciones de una vez:

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

Creación de funciones desplegables mediante el cliente de Python

Para conservar una función de Python como un activo, el cliente de Python utiliza el método wml_client.repository.store_function. Puedes persistir una función Python de dos maneras:

Persistencia de una función a través de un archivo que contiene la función Python

Este método es el mismo que la persistencia del archivo de funciones de Python mediante las API REST (score debe estar definido en el ámbito del archivo de origen de Python). Para obtener detalles, consulte Creación de funciones desplegables mediante la API REST.

Importante:

Cuando llame al método wml_client.repository.store_function , pase el nombre de archivo como primer argumento.

Persistencia de una función mediante el objeto de función

Puede persistir objetos de función de Python creando cierres de Python con una función anidada denominada score. Devuelve la función score la función externa que se está almacenando como un objeto de función, cuando se invoca. Esta función score debe cumplir los requisitos que se listan en Requisitos generales para funciones desplegables. En este caso, las importaciones puntuales y la lógica de configuración inicial deben añadirse en la función anidada externa para que se ejecuten durante el despliegue y se utilicen en la función score . Cualquier lógica recurrente que sea necesaria durante la solicitud prediction debe añadirse dentro de la función score anidada.

Guarde la función Python de ejemplo utilizando el cliente 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)

En este escenario, la función Python se encarga de crear un archivo Python que contiene la función ' score ' y de persistir el archivo de la función como un activo en el repositorio watsonx.ai Runtime:

score = my_deployable_function()

Más información

Tema principal: Despliegue de funciones de Python

Búsqueda y respuesta de IA generativa
Estas respuestas las genera un modelo de lenguaje grande en watsonx.ai que se basa en el contenido de la documentación del producto. Más información