Le connecteur Cloud Storage pour PyTorch est un produit Open Source compatible avec Google qui offre une intégration directe de Cloud Storage à PyTorch.
Présentation
Le connecteur pour PyTorch offre des avantages à la fois pour le chargement de données lors de l'entraînement, et pour la création de points de contrôle et le chargement de modèles :
Pour le chargement de données dans l'entraînement, le connecteur pour PyTorch présente les avantages suivants :
- Le connecteur pour PyTorch contient des optimisations qui permettent d'accélérer l'entraînement jusqu'à trois fois par rapport à PyTorch par défaut dans les ensembles de données constitués principalement de fichiers de moins de 1 Mo.
- Le connecteur pour PyTorch implémente la primitive d'ensemble de données de PyTorch, qui peut être utilisée pour charger efficacement les données d'entraînement à partir de buckets Cloud Storage.
- Prise en charge des ensembles de données de style carte pour les modèles d'accès aux données aléatoires et des ensembles de données de style itérable pour les modèles d'accès aux données de streaming.
- La possibilité de transformer les octets bruts de données téléchargés dans le format de votre choix, ce qui permet à PyTorch DataLoader de fonctionner de manière flexible avec les tableaux NumPy ou les tenseurs PyTorch.
Pour la création de points de contrôle et le chargement de modèles, Connector for PyTorch offre les avantages suivants :
- Interface de point de contrôle permettant d'enregistrer facilement et directement les points de contrôle du modèle dans un bucket Cloud Storage et de les charger à partir de ce bucket.
- Connector for PyTorch est compatible avec la création de points de contrôle PyTorch Lightning en utilisant l'implémentation
DatafluxLightningCheckpoint
deCheckpointIO
de PyTorch Lightning. - Connector for PyTorch fournit des implémentations
StorageWriter
etStorageReader
à utiliser avec le checkpointing distribué PyTorch. La bibliothèque de démonstration Connector for PyTorch inclut un exemple de code pour l'utiliser dans une charge de travail FSDP PyTorch Lightning. - La création de points de contrôle de connecteur est compatible avec l'enregistrement asynchrone des points de contrôle avec Lightning et PyTorch de base.
Pour en savoir plus, consultez la page d'accueil GitHub du connecteur pour PyTorch.
Frameworks
Le connecteur pour PyTorch est compatible avec les versions de framework suivantes :
- Python 3.8 ou version ultérieure
- PyTorch Lightning 2.0 ou version ultérieure
- PyTorch 2.3.1 ou version ultérieure
Premiers pas
Pour utiliser le connecteur pour PyTorch, vous devez disposer des éléments suivants :
- Un bucket Cloud Storage contenant les données que vous souhaitez utiliser.
- Pour connaître les autres paramètres recommandés pour le bucket, consultez la section Utilisation des objets composites.
- Les autorisations suivantes pour utiliser les données stockées dans le bucket :
storage.objects.create
storage.objects.list
storage.objects.get
storage.objects.delete
, si vous prévoyez d'utiliser des téléchargements composés
Ces autorisations doivent être accordées au compte que le connecteur pour PyTorch utilisera pour l'authentification à l'aide d'un rôle IAM tel que Utilisateur des objets Storage.
Installation
Pour installer le connecteur pour PyTorch, utilisez la commande suivante :
pip install gcs-torch-dataflux
Configuration
Pour utiliser le connecteur pour PyTorch, vous devez fournir une authentification d'identifiants par défaut de l'application à l'aide de l'une des méthodes suivantes :
- Lorsque vous exécutez le connecteur pour PyTorch sur une VM Compute Engine, les identifiants par défaut de l'application utilisent automatiquement le compte de service associé à la VM par défaut. Pour en savoir plus, consultez Choisir une méthode d'authentification des charges de travail.
- Les identifiants par défaut de l'application peuvent également être configurés manuellement. Vous pouvez vous connecter directement à l'aide de Google Cloud CLI :
gcloud auth application-default login
Exemples
Un ensemble complet d'exemples d'utilisation du connecteur pour PyTorch est disponible dans le répertoire de démonstration du dépôt GitHub du connecteur pour PyTorch. Voici quelques exemples :
- Un notebook Jupyter de base (hébergé par Google Colab).
- Un tutoriel sur la charge de travail d'entraînement à la segmentation d'images de bout en bout.
- Un exemple de bout en bout et le notebook pour l'intégration de PyTorch Lightning.
Performances
Le connecteur pour PyTorch comporte des optimisations spécifiques conçues pour les charges de travail de ML, qui peuvent offrir des performances nettement supérieures à celles des appels d'API directs vers Cloud Storage :
- Pour optimiser les performances de la liste, le connecteur pour PyTorch utilise un algorithme de liste rapide développé pour équilibrer la charge de travail de la liste entre les processus de liste d'objets parallélisés.
- Pour optimiser les performances de téléchargement des petits fichiers, le connecteur pour PyTorch utilise l'opération de composition pour concaténer des ensembles de petits objets en un seul objet plus volumineux. Ces nouveaux objets composites sont stockés dans le même bucket que les objets sources et ont le préfixe
dataflux-composed-objects/
dans leur nom. - L'importation en plusieurs parties pour l'écriture de points de contrôle permet d'améliorer les performances jusqu'à 10 fois par rapport à l'importation standard de points de contrôle.
Vous trouverez des données sur les performances sur GitHub pour les éléments suivants :
- Formation Lightning basée sur le texte
- Entraînement Lightning pour les images
- Point de contrôle à nœud unique
- Checkpointing multinœud
Remarques
Les éléments suivants doivent être pris en compte pour chaque charge de travail.
Opérations de liste rapides
L'algorithme de listing rapide de Connector for PyTorch entraîne l'utilisation par Connector for PyTorch d'un plus grand nombre d'opérations de liste qu'un listing séquentiel normal. Les opérations de liste sont facturées en tant qu'opérations de classe A.
Utilisation des objets composites
Pour éviter des frais de stockage excessifs et des frais de suppression anticipée lorsque vous travaillez avec des objets composites temporaires, assurez-vous que votre bucket utilise les paramètres suivants :
- Désactivée Suppression réversible
- Verrouillage de bucket désactivé
- Gestion des versions des objets désactivée
- Stockage standard comme classe de stockage pour le bucket et les objets.
Les objets composites créés par le connecteur pour PyTorch sont généralement supprimés automatiquement à la fin de votre boucle d'entraînement, mais il peut arriver qu'ils ne le soient pas. Pour vous assurer que les objets sont supprimés de votre bucket, vous pouvez exécuter la commande suivante :
gcloud storage rm gs://<my-bucket>/dataflux-composed-objects/ --recursive
Vous pouvez désactiver l'utilisation d'objets composites en incluant disable_compose=True
ou max_composite_object_size=0
dans la partie configuration de l'ensemble de données que vous créez. Toutefois, la désactivation de ce comportement peut entraîner des boucles d'entraînement beaucoup plus longues, en particulier lorsque vous travaillez avec de petits fichiers.
L'utilisation d'objets composites entraîne une atteinte des limites de RPS et de débit de Cloud Storage à une échelle inférieure à celle du téléchargement direct de fichiers. Vous devez désactiver l'utilisation d'objets composites lorsque vous exécutez des opérations à grande échelle multinœud et que vous atteignez les limites de RPS ou de débit du projet, même sans utiliser d'objets composites.
Erreurs 429 et performances dégradées
Lorsque vous utilisez le connecteur pour PyTorch, vous pouvez recevoir des erreurs 429 ou constater des temps d'exécution plus lents que prévu. Voici quelques raisons courantes qui peuvent expliquer ce problème :
- De nombreux efforts de machine learning optent pour un modèle d'entraînement hautement distribué utilisant des outils tels que PyTorch Lightning et Ray. Ces modèles sont compatibles avec le connecteur pour PyTorch, mais peuvent souvent déclencher les limites de débit de Cloud Storage.
- Les erreurs 429 accompagnées de messages tels que "Cette charge de travail utilise trop de bande passante de sortie de Cloud Storage" ou "Cette charge de travail a déclenché la limite de bande passante de sortie de Cloud Storage" indiquent que le débit de données de votre charge de travail dépasse la capacité maximale de votre projet Google Cloud . Pour résoudre ces problèmes, procédez comme suit :
- Vérifiez que les autres charges de travail de votre projet ne consomment pas trop de bande passante.
- Demandez une augmentation de quota.
- Ajustez les options
list_retry_config
etdownload_retry_config
dans la partie configuration des ensembles de données que vous créez pour ajuster le délai avant nouvelle tentative et maximiser les performances.
- Les limites de RPS peuvent déclencher des erreurs 429 avec un message dans le corps indiquant
TooManyRequests
, mais se manifestent plus souvent par des temps d'exécution plus lents que prévu. Les goulots d'étranglement liés au nombre de requêtes par seconde sont plus fréquents lorsque vous travaillez sur de grands volumes de petits fichiers. Les limites de QPS des buckets évoluent naturellement au fil du temps. Par conséquent, l'autorisation d'une période de préchauffage peut souvent améliorer les performances. Pour en savoir plus sur les performances d'un bucket cible, consultez l'onglet "Observabilité" lorsque vous affichez votre bucket depuis la console Google Cloud . - Si votre charge de travail échoue avec une erreur
TooManyRequests
qui inclut le mot clédataflux-composed-objects
dans le message d'erreur, la première étape de dépannage consiste à désactiver l'utilisation d'objets composés. Cela peut réduire la charge de RPS générée par les opérations de composition lorsqu'elles sont utilisées à grande échelle.
Consommation de mémoire
L'écriture et le chargement des points de contrôle, y compris les modèles finaux pour l'inférence, sont entièrement mis en scène en mémoire afin d'optimiser les performances d'importation et d'exportation. Chaque machine doit disposer de suffisamment de RAM libre pour mettre en scène son point de contrôle en mémoire afin de pouvoir profiter de ces améliorations de performances.
Obtenir de l'aide
Vous pouvez obtenir de l'aide, envoyer des questions d'ordre général et demander de nouvelles fonctionnalités en utilisant l'un des canaux d'assistanceGoogle Cloud officiels. Vous pouvez également obtenir de l'aide en signalant les problèmes dans GitHub.