Obtén predicciones en línea con scikit-learn

En esta muestra, se entrena un modelo para predecir el nivel de ingresos de una persona según el Conjunto de datos de ingresos del censo. Después de entrenar y guardar el modelo de forma local, debes implementarlo en AI Platform y consultarlo para obtener predicciones en línea.

Puedes implementar y entregar canalizaciones scikit-learn en AI Platform. El módulo de canalización de scikit-learn te permite aplicar varias transformaciones de datos antes de realizar el entrenamiento con un estimador. Esto agrupa varios pasos del procesamiento de datos y garantiza que se usen los mismos datos de entrenamiento en cada paso.

Este instructivo también está disponible en GitHub como un notebook de Jupyter.

Cómo llevar tu modelo a AI Plaform

Puedes trasladar tu modelo a AI Platform para obtener predicciones en cinco pasos:

  • Guarda tu modelo en un archivo.
  • Sube el modelo guardado a Cloud Storage.
  • Crea un recurso de modelo en AI Platform.
  • Crea una versión del modelo, para ello vincula tu modelo guardado.
  • Haz una predicción en línea.

Antes de comenzar

Completa los pasos siguientes para configurar una cuenta de GCP, activar la API de AI Platform y, también, instalar y activar el SDK de Cloud.

Configura tu proyecto de GCP

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En GCP Console, en la página de selección de proyecto, selecciona o crea un proyecto de GCP.

    Ir a la página de selección de proyecto

  3. Asegúrate de tener habilitada la facturación para tu proyecto de Google Cloud Platform. Obtén información sobre cómo confirmar que tienes habilitada la facturación para tu proyecto.

  4. Habilita lasAI Platform ("Cloud Machine Learning Engine") y Compute EngineAPIAPI.

    Habilita lasAPI

  5. Instala e inicializa el SDK de Cloud.

Configura tu entorno

Elige una de las siguientes opciones para configurar tu entorno de manera local en macOS o en un entorno remoto en Cloud Shell.

Si eres usuario de macOS, te recomendamos configurar tu entorno mediante la pestaña MACOS a continuación. Cloud Shell, que se muestra en la pestaña CLOUD SHELL, está disponible en macOS, Linux y Windows. Cloud Shell proporciona una forma rápida de probar AI Platform, pero no es adecuado para el trabajo de desarrollo continuo.

macOS

  1. Verifica la instalación de Python
    Confirma que tienes Python instalado y, si es necesario, instálalo.

    python -V
  2. Verifica la instalación de pip.
    pip es el administrador de paquetes de Python, que se incluye en las versiones actuales. Para verificar si ya tienes pip instalado, ejecuta el comando pip --version. De lo contrario, consulta cómo instalar pip.

    Puedes actualizar pip con el comando siguiente:

    pip install -U pip

    Consulta la documentación de pip para obtener más detalles.

  3. Instala virtualenv.
    virtualenv es una herramienta que sirve para crear entornos de Python aislados. Para verificar si ya tienes instalado virtualenv, ejecuta virtualenv --version. De lo contrario, instala virtualenv:

    pip install --user --upgrade virtualenv

    Si quieres crear un entorno de desarrollo aislado para esta guía, crea un entorno virtual nuevo en virtualenv. Por ejemplo, con el comando siguiente, se activa un entorno llamado cmle-env:

    virtualenv cmle-env
    source cmle-env/bin/activate
  4. A los fines de este instructivo, ejecuta el resto de los comandos dentro de tu entorno virtual.

    Consulta obtener más información sobre el uso de virtualenv. Para salir de virtualenv, ejecuta deactivate.

Cloud Shell

  1. Abre Google Cloud Platform Console.

    Google Cloud Platform Console

  2. Haz clic en el botón Activar Google Cloud Shell en la parte superior de la ventana de la consola.

    Activa Google Cloud Shell

    Se abrirá una sesión de Cloud Shell dentro de un marco nuevo en la parte inferior de la consola, que mostrará una ventana emergente de línea de comandos. La sesión de shell puede tardar unos segundos en inicializar.

    Sesión de Cloud Shell

    Tu sesión de Cloud Shell está lista para usarse.

  3. Configura la herramienta de línea de comandos de gcloud a fin de usar el proyecto seleccionado.

    gcloud config set project [selected-project-id]

    en el que [selected-project-id] es el ID del proyecto (omite los corchetes).

Verifica los componentes del SDK de Google Cloud

Para verificar que los componentes del SDK de Google Cloud están instalados, realiza lo siguiente:

  1. Haz una lista de tus modelos:

    gcloud ai-platform models list
  2. Si no has creado ningún modelo anteriormente, el comando muestra una lista vacía:

    Listed 0 items.

    Después de comenzar a crear modelos, podrás verlos en una lista si ejecutas este comando.

  3. Si ya instalaste gcloud, actualiza con el comando siguiente:

    gcloud components update

Instala marcos de trabajo

macOS

Dentro de tu entorno virtual, ejecuta el comando siguiente para instalar las versiones de scikit-learn y Pandas que se usan en la versión 1.14 del entorno de ejecución de AI Platform:

(cmle-env)$ pip install scikit-learn==0.20.2 pandas==0.24.0

Cuando proporciones los números de versión en el comando anterior, asegúrate de que las dependencias de tu entorno virtual coincidan con las dependencias de la versión del entorno de ejecución. Esto ayuda a prevenir comportamientos inesperados cuando tu código se ejecuta en AI Platform.

Para obtener más detalles, opciones de instalación y, además, información de solución de problemas, consulta las instrucciones de instalación para cada marco de trabajo:

Cloud Shell

Ejecuta el siguiente comando para instalar scikit-learn y Pandas:

pip install --user scikit-learn pandas

Para obtener más detalles, opciones de instalación y, además, información de solución de problemas, consulta las instrucciones de instalación para cada marco de trabajo:

Descarga los datos

El Conjunto de datos de ingresos del censo que se usa en esta muestra para el entrenamiento lo aloja UC Irvine Machine Learning Repository. Consulta Acerca de los datos para obtener más información.

  • El archivo de entrenamiento es adult.data.
  • El archivo de evaluación es adult.test.

Entrena y guarda un modelo

Para entrenar y guardar un modelo, completa los pasos siguientes:

  1. Carga los datos en un DataFrame de Pandas a fin de prepararlos para su uso con scikit-learn.
  2. Entrena un modelo simple en scikit-learn.
  3. Guarda el modelo en un archivo que pueda subirse a AI Platform.

Si ya tienes un modelo entrenado para subir, consulta cómo exportar tu modelo.

Carga y transforma datos

Puedes exportar objetos Pipeline con joblib o pickle, del mismo modo que exportas los estimadores de scikit-learn. En el ejemplo siguiente, se usan las canalizaciones para convertir atributos categóricos individuales en valores numéricos, se combinan y se usa un RandomForestClassifier a fin de entrenar el modelo.

from sklearn.externals import joblib
import json
import numpy as np
import os
import pandas as pd
import pickle
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectKBest
from sklearn.pipeline import FeatureUnion
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import LabelBinarizer

# Define the format of your input data, including unused columns.
# These are the columns from the census data files.
COLUMNS = (
    'age',
    'workclass',
    'fnlwgt',
    'education',
    'education-num',
    'marital-status',
    'occupation',
    'relationship',
    'race',
    'sex',
    'capital-gain',
    'capital-loss',
    'hours-per-week',
    'native-country',
    'income-level'
)

# Categorical columns are columns that need to be turned into a numerical value to be used by scikit-learn
CATEGORICAL_COLUMNS = (
    'workclass',
    'education',
    'marital-status',
    'occupation',
    'relationship',
    'race',
    'sex',
    'native-country'
)

# Load the training census dataset
with open('./census_data/adult.data', 'r') as train_data:
    raw_training_data = pd.read_csv(train_data, header=None, names=COLUMNS)

# Remove the column we are trying to predict ('income-level') from our features list
# Convert the Dataframe to a lists of lists
train_features = raw_training_data.drop('income-level', axis=1).as_matrix().tolist()
# Create our training labels list, convert the Dataframe to a lists of lists
train_labels = (raw_training_data['income-level'] == ' >50K').as_matrix().tolist()

# Load the test census dataset
with open('./census_data/adult.test', 'r') as test_data:
    raw_testing_data = pd.read_csv(test_data, names=COLUMNS, skiprows=1)
# Remove the column we are trying to predict ('income-level') from our features list
# Convert the Dataframe to a lists of lists
test_features = raw_testing_data.drop('income-level', axis=1).as_matrix().tolist()
# Create our training labels list, convert the Dataframe to a lists of lists
test_labels = (raw_testing_data['income-level'] == ' >50K.').as_matrix().tolist()

# Since the census data set has categorical features, we need to convert
# them to numerical values. We'll use a list of pipelines to convert each
# categorical column and then use FeatureUnion to combine them before calling
# the RandomForestClassifier.
categorical_pipelines = []

# Each categorical column needs to be extracted individually and converted to a numerical value.
# To do this, each categorical column will use a pipeline that extracts one feature column via
# SelectKBest(k=1) and a LabelBinarizer() to convert the categorical value to a numerical one.
# A scores array (created below) will select and extract the feature column. The scores array is
# created by iterating over the COLUMNS and checking if it is a CATEGORICAL_COLUMN.
for i, col in enumerate(COLUMNS[:-1]):
    if col in CATEGORICAL_COLUMNS:
        # Create a scores array to get the individual categorical column.
        # Example:
        #  data = [39, 'State-gov', 77516, 'Bachelors', 13, 'Never-married', 'Adm-clerical',
        #         'Not-in-family', 'White', 'Male', 2174, 0, 40, 'United-States']
        #  scores = [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        #
        # Returns: [['Sate-gov']]
        scores = []
        # Build the scores array
        for j in range(len(COLUMNS[:-1])):
            if i == j: # This column is the categorical column we want to extract.
                scores.append(1) # Set to 1 to select this column
            else: # Every other column should be ignored.
                scores.append(0)
        skb = SelectKBest(k=1)
        skb.scores_ = scores
        # Convert the categorical column to a numerical value
        lbn = LabelBinarizer()
        r = skb.transform(train_features)
        lbn.fit(r)
        # Create the pipeline to extract the categorical feature
        categorical_pipelines.append(
            ('categorical-{}'.format(i), Pipeline([
                ('SKB-{}'.format(i), skb),
                ('LBN-{}'.format(i), lbn)])))

# Create pipeline to extract the numerical features
skb = SelectKBest(k=6)
# From COLUMNS use the features that are numerical
skb.scores_ = [1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0]
categorical_pipelines.append(('numerical', skb))

# Combine all the features using FeatureUnion
preprocess = FeatureUnion(categorical_pipelines)

# Create the classifier
classifier = RandomForestClassifier()

# Transform the features and fit them to the classifier
classifier.fit(preprocess.transform(train_features), train_labels)

# Create the overall model as a single pipeline
pipeline = Pipeline([
    ('union', preprocess),
    ('classifier', classifier)
])

Exporta tu modelo

Para exportar tu modelo, puedes usar joblib o la biblioteca pickle de Python:

joblib

# Export the model to a file
joblib.dump(pipeline, 'model.joblib')

pickle

# Export the model to a file
with open('model.pkl', 'wb') as model_file:
  pickle.dump(pipeline, model_file)

Requisitos para nombrar los archivos de modelo

El archivo de modelo guardado que subas a Cloud Storage debe llamarse model.pkl o model.joblib, según la biblioteca que hayas usado. Esta restricción garantiza que AI Platform use el mismo patrón que se usó durante la exportación para reconstruir el modelo en la importación.

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

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

Almacena tu modelo en Cloud Storage

A los fines de este instructivo, es más fácil usar un depósito de Cloud Storage dedicado en el mismo proyecto que estás usando para AI Platform.

Si estás usando un depósito en un proyecto diferente, debes asegurarte de que tu cuenta de servicio de AI Platform 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 debe estar en la misma región en la que planeas ejecutar los trabajos de AI Platform. Además, si este 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 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 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:

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

Sube el archivo de 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_name/model.joblib

Formato de datos para la predicción

Antes de enviar una solicitud de predicción en línea, debes formatear los datos de prueba para prepararlos a fin de que los use el servicio de AI Platform Prediction. Asegúrate de que el formato de tus instancias de entrada coincida con lo que espera tu modelo.

gcloud

Crea un archivo input.json con cada instancia de entrada en una línea separada. En el ejemplo siguiente, se usan las diez primeras instancias de datos de la lista test_features que se definió en los pasos anteriores.

    [25, "Private", 226802, "11th", 7, "Never-married", "Machine-op-inspct", "Own-child", "Black", "Male", 0, 0, 40, "United-States"]
    [38, "Private", 89814, "HS-grad", 9, "Married-civ-spouse", "Farming-fishing", "Husband", "White", "Male", 0, 0, 50, "United-States"]
    [28, "Local-gov", 336951, "Assoc-acdm", 12, "Married-civ-spouse", "Protective-serv", "Husband", "White", "Male", 0, 0, 40, "United-States"]
    [44, "Private", 160323, "Some-college", 10, "Married-civ-spouse", "Machine-op-inspct", "Husband", "Black", "Male", 7688, 0, 40, "United-States"]
    [18, "?", 103497, "Some-college", 10, "Never-married", "?", "Own-child", "White", "Female", 0, 0, 30, "United-States"]
    [34, "Private", 198693, "10th", 6, "Never-married", "Other-service", "Not-in-family", "White", "Male", 0, 0, 30, "United-States"]
    [29, "?", 227026, "HS-grad", 9, "Never-married", "?", "Unmarried", "Black", "Male", 0, 0, 40, "United-States"]
    [63, "Self-emp-not-inc", 104626, "Prof-school", 15, "Married-civ-spouse", "Prof-specialty", "Husband", "White", "Male", 3103, 0, 32, "United-States"]
    [24, "Private", 369667, "Some-college", 10, "Never-married", "Other-service", "Unmarried", "White", "Female", 0, 0, 40, "United-States"]
    [55, "Private", 104996, "7th-8th", 4, "Married-civ-spouse", "Craft-repair", "Husband", "White", "Male", 0, 0, 10, "United-States"]

Ten en cuenta que el formato de las instancias de entrada debe coincidir con lo que tu modelo espera. En este ejemplo, el modelo del censo requiere 14 elementos, por lo que tu entrada debe ser una matriz de forma (num_instances, 14).

API de REST

Crea un archivo input.json con cada instancia de entrada en una línea separada. En el ejemplo siguiente, se usan las diez primeras instancias de datos de la lista test_features que se definió en los pasos anteriores.

{
  "instances": [

    [25, "Private", 226802, "11th", 7, "Never-married", "Machine-op-inspct", "Own-child", "Black", "Male", 0, 0, 40, "United-States"],
    [38, "Private", 89814, "HS-grad", 9, "Married-civ-spouse", "Farming-fishing", "Husband", "White", "Male", 0, 0, 50, "United-States"],
    [28, "Local-gov", 336951, "Assoc-acdm", 12, "Married-civ-spouse", "Protective-serv", "Husband", "White", "Male", 0, 0, 40, "United-States"],
    [44, "Private", 160323, "Some-college", 10, "Married-civ-spouse", "Machine-op-inspct", "Husband", "Black", "Male", 7688, 0, 40, "United-States"],
    [18, "?", 103497, "Some-college", 10, "Never-married", "?", "Own-child", "White", "Female", 0, 0, 30, "United-States"],
    [34, "Private", 198693, "10th", 6, "Never-married", "Other-service", "Not-in-family", "White", "Male", 0, 0, 30, "United-States"],
    [29, "?", 227026, "HS-grad", 9, "Never-married", "?", "Unmarried", "Black", "Male", 0, 0, 40, "United-States"],
    [63, "Self-emp-not-inc", 104626, "Prof-school", 15, "Married-civ-spouse", "Prof-specialty", "Husband", "White", "Male", 3103, 0, 32, "United-States"],
    [24, "Private", 369667, "Some-college", 10, "Never-married", "Other-service", "Unmarried", "White", "Female", 0, 0, 40, "United-States"],
    [55, "Private", 104996, "7th-8th", 4, "Married-civ-spouse", "Craft-repair", "Husband", "White", "Male", 0, 0, 10, "United-States"]
  ]
}

Ten en cuenta que el formato de las instancias de entrada debe coincidir con lo que tu modelo espera. En este ejemplo, el modelo de censo requiere 14 características, por lo que tu entrada debe ser una matriz de forma (num_instances, 14).

Consulta más información sobre cómo formatear tu entrada para predicciones en línea.

Prueba tu modelo con predicciones locales

Puedes usar el comando de gcloud ai-platform local predict para probar cómo tu modelo entrega predicciones antes de que lo implementes en AI Platform Prediction. El comando usa dependencias en tu entorno local para realizar predicciones y muestra resultados en el mismo formato que emplea gcloud ai-platform predict cuando realiza 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 de modelo en AI Platform y una versión de ese modelo y, luego, vincula la versión del modelo al archivo de modelo almacenado en Cloud Storage.

Crea un recurso de modelo

AI Platform, usa recursos de modelo para organizar diferentes versiones de tu modelo.

Console

  1. Abre la página de 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:

    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 de 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 de modelo para tus versiones de modelo y completa el nombre deseado de tu modelo sin los corchetes:

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

API de REST

  1. Para formatear tu solicitud, coloca el objeto de 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:

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

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

    Por ejemplo, puedes crear 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 a este:

    {
      "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 estás implementando un modelo de TensorFlow, este es un directorio de modelo guardado.
    • Si implementas un modelo de 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.

  • runtimeVersion: es una versión del entorno de ejecución que se basa en las dependencias que necesita tu modelo. Si estás implementando un modelo de scikit-learn o XGBoost, esta debe ser, al menos, 1.4.

  • pythonVersion: se debe establecer en “3.5” para que sea compatible con los archivos de 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 AI Platform Prediction usa para los nodos que entregan predicciones. Obtén más información sobre los tipos de máquinas. Si no se establece, el valor predeterminado es mls1-c1-m2.

Consulta más información sobre cada uno de estos parámetros en la API de entrenamiento y predicción de AI Platform para un recurso de 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 de 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 de 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:

    • Selecciona la versión de Python que usaste para entrenar el modelo.
    • Selecciona el marco de trabajo y la versión del marco de trabajo.
    • Selecciona la versión del entorno de ejecución de AA. Obtén más información sobre las versiones del entorno de ejecución de AI Platform.
  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 de 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.

  7. Selecciona una opción de ajuste de escala para la implementación de la predicción en línea:

    • 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 quieres que se ejecuten en todo momento.

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

  8. Para terminar de crear tu versión de 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 de tu 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 generan un mismo comportamiento.

    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]"
    

  2. Crea la versión:

    gcloud ai-platform versions create $VERSION_NAME \
      --model $MODEL_NAME \
      --origin $MODEL_DIR \
      --runtime-version=1.14 \
      --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 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.5'
    runtimeVersion: '1.14'
    state: READY

API de REST

  1. Dale formato al cuerpo de tu solicitud para que contenga el objeto de 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 siguiente 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 crear 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, verás 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.14",
            "framework": "[YOUR_FRAMEWORK_NAME]",
            "machineType": "mls1-c1-m2",
            "pythonVersion": "3.5"
          }
        }
      }
    

Envía una solicitud de predicción en línea

Una vez que hayas creado correctamente una versión, en AI Platform, se inicia un servidor nuevo que está listo para entregar las solicitudes de predicción.

En esta sección, se muestra lo siguiente:

  1. Cómo probar tu modelo con gcloud mediante el envío de solicitudes a conjuntos de datos más pequeños.
  2. Cómo enviar solicitudes más grandes al conjunto de datos de prueba completo con la biblioteca cliente de Python y ver los primeros diez resultados.

gcloud

En esta sección, se explica cómo enviar una solicitud de predicción con el archivo input.json que creaste en el paso anterior.

  1. Establece las variables de entorno para el nombre de tu modelo, de la versión y el de tu archivo de entrada: Reemplaza [VALUES_IN_BRACKETS] por los valores adecuados:

    MODEL_NAME="[YOUR-MODEL-NAME]"
    VERSION_NAME="[YOUR-VERSION-NAME]"
    INPUT_FILE="input.json"
    
  2. Envía la solicitud de predicción:

    gcloud ai-platform predict --model $MODEL_NAME --version \
      $VERSION_NAME --json-instances $INPUT_FILE
    

    Los resultados de la predicción muestran True si se estima que los ingresos de la persona serán mayores a $50,000 por año, y False en caso contrario. Como ejemplo, tus primeros diez resultados pueden ser similares a los siguientes:

    [False, False, False, True, False, False, False, False, False, False]
    

API de REST

En esta sección, se explica cómo enviar una solicitud de predicción con el archivo input.json que creaste en el paso anterior.

Envía las solicitudes de predicción:

curl -X POST -H "Content-Type: application/json" -d @input.json \
-H "Authorization: Bearer `gcloud auth print-access-token`" \
"https://ml.googleapis.com/v1/projects/${PROJECT_ID}/models/${MODEL_NAME}/versions/${VERSION_NAME}:predict"

Los resultados de la predicción muestran True si se estima que los ingresos de la persona serán mayores a $50,000 por año, y False en caso contrario. Los resultados de la predicción se muestran en la consola como una lista de valores booleanos. Como ejemplo, tus primeros diez resultados pueden ser similares a los siguientes:

{"predictions": [false, false, false, true, false, false, false, false, false, false]}

Python

Esta muestra usa la biblioteca cliente de Python para enviar solicitudes de predicción en todo el conjunto de datos del censo y, además, imprime los primeros diez resultados. Consulta más información sobre cómo usar la biblioteca cliente de Python.

Reemplaza [VALUES_IN_BRACKETS] por los valores adecuados:

import googleapiclient.discovery

# Fill in your PROJECT_ID, VERSION_NAME and MODEL_NAME before running
# this code.

PROJECT_ID = [YOUR PROJECT_ID HERE]
VERSION_NAME = [YOUR VERSION_NAME HERE]
MODEL_NAME = [YOUR MODEL_NAME HERE]

service = googleapiclient.discovery.build('ml', 'v1')
name = 'projects/{}/models/{}'.format(PROJECT_ID, MODEL_NAME)
name += '/versions/{}'.format(VERSION_NAME)

# Due to the size of the data, it needs to be split in 2
first_half = test_features[:int(len(test_features)/2)]
second_half = test_features[int(len(test_features)/2):]

complete_results = []
for data in [first_half, second_half]:
    responses = service.projects().predict(
        name=name,
        body={'instances': data}
    ).execute()

    if 'error' in responses:
        print(response['error'])
    else:
        complete_results.extend(responses['predictions'])

# Print the first 10 responses
for i, response in enumerate(complete_results[:10]):
    print('Prediction: {}\tLabel: {}'.format(response, test_labels[i]))

Los resultados de la predicción muestran True si se estima que los ingresos de la persona serán mayores a $50,000 por año, y False en caso contrario. Como ejemplo, tus primeros diez resultados pueden ser similares a los siguientes:

Prediction: False Label: False
Prediction: False Label: False
Prediction: True  Label: True
Prediction: True  Label: True
Prediction: False Label: False
Prediction: False Label: False
Prediction: False Label: False
Prediction: True  Label: True
Prediction: False Label: False
Prediction: False Label: False

Para obtener más información sobre cada parámetro de entrada, consulta los detalles de la solicitud de predicción de la API de AI Platform.

Acerca de los datos

El Conjunto de datos de ingresos del censo que se usa en esta muestra para el entrenamiento lo aloja UC Irvine Machine Learning Repository.

Los datos del censo son cortesía de Lichman, M. (2013). UCI Machine Learning Repositoryhttp://archive.ics.uci.edu/ml. Irvine, CA: University of California, School of Information and Computer Science. Este conjunto de datos está disponible a nivel público para que cualquier persona lo use según los términos siguientes proporcionados por la fuente del conjunto de datos, http://archive.ics.uci.edu/ml, y se ofrece "TAL CUAL" sin ninguna garantía, expresa o implícita, de Google. Google renuncia a toda responsabilidad de cualquier daño, directo o indirecto, como resultado del uso del conjunto de datos.

Próximos pasos

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

Enviar comentarios sobre…

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