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 variablescore_response
para el código de estado 200. Tenga en cuenta que el parámetroprediction
, con una matriz de objetos JSON como valor, es obligatorio en la salida descore
. - 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ámetroinput_data
es obligatorio en la carga útil. El parámetroinput_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 entradascore
se maneja en consecuencia dentro descore
.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.
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.
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