Exemplos / Examples
Esta seção fornece exemplos práticos de uso do Local Inference Calculator.
This section provides practical examples of using the Local Inference Calculator.
Cenário 1: GPU Gamer com 8GB
Você tem uma RTX 3060 (8GB) e quer saber quais modelos rodam.
You have an RTX 3060 (8GB) and want to know which models run.
python main.py -c 4096 --gpu-type consumer --only-runs
Saída esperada:
Expected output:
Modelos que rodam em 8GB (contexto 4096):
- 0.6B a 3B (FP16, INT8, INT4)
- 7B (INT4 apenas)
Cenário 2: Estação de Trabalho com 24GB
Você tem uma RTX 4090 (24GB) e quer rodar um modelo 7B com contexto maior.
You have a RTX 4090 (24GB) and want to run a 7B model with larger context.
python main.py -m 7 -c 16384
Isso mostrará se 7B com 16K contexto cabe em 24GB.
This will show if 7B with 16K context fits in 24GB.
Cenário 3: Comparando GPUs Datacenter
Comparando A100 (40GB) vs A100 (80GB) para modelo 70B.
Comparing A100 (40GB) vs A100 (80GB) for 70B model.
python main.py -m 70 -c 8192 -q int4 --gpu-type datacenter
Cenário 4: Planejamento de Contexto Longo
Projetando requisitos de VRAM para contexto de 32K.
Projecting VRAM requirements for 32K context.
python main.py -m 13 -c 32768
A ferramenta mostrará o KV cache projetado para contextos maiores.
The tool will show projected KV cache for larger contexts.
Cenário 5: Exportando Resultados
Exportando todas as combinações para análise posterior.
Exporting all combinations for later analysis.
python main.py -c 8192 --export-json analysis.json
Ou em CSV para planilhas:
Or in CSV for spreadsheets:
python main.py -c 8192 --export-csv analysis.csv
Cenário 6: Múltiplos Modelos
Verificando vários tamanhos de modelo de uma vez.
Checking multiple model sizes at once.
# Shell script para verificar todos os tamanhos
for size in 7 13 34 70; do
echo "=== Modelo ${size}B ==="
python main.py -m $size -c 8192
done
Casos de Uso Avançados
Batch Processing
Processando múltiplos contextos:
for ctx in 4096 8192 16384 32768; do
python main.py -m 13 -c $ctx --export-json results_${ctx}.json
done
Comparação de Quantização
Comparando diferentes níveis de quantização:
python main.py -m 70 -c 8192 -q fp16 # ~175 GB
python main.py -m 70 -c 8192 -q int8 # ~105 GB
python main.py -m 70 -c 8192 -q int4 # ~72 GB
Script de Exemplo Python
Usando a API diretamente em Python:
Using the API directly in Python:
from calculator import VRAMCalculator
from models import get_model
from gpus import get_gpu
# Criar calculadora
calc = VRAMCalculator()
# Obter modelo
model = get_model(7) # 7B model
# Calcular VRAM para 8K contexto
result = calc.calculate_vram(model, context_length=8192)
print(f"VRAM Total: {result['total_vram_gb']} GB")
print(f"Parâmetros: {result['params_memory_gb']} GB")
print(f"KV Cache: {result['kv_cache_gb']} GB")
# Ver compatibilidade com GPU específica
gpu = get_gpu("RTX 4090")
if calc.fits_in_gpu(result['total_vram_gb'], gpu['vram_gb']):
print("RODA na RTX 4090!")
else:
print("NÃO roda na RTX 4090")
Exemplos Avançados (v0.2.0)
Exemplo 9: Otimização de Offload de Camadas
Calcule a distribuição ótima de camadas na GPU para um modelo que não cabe completamente na VRAM:
Calculate optimal GPU layer distribution for a model that doesn’t fully fit in VRAM:
python main.py --model 70 --context 8192 --optimize-config --quantization int4
Saída:
Output:
CONFIGURAÇÃO ÓTIMA DE OFFLOAD DE CAMADAS
======================================================================
Modelo: LLaMA 2 70B / LLaMA 3.1 70B (70B parâmetros)
GPU: RTX 3090 (24 GB VRAM)
Total de Camadas: 80
Distribuição de Camadas:
Camadas na GPU: 0
Camadas na CPU: 80
Razão de Offload: 0.0%
Uso de Memória:
VRAM da GPU usada: 32.50 GB / 24 GB
RAM da CPU usada: 45.00 GB
Impacto na Performance:
Desaceleração estimada: 1000%
Configuração Recomendada:
llama.cpp: --gpu-layers 0
AutoGPTQ: --gpu-memory 32.5G
Para GPUs com mais VRAM, você verá opções de offload parcial.
For GPUs with more VRAM, you’ll see partial offload options.
Exemplo 10: Análise de Offload de CPU
Analise inferência híbrida GPU+CPU com considerações de largura de banda PCIe:
Analyze hybrid GPU+CPU inference with PCIe bandwidth considerations:
python main.py --model 13 --context 8192 --cpu-offload --system-ram 64 --pcie-gen 4.0
Saída:
Output:
ANÁLISE DE OFFLOAD DE CPU
======================================================================
Requisitos do Sistema:
RAM do sistema necessária: 8.50 GB
RAM do sistema disponível: 64.00 GB
Status: ✓ Cabe na RAM do sistema
Configuração PCIe:
Geração: PCIe 4.0
Largura de banda: ~24 GB/s efetiva
Estimativa de Performance:
Velocidade de tokens: ~35.0 tokens/segundo
Razão de velocidade: 100.0% da GPU completa
Distribuição de Camadas:
Camadas na GPU: 40
Camadas na CPU: 0
Razão de Offload: 100.0%
Impacto da geração PCIe:
Impact of PCIe generation:
PCIe 3.0: ~12 GB/s efetivo (transferência de dados mais lenta)
PCIe 4.0: ~24 GB/s efetivo (padrão para GPUs modernas)
PCIe 5.0: ~48 GB/s efetivo (melhor para offload de CPU)
Exemplo 11: Configuração Multi-GPU
Calcule paralelismo tensor entre múltiplas GPUs:
Calculate tensor parallelism across multiple GPUs:
python main.py --params-b 405 --context 8192 --quantization int4 --multi-gpu --gpu-config "2x4090,1x3090"
Saída:
Output:
CONFIGURAÇÃO MULTI-GPU
======================================================================
Modelo: Custom Model 405B (405B parâmetros)
Status: NÃO RODA
Gargalo: RTX 3090
Overhead de comunicação: 5.28 GB
Alocação por GPU:
✗ RTX 4090 25.32 GB / 24 GB
Shard: 50.0%
Configuração de Framework:
tensor_parallel_size: 3
mode: tensor_parallel
vllm: --tensor-parallel-size 3
Configurações heterogêneas (modelos de GPU mistos) são suportadas. A alocação de cada GPU é proporcional à sua capacidade de VRAM.
Heterogeneous configurations (mixed GPU models) are supported. Each GPU’s allocation is proportional to its VRAM capacity.
Exemplo 12: Auto-detecção GGUF
Auto-detecte quantização a partir do nome do arquivo GGUF:
Auto-detect quantization from GGUF filename:
python main.py --gguf-file "llama-2-7b.Q4_K_M.gguf" --context 4096
Saída:
Output:
Arquivo GGUF detectado: llama-2-7b.Q4_K_M.gguf
Quantização: Q4_K_M
Bits efetivos: 5.50 bits/param
Usando quantização: int4
Quantizações GGUF suportadas:
Supported GGUF quantizations:
Q2_K, Q2_K_S, Q2_K_M, Q2_K_L (~3-4 bits efetivos)
Q3_K, Q3_K_S, Q3_K_M, Q3_K_L, Q3_K_XS (~4-5 bits)
Q4_K, Q4_K_S, Q4_K_M, Q4_0, Q4_1 (~5 bits)
Q5_K, Q5_K_S, Q5_K_M, Q5_0, Q5_1 (~6 bits)
Q6_K (~7 bits)
Q8_0 (8 bits)
F16, F32 (ponto flutuante)
Uso Programático Avançado
Usando os calculadores avançados programaticamente:
Using the advanced calculators programmatically:
from calculator import LayerOffloadCalculator, CPUOffloadCalculator
from multi_gpu import MultiGPUCalculator, MultiGPUConfig, MultiGPUMode
from formats import detect_gguf_quantization
from models import get_model_by_size
from gpus import get_all_gpus
# Cálculo de offload de camadas
layer_calc = LayerOffloadCalculator(quantization=Quantization.INT4)
model = get_model_by_size(70)
gpu = get_all_gpus()[0] # RTX 3060
result = layer_calc.calculate_optimal_offload(model, gpu, context_tokens=8192)
print(f"Camadas na GPU: {result.layers_on_gpu}/{result.total_layers}")
print(f"Recomendado: --gpu-layers {result.layers_on_gpu}")
# Cálculo multi-GPU
multi_calc = MultiGPUCalculator(quantization=Quantization.INT4)
config = MultiGPUConfig(
gpus=[gpu1, gpu2, gpu3],
mode=MultiGPUMode.TENSOR_PARALLEL
)
result = multi_calc.calculate(model, config, context_tokens=8192)
# Detecção GGUF
gguf_info = detect_gguf_quantization("llama-2-7b.Q4_K_M.gguf")
print(f"Quantização: {gguf_info.quant_name}")
print(f"Bits efetivos: {gguf_info.bits_per_param}")