Durante o desenvolvimento de modelos, é comum precisar de várias placas GPU sem demandar grandes quantidades de recursos. Alocar cada placa GPU exclusivamente para uma plataforma de desenvolvimento pode resultar em desperdício. O compartilhamento de múltiplas GPUs permite que um Pod utilize alocações iguais de memória GPU de várias placas, sem ocupar nenhuma delas de forma exclusiva. Clusters ACK Pro oferecem suporte a esse recurso com isolamento de memória GPU, possibilitando uma utilização mais granular dos recursos.
Pré-requisitos
Verifique se os seguintes itens foram atendidos:
Limitações
O compartilhamento de múltiplas GPUs oferece isolamento de memória GPU apenas com compartilhamento de poder de computação, não suportando alocação dedicada de poder de computação.
Como funciona
Esse mecanismo permite que um único Pod solicite memória GPU de várias placas. Cada placa contribui com uma parte igual da memória.
|
Modo |
Descrição |
|
Compartilhamento de GPU única |
O Pod utiliza parte dos recursos de uma única placa GPU. |
|
Compartilhamento de múltiplas GPUs |
O Pod abrange várias placas GPU, e cada uma fornece uma quantidade igual de memória GPU. |
Fórmula de alocação: Se um Pod solicitar N GiB de M placas GPU, cada placa alocará N/M GiB.
Por exemplo, um Pod que solicita 8 GiB distribuídos em 2 placas recebe 4 GiB de cada uma.
Restrições:
O resultado de N/M deve ser um número inteiro.
Todas as M placas GPU devem estar no mesmo nó Kubernetes.
Configure o compartilhamento de múltiplas GPUs
Faça login no console ACK. 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 Workloads > Jobs.
-
Na página Jobs, clique em Create from YAML. Cole o seguinte YAML em Template e clique em Create.
apiVersion: batch/v1 kind: Job metadata: name: tensorflow-mnist-multigpu spec: parallelism: 1 template: metadata: labels: app: tensorflow-mnist-multigpu aliyun.com/gpu-count: "2" # Number of GPU cards to use spec: containers: - name: tensorflow-mnist-multigpu image: registry.cn-beijing.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: aliyun.com/gpu-mem: 8 # Total GPU memory in GiB across all cards workingDir: /root restartPolicy: NeverParâmetros principais:
Parâmetro
Tipo
Descrição
aliyun.com/gpu-countString (rótulo do Pod)
Quantidade de placas GPU. Defina em
metadata.labels. Exemplo:"2"solicita memória de 2 placas.aliyun.com/gpu-memInteiro (limite de recurso)
Memória GPU total (GiB) somada entre todas as placas. Defina em
resources.limits. Exemplo:8representa 8 GiB no total — 4 GiB por placa.
Verifique o isolamento de memória GPU
Após o início do Job, confirme se o Pod acessa somente a memória GPU alocada para ele.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Workloads > Pods.
-
Para o Pod desejado (por exemplo,
tensorflow-mnist-multigpu-***), clique em Actions > Terminal e execute:nvidia-smiSaída esperada:
Wed Jun 14 03:24:14 2023 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 470.161.03 Driver Version: 470.161.03 CUDA Version: 11.4 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla V100-SXM2... On | 00000000:00:09.0 Off | 0 | | N/A 38C P0 61W / 300W | 569MiB / 4309MiB | 2% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ | 1 Tesla V100-SXM2... On | 00000000:00:0A.0 Off | 0 | | N/A 36C P0 61W / 300W | 381MiB / 4309MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| +-----------------------------------------------------------------------------+Confirme os seguintes pontos na saída:
Duas placas GPU listadas (GPU 0 e GPU 1), correspondendo a
aliyun.com/gpu-count: "2".Cada placa exibe 4309 MiB de memória total — ou seja, 4 GiB por placa, e não os 16.160 MiB físicos, o que confirma o isolamento de memória GPU.
-
Para o mesmo Pod, clique em Actions > Logs. Verifique se esta saída aparece duas vezes (uma vez por placa):
totalMemory: 4.21GiB freeMemory: 3.91GiBUm valor de totalMemory próximo a 4 GiB por placa — em vez dos 16.160 MiB físicos — confirma que o isolamento de memória GPU está ativo.