Avançado 22 minDesempenho

LLM multi-GPU com llama.cpp: tensor-split 2× RTX 3090

Uma RTX 4090 de 24 GB não é suficiente para rodar os melhores modelos de 2026 em Q8 com qualidade plena e um contexto de 256k tokens. Duas 3090 usadas (48 GB) dão conta do trabalho por menos dinheiro. Mas é preciso saber dividir o modelo entre as placas, escolher entre split layer e tensor parallel e configurar o hardware para que ele continue funcionando bem ao longo do tempo. Este guia aborda as três ferramentas comuns (llama.cpp, Ollama, vLLM) e as armadilhas.

Você está escolhendo uma máquina? Nossas escolhas por orçamento →

Por Mohamed Meguedmi·Atualização 2026-08-27·Testado no Windows, macOS e Linux
Hardware recomendado

Boa relação custo-benefício para IA local: um GMKtec EVO-X2 64 GB / 1 TB (Ryzen AI Max+ 395).

Um mini-PC é uma máquina completa: verifique a memória disponível e a compatibilidade do motor. Ele não substitui macOS/MLX ou CUDA.

Por que essa escolha? Nossa ficha completa sobre GMKtec EVO-X2 64 GB / 1 TB (Ryzen AI Max+ 395) →

Compare todas as opções por orçamento, de 800 a 3 500 € →

Orçamento apertado: RTX 5060 · Modelos grandes: RTX 5090 · Mac Studio.

Em deslocamento: qual notebook para IA local →

Links afiliados — comissão possível sem custo adicional para você. Como Parceiro Amazon, QualLLM obtém lucro com compras que atendem às condições exigidas.

#Por que usar múltiplos GPUs

Modelos > VRAM de uma única placa
Qwen3-Coder 30B-A3B em Q8 = 32 GB, e, com um contexto de 256k, o cache KV leva o uso de memória muito além disso. Nenhuma GPU de consumo comporta isso sozinha, exceto uma RTX 5090 (32 GB) — e, mesmo assim, sem margem para um contexto grande.
Throughput para equipe
Duas cartas com paralelismo tensor podem atender a 2× mais usuários ao mesmo tempo.
Redundância
Uma placa falha, a outra continua em modo degradado (modelo menor).
Fine-tuning
Um LoRA em um modelo de 24B exige 30 GB para modelo + otimizador + gradientes. Duas placas de 24 GB = configuração confortável.

#Duas estratégias: split layer vs tensor parallel

Divisão por camadas (layer parallelism)
As camadas 1-40 no GPU 0, 41-80 no GPU 1. Ao passar de camada para camada, copia-se um vetor de ativação. Latência ligeiramente maior. Suportado por llama.cpp e Ollama.
Paralelismo tensorial
Cada camada é dividida em partes distribuídas entre as GPUs em paralelo. Exige comunicação rápida entre as placas. Oferece melhor desempenho, mas é complexo. Suportado por vLLM e ExLlamaV2.
i
Regra empírica
Para uso por um único usuário e simplicidade: divisão por camadas (llama.cpp/Ollama). Para servir modelos a vários usuários e priorizar a taxa de processamento: paralelismo de tensores (vLLM).

#Hardware: atenção aos detalhes

PCIe
Cada GPU deve operar em pelo menos PCIe x8. Uma placa-mãe com 2× PCIe 5.0 x16 dedicados à CPU, não x16 + x4 via chipset.
Alimentação
2× 3090 = 700 W só para as GPUs. Somando CPU, RAM e SSD: considere uma fonte de 1200-1600 W (80+ Gold ou Platinum).
Espaçamento
As RTX 3090/4090 ocupam 3 slots. Em uma placa-mãe com 7 slots, as duas placas se tocam. Risers PCIe ou refrigeração líquida para manter o controle.
Ventilação
Com 2 placas sob carga, um gabinete mal ventilado atinge 85–90 °C. Redução de desempenho por aquecimento (thermal throttling) = -30 % de desempenho.

#1. Multi-GPU com llama.cpp

Divisão por camadas
./build/bin/llama-cli \
  -m ./models/qwen3-coder-30b-a3b-q8_0.gguf \
  -ngl 99 \
  --split-mode layer \
  --tensor-split 0.5,0.5 \
  -p "..."

--tensor-split indica a proporção de camadas por GPU. Para 2 placas idênticas: 0.5,0.5. Para uma 3090 de 24 GB + uma 4070 de 12 GB: 0.67,0.33 (a 3090 recebe dois terços).

Divisão por linha (mais rápida em alguns casos)
./build/bin/llama-cli \
  -m ./models/qwen3-coder-30b-a3b-q8_0.gguf \
  -ngl 99 \
  --split-mode row \
  ...

#2. Multi-GPU com Ollama

O Ollama detecta automaticamente várias GPUs e distribui o trabalho entre todas as disponíveis. Há poucas opções de configuração disponíveis, mas ele funciona de imediato.

Variáveis úteis
# Limiter à certains GPU
export CUDA_VISIBLE_DEVICES=0,1

# Ou pour AMD
export ROCR_VISIBLE_DEVICES=0,1

systemctl restart ollama
Verificar a distribuição
ollama ps
# Doit afficher le modèle réparti : PROCESSOR = 100% GPU,
# réparti sur les deux cartes vu par nvidia-smi

#3. Paralelismo tensorial com vLLM

Executar vLLM com 2 GPUs
python -m vllm.entrypoints.openai.api_server \
  --model Qwen/Qwen3-Coder-30B-A3B-Instruct \
  --tensor-parallel-size 2 \
  --quantization awq \
  --dtype auto \
  --port 8000

O vLLM distribui cada camada entre os 2 GPUs em paralelo. O throughput agregado é quase dobrado em relação a 1 GPU, com um overhead de comunicação de ~10 %.

→
Placas idênticas para vLLM
O paralelismo tensorial funciona idealmente com placas idênticas. 2× RTX 3090 ou 2× 4090: OK. Uma 3090 + uma 4070: o vLLM usará a mais lenta como referência, subutilizando a mais rápida.

NVLink permite uma conexão entre GPUs com alta largura de banda (112 GB/s na 3090). Algumas RTX 3090 têm um conector NVLink; as 4090 já não têm esse conector; todas as RTX Quadro / A-series o têm.

Impacto do split-layer do llama.cpp
Muito baixo. As transferências entre camadas são pequenas.
Impacto do paralelismo tensorial no vLLM
Mais significativo: +5 a +15% de throughput com NVLink ativado.
Impacto do fine-tuning
Grande: a comunicação de gradientes é intensa. Recomenda-se NVLink se você planeja fazer fine-tuning com múltiplas GPUs.

#Desempenho esperado

Em 2× RTX 3090, Qwen3-Coder 30B-A3B Q8_0, llama.cpp com divisão por camadas:

Prompt único
~55 tok/s. O modelo em Q8 (32 GB) não caberia na VRAM de uma única 3090. A velocidade permanece alta: trata-se de um MoE com 3B de parâmetros ativos.
Latência do primeiro token
~200 ms (vs ~80 ms em um modelo pequeno com uma única GPU).
Mesmas placas com vLLM em paralelismo de tensores
~65 tok/s com uma única requisição, mas ~400 tok/s agregados com 10 requisições paralelas.
!
Gargalo PCIe
Se uma das suas placas estiver em PCIe x4 (por exemplo, em um slot secundário conectado ao chipset), você pode perder 40% de desempenho na divisão por camadas e ainda mais no paralelismo de tensores. Verifique com nvidia-smi ou GPU-Z antes de culpar o restante da configuração.
Este guia ajudou você?

Um comentário, um erro ou uma observação? Avise-nos; isso ajuda a melhorar o guia para todos.