Connector for PyTorch

El conector de Cloud Storage para PyTorch es un producto de código abierto compatible con Google que proporciona una integración directa de Cloud Storage con PyTorch.

Descripción general

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

Para la carga de datos en el entrenamiento, el conector para PyTorch proporciona las siguientes ventajas:

  • El conector para 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.
  • El conector para PyTorch implementa la primitiva de conjunto de datos de PyTorch que se puede usar para ayudar a cargar de manera eficiente los datos de entrenamiento desde 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 sin procesar descargados de datos al formato que elijas, lo que permite que PyTorch DataLoader funcione de manera flexible con arrays de NumPy o tensores de PyTorch.

Para la creación de puntos de control y la carga de modelos, el conector para PyTorch proporciona las siguientes ventajas:

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

Para obtener más información, consulta la página de destino del conector para PyTorch en GitHub.

Frameworks

El conector para PyTorch es compatible con las siguientes versiones de framework:

  • Python 3.8 o versiones posteriores
  • PyTorch Lightning 2.0 o versiones posteriores
  • PyTorch 2.3.1 o versiones posteriores

Cómo comenzar

Para usar el conector para PyTorch, debes tener lo siguiente:

  • Un bucket de Cloud Storage que contenga los datos con los que deseas trabajar.
  • 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 deseas usar descargas compuestas

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

Instalación

Para instalar el conector para PyTorch, usa el siguiente comando:

pip install gcs-torch-dataflux

Configuración

Se debe proporcionar la 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

Se puede encontrar un conjunto completo de ejemplos para trabajar con el conector para PyTorch en el directorio de demostración del repositorio de GitHub del conector para PyTorch. Los ejemplos incluyen:

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 de Cloud Storage:

  • Para optimizar el rendimiento de la lista, el conector para PyTorch utiliza un algoritmo de lista rápida desarrollado para equilibrar la carga de trabajo de la lista entre los procesos de lista de objetos paralelos.
  • 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 únicos y más grandes. Estos objetos compuestos se almacenan en el mismo bucket que los objetos fuente y tienen el prefijo dataflux-composed-objects/ en sus nombres.
  • La carga multiparte para la escritura de puntos de control permite una mejora del rendimiento de 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 basado en texto de Lightning
  • Entrenamiento de imágenes de Lightning
  • Creación de puntos de control de nodo único
  • Creación de puntos de control de varios nodos

Consideraciones

Se debe tener en cuenta lo siguiente por carga de trabajo.

Operaciones de lista rápida

El algoritmo de lista rápida del conector para PyTorch hace que el conector para 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 de almacenamiento excesivos y cargos por eliminación anticipada cuando trabajas con objetos compuestos temporales, debes asegurarte de que tu bucket use la siguiente configuración:

Los objetos compuestos creados por el Connector for PyTorch suelen quitarse automáticamente al final del bucle de entrenamiento, pero, en casos excepcionales, es posible que no lo hagan. 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 si incluyes disable_compose=True o max_composite_object_size=0 en la parte de configuración del conjunto de datos que estás construyendo. 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 más baja que la descarga directa de archivos. Debes inhabilitar el uso de objetos compuestos cuando se ejecutan en escalas de varios nodos altas en las que alcanzas los límites de QPS o capacidad de procesamiento del proyecto, incluso sin usar objetos compuestos.

Errores 429 y rendimiento degradado

Mientras trabajas con el conector para 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 esto ocurre:

  • Muchos esfuerzos de aprendizaje automático optan por un modelo de entrenamiento altamente 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 Google Cloud proyecto. 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 del bucket se escalan de forma natural con el tiempo, por lo que permitir un período de preparación a menudo puede 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 Google Cloud consola.
  • 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. Si lo haces, puedes reducir la carga de QPS que generan las operaciones de composición cuando se usan a gran escala.

Consumo de memoria

Las escrituras y cargas 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 su punto de control en la memoria, de modo que pueda aprovechar estas mejoras de rendimiento.

Obtenga asistencia

Puedes obtener asistencia, enviar preguntas generales y solicitar funciones nuevas a través de uno de los canales de Google Cloud asistencia oficiales. También puedes obtener asistencia si presentas problemas en GitHub.

PyTorch, el logotipo de PyTorch y las marcas relacionadas son marcas comerciales de The Linux Foundation.