O Container Service for Kubernetes (ACK) oferece recursos de compartilhamento e agendamento de GPU para cenários de inferência de modelos que compartilham uma única GPU. Ele também aplica o isolamento de memória da GPU no modo kernel do driver da NVIDIA. Atualize o componente quando o driver da GPU ou o sistema operacional de um nó for incompatível com a versão do cGPU instalada, mantendo assim o agendamento e o isolamento de GPU nos seus nós.
Pré-requisitos
Antes de usar o compartilhamento de GPU, ative o {{XREF_0}}. Para obter detalhes sobre faturamento, consulte {{XREF_1}}.
Para ver observações sobre o uso do cGPU, consulte {{XREF_2}}.
Um {{XREF_3}} foi criado e a arquitetura do tipo de instância está definida como servidor em nuvem com GPU.
Limitações
O recurso de isolamento de memória do cGPU é compatível apenas com nós do Alibaba Cloud Elastic Compute Service (ECS). Não adicione o rótulo
ack.node.gpu.schedule=cgpuouack.node.gpu.schedule=core_mema nós que não sejam do Alibaba Cloud ECS.Não defina a política de CPU como
staticpara nós que usam compartilhamento de GPU.Caso precise especificar um caminho personalizado para o arquivo KubeConfig, execute o comando
export KUBECONFIG=<kubeconfig>. O comandokubectl inspect cgpunão é compatível com o parâmetro--kubeconfig.Como o isolamento do cGPU não é compatível com a Unified Virtual Memory (UVM), você não pode chamar cudaMallocManaged() para alocar memória da GPU. Em vez disso, chame cudaMalloc(). Para mais informações, consulte a documentação da NVIDIA.
Os pods do DaemonSet de compartilhamento de GPU não têm a prioridade mais alta em um nó, portanto, outros pods com prioridade maior podem preemptar seus recursos e causar a evicção. Para evitar isso, modifique o DaemonSet em uso, como o
gpushare-device-plugin-dspara memória de GPU compartilhada, e adicionepriorityClassName: system-node-criticalpara garantir alta prioridade.-
Por motivos de desempenho, uma única placa de GPU aceita no máximo 20 pods ao usar o cGPU. Se esse limite for excedido, os pods subsequentes agendados para essa placa não serão executados e retornarão a mensagem de erro
Error occurs when creating cGPU instance: unknown.Para impedir que o agendador continue agendando pods do cGPU em nós onde uma única placa já atingiu o limite de 20 pods, execute o comando a seguir para adicionar um rótulo ao nó:
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%)O valor
20é fixo e não pode ser alterado para outros valores. -
O componente de compartilhamento de GPU pode ser instalado em qualquer região. No entanto, o recurso de isolamento de memória da GPU está disponível apenas nas regiões a seguir. Certifique-se de que seu cluster esteja em uma dessas regiões.
-
Compatibilidade de versões.
Item
Versões compatíveis
Versão do Kubernetes
-
As versões do {{XREF_4}} anteriores à 1.12.0 são compatíveis com clusters que executam o Kubernetes 1.18.8 ou posterior.
-
O {{XREF_5}} 1.12.0 ou posterior é compatível apenas com clusters que executam o Kubernetes 1.20 ou posterior.
Versão do driver NVIDIA
418.87.01 ou posterior
Versão do runtime de contêineres
-
Docker: 19.03.5 ou posterior
-
containerd: 1.4.3 ou posterior
Sistema operacional
Alibaba Cloud Linux 3.x (a edição otimizada para contêineres requer o {{XREF_6}} v1.12.6 ou posterior), Alibaba Cloud Linux 2.x, CentOS 7.6, CentOS 7.7, CentOS 7.9, Ubuntu 22.04
GPUs compatíveis
Séries P, T, V, A e H
-
Instale o componente de compartilhamento de GPU
Etapa 1: Instale o componente de compartilhamento de GPU
Cloud-native AI Suite não implantado
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
Na página Cloud-native AI Suite, clique em Deploy.
Na página de implantação do Cloud-native AI Suite, selecione Scheduling Policy Extension (Batch Task Scheduling, GPU Sharing, Topology-aware GPU Scheduling).
-
(Opcional) Para personalizar a política do cGPU, clique em Advanced à direita de Scheduling Policy Extension (Batch Task Scheduling, GPU Sharing, Topology-aware GPU Scheduling). Na caixa de diálogo Scheduling Policy Extension (Batch Task Scheduling, GPU Sharing, Topology-aware GPU Scheduling), modifique o campo
policypara cGPU e clique em Parameters.Se você não tiver requisitos especiais para o compartilhamento de poder de computação do cGPU, a configuração recomendada é o padrão
policy: 5(agendamento nativo). Para mais informações sobre as políticas do cGPU, consulte {{XREF_7}}. -
Na parte inferior da página OK, clique em Cloud-native AI Suite.
Após a instalação, o componente ack-ai-installer aparece na lista de componentes na página Deploy Cloud-native AI Suite.
Cloud-native AI Suite implantado
Faça login no ACK console. No painel de navegação à esquerda, clique em Components.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
Localize o componente ack-ai-installer e clique em Deploy na coluna Actions.
-
(Opcional) Na caixa de diálogo Parameters exibida, modifique o campo
policypara cGPU.Se você não tiver requisitos especiais para o compartilhamento de poder de computação do cGPU, a configuração recomendada é o padrão
policy: 5(agendamento nativo). Para mais informações sobre as políticas do cGPU, consulte {{XREF_8}}. -
Após terminar de modificar os parâmetros, clique em OK.
Após a instalação do componente, o Status do ack-ai-installer muda para Deployed.
Etapa 2: Ative o compartilhamento, o agendamento e o isolamento de memória da GPU
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
Na página Node Pools, clique em Create Node Pool. Configure os parâmetros conforme descrito em {{XREF_9}}.
-
Na página Create Node Pool, configure os parâmetros do pool de nós e clique em Confirm. A tabela a seguir descreve os principais parâmetros.
Parâmetro
Descrição
Número esperado de nós
Insira o número inicial de nós para o pool de nós. Use 0 se nenhum nó for necessário inicialmente.
Rótulos de nós
Defina o valor do rótulo de acordo com os requisitos do seu negócio. Para mais informações sobre rótulos de nós, consulte {{XREF_10}}.
Este exemplo usa o valor de rótulo
cgpu. Esse valor ativa o compartilhamento de GPU no nó, onde cada pod precisa apenas solicitar recursos de memória da GPU. Vários pods em uma única placa de GPU compartilham poder de computação e têm memória isolada.Clique em
ao lado de Rótulos de nós. Defina a Key como ack.node.gpu.schedulee o Value comocgpu.Importante-
Para ver observações sobre o uso do recurso de isolamento do cGPU, consulte {{XREF_11}}.
-
Após adicionar o rótulo de compartilhamento de GPU, não altere o rótulo de agendamento de GPU com o comando
kubectl label nodesnem com o recurso de gerenciamento de rótulos na página Nodes. Alterar o rótulo dessa forma pode causar problemas potenciais. Para mais informações, consulte {{XREF_12}}. O método recomendado está descrito em {{XREF_13}}.
-
Etapa 3: Adicione nós de GPU
Se você já criou nós de GPU ao adicionar o pool de nós, pule esta etapa.
Após criar o pool de nós, adicione nós de GPU a ele. Ao fazer isso, certifique-se de que a arquitetura do tipo de instância esteja definida como servidor em nuvem com GPU. Para mais informações, consulte {{XREF_14}} ou {{XREF_15}}.
Etapa 4: Instale e use a ferramenta de consulta de GPU
-
Baixe o executável kubectl-inspect-cgpu para um diretório no seu PATH, como
/usr/local/bin/.-
Se você estiver usando Linux:
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%) -
Se você estiver usando macOS:
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%)
-
-
Torne o arquivo executável:
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%) -
Verifique o uso da GPU no cluster:
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%)Saída 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%)
Atualize o componente de compartilhamento de GPU
Etapa 1: Determine o método de atualização
O método de atualização depende de como o componente ack-ai-installer foi instalado. Existem dois métodos de instalação:
Instalado por meio do Cloud-native AI Suite (Recomendado): O componente foi instalado a partir da página Components.
-
Instalado a partir do App Catalog (não está mais disponível): O componente ack-ai-installer foi instalado a partir da página App Catalog no Marketplace. Este método foi descontinuado, mas os componentes existentes instalados dessa forma ainda podem ser atualizados por ele.
ImportanteSe você desinstalar um componente que foi instalado usando este método, será necessário ativar o Cloud-native AI Suite e concluir a instalação para reinstalá-lo.
Etapa 2: Atualize o componente
Atualização por meio do Cloud-native AI Suite
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
Na seção Components, localize o componente ack-ai-installer e clique em Upgrade na coluna Actions.
Atualização por meio do App Catalog
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
Na página do Helm, localize o release ack-ai-installer. Na coluna Helm, clique em Actions. Siga as instruções para selecionar a versão mais recente do Chart e atualizar o componente.
ImportanteSe precisar personalizar a configuração do Chart, confirme a atualização do componente após fazer as alterações.
Após a atualização, verifique a página do Helm para confirmar se a versão do Chart do release ack-ai-installer é a mais recente.
Etapa 3: Atualize os nós existentes
A atualização do componente ack-ai-installer não atualiza automaticamente a versão do cGPU nos nós existentes. Use as informações a seguir para determinar se o recurso de isolamento do cGPU está ativado em seus nós.
Se o seu cluster contiver nós de GPU com o recurso de isolamento do cGPU ativado, você também precisará atualizar a versão do cGPU nesses nós. Para mais informações, consulte {{XREF_16}}.
-
Se o seu cluster não tiver nenhum nó com o recurso de isolamento do cGPU ativado, pule esta etapa.
NotaSe um nó tiver o rótulo
ack.node.gpu.schedule=cgpuouack.node.gpu.schedule=core_mem, o recurso de isolamento do cGPU estará ativado.Atualizar a versão do cGPU em nós existentes requer a parada de todos os pods de negócios nesses nós. Execute esta operação fora dos horários de pico para minimizar interrupções nos negócios.