Implementa modelos

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

Para implementar tu modelo entrenado en AI Platform, debes realizar lo siguiente:

  • Sube tu modelo guardado a un depósito de Cloud Storage.
  • Crea un recurso del modelo de AI Platform.
  • Crea un recurso de la versión de AI Platform y especifica la ruta de acceso de Cloud Storage a tu 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 tu 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.

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

Configura tu 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 este 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, debes otorgar acceso a las cuentas de servicio de AI Platform de forma explícita.

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

    BUCKET_NAME="your_bucket_name"

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

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

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

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

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

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

    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 scikit-learn o XGBoost

En función de cómo hayas exportado tu modelo entrenado, sube tu 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 ejemplo siguiente, 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 de Compute Engine (N1) (Beta). 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 ejemplo siguiente, 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 organiza tus modelos entrenados mediante los recursos de modelo y versión. Un modelo de AI Platform es un contenedor para las versiones de tu modelo de aprendizaje automático.

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

Crea un recurso de modelo

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

Console

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

    Abrir los modelos en GCP Console

  2. Si es necesario, crea un modelo para agregarle tu versión nueva de la manera siguiente:

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

    2. Ingresa un nombre exclusivo para tu modelo en el cuadro Nombre del modelo. De forma opcional, ingresa una descripción para tu modelo en el campo Descripción.

    3. Haz clic en Crear.

    4. Verifica que hayas regresado a la página Modelos y que tu modelo nuevo aparezca en la lista.

gcloud

Crea un recurso del modelo para tus versiones del modelo y completa el nombre de tu modelo sin los corchetes de la manera siguiente:

gcloud ai-platform models create "[YOUR-MODEL-NAME]"

API de REST

  1. Para formatear tu solicitud, coloca el objeto del modelo en el cuerpo de la solicitud. Como mínimo, debes especificar un nombre para tu modelo. Completa el nombre que desees para tu modelo sin los corchetes de la manera siguiente:

    {"name": "[YOUR-MODEL-NAME]"}
    
  2. Haz una llamada a la API de REST en la ruta de acceso y reemplaza [VALUES_IN_BRACKETS] por los valores adecuados siguientes:

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

    Por ejemplo, puedes realizar la solicitud siguiente con cURL:

    curl -X POST -H "Content-Type: application/json" \
      -d '{"name": "[YOUR-MODEL-NAME]"}' \
      -H "Authorization: Bearer `gcloud auth print-access-token`" \
      "https://ml.googleapis.com/v1/projects/[YOUR-PROJECT-ID]/models"
    

    Deberías ver un resultado similar al siguiente:

    {
      "name": "projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]",
      "regions": [
        "us-central1"
      ]
    }
    

Consulta la API del modelo de AI Platform para obtener más información.

Crea una versión de modelo

Ahora estás listo para crear una versión de modelo con el modelo entrenado que subiste previamente a Cloud Storage. Cuando crees una versión, especifica los parámetros siguientes:

  • name: Debe ser único dentro del modelo de AI Platform.
  • 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 implementas 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 con tu 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.

  • 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 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 se use con la versión de tu modelo si se accede a los recursos de GCP 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 implementas una rutina de predicción personalizada (Beta).

  • pythonVersion: Se debe configurar como "3.5" para que sea compatible con los archivos del modelo exportados con Python 3. Si no se configura, el valor predeterminado es "2.7".

  • machineType (opcional): Es el tipo de máquina virtual que se usa con AI Platform Prediction para los nodos en los que se 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.

Consulta más información sobre cada uno de estos parámetros en la API de AI Platform Training and Prediction para un recurso de la versión.

Consulta los detalles completos de cada versión del entorno de ejecución.

Console

  1. En la página Modelos, selecciona el nombre del recurso del modelo que te gustaría usar para crear tu versión. Esto te lleva a la página Detalles del modelo.

    Abrir los modelos en GCP Console

  2. 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.

  3. 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.

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

  5. 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".

  6. 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 encontrar 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 del 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.

  7. 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.

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

    • Si seleccionas "Ajuste de escala automático", se muestra el campo opcional Número mínimo 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 para los costos de predicción.

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

gcloud

  1. Establece variables de entorno para almacenar la ruta de acceso 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 marco de trabajo 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 siguientes:

    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 a tu tarball de 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 a tu tarball de código personalizado y el nombre de tu clase de Predictor de la manera siguiente:

    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 de la manera siguiente:

    gcloud ai-platform versions create $VERSION_NAME \
      --model $MODEL_NAME \
      --origin $MODEL_DIR \
      --runtime-version=1.14 \
      --framework $FRAMEWORK \
      --python-version=3.5
    

    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:

    gcloud components install beta
    
    gcloud beta ai-platform versions create $VERSION_NAME \
      --model $MODEL_NAME \
      --origin $MODEL_DIR \
      --runtime-version=1.14 \
      --framework $FRAMEWORK \
      --python-version=3.5
      --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:

    gcloud components install beta
    
    gcloud beta ai-platform versions create $VERSION_NAME \
      --model $MODEL_NAME \
      --origin $MODEL_DIR \
      --runtime-version=1.14 \
      --python-version=3.5
      --package-uris=$CUSTOM_CODE_PATH
      --prediction-class=$PREDICTOR_CLASS
    

    La creación de la versión tarda unos minutos. Cuando esté lista, debes ver 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 al siguiente:

    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.5'
    runtimeVersion: '1.14'
    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 y framework de la versión. Reemplaza [VALUES_IN_BRACKETS] por los valores apropiados siguientes:

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

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

    Por ejemplo, puedes realizar la solicitud siguiente con cURL:

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

    La creación de la versión tarda unos minutos. Cuando esté lista, debes ver un resultado similar al siguiente:

      {
        "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": "1.14",
            "framework": "[YOUR_FRAMEWORK_NAME]",
            "machineType": "mls1-c1-m2",
            "pythonVersion": "3.5"
          }
        }
      }
    

Especifica una cuenta de servicio para la versión de tu modelo

De manera predeterminada, cuando implementas una versión de modelo, en esta se incluyen los permisos de una cuenta de servicio administrada con Google mediante la función de IAM Agente de servicios de Cloud ML. Esta cuenta de servicio predeterminada es suficiente para la mayoría de los casos prácticos. Por ejemplo, con esta se puede leer desde los depósitos de Cloud Storage en el mismo proyecto de Google Cloud Platform.

Sin embargo, si implementas una rutina de predicción personalizada y necesitas que la versión de tu modelo tenga un conjunto diferente de permisos, puedes especificar que se use una cuenta de servicio distinta. Por ejemplo, si la versión de tu modelo necesita acceder a un depósito de Cloud Storage desde un proyecto de GCP diferente durante la predicción, puedes especificar una cuenta de servicio con permiso para leer desde ese depósito.

  1. Crea o selecciona una cuenta de servicio para la versión de tu modelo. Como usuario que implementa la versión de modelo, debes tener la función de creador de token de cuenta de servicio para la cuenta de servicio.

  2. Especifica el nombre de la cuenta de servicio en el campo serviceAccount cuando crees la versión de tu modelo. Si implementas tu modelo con la herramienta de gcloud, puedes usar la marca --service-account, como se muestra en el ejemplo siguiente:

    gcloud components install beta
    
    gcloud beta ai-platform versions create your-version-name \
      --service-account your-service-account-name@your-project-id.iam.gserviceaccount.com
      ...
    

Qué sigue

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.