HiveD es un programador para cargas de trabajo de aprendizaje profundo.
Como componente independiente de Microsoft OpenPAI, HiveD está diseñado para ser un extensor del programador de Kubernetes para clústeres de GPU multiinquilino . Un clúster de GPU multiinquilino supone que varios inquilinos (equipos) comparten el mismo grupo de GPU en un único clúster físico (PC) y proporciona algunas garantías de recursos a cada inquilino. HiveD modela a cada inquilino como un clúster virtual (VC), de modo que un inquilino puede usar su propio VC como si fuera un clúster privado, mientras que también puede usar los recursos gratuitos de otros VC con menor prioridad.
HiveD proporciona varias características clave para cargas de trabajo de aprendizaje profundo, como se muestra a continuación.
La característica principal que distingue a HiveD es que proporciona garantía de recursos a cada VC, no solo en términos de cantidad, un valor numérico, sino también en términos de topología , un requisito clave de los trabajos de entrenamiento basados en GPU. Por ejemplo, un programador tradicional garantiza que un VC pueda usar 8 GPU. Sin embargo, desconoce la topología de estas 8 GPU. Es posible que un trabajo de entrenamiento de 8 GPU que debe ejecutarse dentro de un solo nodo no pueda asignarse incluso si su VC todavía tiene 8 GPU libres. Esto se debe a que estas 8 GPU gratuitas pueden pertenecer a varios nodos.
HiveD protege los recursos de los VC en términos de celda , un tipo de recurso definido por el usuario que codifica tanto la cantidad como otros tipos de información, como la topología y el tipo de hardware. En el ejemplo anterior, un usuario puede definir un tipo de celda de nodo de 8 GPU y al VC se le puede asignar una de esas celdas. Luego, HiveD se asegurará de que siempre haya un nodo de 8 GPU disponible para el VC , independientemente de las otras cargas de trabajo en el clúster.
HiveD permite definiciones de celdas flexibles para garantías de recursos detalladas. Por ejemplo, los usuarios pueden definir celdas en múltiples niveles de topología (p. ej., conmutador PCI-e), para diferentes modelos de dispositivos (p. ej., GPU NVIDIA V100, GPU AMD Radeon MI100, Cloud TPU v3) o configuraciones de red (p. ej., dominio InfiniBand) . Un VC puede tener varios tipos de células y HiveD las garantizará todas.
HiveD optimiza el rendimiento de la programación grupal , un requisito de programación típico para trabajos de capacitación de aprendizaje profundo, donde todos los contenedores deben asignarse antes de que pueda comenzar el trabajo de capacitación. Múltiples trabajos programados por pandillas que compiten por el mismo conjunto de recursos pueden llevar a la hambruna, donde cada trabajo sólo obtiene recursos parciales y tiene que esperar indefinidamente.
HiveD programa todos los contenedores dentro de un trabajo de manera transaccional , es decir, todos los requisitos de estos contenedores se concederán o denegarán en su conjunto, evitando así la asignación parcial de recursos y la inanición.
HiveD admite múltiples prioridades laborales. Los empleos de mayor prioridad pueden prevalecer sobre los de menor prioridad. HiveD también introduce trabajos oportunistas , es decir, trabajos con la prioridad más baja que pueden utilizar los recursos gratuitos de otros VC cuando sea posible (sin romper las garantías de recursos para otros VC).
Multiinquilino: clúster virtual (VC)
Garantía detallada de recursos de VC: cantidad, topología, tipo, recurso de VC fijado, etc.
Programación flexible dentro de VC: reconocimiento de topología, tipos de hardware flexibles, recursos de VC fijados, personalización de políticas de programación, etc.
Fragmentación de recursos optimizada y menos hambre
Prioridades, uso excesivo con prioridad baja y preferencia entre/intra-VC
Programación/preferencia de grupo de trabajo (completo/parcial)
Tolerancia a fallos, mala conciencia del hardware, reconfiguración para preservar el trabajo
Un clúster de Kubernetes, v1.14.2 o superior, en la nube o local.
Programador de configuración
Ejecutar programador
Enviar carga de trabajo al programador
Manual de usuario
Demostración de funciones
Diseño
Docker Hub
FrameworkController: un controlador de pod de Kubernetes de uso general, que puede aprovechar fácilmente HiveD para programar trabajos.
OpenPAI: una solución completa para plataforma de IA. HiveD será más fácil de usar cuando trabaje en conjunto con OpenPAI.
Este proyecto agradece contribuciones y sugerencias. La mayoría de las contribuciones requieren que usted acepte un Acuerdo de licencia de colaborador (CLA) que declara que tiene derecho a otorgarnos, y de hecho lo hace, los derechos para usar su contribución. Para obtener más detalles, visite https://cla.opensource.microsoft.com.
Cuando envía una solicitud de extracción, un bot CLA determinará automáticamente si necesita proporcionar un CLA y decorar el PR de manera adecuada (por ejemplo, verificación de estado, comentario). Simplemente siga las instrucciones proporcionadas por el bot. Solo necesitarás hacer esto una vez en todos los repositorios que utilicen nuestro CLA.
Este proyecto ha adoptado el Código de conducta de código abierto de Microsoft. Para obtener más información, consulte las preguntas frecuentes sobre el Código de conducta o comuníquese con [email protected] si tiene alguna pregunta o comentario adicional.
Cite HiveD en sus publicaciones si le ayuda en su investigación:
@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, }