Este tópico descreve como usar o recurso cGPU em um cluster de GPU dedicado após instalar o componente ack-cgpu.
Pré-requisitos
Verifique se o componente ack-cgpu está instalado. Para mais informações, consulte Instalar o componente ack-cgpu.
Observações de uso
Em nós de GPU gerenciados em clusters do Container Service for Kubernetes (ACK), observe os seguintes pontos ao solicitar e usar recursos de GPU para aplicações.
Não execute aplicações com uso intensivo de GPU diretamente nos nós.
Não use ferramentas como
Docker,Podmanounerdctlpara criar contêineres e solicitar recursos de GPU. Por exemplo, não execute o comandodocker run --gpus alloudocker run -e NVIDIA_VISIBLE_DEVICES=allpara rodar aplicações que demandam muita GPU.Não adicione a variável de ambiente
NVIDIA_VISIBLE_DEVICES=allouNVIDIA_VISIBLE_DEVICES=<GPU ID>na seçãoenvdo arquivo yaml do pod. Além disso, não use a variável de ambienteNVIDIA_VISIBLE_DEVICESpara solicitar recursos de GPU aos pods e executar aplicações pesadas.Se a variável de ambiente
NVIDIA_VISIBLE_DEVICESnão estiver especificada no arquivo yaml do pod, não definaNVIDIA_VISIBLE_DEVICES=alldurante a criação de imagens de contêiner para executar aplicações com alto consumo de GPU.Não inclua
privileged: truena seçãosecurityContextdo arquivo yaml do pod para rodar aplicações que exigem muitos recursos de GPU.
O uso dos métodos acima para solicitar recursos de GPU pode gerar os seguintes riscos:
Se você solicitar recursos de GPU em um nó usando um dos métodos anteriores, mas não especificar os detalhes no registro de recursos de dispositivo do agendador, as informações reais de alocação de GPU poderão divergir desse registro. Nesse cenário, o agendador ainda poderá alocar certos pods que solicitam esses recursos no mesmo nó. Consequentemente, suas aplicações podem competir pelos recursos da mesma GPU e algumas podem falhar ao iniciar devido à insuficiência de recursos.
A utilização desses métodos também pode causar outros problemas desconhecidos, como os problemas relatados pela comunidade NVIDIA.
Procedimento
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster desejado. No painel de navegação à esquerda, escolha .
-
Acesse o nó mestre de destino e execute o comando abaixo para consultar as capacidades cGPU do cluster.
NotaPara obter mais detalhes sobre como acessar um nó mestre, consulte Conectar-se a uma instância usando VNC.
Para consultar as capacidades cGPU de um cluster a partir de um cliente local, instale o componente ack-cgpu e uma ferramenta de consulta de recursos. Para mais informações, consulte Etapa 4: Instalar e usar a ferramenta de consulta de recursos de GPU.
kubectl inspect cgpuSaída esperada:
NAME IPADDRESS GPU0(Allocated/Total) GPU1(Allocated/Total) GPU Memory(GiB) cn-beijing.192.168.XX.XX 192.168.XX.XX 0/7 0/7 0/14 --------------------------------------------------------------------- Allocated/Total GPU Memory In Cluster: 0/14 (0%)NotaPara obter informações detalhadas sobre as capacidades cGPU, execute o comando
kubectl inspect cgpu -d. -
No painel de navegação à esquerda, escolha . Na página Jobs, clique em Create from YAML no canto superior direito. Na página exibida, selecione um namespace e escolha um modelo na lista suspensa Sample Template ou use um modelo personalizado. Em seguida, insira o exemplo de yaml abaixo no editor de código e clique em Create.
apiVersion: v1 kind: Pod metadata: name: gpu-share-sample spec: containers: - name: gpu-share-sample image: registry.cn-hangzhou.aliyuncs.com/ai-samples/gpushare-sample:tensorflow-1.5 command: - python - tensorflow-sample-code/tfjob/docker/mnist/main.py - --max_steps=100000 - --data_dir=tensorflow-sample-code/data resources: limits: # Unit: GiB. The Pod requests a total of 3 GiB of GPU memory. aliyun.com/gpu-mem: 3 # Specify the amount of GPU memory. workingDir: /root -
No nó mestre, execute novamente o comando a seguir para verificar o uso de memória da GPU no cluster.
kubectl inspect cgpuSaída esperada:
NAME IPADDRESS GPU0(Allocated/Total) GPU Memory(GiB) cn-beijing.192.168.XX.XX 192.168.XX.XX 3/14 3/14 --------------------------------------------------------------------- Allocated/Total GPU Memory In Cluster: 3/14 (21%)A saída indica que o nó
cn-beijing.192.168.XX.XXpossui um total de 14 GiB de memória de GPU, dos quais 3 GiB foram alocados.
Verificar o resultado
Siga estas etapas para confirmar se o isolamento de memória da GPU está ativado no nó.
Acesse o nó mestre de destino.
-
Execute o comando abaixo para visualizar os logs da aplicação e confirmar que o isolamento de memória cGPU está habilitado.
kubectl logs gpu-share-sample --tail=1Saída esperada:
2023-08-07 09:08:13.931003: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1326] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 2832 MB memory) -> physical GPU (device: 0, name: Tesla T4, pci bus id: 0000:00:07.0, compute capability: 7.5)Essa saída mostra que o contêiner solicitou 2.832 MB de memória de GPU.
-
Execute o seguinte comando para entrar no contêiner e verificar a quantidade total de memória de GPU alocada a ele.
kubectl exec -it gpu-share-sample nvidia-smiSaída esperada:
Mon Aug 7 08:52:18 2023 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 418.87.01 Driver Version: 418.87.01 CUDA Version: 10.1 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla T4 On | 00000000:00:07.0 Off | 0 | | N/A 41C P0 26W / 70W | 3043MiB / 3231MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| +-----------------------------------------------------------------------------+O resultado indica que o total de memória de GPU alocada para este contêiner é de 3.231 MiB.
-
Conecte-se ao nó de GPU que executa a aplicação de exemplo e verifique a memória total de GPU do nó.
nvidia-smiSaída esperada:
Mon Aug 7 09:18:26 2023 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 418.87.01 Driver Version: 418.87.01 CUDA Version: 10.1 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla T4 On | 00000000:00:07.0 Off | 0 | | N/A 40C P0 26W / 70W | 3053MiB / 15079MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | 0 8796 C python3 3043MiB | +-----------------------------------------------------------------------------+A saída revela que o nó host possui um total de 15.079 MiB de memória de GPU, dos quais 3.053 MiB estão alocados ao contêiner.