Las rutinas de predicción personalizadas te permiten determinar qué código se ejecuta cuando envías una solicitud de predicción en línea a AI Platform Prediction.
Cuando implementas un recurso de versión en AI Platform Prediction sin usar una rutina de predicción personalizada, ese recurso controla las solicitudes de predicción y, para ello, realiza la operación de predicción del framework de aprendizaje automático que usaste en el entrenamiento.
Pero cuando implementas una rutina de predicción personalizada como el recurso de versión, puedes indicar a AI Platform Prediction que ejecute un código de Python personalizado en respuesta a cada solicitud de predicción que reciba. Puedes procesar previamente la entrada de predicción antes de que el modelo entrenado realice la predicción, o puedes realizar un procesamiento posterior de la predicción del modelo antes de enviar el resultado de la predicción.
Para crear una rutina de predicción personalizada, debes proporcionar dos partes a AI Platform Prediction cuando creas la versión del modelo:
Un directorio del modelo en Cloud Storage, que contiene todos los artefactos que deben usarse para la predicción
Un paquete de distribución de origen de Python
.tar.gz
en Cloud Storage, que contenga la implementación de la interfaz de Predictor y cualquier otro código personalizado que deseas que AI Platform Prediction use en el momento de la predicción
Solo puedes implementar una rutina de predicción personalizada cuando usas un tipo de máquina heredada (MLS1) para la versión de tu modelo.
Sube los artefactos del modelo al directorio del modelo
Sigue la guía de implementación de modelos para subir el modelo entrenado a Cloud Storage, junto con los archivos que proporcionan datos o registros de estado a fin de que AI Platform Prediction los use durante la predicción.
El tamaño total del archivo de los artefactos de modelo que implementas en AI Platform Prediction debe ser de 500 MB o menos.
Puedes subir tu modelo de entrenamiento de aprendizaje automático a tu directorio del modelo como un SavedModel
de TensorFlow, un archivo model.joblib
, un archivo model.pkl
o un archivo model.bst
, pero también puedes proporcionar tu modelo como un archivo HDF5 que contiene un modelo tf.keras
entrenado o en un formato serializado diferente.
Además, puedes incluir un archivo pickle con una instancia de una clase de procesador previo personalizado que conserva el estado serializado del entrenamiento.
Por ejemplo, considera el siguiente preprocesador, definido en el archivo llamado preprocess.py
:
Durante el entrenamiento en un conjunto de datos numéricos, el preprocesador centra los datos alrededor de 0; para ello, resta la media de cada columna de cada valor en la columna. Luego, puedes exportar la instancia del preprocesador como un archivo pickle preprocessor.pkl
, que conserva las medias de cada columna calculadas a partir de los datos de entrenamiento.
Durante la predicción, una rutina de predicción personalizada puede cargar el preprocesador desde este archivo para realizar una transformación idéntica en la entrada de predicción.
A fin de aprender cómo usar un procesador previo con estado similar a este en tu rutina de predicción personalizada, lee la siguiente sección, en la que se describe cómo implementar la interfaz de Predictor.
Para ver un ejemplo completo sobre el uso de un preprocesador con estado durante el entrenamiento y la predicción, lee Crea una rutina de predicción personalizada con Keras o Crea una rutina de predicción personalizada con scikit-learn.
Crea un Predictor
Para indicar a AI Platform Prediction cómo administrar las solicitudes de predicción, proporciónale una clase de Predictor. Esta es una clase que implementa la siguiente interfaz:
Los nodos de predicción de AI Platform Prediction usan el método de clase from_path
para cargar una instancia del Predictor. Este método debe cargar los artefactos que guardaste en el directorio del modelo, cuyos contenidos se copian de Cloud Storage a una ubicación que indica el argumento model_dir
.
Cada vez que la implementación recibe una solicitud de predicción en línea, la instancia de la clase de Predictor que muestra from_path
usa su método predict
para generar predicciones. AI Platform Prediction serializa el valor de resultado de este método a JSON y lo envía como respuesta a la solicitud de predicción.
Ten en cuenta que el método predict
no necesita convertir la entrada de JSON a objetos de Python ni convertir la salida en JSON. AI Platform Prediction se encarga de esta tarea fuera del método predict
.
AI Platform Prediction proporciona el argumento instances
cuando analiza el campo instances
del cuerpo de la solicitud predict
a la API de entrenamiento y predicción de AI Platform. Analiza los demás campos del cuerpo de la solicitud y los proporciona al método predict
como entradas en el diccionario **kwargs
. Obtén información sobre cómo estructurar una solicitud predict
a la API de entrenamiento y predicción de AI Platform.
Para seguir con el ejemplo de la sección anterior, supongamos que el directorio de modelos contiene preprocessor.pkl
(la instancia serializada de la clase ZeroCenterer
) y un modelo entrenado tf.keras
exportado como model.h5
o un modelo de scikit-learn entrenado y exportado como model.joblib
.
Según el framework de aprendizaje automático que uses, implementa una de las siguientes clases de Predictor en un archivo llamado predictor.py
:
TensorFlow
scikit-learn
Ten en cuenta que el método predict
convierte los resultados de la predicción en una lista con el
tolist
método
antes de devolverlas. Los arreglos NumPy no pueden serializarse con JSON, por lo que debes convertirlos en listas de números (que sí pueden serializarse con JSON). De lo contrario, AI Platform Prediction no podrá enviar la respuesta de la predicción.
Empaqueta el Predictor y sus dependencias
Debes empaquetar el Predictor como un paquete de distribución de origen .tar.gz
.
Debido a que NumPy, TensorFlow y scikit-learn se incluyen en la imagen del entorno de ejecución de AI Platform Prediction, no es necesario que incluyas estas dependencias en el archivo comprimido. Sin embargo, asegúrate de incluir todas las dependencias de Predictor que no estén preinstaladas en AI Platform Prediction.
Para el ejemplo anterior, debes incluir preprocess.py
en el paquete de distribución de origen, aunque el Predictor no lo importe de forma explícita.
De lo contrario, preprocessor = pickle.load(f)
fallará porque Python no reconocerá la clase de la instancia de ZeroCenterer
en el archivo pickle.
En setup.py
a continuación, se muestra una forma de empaquetar estas secuencias de comandos:
Para empaquetar y subir el ejemplo de código personalizado descrito en esta página, haz lo siguiente:
Crea los archivos
preprocess.py
,predictor.py
ysetup.py
que se describen en las secciones anteriores, todos en el mismo directorio. Navega hasta ese directorio en tu Shell.Ejecuta
python setup.py sdist --formats=gztar
para creardist/my_custom_code-0.1.tar.gz
.Sube este archivo comprimido a una ubicación de etapa de pruebas en Cloud Storage.
No es necesario que sea la misma que la del directorio de modelos. Si planeas iterar y, también, implementar varias versiones de la rutina de predicción personalizada, puede que desees subir los paquetes de código personalizado en un directorio de etapa de pruebas designado. Puedes incrementar el argumento
version
ensetup.py
cuando actualices el código para realizar un seguimiento de las diferentes versiones.El siguiente comando muestra una forma de subir el paquete de distribución de origen a Cloud Storage:
gcloud storage cp dist/my_custom_code-0.1.tar.gz gs://YOUR_BUCKET/PATH_TO_STAGING_DIR/
Puedes proporcionar el código para la rutina de predicción personalizada en uno o más paquetes.
Implementa tu rutina de predicción personalizada
Primero, selecciona una región en la que la predicción en línea esté disponible y usa gcloud
para crear un recurso del modelo:
gcloud ai-platform models create MODEL_NAME{"</var>"}} \
--regions CHOSEN_REGION
Asegúrate de que tu componente gcloud beta
esté actualizado, luego, crea un recurso de versión con especial atención en las siguientes marcas gcloud
:
--origin
: es la ruta de acceso a tu directorio de modelos en Cloud Storage.--package-uris
: Es una lista separada por comas de los archivos comprimidos de código de usuario en Cloud Storage, incluido el que contiene tu clase de Predictor.--prediction-class
: Es el nombre completamente calificado de la clase de Predictor (MODULE_NAME.CLASS_NAME).--framework
: No especifiques un framework cuando implementes una rutina de predicción personalizada.--runtime-version
: Las rutinas de predicción personalizadas están disponibles en las versiones 1.4 a 2.11 del entorno de ejecución.
En el siguiente comando, se muestra cómo crear un recurso de versión según los archivos de ejemplo descritos en las secciones anteriores:
gcloud components install beta
gcloud beta ai-platform versions create VERSION_NAME \
--model MODEL_NAME{"</var>"}} \
--runtime-version 2.11 \
--python-version 3.7 \
--origin gs://YOUR_BUCKET/PATH_TO_MODEL_DIR \
--package-uris gs://YOUR_BUCKET/PATH_TO_STAGING_DIR/my_custom_code-0.1.tar.gz \
--prediction-class predictor.MyPredictor
Si deseas obtener más información sobre la creación de modelos y versiones en detalle, o aprender a crearlos mediante la consola de Google Cloud en lugar de la CLI de gcloud, consulta la guía de implementación de modelos.
Especifica una cuenta de servicio
Cuando se crea un recurso de versión, puedes especificar una cuenta de servicio para que la rutina de predicción personalizada la use durante la predicción. Esto te permite personalizar los permisos para acceder a otros recursos de Google Cloud. Obtén más información sobre cómo especificar una cuenta de servicio para la rutina de predicción personalizada.
Pasos siguientes
- Revisa un instructivo sobre cómo usar rutinas de predicción personalizadas con Keras o con scikit-learn para ver un ejemplo más completo de cómo entrenar y luego implementar un modelo mediante una rutina de predicción personalizada.
- Lee la guía para exportar modelos si deseas obtener información sobre cómo exportar artefactos para la predicción sin usar una rutina de predicción personalizada.
- Consulta la guía de implementación de modelos para obtener más detalles sobre cómo implementar los recursos de
model
yversion
en AI Platform Prediction a fin de entregar predicciones.