Este tópico utiliza um aplicativo de exemplo simples para demonstrar como desativar o isolamento de memória GPU em workloads de um cluster. O agendador de compartilhamento de GPU do cGPU aloca uma quantidade fixa de memória GPU para cada contêiner e aplica esse limite durante a execução. Ao desativar o isolamento de memória, o contêiner consegue visualizar e utilizar toda a memória física da GPU do nó, enquanto o agendador continua rastreando a cota alocada para fins de agendamento.
Desative o isolamento de memória quando um workload exigir acesso total à memória GPU na inicialização — por exemplo, quando frameworks de deep learning como TensorFlow verificam a memória GPU disponível durante a inicialização e a pré-alocam. Sem desativar o isolamento, esses frameworks enxergam apenas a cota alocada (por exemplo, 3 GiB) e podem falhar ou apresentar baixo desempenho.
Este procedimento se aplica a clusters dedicados ACK e clusters ACK Pro que possuem o recurso de isolamento de memória do cGPU ativado.
Pré-requisitos
Antes de começar, verifique se você possui:
O add-on
ack-cgpuinstalado no seu cluster. Consulte Instalar ack-cgpu ou Instalar e usar ack-ai-installer e a ferramenta de inspeção de GPU
Desativar o isolamento de memória para um contêiner
Etapa 1: Verificar o status atual do compartilhamento de GPU
Execute o comando abaixo para visualizar como a memória GPU está alocada nos nós do seu cluster:
kubectl inspect cgpu
A saída esperada é semelhante a:
NAME IPADDRESS GPU0(Allocated/Total) GPU Memory(GiB)
cn-beijing.192.16x.x.xx3 192.16x.x.xx3 0/15 0/15
cn-beijing.192.16x.x.xx1 192.16x.x.xx1 0/15 0/15
cn-beijing.192.16x.x.xx2 192.16x.x.xx2 0/15 0/15
---------------------------------------------------------------------
Allocated/Total GPU Memory In Cluster:
0/45 (0%)
Para obter informações detalhadas sobre o compartilhamento de GPU, execute kubectl inspect cgpu -d .
Etapa 2: Implantar um contêiner com isolamento de memória desativado
Crie um Job do Kubernetes que solicite memória GPU via cGPU, mas opte por não aplicar o isolamento de memória. Defina a variável de ambiente CGPU_DISABLE como "true" na especificação do contêiner.
apiVersion: batch/v1
kind: Job
metadata:
name: disable-cgpu
spec:
parallelism: 1
template:
metadata:
labels:
app: disable-cgpu
spec:
containers:
- name: disable-cgpu
image: registry.cn-hangzhou.aliyuncs.com/ai-samples/gpushare-sample:tensorflow-1.5
env:
- name: CGPU_DISABLE # Set to "true" to disable memory isolation
value: "true"
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: 3 # Requests 3 GiB of GPU memory for scheduling
workingDir: /root
restartPolicy: Never
Campos principais nesta configuração:
|
Campo |
Descrição |
|
|
Desativa a aplicação do isolamento de memória. O contêiner visualiza toda a memória física da GPU em vez de apenas a cota alocada. |
|
|
Solicita 3 GiB de memória GPU ao agendador cGPU. Este valor serve para agendamento e rastreamento de alocação, não para imposição de limites quando |
Etapa 3: Verificar o agendamento de GPU
Após o agendamento do Job, confirme se o agendador cGPU alocou a memória GPU solicitada em um nó:
kubectl inspect cgpu
A saída esperada é semelhante a:
NAME IPADDRESS GPU0(Allocated/Total) GPU Memory(GiB)
cn-beijing.192.16x.x.xx1 192.16x.x.xx1 0/15 0/15
cn-beijing.192.16x.x.xx2 192.16x.x.xx2 0/15 0/15
cn-beijing.192.16x.x.xx3 192.16x.x.xx3 3/15 3/15
---------------------------------------------------------------------
Allocated/Total GPU Memory In Cluster:
3/45 (6%)
Analise os campos abaixo para confirmar que o agendamento foi bem-sucedido:
GPU0(Allocated/Total)emcn-beijing.192.16x.x.xx3: Exibe3/15, confirmando que 3 GiB foram alocados do total de 15 GiB deste nó.Allocated/Total GPU Memory In Cluster: Mostra3/45 (6%), indicando que a alocação no nível do cluster foi atualizada corretamente.
Confirmar que o isolamento de memória está desativado
Utilize um dos métodos a seguir para validar se o contêiner consegue acessar toda a memória física da GPU, e não apenas a cota alocada.
Método 1: Consultar o log do aplicativo
kubectl logs disable-cgpu-xxxx --tail=1
A saída esperada é semelhante a:
2020-08-25 08:14:54.927965: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1326] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 15024 MB memory) -> physical GPU (device: 0, name: Tesla V100-SXM2-16GB, pci bus id: 0000:00:07.0, compute capability: 7.0)
Valide os seguintes valores:
15024 MB memory: O contêiner identifica 15.024 MiB — correspondente à memória física total da GPU, e não à cota de 3 GiB. Caso o isolamento de memória estivesse ativo, este valor mostraria 3 GiB.
Método 2: Executar nvidia-smi dentro do contêiner
kubectl exec disable-cgpu-xxxx nvidia-smi
A saída esperada é semelhante a:
Tue Aug 25 08:23:33 2020
+-----------------------------------------------------------------------------+
| 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 V100-SXM2... Off | 00000000:00:07.0 Off | 0 |
| N/A 33C P0 55W / 300W | 15453MiB / 16130MiB | 1% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
+-----------------------------------------------------------------------------+
Verifique estes valores:
15453MiB / 16130MiB: O contêiner está utilizando 15.453 MiB do total de 16.130 MiB disponíveis no host. Se o isolamento de memória estivesse habilitado, o uso ficaria restrito a 3 GiB.