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 tanto para la carga de datos en el entrenamiento como para la carga y el registro de puntos de control del modelo:

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 constan principalmente de archivos de menos de 1 MB.
  • El conector para PyTorch implementa la primitiva de conjunto de datos de PyTorch que se puede usar para cargar de manera eficiente 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 los datos en el formato que elijas, lo que permite que PyTorch DataLoader trabaje de forma flexible con arrays de NumPy o tensores de PyTorch

Para el almacenamiento de puntos de control y la carga de modelos, Connector for PyTorch proporciona las siguientes ventajas:

  • Una interfaz 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 con la implementación de DatafluxLightningCheckpoint de CheckpointIO de PyTorch Lightning.
  • Connector for PyTorch proporciona implementaciones de StorageWriter y StorageReader para usar con el registro de puntos de control distribuido 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.
  • El registro de puntos de control del conector incluye compatibilidad con el guardado de puntos de control asíncronos con Lightning y PyTorch básico.

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

Frameworks

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

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

Cómo comenzar

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

  • Un bucket de Cloud Storage que contiene 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 planeas usar descargas compuestas

Estos permisos se deben otorgar a la cuenta que el conector para PyTorch usará para la autenticación con 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 autenticación para usar el conector para PyTorch credenciales predeterminadas de la aplicación 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 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 listado rápido desarrollado para equilibrar la carga de trabajo de la lista entre los procesos de listado de objetos paralelizados.
  • Para optimizar el rendimiento de la 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 más grandes. Estos nuevos 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.

En GitHub, puedes encontrar datos de rendimiento para lo siguiente:

  • Capacitación relámpago basada en texto
  • Entrenamiento de imágenes con Lightning
  • Creación de puntos de control de nodo único
  • Creación de puntos de control multinodo

Consideraciones

Se deben tener en cuenta los siguientes aspectos para cada carga de trabajo.

Operaciones de creación de listas rápidas

El conector para el algoritmo de listado rápido de PyTorch hace que el conector para PyTorch use más operaciones de listado que un listado secuencial normal. Las operaciones de lista se cobran como operaciones de clase A.

Uso de objetos compuestos

Para evitar cargos por exceso de almacenamiento y cargos por eliminación anticipada cuando trabajes con objetos compuestos temporales, asegúrate de que tu bucket use la siguiente configuración:

Los objetos compuestos creados por el conector para PyTorch suelen quitarse automáticamente al final del bucle de entrenamiento, pero, en casos excepcionales, es posible que no se quiten. Para asegurarte de que los objetos se quitaron 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 creando. Sin embargo, desactivar este comportamiento puede hacer que los bucles de entrenamiento tarden mucho más, especialmente cuando se trabaja con archivos pequeños.

El uso de objetos compuestos hace que Cloud Storage alcance los límites de QPS y de capacidad de procesamiento a una escala menor que la descarga directa de archivos. Debes inhabilitar el uso de objetos compuestos cuando ejecutes a gran escala en varios nodos, en los que alcances 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 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 sucede:

  • 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 transferencia de datos de tu carga de trabajo supera la capacidad máxima de tu proyecto Google Cloud . Para solucionar estos problemas, sigue estos pasos:
  • Los límites de QPS pueden activar errores 429 con un mensaje en el cuerpo que indique 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 ajustan de forma natural con el tiempo, por lo que permitir un período de calentamiento a menudo puede generar un rendimiento más rápido. Para obtener más detalles sobre el rendimiento de un bucket objetivo, 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 el problema. Esto puede 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 y aprovechar estas mejoras de rendimiento.

Obtenga asistencia

Puedes obtener asistencia, enviar preguntas generales y solicitar funciones nuevas a través de uno de los Google Cloud canales de 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.