Connector for PyTorch

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

Información general

Connector for PyTorch ofrece 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 de PyTorch predeterminado en conjuntos de datos que constan principalmente de archivos de menos de 1 MB.
  • El conector de PyTorch implementa el primitivo de conjunto de datos de PyTorch, que se puede usar para cargar de forma eficiente datos de entrenamiento desde segmentos de Cloud Storage.
  • Admite 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 streaming.
  • La capacidad de transformar los bytes de datos sin procesar descargados al formato que elijas, lo que permite que PyTorch DataLoader funcione de forma flexible con las matrices NumPy o los tensores PyTorch.

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

  • Una interfaz de creación de puntos de control para guardar de forma cómoda y directa los puntos de control de los modelos en un segmento de Cloud Storage y cargar los puntos de control de los modelos desde el segmento.
  • Connector for PyTorch admite el registro de puntos de control de PyTorch Lightning mediante 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 distribuidos 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 de conectores incluye la 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 de destino de GitHub del conector de 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 una versión posterior
  • PyTorch 2.3.1 o una versión posterior

Primeros pasos

Para usar Connector for PyTorch, debes tener lo siguiente:

  • Un segmento de Cloud Storage que contenga los datos con los que quieras trabajar.
  • Los siguientes permisos para trabajar con los datos almacenados en el segmento:
    • storage.objects.create
    • storage.objects.list
    • storage.objects.get
    • storage.objects.delete, si tienes intención de usar descargas compuestas

Estos permisos deben concederse a la cuenta que el conector de PyTorch utilizará para la autenticación mediante un rol de gestión de identidades y accesos, como Usuario de objetos de Storage.

Instalación

Para instalar Connector for PyTorch, usa el siguiente comando:

pip install gcs-torch-dataflux

Configuración

Para usar el conector de PyTorch, debes proporcionar la autenticación mediante credenciales predeterminadas de la aplicación con uno de los siguientes métodos:

gcloud auth application-default login

Ejemplos

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

Rendimiento

Connector for PyTorch tiene optimizaciones específicas diseñadas para cargas de trabajo de aprendizaje automático que pueden proporcionar un rendimiento significativamente mejor que las llamadas directas a la API de Cloud Storage:

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

Puedes consultar los datos de rendimiento en GitHub para lo siguiente:

  • Formación basada en texto de Lightning
  • Entrenamiento de imágenes Lightning
  • Creación de puntos de control de un solo nodo
  • Creación de puntos de control multinodo

Cuestiones importantes

Se deben tener en cuenta los siguientes aspectos en función de cada carga de trabajo.

Operaciones de listado rápidas

El algoritmo de listado rápido de Connector for PyTorch hace que Connector for PyTorch use más operaciones de lista 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 al trabajar con objetos compuestos temporales, debes asegurarte de que tu segmento use los siguientes ajustes:

Los objetos compuestos creados por Connector for PyTorch suelen eliminarse automáticamente al final del bucle de entrenamiento, pero en algunos casos no se eliminan. Para asegurarte de que los objetos se han eliminado de tu contenedor, 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, si desactivas este comportamiento, los bucles de entrenamiento pueden tardar mucho más, sobre todo si trabajas con archivos pequeños.

Si utilizas objetos compuestos, Cloud Storage alcanzará los límites de QPS y de capacidad a una escala inferior que si descargas archivos directamente. Deberías inhabilitar el uso de objetos compuestos cuando se ejecuten a gran escala en varios nodos y alcances los límites de QPS o de rendimiento del proyecto, incluso sin usar objetos compuestos.

Errores 429 y rendimiento degradado

Al trabajar con el conector de PyTorch, es posible que recibas errores 429 o que los tiempos de ejecución sean más lentos de lo esperado. Esto se debe a varios motivos habituales:

  • Muchos proyectos 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 de 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 ha alcanzado el límite de ancho de banda de salida de Cloud Storage" indican que la velocidad de procesamiento de datos de tu carga de trabajo está superando la capacidad máxima de tu proyecto Google Cloud . Para solucionar estos problemas, siga estos pasos:
  • Los límites de QPS pueden activar errores 429 con un mensaje en el cuerpo que indique TooManyRequests, pero lo más habitual es que se manifiesten en tiempos de ejecución más lentos de lo esperado. Los cuellos de botella de QPS son más habituales cuando se trabaja con grandes volúmenes de archivos pequeños. Los límites de QPS de los contenedores se escalan de forma natural con el tiempo, por lo que permitir un periodo de calentamiento a menudo puede mejorar el rendimiento. Para obtener más información sobre el rendimiento de un contenedor de destino, consulta la pestaña Observabilidad cuando veas el contenedor desde la Google Cloud consola.
  • Si tu carga de trabajo falla y aparece un error TooManyRequests que incluye la palabra clave dataflux-composed-objects en el mensaje de error, la mejor medida para solucionar el problema es inhabilitar el uso de objetos compuestos. De esta forma, se puede reducir la carga de QPS provocada por las operaciones de composición cuando se usa 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 las subidas y descargas. Cada máquina debe tener suficiente RAM libre para almacenar su punto de control en la memoria y, de esta forma, aprovechar estas mejoras de rendimiento.

Obtener asistencia

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

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