Compreendendo a arquitetura de GPU para otimização de inferência LLM

Publicados: 2024-04-02
Mostrar índice
Introdução aos LLMs e a importância da otimização de GPU
Fundamentos da arquitetura de GPU para LLMs – Conheça os componentes internos da sua GPU
Multiprocessadores de streaming
Cache L2
Largura de banda de memória
Memória DRAM
Comparando placas GPU para tarefas LLM
Conclusão
Terminologia usada

Introdução aos LLMs e a importância da otimização de GPU

Na era atual de avanços no processamento de linguagem natural (PNL), os Grandes Modelos de Linguagem (LLMs) surgiram como ferramentas poderosas para uma infinidade de tarefas, desde a geração de texto até respostas a perguntas e resumo. Estes são mais do que um gerador de token provável. No entanto, a crescente complexidade e tamanho destes modelos colocam desafios significativos em termos de eficiência e desempenho computacional.

Neste blog, nos aprofundamos nas complexidades da arquitetura de GPU, explorando como diferentes componentes contribuem para a inferência do LLM. Discutiremos as principais métricas de desempenho, como largura de banda de memória e utilização de núcleo tensor, e elucidaremos as diferenças entre várias placas GPU, permitindo que você tome decisões informadas ao selecionar hardware para suas tarefas de modelos de linguagem grandes.

Em um cenário em rápida evolução, onde as tarefas de PNL exigem recursos computacionais cada vez maiores, otimizar o rendimento de inferência do LLM é fundamental. Junte-se a nós enquanto embarcamos nesta jornada para desbloquear todo o potencial dos LLMs por meio de técnicas de otimização de GPU e mergulhar em várias ferramentas que nos permitem melhorar efetivamente o desempenho.

Fundamentos da arquitetura de GPU para LLMs – Conheça os componentes internos da sua GPU

Com a natureza de realizar computação paralela altamente eficiente, as GPUs se tornam o dispositivo preferido para executar todas as tarefas de aprendizado profundo, por isso é importante compreender a visão geral de alto nível da arquitetura da GPU para compreender os gargalos subjacentes que surgem durante o estágio de inferência. As placas Nvidia são preferidas devido ao CUDA (Compute Unified Device Architecture), uma plataforma de computação paralela proprietária e API desenvolvida pela NVIDIA, que permite aos desenvolvedores especificar o paralelismo em nível de thread na linguagem de programação C, fornecendo acesso direto ao conjunto de instruções virtuais da GPU e paralelo elementos computacionais.

Para o contexto, usamos uma placa NVIDIA para explicação porque ela é amplamente preferida para tarefas de Deep Learning, conforme já mencionado, e poucos outros termos como Tensor Cores são aplicáveis ​​a isso.

Vamos dar uma olhada na placa GPU, aqui na imagem podemos ver três partes principais e (mais uma parte oculta principal) de um dispositivo GPU

  1. SM (multiprocessadores de streaming)
  2. Cache L2
  3. Largura de banda de memória
  4. Memória Global (DRAM)

Assim como sua CPU-RAM funciona em conjunto, a RAM é o local para residência de dados (ou seja, memória) e a CPU para tarefas de processamento (ou seja, processo). Em uma GPU, a memória global de alta largura de banda (DRAM) contém os pesos do modelo (por exemplo, LLAMA 7B) que são carregados na memória e, quando necessário, esses pesos são transferidos para a unidade de processamento (ou seja, processador SM) para cálculos.

Multiprocessadores de streaming

Um multiprocessador de streaming ou SM é uma coleção de unidades de execução menores chamadas núcleos CUDA (plataforma de computação paralela proprietária da NVIDIA), juntamente com unidades funcionais adicionais responsáveis ​​pela busca, decodificação, agendamento e envio de instruções. Cada SM opera de forma independente e contém seu próprio arquivo de registro, memória compartilhada, cache L1 e unidade de textura. Os SMs são altamente paralelizados, permitindo-lhes processar milhares de threads simultaneamente, o que é essencial para alcançar alto rendimento em tarefas de computação GPU. O desempenho do processador é geralmente medido em FLOPS, o não. de operações flutuantes que ele pode realizar a cada segundo.

As tarefas de aprendizado profundo consistem principalmente em operações de tensor, ou seja, multiplicação de matriz-matriz. A Nvidia introduziu núcleos de tensor em GPUs de geração mais recente, que são projetados especificamente para executar essas operações de tensor de maneira altamente eficiente. Conforme mencionado, os núcleos tensores são úteis quando se trata de tarefas de aprendizado profundo e, em vez dos núcleos CUDA, devemos verificar os núcleos tensores para determinar a eficiência com que uma GPU pode realizar o treinamento/inferência do LLM.

Cache L2

O cache L2 é uma memória de alta largura de banda compartilhada entre SMs com o objetivo de otimizar o acesso à memória e a eficiência da transferência de dados dentro do sistema. É um tipo de memória menor e mais rápido que reside mais próximo das unidades de processamento (como multiprocessadores de streaming) em comparação com a DRAM. Ajuda a melhorar a eficiência geral do acesso à memória, reduzindo a necessidade de acessar a DRAM mais lenta para cada solicitação de memória.

Largura de banda de memória

Portanto, o desempenho depende da rapidez com que podemos transferir os pesos da memória para o processador e da eficiência e rapidez com que o processador pode processar os cálculos fornecidos.

Quando a capacidade de computação é maior/mais rápida que a taxa de transferência de dados entre a memória para o SM, o SM ficará sem processamento de dados e, portanto, a computação será subutilizada. Esta situação em que a largura de banda da memória é menor que a taxa de consumo é conhecida como fase vinculada à memória . É muito importante observar isso, pois é o gargalo predominante no processo de inferência.

Pelo contrário, se a computação estiver demorando mais tempo para ser processada e se mais dados forem enfileirados para computação, esse estado será uma fase vinculada à computação .

Para aproveitar totalmente a GPU, devemos estar em um estado limitado pela computação enquanto fazemos os cálculos ocorridos da maneira mais eficiente possível.

Memória DRAM

A DRAM serve como memória primária em uma GPU, fornecendo um grande conjunto de memória para armazenar dados e instruções necessárias para a computação. Normalmente é organizado em uma hierarquia, com vários bancos de memória e canais para permitir acesso em alta velocidade.

Para a tarefa de inferência, a DRAM da GPU determina o tamanho do modelo que podemos carregar e os FLOPS de computação e a largura de banda determinam a taxa de transferência que podemos obter.

Comparando placas GPU para tarefas LLM

Para obter informações sobre o número de núcleos tensores e velocidade da largura de banda, pode-se consultar o white paper divulgado pelo fabricante da GPU. Aqui está um exemplo,

RTX A6000 RTX4090 RTX3090
Tamanho da memória 48GB 24GB 24GB
Tipo de memória GDDR6 GDDR6X
Largura de banda 768,0GB/s 1008 GB/seg 936,2GB/s
Núcleos CUDA/GPU 10752 16384 10496
Núcleos tensoriais 336 512 328
Cache L1 128 KB (por SM) 128 KB (por SM) 128 KB (por SM)
FP16 Não Tensor 38,71 TFLOPS (1:1) 82,6 35,58 TFLOPS (1:1)
FP32 Não Tensor 38,71 TFLOPS 82,6 35,58 TFLOPS
FP64 Não Tensor 1.210 GLOPS (1:32) 556,0 GLOPS (1:64)
Tensor de pico FP16 TFLOPS com acúmulo de FP16 154,8/309,6 330,3/660,6 142/284
Pico FP16 Tensor TFLOPS com FP32 Acumulado 154,8/309,6 165,2/330,4 71/142
Tensor TFLOPS de pico BF16 com FP32 154,8/309,6 165,2/330,4 71/142
Tensor TF32 de pico TFLOPS 77,4/154,8 82,6/165,2 35,6/71
Tensor de pico INT8 TOPS 309,7/619,4 660,6/1321,2 284/568
Tensor de pico INT4 TOPS 619,3/1238,6 1321.2/2642.4 568/1136
Cache L2 6 MB 72MB 6 MB
Barramento de memória 384 bits 384 bits 384 bits
TMUs 336 512 328
ROPs 112 176 112
Contagem SM 84 128 82
Núcleos RT 84 128 82

Aqui podemos ver que FLOPS é mencionado especificamente para operações de Tensor. Esses dados nos ajudarão a comparar as diferentes placas GPU e selecionar a mais adequada para nosso caso de uso. Pela tabela, embora o A6000 tenha o dobro da memória do 4090, os flops tensores e a largura de banda da memória do 4090 são melhores em números e, portanto, mais poderosos para a inferência de modelos de linguagem grande.

Leia mais: Nvidia CUDA em 100 segundos

Conclusão

No campo de rápido avanço da PNL, a otimização de Large Language Models (LLMs) para tarefas de inferência tornou-se uma área crítica de foco. Conforme exploramos, a arquitetura das GPUs desempenha um papel fundamental na obtenção de alto desempenho e eficiência nessas tarefas. Compreender os componentes internos das GPUs, como multiprocessadores de streaming (SMs), cache L2, largura de banda de memória e DRAM, é essencial para identificar os possíveis gargalos nos processos de inferência LLM.

A comparação entre diferentes placas GPU NVIDIA – RTX A6000, RTX 4090 e RTX 3090 – revela diferenças significativas em termos de tamanho de memória, largura de banda e número de núcleos CUDA e Tensor, entre outros fatores. Essas distinções são cruciais para tomar decisões informadas sobre qual GPU é mais adequada para tarefas específicas de LLM. Por exemplo, embora o RTX A6000 ofereça um tamanho de memória maior, o RTX 4090 se destaca em termos de Tensor FLOPS e largura de banda de memória, tornando-o uma escolha mais potente para tarefas exigentes de inferência LLM.

A otimização da inferência do LLM requer uma abordagem equilibrada que considere tanto a capacidade computacional da GPU quanto os requisitos específicos da tarefa do LLM em questão. Selecionar a GPU certa envolve compreender as compensações entre capacidade de memória, poder de processamento e largura de banda para garantir que a GPU possa lidar com eficiência com os pesos do modelo e realizar cálculos sem se tornar um gargalo. À medida que o campo da PNL continua a evoluir, manter-se informado sobre as mais recentes tecnologias de GPU e seus recursos será fundamental para aqueles que buscam ampliar os limites do que é possível com modelos de linguagem grande.

Terminologia usada

  • Taxa de transferência:

No caso de inferência, a taxa de transferência é a medida de quantas solicitações/solicitações são processadas em um determinado período de tempo. A taxa de transferência normalmente é medida de duas maneiras:

  • Solicitações por segundo (RPS) :
    • O RPS mede o número de solicitações de inferência que um modelo pode tratar em um segundo. Uma solicitação de inferência normalmente envolve a geração de uma resposta ou previsão com base nos dados de entrada.
    • Para a geração de LLM, o RPS indica a rapidez com que o modelo pode responder aos prompts ou consultas recebidas. Valores mais altos de RPS sugerem melhor capacidade de resposta e escalabilidade para aplicativos em tempo real ou quase em tempo real.
    • Alcançar valores altos de RPS geralmente requer estratégias de implantação eficientes, como agrupar várias solicitações em lote para amortizar a sobrecarga e maximizar a utilização de recursos computacionais.
  • Tokens por segundo (TPS) :
    • O TPS mede a velocidade com que um modelo pode processar e gerar tokens (palavras ou subpalavras) durante a geração de texto.
    • No contexto da geração LLM, o TPS reflete o rendimento do modelo em termos de geração de texto. Indica a rapidez com que o modelo pode produzir respostas coerentes e significativas.
    • Valores mais altos de TPS implicam geração de texto mais rápida, permitindo que o modelo processe mais dados de entrada e gere respostas mais longas em um determinado período de tempo.
    • Alcançar altos valores de TPS geralmente envolve otimizar a arquitetura do modelo, paralelizar cálculos e aproveitar aceleradores de hardware como GPUs para agilizar a geração de tokens.
  • Latência:

A latência em LLMs refere-se ao atraso entre a entrada e a saída durante a inferência. Minimizar a latência é essencial para melhorar a experiência do usuário e permitir interações em tempo real em aplicativos que utilizam LLMs. É essencial encontrar um equilíbrio entre rendimento e latência com base no serviço que precisamos fornecer. A baixa latência é desejável para casos como chatbots/copiloto de interação em tempo real, mas não é necessária para casos de processamento de dados em massa, como reprocessamento interno de dados.

Leia mais sobre técnicas avançadas para aumentar o rendimento do LLM aqui.