Container Service for Kubernetes (ACK) ofrece funciones para compartir y programar GPU en escenarios de inference que comparten una sola GPU. Además, aplica el aislamiento de memoria de GPU en el modo kernel del controlador de NVIDIA. Si ya instaló el componente de uso compartido de GPU en su clúster, actualícelo a la versión más reciente cuando el controlador de GPU o el sistema operativo de un nodo no sea compatible con la versión de cGPU instalada. Este tema describe cómo gestionar el componente de uso compartido de GPU en los nodos GPU para habilitar la programación y el aislamiento de GPU.
Requisitos previos
Antes de usar el uso compartido de GPU, active Cloud-native AI Suite. Para obtener detalles de facturación, consulte Billing of cloud-native AI suite.
Para ver las notas sobre el uso de cGPU, consulte cGPU FAQ.
Se creó un ACK managed cluster y se seleccionó un servidor en la nube GPU como tipo de instancia.
Limitaciones
La función de aislamiento de memoria de cGPU solo es compatible con nodos de Elastic Compute Service (ECS) de Alibaba Cloud. No agregue la etiqueta
ack.node.gpu.schedule=cgpuniack.node.gpu.schedule=core_mema los nodos que no sean de ECS de Alibaba Cloud.No establezca la directiva de CPU en
staticpara los nodos que usan el uso compartido de GPU.Si necesita especificar una ruta personalizada para el archivo KubeConfig, ejecute el comando
export KUBECONFIG=<kubeconfig>. El comandokubectl inspect cgpuno admite el parámetro--kubeconfig.El aislamiento de cGPU no admite Unified Virtual Memory (UVM). Por lo tanto, no puede llamar a cudaMallocManaged() para asignar memoria de GPU; en su lugar, llame a cudaMalloc(). Para obtener más información, consulte la documentación de NVIDIA.
Los pods del DaemonSet de uso compartido de GPU no tienen la prioridad más alta en un nodo. Por ello, otros pods con mayor prioridad pueden apropiarse de sus recursos y provocar su desalojo. Para evitarlo, modifique el DaemonSet que utiliza, por ejemplo
gpushare-device-plugin-dspara la memoria de GPU compartida, y agreguepriorityClassName: system-node-criticalpara garantizar una prioridad alta.-
Por motivos de rendimiento, una sola tarjeta GPU admite un máximo de 20 pods al usar cGPU. Si se supera este límite, los pods posteriores programados en esa tarjeta no se ejecutarán y devolverán el mensaje de error
Error occurs when creating cGPU instance: unknown.Para evitar que el programador siga asignando pods de cGPU a nodos donde una tarjeta ya alcanzó el límite de 20 pods, ejecute el siguiente comando para agregar una etiqueta al nodo:
kubectl label nodes <NODE> ack.node.gpu.max-pod=20El valor
20es fijo y no se puede cambiar por otro. -
Puede instalar el componente de uso compartido de GPU en cualquier región. Sin embargo, la función de aislamiento de memoria de GPU solo está disponible en las siguientes regiones. Asegúrese de que su clúster se encuentre en una de ellas.
-
Compatibilidad de versiones.
Elemento
Versiones compatibles
Versión de Kubernetes
-
Las versiones de ack-ai-installer anteriores a la 1.12.0 admiten clústeres que ejecutan Kubernetes 1.18.8 o posterior.
-
ack-ai-installer 1.12.0 o posterior solo admite clústeres que ejecutan Kubernetes 1.20 o posterior.
Versión del controlador de NVIDIA
418.87.01 o posterior
Versión del entorno de ejecución de contenedores
-
Docker: 19.03.5 o posterior
-
containerd: 1.4.3 o posterior
Sistema operativo
Alibaba Cloud Linux 3.x (la edición optimizada para contenedores requiere ack-ai-installer v1.12.6 o posterior), Alibaba Cloud Linux 2.x, CentOS 7.6, CentOS 7.7, CentOS 7.9, Ubuntu 22.04
GPU compatibles
Serie P, serie T, serie V, serie A, serie H
-
Instalación del componente de uso compartido de GPU
Paso 1: Instalar el componente de uso compartido de GPU
Cloud-native AI Suite no desplegado
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en .
En la página Cloud-native AI Suite, haga clic en Deploy.
En la página Deploy Cloud-native AI Suite, seleccione Scheduling policies extension (Batch scheduling, GPU sharing, and GPU topology-aware scheduling).
-
(Opcional) Para personalizar la directiva de cGPU, haga clic en Advanced a la derecha de Scheduling Policy Extension (Batch Task Scheduling, GPU Sharing, Topology-aware GPU Scheduling). En el cuadro de diálogo Parameters, modifique el campo
policyde cGPU y haga clic en OK.Si no tiene requisitos especiales para compartir la capacidad de cómputo de cGPU, se recomienda mantener la configuración predeterminada
policy: 5(programación nativa). Para obtener más información sobre las directivas de cGPU, consulte Install and use the cGPU service. -
En la parte inferior de la página Cloud-native AI Suite, haga clic en Deploy Cloud-native AI Suite.
Una vez finalizada la instalación, el componente ack-ai-installer aparecerá en la lista de componentes de la página Cloud-native AI Suite.
Cloud-native AI Suite desplegado
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en .
Busque el componente ack-ai-installer y haga clic en Deploy en la columna Actions.
-
(Opcional) En el cuadro de diálogo Parameters que aparece, modifique el campo
policyde cGPU.Si no tiene requisitos especiales para compartir la capacidad de cómputo de cGPU, se recomienda mantener la configuración predeterminada
policy: 5(programación nativa). Para obtener más información sobre las directivas de cGPU, consulte Install and use the cGPU service. -
Cuando termine de modificar los parámetros, haga clic en OK.
Después de instalar el componente, el Status de ack-ai-installer cambia a Deployed.
Paso 2: Habilitar el uso compartido y el aislamiento de GPU
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en .
En la página Node Pools, haga clic en Create Node Pool. Configure los parámetros tal como se describe en Create and manage a node pool.
-
En la página Create Node Pool, configure los parámetros del node pool y luego haga clic en Confirm. A continuación se describen los parámetros clave.
Parámetro
Descripción
Expected number of nodes
Introduzca el número inicial de nodos para el node pool. Use 0 si no necesita nodos al principio.
Node labels
Establezca el valor de la etiqueta según sus necesidades de negocio. Para obtener más información sobre las etiquetas de nodo, consulte Enable scheduling.
Este ejemplo usa el valor de etiqueta
cgpu. Dicho valor habilita el uso compartido de GPU en el nodo, donde cada pod solo necesita solicitar recursos de memoria de GPU. Varios pods en una misma tarjeta GPU comparten la capacidad de cómputo y tienen la memoria aislada.Haga clic en
junto a Node Labels. Establezca Key en ack.node.gpu.scheduley Value encgpu.Importante-
Para ver las notas sobre el uso de la función de aislamiento de cGPU, consulte cGPU FAQ.
-
Después de agregar la etiqueta de uso compartido de GPU, no use el comando
kubectl label nodespara cambiar la etiqueta de programación de GPU ni utilice la función de gestión de etiquetas en la página Nodes para modificar la etiqueta del nodo, ya que esto puede causar problemas potenciales. Para obtener más información, consulte Enable scheduling. El método recomendado se describe en Enable scheduling.
-
Paso 3: Agregar nodos GPU
Si ya creó nodos GPU cuando agregó el node pool, omita este paso.
Después de crear el node pool, agréguele nodos GPU. Al hacerlo, asegúrese de especificar un servidor en la nube GPU como tipo de instancia. Para obtener más información, consulte Add existing nodes to a node pool o Create and manage a node pool.
Paso 4: Instalar la herramienta de consulta de GPU
-
Descargue el ejecutable kubectl-inspect-cgpu en un directorio de su PATH, como
/usr/local/bin/.-
Si usa Linux, ejecute el siguiente comando para descargar kubectl-inspect-cgpu.
wget http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/gpushare/kubectl-inspect-cgpu-linux -O /usr/local/bin/kubectl-inspect-cgpu -
Si usa macOS, ejecute el siguiente comando para descargar kubectl-inspect-cgpu.
wget http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/gpushare/kubectl-inspect-cgpu-darwin -O /usr/local/bin/kubectl-inspect-cgpu
-
-
Haga que el archivo sea ejecutable:
chmod +x /usr/local/bin/kubectl-inspect-cgpu -
Compruebe el uso de GPU en el clúster:
kubectl inspect cgpuSalida esperada:
NAME IPADDRESS GPU0(Allocated/Total) GPU Memory(GiB) cn-shanghai.192.168.6.104 192.168.6.104 0/15 0/15 ---------------------------------------------------------------------- Allocated/Total GPU Memory In Cluster: 0/15 (0%)
Actualización del componente de uso compartido de GPU
Paso 1: Determinar el método de actualización
El método de actualización depende de cómo se instaló el componente ack-ai-installer. Existen dos métodos de instalación:
Instalado mediante Cloud-native AI Suite (recomendado): el componente se instaló desde la página Cloud-native AI Suite.
-
Instalado desde App Catalog (ya no disponible): el componente ack-ai-installer se instaló desde la página App Catalog en Marketplace. Este método ya está cerrado, pero los componentes existentes instalados de esta forma aún se pueden actualizar por esta vía.
ImportanteSi desinstala un componente que se instaló con este método, debe activar Cloud-native AI Suite y completar la instalación para volver a instalarlo.
Paso 2: Actualizar el componente
Cloud-native AI suite
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en .
En la sección Components, busque el componente ack-ai-installer y haga clic en Upgrade en la columna Actions.
App catalog
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en .
-
En la página Helm, busque la versión de ack-ai-installer. En la columna Actions, haga clic en Update. Siga las indicaciones para seleccionar la versión más reciente del Chart y actualizar el componente.
ImportanteSi necesita personalizar la configuración del Chart, confirme la actualización del componente después de aplicar los cambios.
Tras la actualización, revise la página Helm para confirmar que la versión del Chart de ack-ai-installer es la más reciente.
Paso 3: Actualizar los nodos existentes
Actualizar el componente ack-ai-installer no actualiza automáticamente la versión de cGPU en los nodos existentes. Utilice la siguiente información para determinar si la función de aislamiento de cGPU está habilitada en sus nodos.
Si su clúster contiene nodos GPU con la función de aislamiento de cGPU habilitada, también debe actualizar la versión de cGPU en esos nodos. Para obtener más información, consulte Upgrade the cGPU version of a node.
-
Si su clúster no tiene ningún nodo con la función de aislamiento de cGPU habilitada, omita este paso.
NotaSi un nodo tiene la etiqueta
ack.node.gpu.schedule=cgpuoack.node.gpu.schedule=core_mem, la función de aislamiento de cGPU está habilitada.Actualizar la versión de cGPU en los nodos existentes requiere detener todos los pods de negocio en dichos nodos. Ejecute esta operación fuera del horario pico para minimizar la interrupción del servicio.