Implementa modelos

En esta página, se explica cómo implementar tu modelo en AI Platform Prediction para obtener predicciones.

Para implementar el modelo entrenado en AI Platform Prediction, debes realizar las siguientes acciones:

  • Sube el modelo guardado a un depósito de Cloud Storage.
  • Crea un recurso de modelo de AI Platform Prediction.
  • Crea un recurso de la versión de AI Platform Prediction y especifica la ruta de acceso de Cloud Storage al modelo guardado.

Antes de comenzar

Entrena tu modelo de aprendizaje automático y sigue la guía para exportar modelos destinados a la predicción a fin de crear artefactos de modelo que puedan implementarse en AI Platform Prediction.

Almacena el modelo en Cloud Storage

En general, es más fácil usar un depósito de Cloud Storage dedicado en el mismo proyecto que usas para AI Platform Prediction.

Si usas un depósito en un proyecto diferente, debes asegurarte de que la cuenta de servicio de AI Platform Prediction pueda acceder al modelo en Cloud Storage. Sin los permisos correspondientes, la solicitud para crear una versión del modelo en AI Platform Prediction fallará. Obtén más información sobre cómo otorgar permisos para el almacenamiento.

Configura el depósito de Cloud Storage

En esta sección, se muestra cómo crear un depósito nuevo. Puedes usar un depósito existente, pero debe estar en la misma región en la que planeas ejecutar los trabajos de AI Platform. Además, si no forma parte del proyecto que usas para ejecutar AI Platform Prediction, debes otorgar acceso a las cuentas de servicio de AI Platform Prediction de forma explícita.

  1. Especifica un nombre para el depósito nuevo. El nombre debe ser único en todos los depósitos en Cloud Storage.

    BUCKET_NAME="your_bucket_name"

    Por ejemplo, usa el nombre de tu proyecto con -aiplatform agregado:

    PROJECT_ID=$(gcloud config list project --format "value(core.project)")
    BUCKET_NAME=${PROJECT_ID}-aiplatform
  2. Comprueba el nombre del depósito que creaste.

    echo $BUCKET_NAME
  3. Selecciona una región para el depósito y establece una variable de entorno REGION.

    Usa la misma región en la que planeas ejecutar trabajos de AI Platform Prediction. Consulta las regiones disponibles para los servicios de AI Platform Prediction.

    Por ejemplo, con el siguiente código, se crea una REGION y se la configura como us-central1:

    REGION=us-central1
  4. Crea el depósito nuevo:

    gsutil mb -l $REGION gs://$BUCKET_NAME

Sube el modelo exportado a Cloud Storage

En los ejemplos siguientes, se muestra cómo subir diferentes tipos de artefactos de modelo a un directorio de modelos en Cloud Storage:

Modelo guardado de TensorFlow

SAVED_MODEL_DIR=$(ls ./your-export-dir-base | tail -1)
gsutil cp -r $SAVED_MODEL_DIR gs://your-bucket

Cuando exportas un modelo guardado de tf.keras o de un estimador de TensorFlow, se almacena como un subdirectorio con marca de tiempo de un directorio de exportación base que elijas, como your-export-dir-base/1487877383942. En este ejemplo, se muestra cómo subir el directorio con la marca de tiempo más reciente. Si creaste tu modelo guardado de una manera distinta, este puede encontrarse en una ubicación diferente en tu sistema de archivos local.

Archivo de modelo de scikit-learn o XGBoost

En función de cómo hayas exportado tu modelo entrenado, sube el archivo model.joblib, model.pkl o model.bst.

En el ejemplo siguiente, se muestra cómo subir un archivo exportado mediante sklearn.externals.joblib:

gsutil cp ./model.joblib gs://your-bucket/model.joblib

En el ejemplo siguiente, se muestra cómo subir un archivo exportado mediante el módulo pickle de Python:

gsutil cp ./model.pkl gs://your-bucket/model.pkl

En el siguiente ejemplo, se muestra cómo subir un archivo exportado mediante el método save_model de xgboost.Booster:

gsutil cp ./model.bst gs://your-bucket/model.bst

Si implementas una rutina de predicción personalizada (Beta), sube también cualquier artefacto de modelo adicional a tu directorio de modelos.

El tamaño total del archivo de tu directorio de modelos debe ser de 500 MB o menos si usas un tipo de máquina heredado (MLS1) o de 2 GB o menos si usas un Tipo de máquina (N1) de Compute Engine. Obtén más información sobre tipos de máquinas para la predicción en línea.

Cuando crees versiones posteriores de tu modelo, coloca cada una en su propio directorio por separado dentro de tu depósito de Cloud Storage para organizarlas.

Sube código personalizado

Si implementas una canalización de scikit-learn con código personalizado o una rutina de predicción personalizada, también debes subir el paquete de distribución de fuente que contiene tu código personalizado. Por ejemplo, consigna lo siguiente:

gsutil cp dist/my_custom_code-0.1.tar.gz gs://your-bucket/my_custom_code-0.1.tar.gz

Puedes subir este tarball al mismo directorio de Cloud Storage que tu archivo de modelo, pero no es necesario que lo hagas. De hecho, mantenerlos separados puede proporcionar una mejor organización, especialmente si implementas muchas versiones de tu modelo y código.

Prueba tu modelo con predicciones locales

Puedes usar el comando de gcloud ai-platform local predict para probar cómo en tu modelo se entregan predicciones antes de que lo implementes en AI Platform Prediction. Con el comando se usan dependencias en tu entorno local para realizar predicciones y mostrar resultados en el mismo formato que se emplea con gcloud ai-platform predict a fin de realizar predicciones en línea. La prueba local de las predicciones puede ayudarte a descubrir errores antes de incurrir en costos por las solicitudes de predicción en línea.

Para el argumento --model-dir, especifica un directorio que contenga tu modelo de aprendizaje automático exportado, ya sea en tu máquina local o en Cloud Storage. Para el argumento --framework, especifica tensorflow, scikit-learn o xgboost. No puedes usar el comando de gcloud ai-platform local predict con una rutina de predicción personalizada.

En el siguiente ejemplo, se muestra cómo realizar predicciones locales:

gcloud ai-platform local predict --model-dir local-or-cloud-storage-path-to-model-directory/ \
  --json-instances local-path-to-prediction-input.json \
  --framework name-of-framework

Implementa modelos y versiones

AI Platform Prediction organiza los modelos entrenados mediante recursos de modelo y versión. Un modelo de AI Platform Prediction es un contenedor para las versiones del modelo de aprendizaje automático.

Para implementar un modelo, crea un recurso del modelo en AI Platform Prediction, crea una versión de ese modelo y, luego, vincula la versión con el archivo del modelo almacenado en Cloud Storage.

Crea un recurso de modelo

En AI Platform Prediction, se usan recursos de modelo para organizar diferentes versiones del modelo.

Debes decidir en este momento si deseas que las versiones del modelo que pertenecen a este modelo usen un extremo regional o el extremo global. En la mayoría de los casos, elige un extremo regional. Si necesitas que solo está disponible en tipos de máquina heredada (MLS1), o bien si deseas ejecutar nodos de predicción en un región solo compatible con tipos de máquina heredadas (MLS1), luego usa el extremo global.

También debes decidir en este momento si deseas que las versiones del modelo que pertenecen a este modelo exporten los registros cuando entreguen predicciones. En los siguientes ejemplos, no se habilita el registro. Aprende cómo habilitar el registro.

Console

  1. Abre la página Modelos de AI Platform Prediction en Cloud Console:

    Ir a la página Modelos

  2. Haz clic en el botón Modelo nuevo en la parte superior de la página Modelos. Esto te llevará a la página Crear modelo.

  3. Ingresa un nombre único para tu modelo en el campo Nombre del modelo.

  4. Cuando se selecciona la casilla de verificación Usar extremos regionales, AI Platform Prediction usa un extremo regional. Si prefieres usar el extremo global, desmarca la casilla de verificación Usar extremos regionales.

  5. En la lista desplegable Región, selecciona una ubicación para tus nodos de predicción. Las regiones disponibles dependen de si usas un extremo regional o el global.

  6. Haz clic en Crear.

  7. Verifica que regresaste a la página Modelos y que el modelo nuevo aparezca en la lista.

gcloud

Extremo regional

Ejecuta el siguiente comando:

gcloud ai-platform models create MODEL_NAME \
  --region=REGION

Reemplaza lo siguiente:

Extremo global

Ejecuta el siguiente comando:

gcloud ai-platform models create MODEL_NAME \
  --regions=REGION

Reemplaza lo siguiente:

API de REST

Extremo regional

  1. Para darle formato a tu solicitud, coloca el objeto del modelo en el cuerpo de la solicitud. Como mínimo, especifica el nombre de tu modelo; para ello, reemplaza MODEL_NAME en la siguiente muestra:

    {
      "name": "MODEL_NAME"
    }
    
  2. Realiza una llamada a la API de REST a la siguiente URL y reemplaza PROJECT_ID por tu ID del proyecto de Google Cloud:

    POST https://REGION-ml.googleapis.com/v1/projects/PROJECT_ID/models/
    

    Reemplaza lo siguiente:

    Por ejemplo, puedes realizar la siguiente solicitud con el comando curl. Este comando autoriza a la solicitud con las credenciales asociadas con tu instalación del SDK de Cloud.

    curl -X POST -H "Content-Type: application/json" \
      -d '{"name": "MODEL_NAME"}' \
      -H "Authorization: Bearer `gcloud auth print-access-token`" \
      "https://REGION-ml.googleapis.com/v1/projects/PROJECT_ID/models"
    

    La API muestra una respuesta similar a la que se ve a continuación:

    {
      "name": "projects/PROJECT_ID/models/MODEL_NAME",
      "regions": [
        "REGION"
      ]
    }
    

Extremo global

  1. Para darle formato a tu solicitud, coloca el objeto del modelo en el cuerpo de la solicitud. Como mínimo, especifica el nombre de tu modelo. Para esto, reemplaza MODEL_NAME en la siguiente muestra y especifica una región mediante el reemplazo de REGION por una región que sea heredada (MLS1) ): Tipos de máquina:

    {
      "name": "MODEL_NAME",
      "regions": ["REGION"]
    }
    
  2. Realiza una llamada a la API de REST a la siguiente URL y reemplaza PROJECT_ID por tu ID del proyecto de Google Cloud:

    POST https://ml.googleapis.com/v1/projects/PROJECT_ID/models/
    

    Por ejemplo, puedes realizar la siguiente solicitud con el comando curl. Este comando autoriza a la solicitud con las credenciales asociadas con tu instalación del SDK de Cloud.

    curl -X POST -H "Content-Type: application/json" \
      -d '{"name": "MODEL_NAME", "regions": ["REGION"]}' \
      -H "Authorization: Bearer `gcloud auth print-access-token`" \
      "https://ml.googleapis.com/v1/projects/PROJECT_ID/models"
    

    La API muestra una respuesta similar a la que se ve a continuación:

    {
      "name": "projects/PROJECT_ID/models/MODEL_NAME",
      "regions": [
        "REGION"
      ]
    }
    

Consulta la API del modelo de AI Platform Prediction para obtener más detalles.

Crea una versión de modelo

Ahora estás listo para crear una versión del modelo con el modelo entrenado que subiste antes a Cloud Storage. Cuando creas una versión, puedes especificar una serie de parámetros. En la siguiente lista, se describen parámetros comunes; algunos de ellos son obligatorios:

  • name: Debe ser único en el modelo de AI Platform Prediction.
  • deploymentUri: Es la ruta de acceso a tu directorio de modelos en Cloud Storage.

    • Si implementas un modelo de TensorFlow, este es un directorio de modelos guardados.
    • Si implementas un modelo scikit-learn o XGBoost, este es el directorio que contiene tu archivo model.joblib, model.pkl o model.bst.
    • Si estás implementando una rutina de predicción personalizada, este es el directorio que contiene todos los artefactos de tu modelo. El tamaño total de este directorio debe ser de 500 MB o menos.
  • framework: TENSORFLOW, SCIKIT_LEARN o XGBOOST. Omite este parámetro si implementas una rutina de predicción personalizada.

  • runtimeVersion: Es una versión del entorno de ejecución basada en las dependencias que se necesitan en el modelo. Si implementas un modelo de scikit-learn, un modelo de XGBoost o una rutina de predicción personalizada, esta debe ser al menos 1.4. Si planeas usar la versión del modelo para la predicción por lotes, debes usar la versión 2.1 o anterior del entorno de ejecución.

  • packageUris (opcional): Es una lista de rutas de acceso a tus paquetes de distribución de código personalizado (archivos .tar.gz) en Cloud Storage. Solo proporciona este parámetro si implementas una canalización de scikit-learn con código personalizado (Beta) o una rutina de predicción personalizada (Beta).

  • predictionClass (opcional): Es el nombre de tu clase de Predictor en el formato module_name.class_name. Solo proporciona este parámetro si implementas una rutina de predicción personalizada (Beta).

  • serviceAccount(opcional): Puedes especificar una cuenta de servicio para que la use la versión del modelo si accede a los recursos de Google Cloud durante la entrega de predicciones. Obtén más información sobre cómo especificar una cuenta de servicio. Solo proporciona este parámetro si usas un contenedor personalizado o una rutina de predicción personalizada.

  • pythonVersion: Debe establecerse en “3.5” (en las versiones del entorno de ejecución abarcadas desde la 1.4 hasta la 1.14) o “3.7” (en las versiones 1.15 y posteriores) para que sea compatible con archivos de modelos exportados mediante Python 3. También se puede establecer en “2.7” si se usa con la versión 1.15 o con versiones anteriores del entorno de ejecución.

  • machineType (opcional): Es el tipo de máquina virtual que se usa en AI Platform Prediction para los nodos que entregan predicciones. Obtén más información sobre los tipos de máquinas. Si no está configurado, el valor predeterminado es mls1-c1-m2.

Obtén más información sobre cada uno de estos parámetros y sobre otros parámetros menos comunes en la referencia de la API para el recurso de la versión.

Además, si creaste el modelo en un extremo regional, asegúrate de crear la versión en el mismo extremo regional.

Console

  1. Abre la página Modelos de AI Platform Prediction en Cloud Console:

    Ir a la página Modelos

  2. En la página Modelos, selecciona el nombre del recurso de modelo que quieres usar para crear tu versión. Esto te llevará a la página Detalles del modelo.

  3. Haz clic en el botón Nueva versión en la parte superior de la página Detalles del modelo. Esto te lleva a la página Crear versión.

  4. Ingresa el nombre de la versión en el campo Nombre. De forma opcional, ingresa una descripción para tu versión en el campo Descripción.

  5. Ingresa la siguiente información sobre cómo entrenaste tu modelo en los cuadros desplegables correspondientes:

  6. De forma opcional, selecciona un tipo de máquina para ejecutar la predicción en línea. El valor predeterminado de este campo es “CPU de un núcleo”.

  7. En el campo URI del modelo, ingresa la ubicación del depósito de Cloud Storage en la que subiste tu archivo del modelo. Puedes usar el botón Explorar para buscar la ruta de acceso correcta.

    Asegúrate de especificar la ruta de acceso al directorio que contiene el archivo, no la ruta de acceso al archivo de modelo. Por ejemplo, usa gs://your_bucket_name/model-dir/ en lugar de gs://your_bucket_name/model-dir/saved_model.pb o gs://your_bucket_name/model-dir/model.pkl.

  8. Si implementas una canalización de scikit-learn con código personalizado (Beta) o una rutina de predicción personalizada (Beta), proporciona la ruta de acceso de Cloud Storage a cualquier paquete de código personalizado (.tar.gz) en Código personalizado y dependencias. Si implementas una rutina de predicción personalizada, ingresa el nombre de tu clase de Predictor en el campo Clase Prediction.

  9. Selecciona una opción de escalamiento para la implementación de la predicción en línea de la siguiente manera:

    • Si seleccionas "Ajuste de escala automático", se muestra el campo opcional Cantidad mínima de nodos. Puedes ingresar el número mínimo de nodos que se ejecutarán en todo momento, cuando el servicio se haya reducido. El valor predeterminado de este campo es 0.

    • Si seleccionas “Ajuste de escala manual” debes ingresar la cantidad de nodos que deseas que se ejecuten en todo momento.

      Obtén más información sobre los precios de los costos de predicción.

  10. Para terminar de crear tu versión modelo, haz clic en Guardar.

gcloud

  1. Establece variables de entorno para almacenar la ruta al directorio de Cloud Storage en el que se encuentra el objeto binario del modelo, el nombre del modelo, el nombre de la versión y el framework que hayas elegido.

    Cuando creas una versión con la herramienta de gcloud, puedes proporcionar el nombre del marco de trabajo en letras mayúsculas con guiones bajos (por ejemplo, SCIKIT_LEARN) o en minúsculas con guiones (por ejemplo, scikit-learn). Ambas opciones conducen a un comportamiento idéntico.

    Reemplaza [VALUES_IN_BRACKETS] por los valores adecuados:

    MODEL_DIR="gs://your_bucket_name/"
    VERSION_NAME="[YOUR-VERSION-NAME]"
    MODEL_NAME="[YOUR-MODEL-NAME]"
    FRAMEWORK="[YOUR-FRAMEWORK_NAME]"
    

    Para una canalización de scikit-learn con código personalizado (Beta), configura una variable adicional con la ruta de acceso al archivo comprimido del código personalizado:

    MODEL_DIR="gs://your_bucket_name/"
    VERSION_NAME="[YOUR-VERSION-NAME]"
    MODEL_NAME="[YOUR-MODEL-NAME]"
    FRAMEWORK="scikit-learn"
    CUSTOM_CODE_PATH="gs://your_bucket_name/my_custom_code-0.1.tar.gz"
    

    Para una rutina de predicción personalizada (Beta), omite la variable FRAMEWORK y configura variables adicionales con la ruta de acceso al archivo comprimido del código personalizado y el nombre de tu clase de Predictor:

    MODEL_DIR="gs://your_bucket_name/"
    VERSION_NAME="[YOUR-VERSION-NAME]"
    MODEL_NAME="[YOUR-MODEL-NAME]"
    CUSTOM_CODE_PATH="gs://your_bucket_name/my_custom_code-0.1.tar.gz"
    PREDICTOR_CLASS="[MODULE_NAME].[CLASS_NAME]"
    
  2. Crea la versión:

    gcloud ai-platform versions create $VERSION_NAME \
      --model=$MODEL_NAME \
      --origin=$MODEL_DIR \
      --runtime-version=2.2 \
      --framework=$FRAMEWORK \
      --python-version=3.7 \
      --region=REGION \
      --machine-type=MACHINE_TYPE
    

    Reemplaza lo siguiente:

    • REGION: la región del extremo regional en la que creaste el modelo. Si creaste el modelo en el extremo global, omite la marca --region.

    • MACHINE_TYPE: Un tipo de máquina que determina los recursos de procesamiento disponibles para tus nodos de predicción.

    Para una canalización de scikit-learn con código personalizado (Beta), usa el componente gcloud beta y asegúrate de configurar la marca --package-uris: Para implementar código personalizado, tu modelo debe usar el extremo global.

    gcloud components install beta
    
    gcloud beta ai-platform versions create $VERSION_NAME \
      --model=$MODEL_NAME \
      --origin=$MODEL_DIR \
      --runtime-version=2.2 \
      --framework=$FRAMEWORK \
      --python-version=3.7 \
      --machine-type=mls1-c1-m2 \
      --package-uris=$CUSTOM_CODE_PATH
    

    Para una rutina de predicción personalizada (Beta), usa el componente gcloud beta, omite la marca --framework y configura las marcas --package-uris y --prediction-class: Para implementar código personalizado, tu modelo debe usar el extremo global.

    gcloud components install beta
    
    gcloud beta ai-platform versions create $VERSION_NAME \
      --model=$MODEL_NAME \
      --origin=$MODEL_DIR \
      --runtime-version=1.15 \
      --python-version=3.7 \
      --machine-type=mls1-c1-m2 \
      --package-uris=$CUSTOM_CODE_PATH \
      --prediction-class=$PREDICTOR_CLASS
    

    La creación de la versión toma unos minutos. Cuando esté lista, verás el siguiente resultado:

    Creating version (this might take a few minutes)......done.
  3. Obtén información sobre tu versión nueva:

    gcloud ai-platform versions describe $VERSION_NAME \
      --model=$MODEL_NAME
    

    Deberías ver un resultado similar a este:

    createTime: '2018-02-28T16:30:45Z'
    deploymentUri: gs://your_bucket_name
    framework: [YOUR-FRAMEWORK-NAME]
    machineType: mls1-c1-m2
    name: projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions/[YOUR-VERSION-NAME]
    pythonVersion: '3.7'
    runtimeVersion: '2.2'
    state: READY

API de REST

  1. Dale formato al cuerpo de tu solicitud para que contenga el objeto de la versión. En este ejemplo, se especifican los valores de name, deploymentUri, runtimeVersion, framework y machineType de la versión. Reemplaza [VALUES_IN_BRACKETS] por los valores adecuados siguientes:

    {
      "name": "[YOUR-VERSION-NAME]",
      "deploymentUri": "gs://your_bucket_name/",
      "runtimeVersion": "2.2",
      "framework": "[YOUR_FRAMEWORK_NAME]",
      "pythonVersion": "3.7",
      "machineType": "[YOUR_MACHINE_TYPE]"
    }
    
  2. Haz una llamada a la API de REST en la ruta de acceso y reemplaza [VALUES_IN_BRACKETS] por los siguientes valores adecuados:

    POST https://REGION-ml.googleapis.com/v1/projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions
    

    Reemplaza REGION por la región del extremo regional donde creaste tu modelo. Si creaste tu modelo en el extremo global, usa ml.googleapis.com.

    Por ejemplo, puedes realizar la siguiente solicitud con el comando curl:

    curl -X POST -H "Content-Type: application/json" \
      -d '{"name": "[YOUR-VERSION-NAME]", "deploymentUri": "gs://your_bucket_name/", "runtimeVersion": "2.2", "framework": "[YOUR_FRAMEWORK_NAME]", "pythonVersion": "3.7", "machineType": "[YOUR_MACHINE_TYPE]"}' \
      -H "Authorization: Bearer `gcloud auth print-access-token`" \
      "https://REGION-ml.googleapis.com/v1/projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions"
    

    La creación de la versión toma unos minutos. Cuando esté lista, debes ver un resultado similar a esto:

    {
      "name": "projects/[YOUR-PROJECT-ID]/operations/create_[YOUR-MODEL-NAME]_[YOUR-VERSION-NAME]-[TIMESTAMP]",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.ml.v1.OperationMetadata",
        "createTime": "2018-07-07T02:51:50Z",
        "operationType": "CREATE_VERSION",
        "modelName": "projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]",
        "version": {
          "name": "projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions/[YOUR-VERSION-NAME]",
          "deploymentUri": "gs://your_bucket_name",
          "createTime": "2018-07-07T02:51:49Z",
          "runtimeVersion": "2.2",
          "framework": "[YOUR_FRAMEWORK_NAME]",
          "machineType": "[YOUR_MACHINE_TYPE]",
          "pythonVersion": "3.7"
        }
      }
    }