HiveD est un planificateur pour les charges de travail d'apprentissage en profondeur.
En tant que composant autonome de Microsoft OpenPAI, HiveD est conçu pour être un extenseur de planificateur Kubernetes pour les clusters GPU multi-tenants . Un cluster GPU multi-tenant suppose que plusieurs locataires (équipes) partagent le même pool GPU dans un seul cluster physique (PC) et fournit certaines garanties de ressources à chaque locataire. HiveD modélise chaque locataire comme un cluster virtuel (VC), de sorte qu'un locataire puisse utiliser son propre VC comme s'il s'agissait d'un cluster privé, tout en pouvant également utiliser les ressources gratuites d'autres VC avec une priorité inférieure.
HiveD fournit plusieurs fonctionnalités clés pour les charges de travail d'apprentissage en profondeur, comme suit.
La fonctionnalité phare qui distingue HiveD est qu'il fournit une garantie de ressources à chaque VC, non seulement en termes de quantité, une valeur numérique, mais également en termes de topologie , une exigence clé des tâches de formation basées sur GPU. Par exemple, un planificateur traditionnel garantit qu'un VC peut utiliser 8 GPU. Il ne connaît cependant pas la topologie de ces 8 GPU. Il est possible qu'une tâche de formation de 8 GPU qui doit s'exécuter sur un seul nœud ne puisse pas être allouée même si son VC dispose encore de 8 GPU libres. En effet, ces 8 GPU gratuits peuvent appartenir à plusieurs nœuds.
HiveD protège les ressources des VC en termes de cellule , un type de ressource défini par l'utilisateur qui code à la fois la quantité et d'autres types d'informations, telles que la topologie et le type de matériel. Dans l'exemple ci-dessus, un utilisateur peut définir un type de cellule de nœud à 8 GPU, et le VC peut se voir attribuer l'une de ces cellules. Ensuite, HiveD veillera à ce qu'il y ait toujours un nœud à 8 GPU disponible pour le VC , quelles que soient les autres charges de travail du cluster.
HiveD permet des définitions de cellules flexibles pour des garanties de ressources précises. Par exemple, les utilisateurs peuvent définir des cellules à plusieurs niveaux de topologie (par exemple, commutateur PCI-e), pour différents modèles d'appareils (par exemple, GPU NVIDIA V100, GPU AMD Radeon MI100, Cloud TPU v3) ou configurations réseau (par exemple, domaine InfiniBand). . Un VC peut avoir différents types de cellules, et HiveD les garantira toutes.
HiveD optimise les performances de la planification des gangs , une exigence de planification typique pour les tâches de formation en deep learning, où tous les conteneurs doivent être alloués avant que la tâche de formation puisse commencer. Plusieurs tâches programmées par des gangs et se disputant le même ensemble de ressources peuvent conduire à la famine, où chaque tâche ne reçoit qu'une ressource partielle et doit attendre indéfiniment.
HiveD planifie tous les conteneurs d'une tâche de manière transactionnelle , c'est-à-dire que toutes les exigences de ces conteneurs seront accordées ou refusées dans leur ensemble, évitant ainsi une allocation partielle des ressources et une famine.
HiveD prend en charge plusieurs priorités de travail. Les emplois plus prioritaires peuvent préempter les emplois moins prioritaires. HiveD introduit également des emplois opportunistes , c'est-à-dire des emplois avec la priorité la plus basse qui peuvent utiliser les ressources gratuites d'autres VC lorsque cela est possible (sans rompre les garanties de ressources accordées aux autres VC).
Multilocation : cluster virtuel (VC)
Garantie de ressources VC à grain fin : quantité, topologie, type, ressource VC épinglée, etc.
Planification intra-VC flexible : connaissance de la topologie, types de matériel flexibles, ressources VC épinglées, personnalisation des politiques de planification, etc.
Fragmentation optimisée des ressources et moins de famine
Priorités, surutilisation avec une faible priorité et préemption inter/intra-VC
Planification/préemption des tâches (complètes/partielles)
Tolérance aux pannes, mauvaise connaissance du matériel, reconfiguration préservant le travail
Un cluster Kubernetes, v1.14.2 ou supérieur, sur cloud ou sur site.
Planificateur de configuration
Exécuter le planificateur
Soumettre la charge de travail au planificateur
Manuel d'utilisation
Démo des fonctionnalités
Conception
DockerHub
FrameworkController : un contrôleur de pod Kubernetes à usage général, qui peut facilement exploiter HiveD pour planifier des tâches.
OpenPAI : Une solution complète pour la plateforme d'IA. HiveD sera plus convivial lorsqu'il travaillera en tandem avec OpenPAI.
Ce projet accueille les contributions et suggestions. La plupart des contributions nécessitent que vous acceptiez un contrat de licence de contributeur (CLA) déclarant que vous avez le droit de nous accorder, et que vous nous accordez effectivement, le droit d'utiliser votre contribution. Pour plus de détails, visitez https://cla.opensource.microsoft.com.
Lorsque vous soumettez une pull request, un robot CLA déterminera automatiquement si vous devez fournir un CLA et décorera le PR de manière appropriée (par exemple, vérification du statut, commentaire). Suivez simplement les instructions fournies par le bot. Vous n’aurez besoin de le faire qu’une seule fois pour tous les dépôts utilisant notre CLA.
Ce projet a adopté le code de conduite Microsoft Open Source. Pour plus d’informations, consultez la FAQ sur le code de conduite ou contactez [email protected] pour toute question ou commentaire supplémentaire.
Veuillez citer HiveD dans vos publications si cela aide vos recherches :
@inproceedings {hived-osdi2020, author = {Hanyu Zhao and Zhenhua Han and Zhi Yang and Quanlu Zhang and Fan Yang and Lidong Zhou and Mao Yang and Francis C.M. Lau and Yuqi Wang and Yifan Xiong and Bin Wang}, title = {{HiveD}: Sharing a {GPU} Cluster for Deep Learning with Guarantees}, booktitle = {14th {USENIX} Symposium on Operating Systems Design and Implementation ({OSDI} 20)}, year = {2020}, isbn = {978-1-939133-19-9}, pages = {515--532}, url = {https://www.usenix.org/conference/osdi20/presentation/zhao-hanyu}, publisher = {{USENIX} Association}, month = nov, }