Implementa modelos

En esta página, se explica cómo implementar tu modelo en Cloud ML Engine para obtener predicciones.

Para implementar tu modelo entrenado en Cloud ML Engine, debes realizar lo siguiente:

  • Sube tu modelo guardado a un depósito de Cloud Storage.
  • Crea un recurso del modelo de Cloud ML Engine.
  • Crea un recurso de versión de Cloud ML Engine, en el que especifiques la ruta de acceso de Cloud Storage a tu modelo guardado.

Antes de comenzar

  1. Configura tu entorno de desarrollo, como se describe en la guía de introducción.
  2. Entrena y guarda tu modelo con el nombre de archivo adecuado, que se muestra a continuación.

Requisitos para nombrar los archivos del modelo

El archivo del modelo guardado que se sube a Cloud Storage se debe nombrar como uno de los model.pkl, model.joblib o model.bst, según la biblioteca que usaste. Esta restricción garantiza que en Cloud ML Engine se use el mismo patrón que se usó durante la exportación para reconstruir el modelo en la importación.

scikit-learn

Biblioteca usada para exportar el modelo Nombre del modelo correcto
pickle model.pkl
joblib model.joblib

XGBoost

Biblioteca usada para exportar el modelo Nombre del modelo correcto
pickle model.pkl
joblib model.joblib
xgboost.Booster model.bst

Para futuras iteraciones de tu modelo, organiza tu depósito de Cloud Storage a fin de que cada modelo nuevo tenga un directorio dedicado.

Almacena tu modelo en Cloud Storage

Por lo general, es más fácil usar un depósito de Cloud Storage dedicado en el mismo proyecto que usas para Cloud ML Engine.

Si estás usando un depósito en un proyecto diferente, debes asegurarte de que tu cuenta de servicio de Cloud ML Engine pueda acceder a tu modelo en Cloud Storage. Sin los permisos adecuados, tu solicitud para crear una versión del modelo de Cloud ML Engine tendrá errores. Obtén más información sobre 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 si no es parte del proyecto que usas para ejecutar Cloud ML Engine, debes otorgar acceso de forma explícita a las cuentas de servicio de Cloud ML Engine.

  1. Especifica un nombre para tu 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 -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 configura una variable de entorno llamada “REGION”.

    Por ejemplo, el siguiente código crea la variable REGION y la configura en us-central1:

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

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

    Nota: Usa la misma región donde planeas ejecutar trabajos de Cloud ML Engine. En el ejemplo, se usa us-central1 porque esa es la región que se utiliza en las instrucciones de introducción.

Sube el archivo del modelo exportado a Cloud Storage

Ejecuta el siguiente comando para subir tu archivo del modelo guardado a tu depósito en Cloud Storage:

gsutil cp ./model.joblib gs://your_bucket/model.joblib

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.

Prueba tu modelo con predicciones locales

Puedes usar gcloud para implementar tu modelo en predicciones locales. Este paso opcional te ayuda a ahorrar tiempo, ya que comprueba la validez de tu modelo antes de implementarlo en Cloud ML Engine. Cuando usas el archivo del modelo que subiste a Cloud Storage, puedes ejecutar la predicción en línea de forma local y obtener una vista previa de los resultados que mostraría el servidor de predicción de Cloud ML Engine.

Usa la predicción local con un subconjunto pequeño de tus datos de prueba para depurar una falta de coincidencia entre las funciones de entrenamiento y de entrega. Por ejemplo, si los datos que envías con tu solicitud de predicción no coinciden con lo que espera tu modelo, puedes averiguarlo antes de que se generen costos por las solicitudes de predicción en la nube en línea.

Obtén más información sobre el uso de gcloud local predict.

  1. Establece las variables de entorno para el directorio de Cloud Storage que contiene tu modelo ("gs://your-bucket/"), el marco de trabajo y el nombre de tu archivo de entrada, si aún no lo has hecho:

    MODEL_DIR="gs://your-bucket/"
    INPUT_FILE="input.json"
    FRAMEWORK="SCIKIT_LEARN"
    
  2. Envía la solicitud de predicción:

    gcloud ml-engine local predict --model-dir=$MODEL_DIR \
        --json-instances $INPUT_FILE \
        --framework $FRAMEWORK
    

Implementa modelos y versiones

Cloud ML Engine organiza tus modelos entrenados con los recursos de modelos y versiones. Un modelo de Cloud ML Engine es un contenedor para las versiones de tu modelo de aprendizaje automático.

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

Crea un recurso del modelo

En Cloud ML Engine, se usan los recursos del modelo para organizar diferentes versiones de tu modelo.

Console

  1. Abre la página de modelos de Cloud ML Engine en GCP Console:

    Abrir modelos en GCP Console

  2. Si es necesario, crea el modelo para agregar tu versión nueva a:

    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 único 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 Guardar.

    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 deseado de tu modelo sin los corchetes:

    gcloud ml-engine models create "[YOUR-MODEL-NAME]"

API de REST

  1. Dale formato a tu solicitud y coloca el objeto del modelo en el cuerpo de la solicitud. Como mínimo, debes especificar un nombre para tu modelo. Completa con el nombre que desees sin los corchetes:

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

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

    Por ejemplo, puedes realizar la siguiente solicitud 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 a este:

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

Consulta la API del modelo de Cloud ML Engine para más detalles.

Crea una versión del modelo

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

  • name: Debe ser único dentro del modelo de Cloud ML Engine.
  • deploymentUri: La ruta de acceso al directorio donde se almacena el archivo del modelo exportado. Asegúrate de especificar la ruta de acceso al directorio que contiene el archivo, no la ruta de acceso al archivo del modelo.
    • Ruta de acceso al modelo - gs://your_bucket_name/model.pkl
    • Ruta de acceso al directorio que contiene el modelo - gs://your_bucket_name/
  • framework: "SCIKIT_LEARN" o "XGBOOST"
  • runtimeVersion: Se debe configurar en "1.4" o superior para asegurarte de que estás usando una versión de Cloud ML Engine que admita scikit-learn y XGBoost.
  • pythonVersion: Se debe configurar en "3.5" para que sea compatible con los archivos del modelo exportados mediante Python 3. Si no se configura, el valor predeterminado es "2.7".

Consulta más información sobre cada uno de estos parámetros en la API de Cloud ML Engine 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 modelos en GCP Console

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

  3. Ingresa tu 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 siguiente información sobre cómo entrenaste a tu modelo en los cuadros desplegables correspondientes:

  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 donde 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/" en lugar de "gs://your_bucket_name/model.pkl".

  7. Selecciona una opción de escalamiento para la implementación de predicción en línea: Escalamiento automático o escalamiento manual.

    • Si seleccionas "Escalamiento automático", se muestra el campo opcional Cantidad mínima de nodos. Puedes ingresar la cantidad mínima de nodos que quieres que se ejecuten en todo momento cuando el servicio haya reducido su escala. El valor predeterminado de este campo es 0.

    • Si seleccionas "Escalamiento manual", se muestra el campo obligatorio Cantidad de nodos. 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.

  8. Para terminar de crear tu versión del 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 modelo binario, el nombre de tu modelo, el nombre de tu versión y tu elección de marco de trabajo ("SCIKIT_LEARN" o "XGBOOST"). 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="SCIKIT_LEARN"
    
  2. Crea la versión:

      gcloud ml-engine versions create $VERSION_NAME \
          --model $MODEL_NAME --origin $MODEL_DIR \
          --runtime-version=1.12 --framework $FRAMEWORK \
          --python-version=3.5
    

    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 ml-engine 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: SCIKIT_LEARN
      machineType: mls1-highmem-1
      name: projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions/[YOUR-VERSION-NAME]
      pythonVersion: '3.5'
      runtimeVersion: '1.12'
      state: READY
    

API de REST

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

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

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

    Por ejemplo, puedes realizar la siguiente solicitud con cURL:

        curl -X POST -H "Content-Type: application/json" \
          -d '{"name": "[YOUR-VERSION-NAME]", "deploymentUri": "gs://your_bucket_name/", "runtimeVersion": "1.12", "framework": "SCIKIT_LEARN", "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 a este:

      {
        "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.12",
            "framework": "SCIKIT_LEARN",
            "machineType": "mls1-highmem-1",
            "pythonVersion": "3.5"
          }
        }
      }
    

¿Qué sigue?

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

Enviar comentarios sobre…

Cloud ML Engine para XGBoost y scikit-learn