O Remote Direct Memory Access (RDMA) transfere dados diretamente entre a memória de duas máquinas, sem passar pelo sistema operacional em ambos os lados. Isso elimina a sobrecarga de replicação de memória e troca de contexto, reduzindo o uso da CPU e melhorando o throughput e a latência da rede para cargas de trabalho de treinamento de IA, computação de alto desempenho (HPC) e armazenamento distribuído.
Este guia explica como instale o plugin de dispositivo RDMA no Node Lingjun e implantar pods que utilizam RDMA.
Escolha o modo de rede
Antes de começar, decida qual modo de rede seus pods utilizarão. Essa escolha define se o IPv6 é necessário no cluster bare metal Lingjun subjacente.
|
Modo |
Descrição |
IPv6 obrigatório no cluster bare metal Lingjun |
|
Modo hostNetwork |
O pod compartilha a pilha de rede do nó host |
Não |
|
Modo non-hostNetwork |
O pod possui seu próprio endereço IP |
Sim |
Se seus pods usarem o modo non-hostNetwork, configure o cluster bare metal Lingjun que hospeda o Node Lingjun com IPv6. Selecione o modo IPv6 ao criar esse cluster. Para ative essa configuração, enviando um ticket para entrar em contato com a equipe do Lingjun.
Como funciona
O plugin de dispositivo RDMA do ACK (ack-rdma-device-plugin) executa como um DaemonSet em cada Node Lingjun com RDMA habilitado. Ele registra o recurso estendido rdma/hca no Kubernetes para que os pods solicitem acesso ao RDMA pelos limites de recursos padrão.
Pré-requisitos
Antes de iniciar, verifique se você tem:
Um cluster gerenciado ACK Pro com pelo menos um Node Lingjun equipado com hardware RDMA
(Para o modo non-hostNetwork) Um cluster bare metal Lingjun configurado com IPv6
Instale o plugin de dispositivo RDMA
Na página Clusters, clique em no nome do seu cluster. No painel de navegação à esquerda, clique em em Add-ons.
-
Na página Add-ons, clique em na aba Others. Localize o ack-rdma-device-plugin e instale-o. Configure o seguinte parâmetro durante a instalação:
ImportanteSe você ative o RDMA para o modo non-hostNetwork, mas o cluster bare metal Lingjun não usar IPv6, a configuração do RDMA não terá efeito.
Parâmetro
Descrição
Enable RDMA for non-hostNetwork
Controla quais pods podem usar o RDMA. Defina como
False (cleared)para restringir o RDMA aos pods no modo hostNetwork. Defina comoTrue (selected)para permitir também pods no modo non-hostNetwork — exige que o cluster bare metal Lingjun use IPv6.
Verifique a configuração
Após a instalação, execute as verificações abaixo para confirme a disponibilidade do RDMA em seus nós.
Confirme a execução do DaemonSet
kubectl get ds ack-rdma-dp-ds -n kube-system
Saída esperada:
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
ack-rdma-dp-ds 2 2 2 2 2 <none> xxh
Todos os nós com RDMA habilitado aparecem nas contagens DESIRED, CURRENT e READY. Se o valor de READY for inferior a DESIRED, verifique os logs do pod do DaemonSet em busca de erros.
Validar a exposição do recurso RDMA pelos nós
kubectl get node e01-cn-xxxx -oyaml
Procure por rdma/hca tanto em allocatable quanto em capacity. O valor 1k confirma o registro dos recursos RDMA e sua disponibilidade para solicitação pelos pods.
Saída esperada:
...
allocatable:
cpu: 189280m
ephemeral-storage: "3401372677838"
hugepages-1Gi: "0"
hugepages-2Mi: "0"
memory: 2063229768Ki
nvidia.com/gpu: "8"
pods: "64"
rdma/hca: 1k
capacity:
cpu: "192"
ephemeral-storage: 3690725568Ki
hugepages-1Gi: "0"
hugepages-2Mi: "0"
memory: 2112881480Ki
nvidia.com/gpu: "8"
pods: "64"
rdma/hca: 1k
...
Implantar um pod com RDMA
Para conceder acesso ao RDMA a um pod, solicite o recurso rdma/hca em seus limits. Uma solicitação de rdma/hca: 1 é suficiente.
O pod requer duas capacidades do Linux (IPC_LOCK e SYS_RESOURCE) e um volume de memória compartilhada em /dev/shm. A capacidade IPC_LOCK permite o bloqueio de memória para transferências zero-copy, enquanto SYS_RESOURCE autoriza o processo a defina limites de recursos. Sem essas permissões, as operações RDMA falharão ou apresentarão baixo desempenho.
O manifesto de Job a seguir apresenta uma configuração completa de RDMA:
apiVersion: batch/v1
kind: Job
metadata:
name: hps-benchmark
spec:
parallelism: 1
template:
spec:
containers:
- name: hps-benchmark
image: **
command:
- sh
- -c
- |
python /workspace/wdl_8gpu_outbrain.py
resources:
limits:
nvidia.com/gpu: 8
rdma/hca: 1 # Request one RDMA HCA device
workingDir: /root
volumeMounts:
- name: shm
mountPath: /dev/shm # Shared memory required for RDMA operations
securityContext:
capabilities:
add:
- SYS_RESOURCE # Allows the process to set resource limits (required for RDMA)
- IPC_LOCK # Allows memory locking (required for zero-copy RDMA transfers)
restartPolicy: Never
volumes:
- name: shm
emptyDir:
medium: Memory
sizeLimit: 8Gi
hostNetwork: true # Remove this line if using non-hostNetwork mode with IPv6
tolerations:
- operator: Exists
Caso tenha ativado o RDMA para o modo non-hostNetwork, remova a linha hostNetwork: true. Pods sem esse campo operam no modo non-hostNetwork e ainda acessam o RDMA pelo plugin.