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 quieres entrenar con código en tu ordenador local y reducir al máximo la cantidad de trabajo de empaquetado manual, te recomendamos que uses la función de empaquetado automático de la CLI de Google Cloud. Esta función te permite crear una imagen de contenedor Docker, insertarla en Artifact Registry y crear un
CustomJob
recurso basado en la imagen de contenedor, todo con un solo comando. Consulta más información en la guía para crear unCustomJob
.Para usar el empaquetado automático, debes instalar Docker en tu ordenador local. Esta opción solo te permite crear un
CustomJob
, no unTrainingPipeline
ni unHyperparameterTuningJob
. Consulta las diferencias entre los recursos de entrenamiento personalizados.Para personalizar aún más la imagen de tu contenedor y ejecutar el código en un contenedor de forma local antes de ejecutarlo en Vertex AI, puedes usar el comando
local-run
de la interfaz de línea de comandos de gcloud para crear un contenedor con tu código y ejecutarlo de forma local. Después, puedes enviar la imagen a Artifact Registry manualmente.Para usar el comando
local-run
, debes instalar Docker en tu ordenador local.Si puedes escribir tu código de entrenamiento en una sola secuencia de comandos de Python, puedes usar la clase
CustomJob
del SDK de Vertex AI para Python para crear un trabajo personalizado o la claseCustomTrainingJob
para crear unTrainingPipeline
personalizado. Tu código de entrenamiento se empaqueta automáticamente como una distribución de origen y se sube a Cloud Storage.Para disfrutar de la máxima flexibilidad, puedes crear manualmente una imagen de contenedor personalizada y enviarla a Artifact Registry.
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:
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.
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.
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 llamadotask.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 paquetetrainer/
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.
Crea un archivo
setup.py
que indique a Setuptools cómo crear la distribución de origen. Unsetup.py
básico incluye lo siguiente:Importar extractos de
setuptools.find_packages
ysetuptools.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 enfind_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 enTrue
.
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.' )
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
- Consulta los requisitos adicionales del código de entrenamiento para el entrenamiento personalizado.
- Consulta cómo crear una tarea de entrenamiento personalizada o un flujo de procesamiento de entrenamiento personalizado que use tu aplicación de entrenamiento.