Cómo administrar versiones del entorno de ejecución

Cloud Machine Learning Engine usa imágenes para configurar las VM que están al servicio de tus solicitudes de entrenamiento y predicción en la nube. Estas imágenes contienen el sistema operativo base, los paquetes de tecnología central, los paquetes de pip (bibliotecas de Python) y los paquetes del sistema operativo. Las imágenes se actualizan periódicamente para incluir las características y mejoras nuevas. El control de versiones de Cloud ML Engine te permite seleccionar la configuración adecuada para trabajar con tu modelo.

Notas importantes sobre el control de versiones

  • La versión del entorno de ejecución de Cloud ML Engine predeterminada usada por la API de Cloud Machine Learning Engine es la versión 1.0. Si no especificas una versión del entorno de ejecución, Cloud ML Engine usa la versión 1.0.
  • Siempre debes probar tus modelos y trabajos de entrenamiento a fondo cuando cambias a una versión del entorno de ejecución nueva, independientemente de si se trata de una actualización principal o secundaria.

Cómo entender los números de versión

Las imágenes que usa Cloud ML Engine corresponden a la versión del entorno de ejecución de Cloud ML Engine. La versión del entorno de ejecución usa el siguiente formato:

major_version.minor_version

Versiones principales y secundarias

Se crean versiones principales y secundarias periódicamente para incorporar una o más de las siguientes opciones:

  • Versiones de:
    • Sistema operativo
    • TensorFlow, scikit-learn y XGBoost
  • Cambios o actualizaciones en la funcionalidad de Cloud ML Engine.

Una versión principal nueva puede incluir cambios rotundos que requieren actualizaciones del código escrito en comparación con versiones anteriores. Una versión secundaria nueva no debe incluir cambios rotundos y debe ser compatible con todas las variaciones de la misma versión principal.

Cómo seleccionar versiones del entorno de ejecución

Asegúrate de seleccionar la versión del entorno de ejecución que admita las últimas versiones de tu marco de trabajo de aprendizaje automático y otros paquetes que puedas usar. Si no especificas la versión del entorno de ejecución para las tareas a continuación, Cloud ML Engine usa la versión predeterminada 1.0 para completar tu solicitud.

Puedes ver los detalles de cada versión en la lista de versiones de Cloud ML Engine.

Para especificar la versión del entorno de ejecución para un trabajo de entrenamiento

Asegúrate de configurar la versión del entorno de ejecución cuando envías una solicitud de trabajo de entrenamiento. De lo contrario, Cloud ML Engine usa la versión predeterminada 1.0 para tu trabajo de entrenamiento.

gcloud

Usa la marca --runtime-version cuando ejecutas el comando gcloud ml-engine jobs submit training.

gcloud ml-engine jobs submit training my_job \
    --module-name trainer.task \
    --job-dir gs://my/training/job/directory \
    --package-path /path/to/my/project/trainer \
    --region us-central1
    --runtime-version 1.12

Python

Configura la runtimeVersion cuando defines tu solicitud de trabajo de entrenamiento:

training_inputs = {'scaleTier': 'BASIC',
    'packageUris': ['gs://my/trainer/path/package-0.0.0.tar.gz'],
    'pythonModule': 'trainer.task'
    'args': ['--arg1', 'value1', '--arg2', 'value2'],
    'region': 'us-central1',
    'jobDir': 'gs://my/training/job/directory',
    'runtimeVersion': '1.12',
    'pythonVersion': '3.5'}

job_spec = {'jobId': my_job_name, 'trainingInput': training_inputs}

Obtén más detalles sobre cómo enviar un trabajo de entrenamiento en la API TrainingInput.

Para especificar la versión de Python para un trabajo de entrenamiento

Python 3.5 está disponible cuando usas la versión 1.4 o superior del entorno de ejecución de Cloud ML Engine. Para enviar un trabajo de entrenamiento con Python 3.5, configura la versión de Python en "3.5" y la versión del entorno de ejecución en 1.4 o superior.

Si la versión de Python no se especifica, el valor predeterminado es "2.7".

gcloud

Usa la marca --python-version para especificar la versión de Python 3.5 y asegúrate de configurar la versión del entorno de ejecución en 1.4 o superior:

gcloud ml-engine jobs submit training my_job \
    --module-name trainer.task \
    --job-dir gs://my/training/job/directory \
    --package-path /path/to/my/project/trainer \
    --python-version 3.5
    --region us-central1 \
    --runtime-version 1.12

Python

Configura la runtimeVersion en '1.4' o superior y la pythonVersion en '3.5':

training_inputs = {'scaleTier': 'BASIC',
    'packageUris': ['gs://my/trainer/path/package-0.0.0.tar.gz'],
    'pythonModule': 'trainer.task'
    'args': ['--arg1', 'value1', '--arg2', 'value2'],
    'region': 'us-central1',
    'jobDir': 'gs://my/training/job/directory',
    'runtimeVersion': '1.12',
    'pythonVersion': '3.5'}

job_spec = {'jobId': my_job_name, 'trainingInput': training_inputs}

Obtén más detalles sobre cómo enviar un trabajo de entrenamiento en la API TrainingInput.

Para especificar la versión del entorno de ejecución para una versión del modelo

Asegúrate de especificar la versión del entorno de ejecución cuando creas una versión del modelo implementada a partir de un modelo entrenado. Esto configura la versión del entorno de ejecución predeterminada para solicitudes de predicción por lotes y en línea. Si no especificas una versión del entorno de ejecución, Cloud ML Engine usa la versión 1.0.

gcloud

Usa la marca --runtime-version cuando ejecutas el comando gcloud ml-engine versions create:

gcloud ml-engine versions create version_name \
    --model model_name
    --origin gs://my/trained/model/path
    --runtime-version 1.12

Python

Configura la runtimeVersion cuando defines tu recurso de versión:

versionDef = {'name' = 'v1',
    'description' = 'The first iteration of the completely_made_up model',
    'deploymentUri' = 'gs://my/model/output/directory',
    'runtimeVersion' = '1.12'}
 

Para especificar una versión del entorno de ejecución con el fin de usarla en la predicción por lotes

Puedes especificar una versión del entorno de ejecución para usarla cuando creas un trabajo de predicción por lotes. Si no lo haces, Cloud ML Engine usa la versión del entorno de ejecución predeterminada configurada en la versión del modelo.

gcloud

Usa la marca --runtime-version cuando ejecutas el comando gcloud ml-engine jobs submit prediction:

gcloud ml-engine jobs submit prediction my_batch_job_333 \
    --model my_model \
    --input-paths gs://my/cloud/storage/data/path/* \
    --output-path gs://my/cloud/storage/data/output/path
    --region us-central1 \
    --data-format JSON \
    --runtime-version 1.12

Python

Configura la runtimeVersion en PredictionInput:

body = {
    'jobId': 'my_batch_job_333',
    'predictionInput': {
        'dataFormat': 'JSON',
        'inputPaths': ['gs://my/cloud/storage/data/path/*'],
        'outputPath': 'gs://my/cloud/storage/data/output/path',
        'region': 'us-central1',
        'modelName': 'projects/my_project/models/my_model',
        'runtimeVersion': '1.12'}}

Versiones del entorno de ejecución para la predicción en línea

Cuando creas una versión del modelo, asegúrate de especificar la versión del entorno de ejecución que deseas usar para las solicitudes de predicción en línea. Si la versión del entorno de ejecución predeterminada de la versión de tu modelo no es correcta, crea una versión del modelo nueva con la versión del entorno de ejecución correcta.

Las solicitudes de predicción en línea siempre usan la versión del entorno de ejecución predeterminada de la versión del modelo. No puedes especificar una versión del entorno de ejecución para anular esto en tu solicitud de predicción en línea.

Cómo especificar paquetes de variantes (solo entrenamiento)

Existen dos maneras de cambiar los paquetes en tus instancias de entrenamiento: subir manualmente los archivos de paquetes (tarballs) y luego incluir sus rutas como entrada de entrenamiento y especificar los paquetes PyPI como dependencias de tu paquete de entrenador.

Para proporcionar archivos de paquete

Puedes incluir archivos de paquetes adicionales como parte de tu solicitud de trabajo de entrenamiento. Estos se instalarán en cada instancia de entrenamiento. Cloud ML Engine instala todos los paquetes con pip. No se admiten los paquetes diseñados para otros administradores de paquetes.

gcloud

Usa la marca --packages cuando ejecutas el comando gcloud ml-engine jobs submit training. Configura el valor en una lista separada por comas de las rutas a todos los paquetes adicionales. Ten en cuenta que la lista no puede contener espacios en blanco entre las entradas.

gcloud ml-engine jobs submit training my_job \
    --staging-bucket gs://my-bucket \
    --package-path /path/to/my/project/trainer \
    --module-name trainer.task \
    --packages dep1.tar.gz,dep2.whl

Python

Agrega todos los paquetes adicionales a la lista que usas para el valor de packageUris en el objeto TrainingInput.

training_inputs = {'scaleTier': 'BASIC',
    'packageUris': ['gs://my/trainer/path/package-0.0.0.tar.gz',
                    'gs://my/dependencies/path/dep1.tar.gz',
                    'gs://my/dependencies/path/dep2.whl'],
    'pythonModule': 'trainer.task'
    'args': ['--arg1', 'value1', '--arg2', 'value2'],
    'region': 'us-central1',
    'jobDir': 'gs://my/training/job/directory',
    'runtimeVersion': '1.12'}

    job_spec = {'jobId': my_job_name, 'trainingInput’: training_inputs}

Para incluir dependencias de paquetes de PyPI

Puedes especificar paquetes de PyPI y sus versiones como dependencias de tu paquete de entrenador mediante el uso del proceso normal de herramientas de configuración:

  1. En el nivel superior del directorio de tu aplicación de entrenador, incluye un archivo setup.py.
  2. Cuando llamas a setuptools.setup en setup.py, pasa una lista de dependencias y, opcionalmente, sus versiones como el parámetro install_requires. Este archivo setup.py de ejemplo muestra el procedimiento:

    from setuptools import find_packages
    from setuptools import setup
    
    REQUIRED_PACKAGES = ['some_PyPI_package>=1.5',
                         'another_package==2.6']
    
    setup(
        name='trainer',
        version='0.1',
        install_requires=REQUIRED_PACKAGES,
        packages=find_packages(),
        include_package_data=True,
        description='Generic example trainer package with dependencies.')
    

Cloud ML Engine fuerza la reinstalación de los paquetes, por lo que puedes anular los paquetes que son parte de la imagen de la versión del entorno de ejecución con versiones más nuevas o antiguas.

Cómo especificar versiones personalizadas de TensorFlow para entrenamiento

Es posible usar una versión más reciente de TensorFlow que la última versión del entorno de ejecución compatible en Cloud ML Engine para el entrenamiento, pero no para la predicción.

Para usar una versión de TensorFlow que todavía no es compatible como una versión del entorno de ejecución completa, inclúyela como una dependencia personalizada para tu entrenador mediante el uso de uno de los enfoques a continuación:

  1. Especifica la versión de TensorFlow en tu archivo setup.py como una dependencia de PyPI. Inclúyela en tu lista de paquetes obligatorios de la siguiente manera:

     REQUIRED_PACKAGES = ['tensorflow>=1.12']
    
  2. Compila un binario de TensorFlow a partir de las fuentes y asegúrate de seguir las instrucciones para TensorFlow solo con asistencia de CPU. Este proceso produce un paquete pip (archivo .whl) que puedes incluir en tu solicitud de trabajo de entrenamiento si lo agregas a tu lista de paquetes.

La compilación de un binario de TensorFlow para incluirlo como un paquete personalizado es un enfoque más complejo, pero la ventaja es que puedes usar las actualizaciones más recientes de TensorFlow cuando entrenas tu modelo.

Pasos siguientes

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

Enviar comentarios sobre…

Cloud ML Engine para TensorFlow