Connector for PyTorch

El conector de Cloud Storage para PyTorch es una herramienta de código abierto para la integración directa entre Cloud Storage y PyTorch. Este conector te ayuda a cargar datos de entrenamiento y administrar puntos de control de modelos para las cargas de trabajo de inteligencia artificial (IA) y aprendizaje automático (AA).

En esta página, se describe cómo instalar y comenzar a usar el conector de Cloud Storage para PyTorch.

Descripción general

El Connector for PyTorch proporciona ventajas tanto para la carga de datos en el entrenamiento como para la creación de puntos de control y la carga de modelos:

Para la carga de datos en el entrenamiento, Connector for PyTorch ofrece las siguientes ventajas:

  • Connector for PyTorch contiene optimizaciones para que el entrenamiento sea hasta tres veces más rápido que el PyTorch predeterminado en conjuntos de datos que consisten principalmente en archivos de menos de 1 MB.
  • Connector for PyTorch implementa la primitiva de conjunto de datos de PyTorch que se puede usar para ayudar a cargar de forma eficiente los datos de entrenamiento desde los buckets de Cloud Storage.
  • Compatibilidad con conjuntos de datos de estilo de mapa para patrones de acceso a datos aleatorios y conjuntos de datos de estilo iterable para patrones de acceso a datos de transmisión.
  • La capacidad de transformar los bytes de datos sin procesar descargados en el formato que elijas, lo que permite que el DataLoader de PyTorch trabaje de forma flexible con arrays de NumPy o tensores de PyTorch.

Para la creación de puntos de control y la carga de modelos, Connector for PyTorch ofrece las siguientes ventajas:

  • Una interfaz de creación de puntos de control para guardar de forma directa y conveniente los puntos de control del modelo en un bucket de Cloud Storage y cargarlos desde el bucket.
  • Connector for PyTorch admite la creación de puntos de control de PyTorch Lightning con la implementación de DatafluxLightningCheckpoint de CheckpointIO de PyTorch Lightning.
  • Connector for PyTorch proporciona implementaciones de StorageWriter y StorageReader para usarlas con la creación de puntos de control distribuida de PyTorch. La biblioteca de demostración de Connector for PyTorch incluye código de ejemplo para usarlo en una carga de trabajo de FSDP de PyTorch Lightning.
  • Los puntos de control del conector incluyen compatibilidad con los guardados de puntos de control asíncronos con Lightning y PyTorch base.

Para obtener más información, consulta la página de destino de GitHub del Connector for PyTorch.

Frameworks

Connector for PyTorch es compatible con las siguientes versiones del framework:

  • Python 3.8 o una versión posterior
  • PyTorch Lightning 2.0 o posterior
  • PyTorch 2.3.1 o posterior

Cómo comenzar

Para usar el Connector for PyTorch, debes tener lo siguiente:

  • Un bucket de Cloud Storage que contenga los datos con los que deseas trabajar.
    • Consulta el uso de objetos compuestos para conocer los parámetros de configuración adicionales recomendados para el bucket.
  • Los siguientes permisos para trabajar con los datos almacenados en el bucket:
    • storage.objects.create
    • storage.objects.list
    • storage.objects.get
    • storage.objects.delete, si tienes la intención de usar descargas compuestas

Estos permisos se deben otorgar a la cuenta que el Connector for PyTorch usará para la autenticación con un rol de IAM, como Usuario de objetos de almacenamiento.

Instalación

Para instalar el Connector for PyTorch, usa el siguiente comando:

pip install gcs-torch-dataflux

Configuración

Se debe proporcionar autenticación para usar las credenciales predeterminadas de la aplicación del conector para PyTorch a través de uno de los siguientes métodos:

gcloud auth application-default login

Ejemplos

Puedes encontrar un conjunto completo de ejemplos para trabajar con el Connector for PyTorch en el directorio de demostración del repositorio de GitHub del Connector for PyTorch. Estos son algunos ejemplos:

Rendimiento

El conector para PyTorch tiene optimizaciones específicas diseñadas para cargas de trabajo de AA que pueden proporcionar un rendimiento significativamente mejor que las llamadas directas a la API a Cloud Storage:

  • Para optimizar el rendimiento de la lista, el conector para PyTorch usa un algoritmo de lista rápida desarrollado para equilibrar la carga de trabajo de la lista entre los procesos de lista de objetos paralelizados.
  • Para optimizar el rendimiento de descarga de archivos pequeños, el conector para PyTorch usa la operación de composición para concatenar conjuntos de objetos más pequeños en objetos individuales más grandes. Estos objetos compuestos se almacenan en el mismo bucket que los objetos de origen y tienen el prefijo dataflux-composed-objects/ en sus nombres.
  • La carga multiparte para la escritura de puntos de control permite mejorar el rendimiento hasta 10 veces en comparación con la carga de puntos de control estándar.

Puedes encontrar datos de rendimiento en GitHub para lo siguiente:

  • Entrenamiento rápido basado en texto
  • Entrenamiento de imágenes de relámpagos
  • Puntos de control de nodo único
  • Puntos de control de varios nodos

Consideraciones

Se debe tener en cuenta lo siguiente para cada carga de trabajo.

Operaciones de listado rápidas

El algoritmo de lista rápida de Connector for PyTorch hace que Connector for PyTorch use más operaciones de lista que una lista secuencial normal. Las operaciones de lista se cobran como operaciones de clase A.

Uso de objetos compuestos

Para evitar cargos por almacenamiento excesivo y cargos por eliminación temprana cuando trabajes con objetos compuestos temporales, debes asegurarte de que tu bucket use la siguiente configuración:

Los objetos compuestos que crea el Connector for PyTorch suelen quitarse automáticamente al final del bucle de entrenamiento, pero, en raras ocasiones, es posible que no se quiten. Para asegurarte de que los objetos se quiten de tu bucket, puedes ejecutar el siguiente comando:

gcloud storage rm gs://<my-bucket>/dataflux-composed-objects/ --recursive

Puedes inhabilitar el uso de objetos compuestos incluyendo disable_compose=True o max_composite_object_size=0 en la parte de configuración del conjunto de datos que estás creando. Sin embargo, desactivar este comportamiento puede hacer que los bucles de entrenamiento tarden mucho más, en especial cuando se trabaja con archivos pequeños.

El uso de objetos compuestos hace que Cloud Storage alcance los límites de QPS y capacidad de procesamiento en una escala menor que la descarga directa de archivos. Debes inhabilitar el uso de objetos compuestos cuando se ejecutan en escalas altas de varios nodos en las que alcanzas los límites de QPS o de capacidad de procesamiento del proyecto, incluso sin usar objetos compuestos.

Errores 429 y rendimiento degradado

Mientras trabajas con el Connector for PyTorch, es posible que recibas errores 429 o tiempos de ejecución más lentos de lo esperado. Existen varios motivos comunes por los que ocurre esto:

  • Muchos esfuerzos de aprendizaje automático optan por un modelo de entrenamiento muy distribuido que aprovecha herramientas como PyTorch Lightning y Ray. Estos modelos son compatibles con el conector para PyTorch, pero, a menudo, pueden activar los límites de frecuencia de Cloud Storage.
  • Los errores 429 acompañados de mensajes como "Esta carga de trabajo está consumiendo demasiado ancho de banda de salida de Cloud Storage" o "Esta carga de trabajo activó el límite de ancho de banda de salida de Cloud Storage" indican que la tasa de capacidad de procesamiento de datos de tu carga de trabajo supera la capacidad máxima de tu proyecto de Google Cloud . Para solucionar estos problemas, sigue estos pasos:
  • Los límites de QPS pueden activar errores 429 con un mensaje de cuerpo que indica TooManyRequests, pero, con mayor frecuencia, se manifiestan en tiempos de ejecución más lentos de lo esperado. Los cuellos de botella de QPS son más comunes cuando se opera con grandes volúmenes de archivos pequeños. Los límites de QPS de los buckets se escalan de forma natural con el tiempo, por lo que permitir un período de preparación suele generar un rendimiento más rápido. Para obtener más detalles sobre el rendimiento de un bucket de destino, consulta la pestaña Observabilidad cuando veas tu bucket desde la consola de Google Cloud .
  • Si tu carga de trabajo falla con un error TooManyRequests que incluye la palabra clave dataflux-composed-objects en el mensaje de error, inhabilitar el uso de objetos compuestos es el mejor primer paso para solucionar problemas. De esta manera, se puede reducir la carga de QPS que generan las operaciones de composición cuando se usan a gran escala.

Consumo de memoria

Las operaciones de escritura y carga de puntos de control, incluidos los modelos finales para la inferencia, se almacenan por completo en la memoria para optimizar el rendimiento de carga y descarga. Cada máquina debe tener suficiente RAM libre para almacenar en etapa intermedia su punto de control en la memoria, de modo que pueda aprovechar estas mejoras de rendimiento.

Obtén asistencia

Puedes obtener asistencia, enviar preguntas generales y solicitar funciones nuevas mediante la presentación de problemas en GitHub.

PyTorch, el logotipo de PyTorch y cualquier marca relacionada son marcas comerciales de The Linux Foundation.