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
DatafluxLightningCheckpointdeCheckpointIOde PyTorch Lightning. - El conector para PyTorch proporciona implementaciones de
StorageWriteryStorageReaderpara 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.
- Consulta el uso de objetos compuestos para obtener parámetros de configuración recomendados adicionales 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 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:
- Mientras se ejecuta el conector para PyTorch en una VM de Compute Engine, las credenciales predeterminadas de la aplicación usan automáticamente la cuenta de servicio adjunta 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
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:
- Un notebook de Jupyter básico para principiantes (alojado por Google Colab).
- Un recorrido por 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 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:
- Borrado temporal inhabilitado
- Bloqueo de bucket inhabilitado
- Control de versiones de objetos inhabilitado
- Standard Storage como clase de almacenamiento para el bucket y los objetos.
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:
- 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 construyendo para ajustar la retirada de reintento 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 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
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. 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.