Connecteur pour PyTorch

Le connecteur Cloud Storage pour PyTorch est un produit Open Source compatible avec Google qui offre une intégration directe de Cloud Storage avec PyTorch.

Présentation

Connector for PyTorch offre des avantages à la fois pour le chargement de données lors de l'entraînement, mais aussi pour le point de contrôle et le chargement du modèle:

Pour le chargement de données lors de l'entraînement, le connecteur pour PyTorch présente les avantages suivants:

  • Le connecteur pour PyTorch contient des optimisations qui rendent l'entraînement jusqu'à trois fois plus rapide que PyTorch par défaut dans les ensembles de données composé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 en streaming.
  • Possibilité de transformer les octets bruts de données téléchargés au format de votre choix, ce qui permet au DataLoader PyTorch de travailler de manière flexible avec des tableaux NumPy ou des tenseurs PyTorch.

Pour le point de contrôle et le chargement de modèles, Connector for PyTorch présente les avantages suivants:

  • Interface de contrôle des points pour enregistrer facilement et directement des points de contrôle de modèle dans un bucket Cloud Storage, et charger des points de contrôle de modèle à partir du bucket.
  • Connector for PyTorch est compatible avec le point de contrôle PyTorch Lightning à l'aide de l'implémentation DatafluxLightningCheckpoint de CheckpointIO de PyTorch Lightning.
  • Connector for PyTorch fournit des implémentations StorageWriter et StorageReader à utiliser avec le point de contrôle 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.
  • Le point de contrôle du connecteur est compatible avec les sauvegardes de point de contrôle asynchrone avec Lightning et PyTorch de base.

Pour en savoir plus, consultez la page d'accueil GitHub de Connector for PyTorch.

Frameworks

Connector for 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 avec lesquelles vous souhaitez travailler.
  • 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 d'objets Storage.

Installation

Pour installer le connecteur pour PyTorch, exécutez la commande suivante:

pip install gcs-torch-dataflux

Configuration

Pour utiliser les identifiants par défaut de l'application du connecteur pour PyTorch, vous devez fournir une authentification à l'aide de l'une des méthodes suivantes:

gcloud auth application-default login

Examples

Vous trouverez un ensemble complet d'exemples d'utilisation de Connector for PyTorch dans le répertoire de démonstration du dépôt GitHub de Connector for PyTorch. Voici quelques exemples :

Performance

Connector for PyTorch propose des optimisations spécifiques conçues pour les charges de travail de ML qui peuvent fournir des performances nettement meilleures que les appels d'API directs à Cloud Storage:

  • Pour optimiser les performances de la liste, le connecteur pour PyTorch utilise un algorithme de mise en liste rapide développé pour équilibrer la charge de travail de la liste entre les processus de mise en liste d'objets parallélisés.
  • Pour optimiser les performances de téléchargement des petits fichiers, Connector for PyTorch utilise l'opération de composition pour concatenater des ensembles d'objets plus petits en objets plus grands. Ces nouveaux objets composites sont stockés dans le même bucket que les objets sources et portent 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 de points de contrôle standard.

Vous trouverez sur GitHub des données sur les performances pour les éléments suivants:

  • Formation basée sur le texte Lightning
  • Entraînement d'images Lightning
  • Point de contrôle sur un seul nœud
  • Point de contrôle multinœud

Remarques

Vous devez tenir compte des éléments suivants par charge de travail.

Opérations de création de fiches rapides

L'algorithme de mise en liste rapide de Connector for PyTorch entraîne l'utilisation de plus d'opérations de liste que pour une mise en liste séquentielle standard. Les opérations de liste sont facturées en tant qu'opérations de classe A.

Utilisation des objets composites

Pour éviter les frais de stockage excessifs et les frais de suppression anticipée lorsque vous travaillez avec des objets composites temporaires, vous devez vous assurer que votre bucket utilise les paramètres suivants:

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 dans de rares cas, ils ne le sont 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 de 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 l'atteinte des limites de débit et de RPS 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 projets à grande échelle multi-nœuds, où vous atteignez les limites de débit ou de RPS 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 des temps d'exécution plus lents que prévu. Plusieurs raisons courantes peuvent expliquer ce problème:

  • De nombreux projets de machine learning optent pour un modèle d'entraînement hautement distribué qui exploite 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 taux de débit des 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 :
  • Les limites de RPS peuvent déclencher des erreurs 429 avec un message de corps indiquant TooManyRequests, mais elles se manifestent plus communément par des temps d'exécution plus lents que prévu. Les goulots d'étranglement du nombre de requêtes par seconde sont plus courants lorsque vous travaillez sur de grands volumes de petits fichiers. Les limites de débit de requêtes par seconde du bucket évoluent naturellement au fil du temps. Par conséquent, autoriser une période de préchauffage peut souvent accélérer les performances. Pour en savoir plus sur les performances d'un bucket cible, consultez l'onglet "Observabilité" lorsque vous affichez votre bucket dans 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 RPS générée par les opérations de composition lorsqu'elles sont utilisées à grande échelle.

Consommation de mémoire

Les écritures et les chargements de 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 de téléchargement. 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'assistance officiels de Google Cloud. Vous pouvez également obtenir de l'aide en signalant les problèmes dans GitHub.

PyTorch, le logo PyTorch et toute marque associée sont des marques de The Linux Foundation.