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
DatafluxLightningCheckpointdeCheckpointIOde PyTorch Lightning. - Connector for PyTorch proporciona implementaciones de
StorageWriteryStorageReaderpara 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.createstorage.objects.liststorage.objects.getstorage.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:
- Mientras se ejecuta el Connector for PyTorch en una VM de Compute Engine, las credenciales predeterminadas de la aplicación usan automáticamente la cuenta de servicio conectada de la VM de forma predeterminada. Para obtener más información, consulta Elige un método de autenticación de carga de trabajo.
- Las credenciales predeterminadas de la aplicación también se pueden configurar de forma manual. Puedes acceder directamente con Google Cloud CLI:
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:
- Un notebook de Jupyter básico para principiantes (alojado en Google Colab)
- Una guía de la carga de trabajo de entrenamiento de segmentación de imágenes de extremo a extremo.
- Un ejemplo de extremo a extremo y el notebook para la integración de PyTorch Lightning.
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:
- Se inhabilitó la eliminación no definitiva
- Inhabilitaste el bloqueo del bucket.
- Inhabilitaste el control de versiones de objetos.
- Standard Storage como la clase de almacenamiento para el bucket y los objetos.
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:
- Verifica que otras cargas de trabajo de tu proyecto no consuman un ancho de banda excesivo.
- Solicita un aumento de la cuota.
- Ajusta las opciones
list_retry_configydownload_retry_configen la parte de configuración de los conjuntos de datos que estás creando para ajustar la interrupción de reintentos y maximizar el rendimiento.
- 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
TooManyRequestsque incluye la palabra clavedataflux-composed-objectsen 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.