A localidade NUMA altera a taxa de alimentação do acelerador, porque o pré-processamento no anfitrião e as transferências são mais rápidas quando os threads da CPU, as páginas de memória e o dispositivo partilham um caminho próximo.
Numa estação de trabalho doméstica com vários sockets, cada núcleo da CPU pode endereçar toda a RAM, mas o custo de acesso não é uniforme. Uma GPU ou outro acelerador está normalmente ligado através do complexo raiz PCIe de um dos sockets. Se o pré-processamento for executado noutro nó e os buffers forem alocados aí, os dados poderão atravessar a interligação entre sockets antes de chegarem ao dispositivo, acrescentando contenção e latência variável.
A NUMA torna observável a distância até à memória do anfitrião
Um sistema NUMA divide as CPUs e a memória em nós com diferentes distâncias de acesso. O Linux aloca normalmente uma página no nó local à CPU que a acede pela primeira vez. A colocação dos threads durante o carregamento do modelo ou a preparação dos dados de entrada pode, portanto, determinar onde os buffers de grandes dimensões ficam fisicamente armazenados.
A documentação sobre políticas de memória NUMA do Linux descreve políticas de tarefa, VMA, partilhadas, de ligação, preferenciais e de interleaving. Também salienta que as políticas afetam principalmente as páginas alocadas depois de a política ser instalada, o que torna importante a ordem de inicialização. Esta distinção continua a ser importante em condições domésticas realistas de funcionamento.
Na inferência local, o caminho crítico pode incluir tokenização, descodificação de imagens, preparação de tensores, buffers fixados e transferências para o dispositivo. A colocação remota acrescenta um estrangulamento no anfitrião, mesmo quando o próprio acelerador indica capacidade de computação não utilizada. O estado intermédio deve continuar visível durante o diagnóstico e a revisão posteriores.
A topologia PCIe liga um acelerador a determinados nós da CPU
O caminho mais curto entre o anfitrião e o dispositivo passa normalmente pelo socket da CPU cujo complexo raiz controla o acelerador. Associar os threads da CPU do processo de trabalho e a política de alocação a essa zona pode melhorar a largura de banda e reduzir a variabilidade, sobretudo quando entradas grandes ou transferências frequentes mantêm a ligação ocupada.
As orientações NUMA da CUDA da NVIDIA incluem recomendações sobre NUMA e alertam para o facto de o balanceamento automático poder degradar aplicações GPU em alguns casos. Recomendam inspecionar a topologia e ajustar a política ao nó real, em vez de assumir que determinados números de nó são os melhores.
A colocação é um problema de grafos, não uma regra segundo a qual o nó zero é o mais rápido. A associação correta depende da cablagem da placa-mãe, da configuração do IOMMU, de outros dispositivos e de saber se vários processos de trabalho competem pelos mesmos canais de memória ou ligações PCIe.
A associação pode prejudicar o desempenho quando a carga de trabalho utiliza mais do que um nó
Associar estritamente a memória a um único nó pode esgotar a respetiva largura de banda ou capacidade, enquanto os outros nós permanecem inativos. Um pipeline pode utilizar uma GPU próxima de um socket, mas também uma placa de captura, um dispositivo NVMe ou um segundo acelerador próximo de outro. Uma colocação pode otimizar as transferências e, ao mesmo tempo, tornar o pré-processamento ou o armazenamento mais lentos.
O projeto GPU affinity da NVIDIA associa processos aos núcleos da CPU relacionados com as GPUs e salienta que a afinidade correta pode estabilizar o desempenho. Os seus vários modos ilustram por que motivo os âmbitos exclusivo, contíguo, de socket e NUMA se adequam a diferentes cargas de trabalho multiprocessos.
O limite da falha está em generalizar um teste comparativo de um único dispositivo para todo o servidor. Não associe processos cegamente em sistemas de memória integrada, máquinas com um único nó ou pipelines que abrangem vários dispositivos; meça a latência de ponta a ponta, a largura de banda e a contenção com o nível de concorrência pretendido.
Faça uma avaliação comparativa da topologia, não apenas do acelerador
Mapeie os nós da CPU, a capacidade de memória, os dispositivos PCIe e a localidade dos aceleradores. Execute a mesma carga de trabalho de inferência com a colocação predefinida, associação apenas à CPU, associação apenas à memória e associação correspondente entre CPU e memória. Registe a largura de banda entre o anfitrião e o dispositivo, a colocação das páginas, os tokens por segundo e a latência p95.
Se os fragmentos do modelo vierem de armazenamento de rede, como em armazenamento de modelos em rede, separe o tempo de leitura dos ficheiros da colocação das páginas e da transferência para o dispositivo. Aqueça os mesmos dados em cada execução e repita depois com os processos de trabalho concorrentes previstos, para revelar a contenção dos canais de memória.
Adote a associação apenas se a topologia correspondente melhorar de forma repetível os resultados de ponta a ponta sem privar outro serviço de recursos. Se os ganhos desaparecerem após o aquecimento ou se inverterem com a concorrência, deixe a colocação flexível ou isole apenas os threads e buffers críticos para as transferências.
Centro de Tecnologia e IA
Mais para Ler

Calibração da pontuação de pesquisa privada: como a similaridade bruta se transforma num indicador de confiança utilizável
Saiba por que razão a similaridade do cosseno não é confiança, como as consultas rotuladas calibram as pontuações e como monitorizar os limiares quando...

Mapeamento de ficheiros de modelos na memória: como as páginas partilhadas reduzem a utilização duplicada de RAM
Compreenda como as páginas de modelos mapeados são paginadas e partilhadas, por que motivo o RSS pode induzir em erro e que caches e...

Registos de auditoria de IA privada: como os registos de eventos reconstituem as decisões dos agentes
Saiba o que um registo de auditoria de agentes deve captar, por que motivo os registos comuns são incompletos e como reproduzir um fluxo...

