L'outil Connector for PyTorch de Cloud Storage est un produit Open Source pris en charge par Google, qui fournit une intégration directe entre Cloud Storage et PyTorch.
Présentation
Connector for PyTorch offre des avantages pour le chargement de données lors de l'entraînement, ainsi que pour la création de points de contrôle et le chargement de modèles :
En termes de chargement de données pour l'entraînement, Connector for PyTorch présente les avantages suivants :
- Connector for PyTorch propose des optimisations qui permettent d'accélérer l'entraînement jusqu'à trois fois par rapport à la solution PyTorch par défaut dans les ensembles de données constitués principalement de fichiers de moins de 1 Mo.
- Connector for PyTorch implémente la primitive d'ensemble de données de PyTorch, qui peut être utilisée pour charger efficacement des 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ératif" pour les modèles d'accès aux données par flux.
- Possibilité de transformer les octets bruts de données téléchargés dans le format de votre choix : cela permet à PyTorch DataLoader de fonctionner de manière flexible avec les tableaux NumPy ou les tenseurs PyTorch.
En termes de création de points de contrôle et de chargement de modèles, Connector for PyTorch offre les avantages suivants :
- Interface de gestion des 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 aide à la gestion des points de contrôle PyTorch Lightning grâce à l'implémentation
DatafluxLightningCheckpointpourCheckpointIOde PyTorch Lightning. - Connector for PyTorch fournit des implémentations
StorageWriteretStorageReaderà utiliser avec les points de contrôle distribués PyTorch. La bibliothèque de démonstration Connector for PyTorch inclut un exemple de code permettant de les utiliser dans une charge de travail FSDP PyTorch Lightning. - La création de points de contrôle de connecteur permet l'enregistrement asynchrone des points de contrôle avec Lightning et la solution PyTorch de base.
Pour en savoir plus, consultez la page de destination 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 Connector for PyTorch, vous devez disposer des éléments suivants :
- Un bucket Cloud Storage contenant les données avec lesquelles vous souhaitez travailler.
- Pour connaître les autres paramètres recommandés pour le bucket, consultez Utilisation des objets composites.
- Les autorisations suivantes sont nécessaires pour travailler avec les données stockées dans le bucket :
storage.objects.createstorage.objects.liststorage.objects.getstorage.objects.delete, si vous prévoyez d'utiliser des téléchargements composés
Ces autorisations doivent être accordées au compte que Connector for PyTorch utilisera pour l'authentification afin d'utiliser un rôle IAM tel que Utilisateur des objets Storage.
Installation
Pour installer Connector for PyTorch, utilisez la commande suivante :
pip install gcs-torch-dataflux
Configuration
Vous devez fournir une authentification pour utiliser le service Identifiants par défaut de l'application pour Connector for PyTorch, à l'aide de l'une des méthodes suivantes :
- Lorsque vous exécutez Connector for PyTorch sur une VM Compute Engine, le service Identifiants par défaut de l'application utilise automatiquement le compte de service associé par défaut à la VM. Pour en savoir plus, consultez Choisir une méthode d'authentification des charges de travail.
- Vous pouvez également configurer manuellement le service identifiants par défaut de l'application. Vous pouvez vous connecter directement à l'aide de la Google Cloud CLI :
gcloud auth application-default login
Exemples
Vous trouverez un ensemble complet d'exemples d'utilisation de Connector for PyTorch dans le répertoire "demo" du dépôt GitHub de Connector for PyTorch. Voici quelques exemples :
- Un notebook Jupyter de base (hébergé par Google Colab).
- Un tutoriel présentant une charge de travail d'entraînement de segmentation d'image de bout en bout.
- Un exemple de bout en bout et le notebook pour l'intégration avec PyTorch Lightning.
Performances
Connector for 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 listage, Connector for PyTorch utilise un algorithme de liste rapide développé pour équilibrer la charge de travail de listage entre les processus de listage d'objets parallélisés.
- Pour optimiser le téléchargement des petits fichiers, Connector for 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 le préfixe
dataflux-composed-objects/est ajouté à 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 concernant les performances sur GitHub pour les éléments suivants :
- Entraînement basé sur Lightning Text
- Entraînement Lightning Image
- Création de points de contrôle à nœud unique
- Création de points de contrôle multinœuds
Remarques
Les points suivants doivent être pris en compte pour chaque charge de travail.
Opérations de liste rapides
L'algorithme de liste 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 listage 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 :
- Suppression réversible désactivée
- Verrou de bucket désactivé
- Gestion des versions des objets désactivée
- Stockage Standard en tant que classe de stockage pour le bucket et les objets.
Les objets composites créés par Connector for PyTorch sont généralement supprimés automatiquement à la fin de votre boucle d'entraînement, mais dans de rares cas, ils peuvent ne pas l'être. 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 des 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 construisez. Toutefois, la désactivation de ce comportement peut entraîner une augmentation significative de la durée des boucles d'entraînement, 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 des objets composites lorsque vous exécutez des opérations à grande échelle multinœuds, 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 Connector for PyTorch, vous pouvez recevoir des messages d'erreur 429 ou constater que les exécutions sont plus lentes que prévu. Voici quelques raisons courantes qui peuvent expliquer ce problème :
- De nombreuses initiatives de machine learning reposent sur un modèle d'entraînement hautement distribué utilisant des outils tels que PyTorch Lightning et Ray. Ces modèles sont compatibles avec Connector for PyTorch, mais peuvent souvent atteindre les limites de débit de Cloud Storage.
- Les erreurs 429 accompagnées de messages du type "Cette charge de travail consomme une trop grande proportion de la 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_configetdownload_retry_configdans la partie "configuration" des ensembles de données que vous construisez pour régler l'intervalle entre les tentatives et maximiser les performances.
- Les limites de RPS peuvent déclencher des erreurs 429 (avec un message indiquant
TooManyRequests), mais se manifestent plus souvent par des exécutions plus lentes que prévu. Les goulots d'étranglement en termes de RPS sont plus fréquents lorsque vous travaillez sur de grands volumes de petits fichiers. Les limites de RPS des buckets évoluent naturellement dans le temps. Par conséquent, le fait d'autoriser une période de préchauffage peut souvent améliorer les performances. Pour obtenir plus de détails 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(avec le mot clédataflux-composed-objectsinclus 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 chargements des points de contrôle, y compris en ce qui concerne les modèles finaux pour l'inférence, sont entièrement mis en préproduction en mémoire pour l'optimisation des performances d'importation et d'exportation. Chaque machine doit disposer de suffisamment de RAM libre pour la mise en préproduction de 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.