Pular para o conteúdo principal

llama.cpp distribuído no reComputer Jetson (Modo RPC)

Executar modelos de linguagem grandes (LLMs) em dispositivos de borda como NVIDIA Jetson pode ser desafiador devido a limitações de memória e computação. Este guia demonstra como distribuir a inferência de LLM entre vários dispositivos reComputer Jetson usando o backend RPC do llama.cpp, permitindo escalonamento horizontal para cargas de trabalho mais exigentes.

Pré-requisitos

  • Dois dispositivos reComputer Jetson com JetPack 6.x+ instalado e drivers CUDA funcionando corretamente
  • Ambos os dispositivos na mesma rede local, capazes de ping um ao outro
  • Máquina local (cliente) com ≥ 64 GB de RAM, nó remoto com ≥ 32 GB de RAM

1. Clonar o Código-fonte

Passo 1. Clone o repositório llama.cpp:

git clone https://github.com/ggml-org/llama.cpp.git 
cd llama.cpp

2. Instalar Dependências de Build

Passo 1. Atualize a lista de pacotes e instale as dependências necessárias:

sudo apt update
sudo apt install -y build-essential cmake git libcurl4-openssl-dev python3-pip

3. Compilar com Backend RPC + CUDA

Passo 1. Configure o CMake com suporte a RPC e CUDA:

cmake -B build \
-DGGML_CUDA=ON \
-DGGML_RPC=ON \
-DCMAKE_BUILD_TYPE=Release

Passo 2. Compile com jobs em paralelo:

cmake --build build --parallel   # Multi-core parallel compilation

4. Instalar Ferramentas de Conversão em Python

Passo 1. Instale o pacote Python em modo de desenvolvimento:

pip3 install -e .

5. Baixar e Converter o Modelo

Este exemplo usa TinyLlama-1.1B-Chat-v1.0:

Link do modelo: https://huggingface.co/TinyLlama/TinyLlama-1.1B-Chat-v1.0

Baixe estes arquivos e coloque-os em uma pasta TinyLlama-1.1B-Chat-v1.0 criada por você.

Passo 1. Converta o modelo do Hugging Face para o formato GGUF:

# Assuming the model is already downloaded to ~/TinyLlama-1.1B-Chat-v1.0 using git-lfs or huggingface-cli
python3 convert_hf_to_gguf.py \
--outfile ~/TinyLlama-1.1B.gguf \
~/TinyLlama-1.1B-Chat-v1.0

6. Verificar a Inferência em Uma Única Máquina

Passo 1. Teste o modelo com um prompt simples:

./build/bin/llama-cli \
-m ~/TinyLlama-1.1B.gguf \
-p "Hello, how are you today?" \
-n 64

Se você receber uma resposta, o modelo está funcionando corretamente.

7. Operação RPC Distribuída

7.1 Exemplo de Topologia de Hardware

DispositivoRAMPapelIP
Máquina A64 GBCliente + Servidor Local192.168.100.2
Máquina B32 GBServidor Remoto192.168.100.1

7.2 Iniciar Servidor RPC Remoto (Máquina B)

Passo 1. Conecte-se à máquina remota e inicie o servidor RPC:

ssh [email protected]
cd ~/llama.cpp
CUDA_VISIBLE_DEVICES=0 ./build/bin/rpc-server --host 192.168.100.1

O servidor usa por padrão a porta 50052. Para personalizar, adicione -p <port>.

7.3 Iniciar Servidor RPC Local (Máquina A)

Passo 1. Inicie o servidor RPC local:

cd ~/llama.cpp
CUDA_VISIBLE_DEVICES=0 ./build/bin/rpc-server -p 50052

7.4 Inferência Conjunta (Carga Multi-nó)

Passo 1. Execute a inferência usando ambos os servidores RPC, local e remoto:

./build/bin/llama-cli \
-m ~/TinyLlama-1.1B.gguf \
-p "Hello, my name is" \
-n 64 \
--rpc 192.168.100.1:50052,127.0.0.1:50052 \
-ngl 99

-ngl 99 descarrega 99% das camadas para as GPUs (tanto nós RPC quanto GPU local).

nota

Se você quiser executar apenas localmente, remova o endereço remoto de --rpc: --rpc 127.0.0.1:50052

8. Comparação de Desempenho

Esquerda: utilização de GPU em 192.168.100.1; Direita: utilização de GPU em 192.168.100.2

Ao executar apenas localmente, a pressão na GPU é concentrada em uma única placa

9. Solução de Problemas

ProblemaSolução
falha na inicialização do rpc-serverVerifique se a porta está ocupada ou se o firewall está bloqueando 50052/tcp
Velocidade de inferência mais lentaModelo muito pequeno, latência de rede > benefício de computação; tente um modelo maior ou modo Unix-socket
Erro de falta de memóriaReduza o valor de -ngl para descarregar menos camadas para a GPU ou mantenha algumas camadas na CPU

Com esta configuração, agora você pode alcançar “escalonamento horizontal” para inferência de LLM em vários dispositivos Jetson usando o backend RPC do llama.cpp. Para maior throughput, você pode adicionar mais nós RPC ou quantizar ainda mais o modelo para formatos como q4_0 ou q5_k_m.

Suporte Técnico & Discussão de Produtos

Obrigado por escolher nossos produtos! Estamos aqui para fornecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

Loading Comments...