Analyser les chaînes d'approvisionnement des paquets de Deep Learning
Une étude sur les dépendances des paquets TensorFlow et PyTorch dans l'écosystème PyPI.
― 7 min lire
Table des matières
La technologie d'apprentissage profond (DL) est maintenant une partie essentielle de plein de tâches comme la reconnaissance faciale, la traduction, et la génération de code pour les ordis. Pour faire fonctionner cette technologie, les développeurs s'appuient sur des frameworks DL. Ces frameworks sont des outils logiciels qui les aident à concevoir et entraîner des modèles plus facilement. TensorFlow et PyTorch sont les frameworks DL les plus utilisés.
Il y a plein de Paquets DL dispos sur PyPI (Python Package Index), une plateforme où les développeurs peuvent trouver et partager des paquets logiciels. Ces paquets sont souvent interconnectés ; certains dépendent directement des frameworks DL, tandis que d'autres dépendent de paquets qui sont déjà liés à ces frameworks. Ce réseau de Dépendances crée ce qu'on appelle une "chaîne d'approvisionnement" (SC) pour les paquets DL. Comprendre comment construire et maintenir ces chaînes est important pour garder les frameworks compétitifs.
Mais, il y a encore plein de choses qu'on ne sait pas sur le fonctionnement de ces Chaînes d'approvisionnement. En savoir plus pourrait aider les développeurs et les chercheurs à résoudre des problèmes communs liés aux dépendances. Cette étude vise à combler cette lacune en examinant les chaînes d'approvisionnement de TensorFlow et PyTorch sur PyPI.
Aperçu de la Recherche
On commence par analyser les métadonnées de presque six millions de paquets sur PyPI pour comprendre comment ces chaînes d'approvisionnement sont structurées. Notre focus est sur deux frameworks principaux : TensorFlow et PyTorch. On explore trois grands Domaines :
- Domaines : Quels types de tâches les paquets dans ces chaînes résolvent-ils ?
- Clusters : Comment ces paquets sont-ils regroupés selon leurs dépendances ?
- Désengagement : Pourquoi certains paquets choisissent de quitter la chaîne d'approvisionnement ?
En répondant à ces questions, on espère donner des infos qui aideront les développeurs à mieux gérer leurs dépendances de paquets.
Domaines des Paquets
Le premier aspect qu'on a exploré est le domaine des paquets dans les chaînes d'approvisionnement. Un domaine désigne le type de tâche qu'un paquet peut réaliser. Cette connaissance nous aide à comprendre quels domaines sont bien soutenus par des paquets et lesquels pourraient avoir besoin de plus de ressources.
À travers notre analyse, on a identifié 34 domaines différents, regroupés en huit catégories. La plupart des paquets populaires (mesurés par les téléchargements) tombent dans trois grandes catégories : Applications, Infrastructure, et Sciences. Ensemble, ces trois catégories représentent plus de 85% des paquets populaires dans les chaînes TensorFlow et PyTorch.
Applications : Cette catégorie inclut des paquets qui aident dans des tâches spécifiques, comme le traitement du langage naturel et la vision par ordinateur. Notamment, PyTorch a une plus grande proportion de paquets dans la catégorie Applications comparé à TensorFlow.
Infrastructure : Cette catégorie regroupe des outils qui soutiennent divers processus dans l'apprentissage profond, y compris l'entraînement et le déploiement de modèles. TensorFlow a une présence plus forte dans les paquets liés à l'infrastructure.
Sciences : Cette catégorie soutient l'application de DL dans diverses disciplines scientifiques, comme la biologie et la physique, avec un nombre notable de paquets dans ce domaine pour les deux frameworks.
Les différences entre TensorFlow et PyTorch en termes de distribution de paquets nous montrent que chaque framework a développé des avantages compétitifs dans certains domaines.
Clusters de Paquets
Ensuite, on a regardé comment ces paquets sont regroupés en clusters basés sur les dépendances. Un cluster consiste en des paquets qui sont étroitement liés les uns aux autres, ce qui signifie qu'ils dépendent les uns des autres pour fonctionner.
En utilisant un algorithme de détection de communauté, on a découvert qu'il y a 131 clusters dans la chaîne d'approvisionnement de TensorFlow et 100 dans celle de PyTorch. Ces clusters tombent principalement dans quatre formes : Flèche, Étoile, Arbre, et Forêt.
Clusters flèche sont les plus simples, contenant généralement deux paquets où l'un dépend directement de l'autre.
Clusters étoile ont un paquet central dont plusieurs autres paquets dépendent, formant une structure en étoile.
Clusters arbre montrent une hiérarchie plus complexe, où un paquet racine sert de base à plusieurs autres.
Clusters forêt sont encore plus complexes, avec plusieurs paquets racines, montrant que beaucoup de paquets sont interconnectés par divers chemins.
Étonnamment, la majorité des paquets se trouvent dans des clusters arbre et forêt, indiquant que la plupart sont interconnectés.
Pourquoi des Paquets Quittent la Chaîne d'Approvisionnement
Une autre considération importante est pourquoi certains paquets se désengagent de la chaîne d'approvisionnement. On a identifié plusieurs raisons pour lesquelles des paquets arrêtent de dépendre soit de TensorFlow soit de PyTorch.
Problèmes de dépendance : Beaucoup de paquets quittent à cause de conflits ou d'incompatibilité avec leurs dépendances. Par exemple, un paquet pourrait avoir des soucis à fonctionner avec certaines versions de TensorFlow.
Améliorations fonctionnelles : Les développeurs cherchent souvent des moyens d'améliorer la performance. Parfois, cela signifie couper les liens avec un framework pour simplifier les fonctionnalités de leur paquet ou le rendre plus rapide.
Facilité d'installation : Si un paquet devient trop complexe à installer à cause de nombreuses dépendances, les développeurs pourraient choisir de se désengager de la chaîne d'approvisionnement pour le rendre plus user-friendly.
Globalement, on a constaté que le nombre de paquets quittant les chaînes d'approvisionnement est en hausse, montrant que tant TensorFlow que PyTorch font face à des problèmes de gestion des dépendances.
Implications pour les Développeurs et Chercheurs
Les résultats de cette recherche ont des implications significatives pour ceux qui travaillent avec des frameworks d'apprentissage profond.
Renforcer les chaînes d'approvisionnement : Comprendre les domaines et clusters des paquets peut aider les fournisseurs de frameworks à prioriser les domaines à mieux soutenir, menant à des écosystèmes plus robustes autour de leurs frameworks.
Gérer les dépendances : Avec la connaissance des raisons communes de désengagement, les développeurs peuvent prendre des mesures pour améliorer la durabilité de leurs paquets, s'assurant qu'ils restent dans la chaîne d'approvisionnement.
Encourager la collaboration : Comme certains paquets montrent des dépendances sur à la fois TensorFlow et PyTorch, favoriser la collaboration entre les deux frameworks pourrait mener à des outils et ressources plus intégrés.
Conclusion
Cette étude éclaire les complexités des chaînes d'approvisionnement de paquets d'apprentissage profond au sein de l'écosystème PyPI. En caractérisant les domaines, clusters et tendances de désengagement dans TensorFlow et PyTorch, on fournit un cadre pour mieux comprendre ces chaînes d'approvisionnement.
Alors que la technologie d'apprentissage profond continue d'évoluer, maintenir une chaîne d'approvisionnement saine sera crucial pour le développement et le déploiement continu de ces frameworks. Les développeurs, chercheurs, et fournisseurs peuvent utiliser ces insights pour favoriser un environnement qui soutient l'efficacité, la collaboration, et l'innovation dans le domaine de l'apprentissage profond.
À travers une analyse attentive des domaines de paquets, des formes de clusters, et des raisons de désengagement, on espère contribuer des connaissances précieuses qui pourraient mener à une gestion et maintenance plus efficaces des paquets d'apprentissage profond à l'avenir.
Titre: Characterizing Deep Learning Package Supply Chains in PyPI: Domains, Clusters, and Disengagement
Résumé: Deep learning (DL) package supply chains (SCs) are critical for DL frameworks to remain competitive. However, vital knowledge on the nature of DL package SCs is still lacking. In this paper, we explore the domains, clusters, and disengagement of packages in two representative PyPI DL package SCs to bridge this knowledge gap. We analyze the metadata of nearly six million PyPI package distributions and construct version-sensitive SCs for two popular DL frameworks: TensorFlow and PyTorch. We find that popular packages (measured by the number of monthly downloads) in the two SCs cover 34 domains belonging to eight categories. Applications, Infrastructure, and Sciences categories account for over 85% of popular packages in either SC and TensorFlow and PyTorch SC have developed specializations on Infrastructure and Applications packages respectively. We employ the Leiden community detection algorithm and detect 131 and 100 clusters in the two SCs. The clusters mainly exhibit four shapes: Arrow, Star, Tree, and Forest with increasing dependency complexity. Most clusters are Arrow or Star, but Tree and Forest clusters account for most packages (Tensorflow SC: 70%, PyTorch SC: 90%). We identify three groups of reasons why packages disengage from the SC (i.e., remove the DL framework and its dependents from their installation dependencies): dependency issues, functional improvements, and ease of installation. The most common disengagement reason in the two SCs are different. Our study provides rich implications on the maintenance and dependency management practices of PyPI DL SCs.
Auteurs: Kai Gao, Runzhi He, Bing Xie, Minghui Zhou
Dernière mise à jour: 2023-12-20 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2306.16307
Source PDF: https://arxiv.org/pdf/2306.16307
Licence: https://creativecommons.org/licenses/by-sa/4.0/
Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.
Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.
Liens de référence
- https://github.com/gaokai320/PyPI-DLSC
- https://www.surveysystem.com/sscalce.htm
- https://neurips.cc/Conferences/2023/CallForPapers
- https://azure.microsoft.com/en-us/products/machine-learning
- https://www.tensorflow.org/tfx
- https://github.com/tensorflow/tensorflow/issues/7166
- https://github.com/Quansight/pytest-pytorch/issues/13
- https://github.com/apangasa/bestof/issues/21
- https://github.com/openclimatefix/nowcasting_dataset/issues/86
- https://github.com/interpretml/DiCE/pull/74
- https://github.com/aramis-lab/clinica/issues/458
- https://github.com/Unity-Technologies/datasetinsights/issues/143
- https://tonic.readthedocs.io/en/latest/about/release_notes.html
- https://github.com/OpenNMT/OpenNMT-tf/pull/802
- https://github.com/raymon-ai/raymon/issues/50
- https://github.com/paradigmn/ultrastar_pitch/issues/5
- https://www.dampfkraft.com/code/distributing-large-files-with-pypi.html
- https://discuss.python.org/t/what-to-do-about-gpus-and-the-built-distributions-that-support-them/7125
- https://download.pytorch.org/whl/torch_stable.html
- https://docs.npmjs.com/cli/v9/commands/npm-audit
- https://github.com/dependabot
- https://github.com/npm/npm/issues/12750