Crear una aplicación de entrenamiento de Python para un contenedor previamente compilado

Antes de realizar el entrenamiento sin servidores de Vertex AI con un contenedor compilado previamente, debes crear una distribución de fuente de Python que contenga tu aplicación de entrenamiento y subirla a un bucket de Cloud Storage al que pueda acceder tu Google Cloud proyecto.

Alternativas a la creación de una distribución de origen

En esta guía, se explica cómo crear de forma manual una distribución de fuente y subirla a Cloud Storage. Antes de seguir la guía, considera los siguientes flujos de trabajo alternativos, que podrían ser más convenientes para algunos casos:

Si ninguna de las opciones anteriores se ajusta a tu caso de uso o si prefieres empaquetar tu aplicación de entrenamiento de forma manual como una distribución de origen, sigue el resto de esta guía.

Antes de comenzar

Antes de preparar tu aplicación de entrenamiento para que se ejecute en la nube, realiza los pasos que se indican a continuación:

  1. Desarrolla la aplicación de entrenamiento con un framework de aprendizaje automático (AA) disponible en uno de los contenedores previamente compilados para el entrenamiento de Agent Platform. Asegúrate de que tu aplicación de entrenamiento cumpla con los requisitos de código de entrenamiento.

    Si escribes la aplicación de entrenamiento desde cero, te recomendamos que organices el código según la estructura de la aplicación que se describe en la siguiente sección de este documento.

  2. Crea un bucket de Cloud Storage en el mismo Google Cloud proyecto en el que planeas usar Agent Platform. Almacenarás tu aplicación de entrenamiento en este bucket. (Si bien es posible usar un bucket diferente Google Cloud bucket, esto requiere una configuración adicional fuera del alcance de esta guía).

    Para obtener el mejor rendimiento, asegúrate de que el bucket de Cloud Storage esté en la ubicación donde planeas usar Agent Platform.

  3. Conoce todas las bibliotecas de Python de las que depende tu aplicación de entrenamiento, ya sean dependencias personalizados o disponibles de forma gratuita a través de PyPI.

Estructura de la aplicación

Cuando realizas un entrenamiento sin servidores con un contenedor compilado previamente, debes especificar el código de entrenamiento de acuerdo con los siguientes requisitos:

  • Proporciona el código como una o más distribuciones de origen de Python.

    Si usas la API de Agent Platform para iniciar el entrenamiento sin servidores, especifícalas en el packageUris campo.

  • Crea un módulo en una de estas distribuciones de origen que actúa como punto de entrada para el entrenamiento.

    Si usas la API de Agent Platform para iniciar el entrenamiento personalizado, especifícalo en el pythonModule campo.

Siempre que cumplas con estos requisitos, puedes estructurar tu aplicación de entrenamiento de la forma que desees. Sin embargo, recomendamos que compiles tu código fuente en la siguiente estructura (que se usa con frecuencia en las muestras de Agent Platform) para compilar una sola distribución de fuente de Python:

  • Usa un directorio principal del proyecto que contenga tu archivo setup.py. Consulta la siguiente sección para obtener orientación sobre el contenido de este archivo.

  • Dentro del directorio principal del proyecto, crea un subdirectorio llamado trainer/ que sirva como paquete principal para tu código de entrenamiento.

  • Dentro de trainer/, crea un módulo con el nombre task.py que sirva como punto de entrada para tu código de entrenamiento.

  • Para admitir trainer/task.py, crea los módulos de Python adicionales que desees en el paquete trainer/ y crea los subdirectorios adicionales con ese código adicional que desees en el directorio del proyecto principal.

  • Crea un archivo __init__.py en cada subdirectorio para convertirlo en un paquete.

En el resto de esta guía, se supone que tu código está organizado de acuerdo con esta estructura.

Crea una distribución de origen

Compilar distribuciones de fuentes de Python es un tema extenso que está fuera del alcance de esta documentación. Para mayor comodidad, en esta sección, se proporciona una descripción general del uso de Setuptools a fin de compilar una distribución de fuente para usar con Agent Platform. Existen otras bibliotecas que puedes usar para hacer lo mismo.

  1. Crea un archivo setup.py que indique a Setuptools cómo crear la distribución de origen. Un setup.py básico incluye lo siguiente:

    • Declaraciones de importación de setuptools.find_packages y setuptools.setup

    • Una llamada a setuptools.setup con (como mínimo) estos parámetros:

      • name configurado como el nombre de la distribución de origen.

      • version configurado como el número de versión de esta compilación de tu distribución de origen.

      • install_requires configurado como una lista de dependencias que requiere la aplicación, con requisitos de versión, como 'docutils>=0.3'

      • packages está establecido en find_packages(). Esto le indica a Setuptools que incluya todos los subdirectorios del directorio superior que contengan un archivo __init__.py como paquetes.

      • include_package_data está establecido en True.

    En el siguiente ejemplo, se muestra un archivo setup.py básico para una aplicación de entrenamiento:

    from setuptools import find_packages
    from setuptools import setup
    
    setup(
        name='trainer',
        version='0.1',
        packages=find_packages(),
        include_package_data=True,
        description='My training application.'
    )
    
  2. Para crear una distribución de fuente, dist/trainer-0.1.tar.gz, debes ejecutar el siguiente comando:

    python setup.py sdist --formats=gztar
    

Dependencias de aplicaciones de Python

Las dependencias son paquetes que import (importas) en tu código. Tu aplicación puede tener muchas dependencias que necesita para funcionar.

Para cada réplica en tu trabajo de entrenamiento sin servidores, tu código se ejecuta en un contenedor con muchas dependencias comunes de Python ya instaladas. Verifica las dependencias incluidas en el contenedor compilado previamente que planeas usar para el entrenamiento y verifica si alguna de tus dependencias aún no está instalada. Solo debes completar los siguientes pasos para las dependencias que aún no están instaladas en el contenedor compilado previamente.

Hay 2 tipos de dependencias que tal vez necesites agregar:

  • Dependencias estándar, que son paquetes comunes de distribución disponibles en PyPI
  • Dependencias personalizadas , como los paquetes que tú mismo desarrollaste o aquellos internos de una organización.

En las siguientes secciones, se describe el procedimiento para cada tipo.

Dependencias (PyPI) estándar

Puedes especificar las dependencias estándar de tu aplicación como parte de su secuencia de comandos setup.py. Agent Platform usa pip para instalar tu aplicación de entrenamiento en las réplicas que asigna a tu trabajo. El pip install comando busca dependencias configuradas y las instala.

En el siguiente ejemplo, se muestra un setup.py similar al de una sección anterior. Sin embargo, este setup.py le indica a Agent Platform que instale some_PyPI_package cuando se instale la aplicación de entrenamiento:

from setuptools import find_packages
from setuptools import setup

REQUIRED_PACKAGES = ['some_PyPI_package>=1.0']

setup(
    name='trainer',
    version='0.1',
    install_requires=REQUIRED_PACKAGES,
    packages=find_packages(),
    include_package_data=True,
    description='My training application.'
)

Dependencias personalizadas

Puedes especificar las dependencias personalizadas de la aplicación si pasas sus rutas como parte de la configuración de tu trabajo. Necesitas la URI de la distribución de fuente de cada dependencia. Las dependencias personalizadas deben estar en una ubicación de Cloud Storage. Agent Platform uses pip install para instalar dependencias personalizadas, por lo que estas pueden tener dependencias estándar propias en sus setup.py secuencias de comandos.

Cada URI que incluyas es la ruta de acceso a una distribución de fuente, con formato de archivo tar (.tar.gz) o como una rueda (.whl). Agent Platform instala cada dependencia mediante pip install en cada réplica que asigna a tu trabajo de entrenamiento.

Si usas la API de Agent Platform para iniciar el entrenamiento sin servidores, especifica los URI de Cloud Storage para estas dependencias junto con tu aplicación de entrenamiento en el packageUris campo.

Módulos de Python

Tu aplicación puede contener varios módulos (archivos de Python). Debes identificar el módulo que contiene el punto de entrada de tu aplicación. El servicio de entrenamiento ejecuta ese módulo mediante una invocación a Python, del mismo modo que cuando se lo ejecuta de forma local.

Por ejemplo, si sigues la estructura recomendada de una sección anterior, tu módulo principal será task.py. Dado que se encuentra dentro de un paquete de importación (directorio con un archivo __init__.py) llamado trainer, el nombre completamente calificado de este módulo será trainer.task. Por lo tanto, si usas la API de Agent Platform para iniciar el entrenamiento personalizado , configura el moduleName campo como trainer.task.

Consulta la guía de paquetes de Python para obtener más información sobre los módulos.

Sube tu distribución de fuente a Cloud Storage

Puedes usar gcloud CLI para subir tu distribución de fuente y cualquier dependencia personalizada a un bucket de Cloud Storage. Por ejemplo:

gcloud storage cp dist/trainer-0.1.tar.gz CLOUD_STORAGE_DIRECTORY

Reemplaza CLOUD_STORAGE_DIRECTORY por el URI (que comienza con gs:// y termina con /) de un directorio de Cloud Storage en un bucket al que pueda acceder tu Google Cloud proyecto.

Para obtener más información sobre otras maneras de subir tu distribución de fuente a Cloud Storage, lee Sube objetos en la documentación de Cloud Storage.

¿Qué sigue?