Algumas cargas de trabalho de IA/ML gerenciam a memória da GPU por meio de APIs no nível do framework ou lógica de alocação personalizada. Nesses casos, a camada de isolamento de memória da GPU do ACK torna-se redundante e pode interferir no gerenciamento de memória da própria aplicação. Este tópico mostra como ative o compartilhamento de GPU em um node pool sem instale o módulo de isolamento de memória da GPU.
Utilize este modo apenas quando sua aplicação já gerencie internamente os limites de memória da GPU.
Caso precise tanto do compartilhamento de GPU quanto do isolamento de memória, consulte Configure compartilhamento de GPU com isolamento de memória.
Pré-requisitos
Antes de começar, verifique se você possui:
Um cluster ACK Pro. Consulte Crie um cluster ACK Pro
O componente de agendamento compartilhado de GPU instalado. Consulte Instale o componente de agendamento compartilhado de GPU
Como funciona
Ao ative o compartilhamento de GPU sem isolamento de memória:
O rótulo de nó
ack.node.gpu.schedule=shareativa o compartilhamento de GPU no node pool.O limite de recurso
aliyun.com/gpu-meminforma ao agendador quanta memória de GPU o pod solicita. O ACK utiliza esse valor para decisões de agendamento e cálculos de proporção, mas não o impõe como um limite rígido de memória.O pod visualiza toda a memória física da GPU (por exemplo, 16.384 MiB em uma V100). O ACK injeta duas variáveis de ambiente —
ALIYUN_COM_GPU_MEM_CONTAINEReALIYUN_COM_GPU_MEM_DEV— que a aplicação usa para calcular sua parcela e permanecer dentro do limite solicitado.
Etapa 1: Crie um node pool
Faça login no console do ACK e clique em Clusters no painel de navegação à esquerda.
Clique no nome do cluster e escolha Nodes > Node Pools no painel de navegação à esquerda.
Na página Node Pools, clique em Create Node Pool.
-
Na caixa de diálogo Create Node Pool, configure os parâmetros a seguir e clique em Confirm Order. Para todos os outros parâmetros, consulte Crie e gerencie um node pool.
Defina
ack.node.gpu.schedule=shareativa o compartilhamento de GPU no node pool sem instale o módulo de isolamento de memória da GPU. Para ver todos os rótulos de agendamento de GPU suportados, consulte Rótulos para ative políticas de agendamento de GPU .Parâmetro
Valor
Instance type
Defina Architecture como GPU-accelerated e selecione um ou mais tipos de instância com GPU. Este exemplo utiliza instâncias V100.
Expected nodes
Defina como
0caso não queira provisionar nós imediatamente.Node labels
Clique em Add Label, defina Key como
ack.node.gpu.schedulee defina Value comoshare.
Etapa 2: Envie um job
Faça login no console do ACK e clique em Clusters no painel de navegação à esquerda.
Clique no nome do cluster e escolha Workloads > Jobs no painel de navegação à esquerda.
-
Clique em Create from YAML, cole o YAML a seguir na seção Template e clique em Create.
apiVersion: batch/v1 kind: Job metadata: name: tensorflow-mnist-share spec: parallelism: 1 template: metadata: labels: app: tensorflow-mnist-share spec: containers: - name: tensorflow-mnist-share 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: 4 # Request 4 GiB of GPU memory workingDir: /root restartPolicy: NeverO limite
aliyun.com/gpu-mem: 4solicita 4 GiB de memória de GPU para fins de agendamento. Neste modo, ele não impede que outros pods utilizem a memória restante da GPU no mesmo dispositivo.
Verifique a configuração
Para confirme que o compartilhamento de GPU está ativo sem isolamento de memória, verifique se o pod enxerga toda a memória física da GPU, e não apenas a quantidade solicitada.
Na página Clusters, clique no nome do cluster e escolha Workloads > Pods no painel de navegação à esquerda.
-
Na coluna Actions do pod (por exemplo,
tensorflow-mnist-share-***), clique em Terminal e execute:nvidia-smiSaída esperada:
Wed Jun 14 06:45:56 2023 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 515.105.01 Driver Version: 515.105.01 CUDA Version: 11.7 | |-------------------------------+----------------------+----------------------+ | 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 35C P0 59W / 300W | 334MiB / 16384MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| +-----------------------------------------------------------------------------+O que verificar: O denominador no campo Memory-Usage deve exibir a memória física total da GPU —
16384MiBpara uma V100. Se aparecer4096MiBem vez disso, o isolamento de memória da GPU está ativo neste nó. -
Verifique as variáveis de ambiente que o ACK injeta no pod:
ALIYUN_COM_GPU_MEM_CONTAINER=4 # GPU memory requested by this pod (GiB) ALIYUN_COM_GPU_MEM_DEV=16 # Total physical GPU memory (GiB)A aplicação utiliza essas variáveis para calcular sua taxa de uso de memória e permanecer dentro do limite solicitado:
percentage = ALIYUN_COM_GPU_MEM_CONTAINER / ALIYUN_COM_GPU_MEM_DEV = 4 / 16 = 0.25