Executando Aplicativos em Nós Baseados em GPU
Descubra como executar aplicativos em nós de trabalho baseados em GPU em clusters criados usando o Kubernetes Engine (OKE).
Para executar aplicativos em nós de trabalho baseados em GPU, selecione uma forma de GPU e uma imagem de GPU compatível para os nós gerenciados em um pool de nós gerenciados ou para nós autogerenciados.
A forma determina o número de CPUs e a quantidade de memória alocada para cada nó. Entre as formas que você pode selecionar estão as formas GPU (Unidade de processamento gráfico), com as próprias GPUs em placas gráficas NVIDIA. Originalmente destinado à manipulação de imagens e gráficos, as GPUs são muito eficientes no processamento de grandes blocos de dados em paralelo. Esse recurso torna as GPUs uma boa opção ao implantar aplicativos com uso intenso de dados. Para obter mais informações sobre as formas de GPU a serem selecionadas para nós de trabalho, consulte Formas de GPU suportadas pelo Kubernetes Engine (OKE).
A enorme funcionalidade de computação paralela das GPUs NVIDIA é acessada usando bibliotecas CUDA (Compute Unified Device Architecture). Diferentes GPUs (por exemplo, NVIDIA® Tesla VoltaTM, NVIDIA® Tesla PascalTM) exigem versões específicas das bibliotecas CUDA. Ao selecionar uma forma de GPU para um pool de nós gerenciados ou nó autogerenciado, você também deve selecionar uma imagem de GPU do Oracle Linux compatível que tenha as bibliotecas CUDA pré-instaladas. Os nomes das imagens compatíveis incluem 'GPU'.
Você pode selecionar uma forma de GPU e uma imagem compatível para nós de trabalho em um cluster das seguintes maneiras:
- Nós gerenciados: Usando o Kubernetes Engine para criar um pool de nós gerenciados e selecionando uma forma de GPU (e imagem compatível) para o pool de nós. Todos os nós de trabalho no pool de nós gerenciados têm a forma de GPU. Para obter mais informações, consulte Criando um Pool de Nós Gerenciados.
- Nós autogerenciados: Usando o serviço Compute para criar uma instância de computação (ou pool de instâncias) para hospedar um nó autogerenciado, selecionando uma forma de GPU (e imagem compatível) para a instância e especificando o cluster do Kubernetes ao qual a instância será adicionada. Você só pode adicionar nós autogerenciados a clusters aprimorados. Para obter mais informações, consulte Trabalhando com Nós Autogerenciados.
Ao implantar um aplicativo em um cluster que você criou com o Kubernetes Engine, especifique no pod o número de recursos de GPU necessários. Para implantar o aplicativo, o kube-scheduler determina qual nó tem os recursos necessários. Quando um pod de aplicativo deve ser executado em um nó com uma forma de GPU, o seguinte é montado no pod:
- o número solicitado de dispositivos GPU
- a biblioteca CUDA do nó
O aplicativo é efetivamente isolado dos diferentes tipos de GPU. Como resultado, as bibliotecas CUDA para diferentes GPUs não precisam ser incluídas no contêiner de aplicativos, garantindo que o contêiner permaneça portátil.
Observe o seguinte:
- Você pode especificar formas de GPU para pools de nós gerenciados em clusters que executam o Kubernetes versão 1.19.7 ou mais recente. Não especifique uma forma de GPU para pools de nós gerenciados em clusters que executam versões anteriores do Kubernetes.
- Você pode usar a Console, a API ou a CLI para especificar uma imagem de GPU para uso em uma forma de GPU. Você também pode usar a API ou a CLI para especificar uma imagem não GPU para uso em uma forma de GPU.
- Após criar um pool de nós gerenciado com uma forma de GPU, não é possível alterar o pool de nós para ter uma forma não GPU. Da mesma forma, você não pode alterar um pool de nós gerenciados com uma forma não GPU para ter uma forma de GPU.
- As formas de GPU não estão necessariamente disponíveis em todos os domínios de disponibilidade.
- Você pode especificar formas de GPU para pools de nós gerenciados em clusters que são nativos da VCN (ou seja, clusters que têm pontos finais de API do Kubernetes hospedados em uma sub-rede da sua VCN). Não especifique uma forma de GPU para pools de nós gerenciados em um cluster se o ponto final da API do Kubernetes do cluster não estiver integrado à sua VCN. Consulte Migrando para Clusters Nativos de VCN.
- Você pode executar aplicativos em nós de trabalho de GPU em pools de nós gerenciados, mas não em pools de nós virtuais.
Definindo um pod para ser executado somente em nós que têm uma GPU
O arquivo de configuração a seguir define um pod a ser executado em qualquer nó do cluster que tenha um recurso de GPU disponível (independentemente do tipo de GPU):
apiVersion: v1
kind: Pod
metadata:
name: test-with-gpu-workload
spec:
restartPolicy: OnFailure
containers:
- name: cuda-vector-add
image: k8s.gcr.io/cuda-vector-add:v0.1
resources:
limits:
nvidia.com/gpu: 1
Definindo um pod para ser executado somente em nós que não têm uma GPU
O arquivo de configuração a seguir define um pod a ser executado apenas nos nós do cluster que não têm uma GPU:
apiVersion: v1
kind: Pod
metadata:
name: test-with-non-gpu-workload
spec:
restartPolicy: OnFailure
containers:
- name: test-with-non-gpu-workload
image: "oraclelinux:8"
Formas de GPU suportadas pelo Kubernetes Engine (OKE)
O Kubernetes Engine suporta diferentes formas de GPU para nós e pools de nós gerenciados e para nós autogerenciados.
Observe que, devido a limites de serviço e cotas de compartimento, algumas das formas de GPU suportadas podem não estar disponíveis em sua tenancy específica.
Formas de GPU suportadas para pools de nós gerenciados e nós gerenciados
Para pools de nós gerenciados e nós gerenciados, o Kubernetes Engine suporta as seguintes formas de GPU:
-
Formas de GPU de Máquina Virtual (VM) suportadas pelo Kubernetes Engine para pools de nós gerenciados e nós gerenciados:
- VM.GPU.A10.1, VM.GPU.A10.2
- VM.GPU.A100.40G.1, VM.GPU.A100.40G.2, VM.GPU.A100.40G.4, VM.GPU.A100.40G.8
- VM.GPU.A100.80G.1, VM.GPU.A100.80G.2, VM.GPU.A100.80G.4, VM.GPU.A100.80G.8
- VM.GPU.A100. B40G.1, VM.GPU.A100. B40G.2, VM.GPU.A100. B40G.4
- VM.GPU.GU1.1, VM.GPU.GU1.2,
- VM.GPU.L40S.1, VM.GPU.L40S.2
- VM.GPU2.1
- VM.GPU3.1, VM.GPU3.2, VM.GPU3.4
-
Formas de GPU Bare Metal (BM) suportadas pelo Kubernetes Engine para pools de nós gerenciados e nós gerenciados:
- BM.GPU.A10.4
- BM.GPU.A100-v2.8
- BM.GPU.B4.8
- BM.GPU.GM4.8
- BM.GPU.GU1.4
- BM.GPU.H100.8
- BM.GPU.L40S.4
- BM.GPU.T1.2
- BM.GPU.T1-2,4
- BM.GPU2.2
- BM.GPU3.8
- BM.GPU4.8
Observe que, devido a limites de serviço e cotas de compartimento, algumas das formas de GPU suportadas podem não estar disponíveis em sua tenancy específica.
Formas de GPU suportadas para nós autogerenciados
Para nós autogerenciados, o Kubernetes Engine suporta as formas de GPU disponíveis para a imagem do OKE Oracle Linux 7 (OL7) ou do Oracle Linux 8 (OL8) selecionada quando você cria a instância de computação para hospedar o nó autogerenciado.
Observe que, devido a limites de serviço e cotas de compartimento, algumas das formas de GPU suportadas podem não estar disponíveis em sua tenancy específica.