Crear una aplicación de entrenamiento de Python para un contenedor prediseñado

Para poder realizar un entrenamiento personalizado con un contenedor prediseñado, debes crear una distribución de origen de Python que contenga tu aplicación de entrenamiento y subirla a un segmento de Cloud Storage al que pueda acceder tu proyecto Google Cloud .

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

En esta guía se explica cómo crear manualmente una distribución de origen y subirla a Cloud Storage. Antes de seguir la guía, ten en cuenta los siguientes flujos de trabajo alternativos, que pueden ser más prácticos en algunos casos:

Si ninguna de las opciones anteriores se ajusta a tu caso práctico o prefieres empaquetar manualmente tu aplicación de entrenamiento como una distribución de origen, sigue el resto de esta guía.

Antes de empezar

Antes de preparar tu aplicación de entrenamiento para que se ejecute en la nube, sigue estos pasos:

  1. Desarrolla tu aplicación de entrenamiento con un framework de aprendizaje automático disponible en uno de los contenedores precompilados para entrenamiento de Vertex AI. Asegúrate de que tu aplicación de entrenamiento cumpla los requisitos del código de entrenamiento.

    Si vas a escribir 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 una sección posterior de este documento.

  2. Crea un segmento de Cloud Storage en el mismo proyecto Google Cloud en el que quieras usar Vertex AI. Almacenarás tu aplicación de entrenamiento en este contenedor. Aunque es posible usar un contenedor de otro contenedorGoogle Cloud , esto requiere una configuración adicional que no se incluye en esta guía.

    Para obtener el mejor rendimiento, asegúrate de que el segmento de Cloud Storage se encuentre en la ubicación en la que tienes previsto usar Vertex AI.

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

Estructura de la aplicación

Cuando realices un entrenamiento personalizado con un contenedor prediseñado, debes especificar el código de entrenamiento según los siguientes requisitos:

  • Proporciona el código como una o varias distribuciones de origen de Python.

    Si usas la API de Vertex AI para iniciar el entrenamiento personalizado, especifica estos valores en el campo packageUris.

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

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

Siempre que cumplas estos requisitos, puedes estructurar tu solicitud de formación como quieras. Sin embargo, te recomendamos que crees una única distribución de origen de Python organizando el código con la siguiente estructura (que se usa con frecuencia en los ejemplos de Vertex AI):

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

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

  • En trainer/, crea un módulo llamado 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 quieras en el paquete trainer/ y crea los subdirectorios adicionales con el código adicional que quieras en el directorio principal del proyecto.

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

En el resto de esta guía se presupone que tu código está organizado según esta estructura.

Crear una distribución de origen

La creación de distribuciones de origen de Python es un tema amplio que va más allá del alcance de esta documentación. Para mayor comodidad, en esta sección se ofrece una descripción general del uso de Setuptools para crear una distribución de origen que se pueda usar con Vertex AI. Hay 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:

    • Importar extractos de setuptools.find_packages y setuptools.setup.

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

      • name se ha definido como el nombre de la distribución de la fuente.

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

      • install_requires se establece en una lista de dependencias que requiere tu aplicación, con requisitos de versión, como 'docutils>=0.3'.

      • packages se ha establecido en find_packages(). Esto indica a Setuptools que incluya todos los subdirectorios del directorio principal que contengan un archivo __init__.py como paquetes.

      • include_package_data se ha 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. Ejecuta el siguiente comando para crear una distribución de origen: dist/trainer-0.1.tar.gz

    python setup.py sdist --formats=gztar
    

Dependencias de aplicaciones Python

Las dependencias son paquetes que import en tu código. Tu aplicación puede tener muchas dependencias para que funcione.

En cada réplica de tu tarea de entrenamiento personalizada, el código se ejecuta en un contenedor con muchas dependencias comunes de Python ya instaladas. Comprueba las dependencias incluidas en el contenedor precompilado que vayas a usar para el entrenamiento y anota las dependencias que aún no estén instaladas. Solo tienes que completar los pasos siguientes para las dependencias que aún no estén instaladas en el contenedor precompilado.

Hay dos tipos de dependencias que puede que tengas que añadir:

  • Dependencias estándar, que son paquetes de distribución habituales disponibles en PyPI
  • Dependencias personalizadas, como paquetes que hayas desarrollado tú o que sean internos de una organización.

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

Dependencias estándar (PyPI)

Puedes especificar las dependencias estándar de tu aplicación como parte de su setup.py. Vertex AI usa pip para instalar tu aplicación de entrenamiento en las réplicas que asigna a tu trabajo. El comando pip install busca las 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 indica a Vertex AI que instale some_PyPI_package cuando 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 tu aplicación pasando sus rutas como parte de la configuración de tu trabajo. Necesitas el URI de la distribución de origen de cada dependencia. Las dependencias personalizadas deben estar en una ubicación de Cloud Storage. Vertex AI usa pip install para instalar dependencias personalizadas, de modo que puedan tener dependencias estándar en sus secuencias de comandos setup.py.

Cada URI que incluyas es la ruta a una distribución de origen, con el formato de un archivo tar (.tar.gz) o de un archivo wheel (.whl). Vertex AI instala cada dependencia mediante pip install en cada réplica que asigna a tu tarea de entrenamiento.

Si usas la API Vertex AI para iniciar el entrenamiento personalizado, especifica los URIs de Cloud Storage de estas dependencias junto con tu aplicación de entrenamiento en el campo packageUris.

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 invocando Python, igual que lo harías de forma local.

Por ejemplo, si sigues la estructura recomendada de una sección anterior, tu módulo principal será task.py. Como está dentro de un paquete de importación (un directorio con un archivo __init__.py) llamado trainer, el nombre completo de este módulo es trainer.task. Por lo tanto, si usas la API de Vertex AI para iniciar un entrenamiento personalizado, asigna el valor trainer.task al moduleName campo.

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

Sube tu distribución de origen a Cloud Storage

Puedes usar la CLI de gcloud para subir tu distribución de origen y las dependencias personalizadas a un segmento de Cloud Storage. Por ejemplo:

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

Sustituye CLOUD_STORAGE_DIRECTORY por el URI (que empieza por gs:// y termina por /) de un directorio de Cloud Storage de un segmento al que pueda acceder tu proyectoGoogle Cloud .

Para obtener información sobre otras formas de subir tu distribución de origen a Cloud Storage, consulta el artículo Subir objetos de la documentación de Cloud Storage.

Siguientes pasos