Em alguns cenários, o compartilhamento de GPU sem isolamento de memória da GPU pode ser necessário. Certas aplicações, como as desenvolvidas em Java, permitem especificar a quantidade máxima de memória da GPU que podem utilizar. Nesses casos, o uso do isolamento de memória da GPU pode causar exceções. Para resolver esse problema, desative o isolamento de memória da GPU nos nós que suportam compartilhamento de GPU. Este tópico descreve como configurar o compartilhamento de GPU sem isolamento de memória da GPU.
Pré-requisitos
Um cluster dedicado do Container Service for Kubernetes (ACK) com nós acelerados por GPU foi criado. Para mais informações, consulte Crie um cluster dedicado ACK com nós acelerados por GPU.
O componente ack-cgpu está instalado. Para mais informações, consulte Instale o componente ack-cgpu.
Etapa 1: Crie um node pool
Siga os passos abaixo para criar um node pool com o isolamento de memória da GPU desativado.
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster que deseja gerenciar e escolha 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 e clique em Confirm Order.
A tabela a seguir descreve os principais parâmetros. Para mais informações, consulte Crie um node pool.
Expected Nodes: Especifique o número inicial de nós no node pool. Caso não queira adicionar nós ao node pool, defina este parâmetro como 0.
-
Node Label: Adicione rótulos de compartilhamento de GPU aos nós. Para mais detalhes sobre os rótulos, consulte Rótulos para ativar políticas de agendamento de GPU e métodos para alterar valores de rótulos.
Clique no ícone
, defina Key como gpusharee, em seguida, defina Value comotrue.
Etapa 2: Envie um job
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 Jobs, clique em Create from YAML. No editor de código da página Create, cole o conteúdo a seguir 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: NeverDescrição do código:
O conteúdo YAML define um job do TensorFlow. O job cria um pod e esse pod solicita 4 GiB de memória da GPU.
Para solicitar 4 GiB de memória da GPU, defina
aliyun.com/gpu-mem: 4abaixo deresources.limits.
Etapa 3: Verifique a configuração
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 Pods, escolha na coluna Actions do pod criado na Etapa 2 para fazer login no pod.
-
Execute o comando a seguir para consultar as informações de memória da GPU:
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 | |=============================================================================| +-----------------------------------------------------------------------------+A saída indica que a GPU alocada ao pod fornece 16.384 MiB de memória. Neste exemplo, o modelo da GPU é V100. Se o isolamento de memória da GPU estivesse ativado, o valor seria igual à quantidade de memória solicitada pelo pod, ou seja, 4 GiB. Isso confirma que a configuração está em vigor.
A aplicação precisa ler as informações de alocação de memória da GPU nas seguintes variáveis de ambiente.
ALIYUN_COM_GPU_MEM_CONTAINER=4 # The GPU memory available for the pod. ALIYUN_COM_GPU_MEM_DEV=16 # The total GPU memory provided by each GPU.Caso a aplicação necessite da proporção de memória da GPU disponível, utilize a fórmula a seguir para calcular a razão entre a memória da GPU usada pela aplicação e a memória total fornecida pela GPU, com base nas variáveis de ambiente anteriores:
percetange = ALIYUN_COM_GPU_MEM_CONTAINER / ALIYUN_COM_GPU_MEM_DEV = 4 / 16 = 0.25