Se você curte o ecossistema HuggingFace e quer um servidor LLM battle-tested em produção (HF usa o próprio TGI nos seus Inference Endpoints), o Text Generation Inference (TGI) é a sua melhor opção. No GPUBrasil, deploy em 1 clique com Flash Attention 2, suporte a PEFT/LoRA e API REST + gRPC.

⚡ Resumo

TGI é o servidor de inferência oficial da HuggingFace, escrito em Rust + Python. Otimizado para latência consistente, com excelente suporte a modelos novos da HF Hub.

O que é o TGI?

TGI (Text Generation Inference) é o servidor que roda por trás dos HuggingFace Inference Endpoints. Combina um core em Rust de alta performance com workers Python para inferência GPU. Foco: estabilidade em produção e integração nativa com a HF Hub.

Características principais

Casos de uso brasileiros

Hardware recomendado

💰 Custo no GPUBrasil

RTX 4090 (R$ 2,50/h) servindo Qwen2.5-3B: ~5M tokens/h em modo concorrente. Custo: R$ 0,50/1M tokens. HF Inference Endpoint cobra ~3-5x mais.

Deploy em 1 clique

Passo 1: Iniciar template

  1. Console → Templates → 🧠 LLM Self-hosted
  2. Selecione TGI (HuggingFace)
  3. GPU: RTX 4090 (recomendado)
  4. Clique em Iniciar

O template usa ghcr.io/huggingface/text-generation-inference:latest com Qwen2.5-3B-Instruct como modelo padrão e API REST na porta 8080.

Passo 2: Testar via curl

curl https://sua-instancia.gpubrasil.com.br/generate \
    -X POST \
    -H 'Content-Type: application/json' \
    -d '{
        "inputs": "Qual é a capital do Brasil?",
        "parameters": {
            "max_new_tokens": 100,
            "temperature": 0.7,
            "top_p": 0.95
        }
    }'

Passo 3: Streaming

import requests

url = "https://sua-instancia.gpubrasil.com.br/generate_stream"

resp = requests.post(url, json={
    "inputs": "Conte uma piada brasileira:",
    "parameters": {"max_new_tokens": 200}
}, stream=True)

for line in resp.iter_lines():
    if line and line.startswith(b"data:"):
        chunk = line[5:].decode().strip()
        print(chunk, end="", flush=True)

Passo 4: Messages API (compatível com OpenAI)

from openai import OpenAI

client = OpenAI(
    base_url="https://sua-instancia.gpubrasil.com.br/v1",
    api_key="dummy"
)

resp = client.chat.completions.create(
    model="tgi",
    messages=[
        {"role": "system", "content": "Você é um assistente brasileiro técnico."},
        {"role": "user", "content": "Como funciona Flash Attention 2?"}
    ]
)
print(resp.choices[0].message.content)

Trocar de modelo

SSH na instância e ajuste:

# Trocar para LLaMA 3.1 8B
docker stop tgi
docker run -d --name tgi --gpus all -p 8080:80 \
    -v $PWD/data:/data \
    -e HF_TOKEN=hf_xxx \
    ghcr.io/huggingface/text-generation-inference:latest \
    --model-id meta-llama/Llama-3.1-8B-Instruct \
    --quantize eetq \
    --max-input-length 4096 \
    --max-total-tokens 8192

Multi-LoRA: múltiplos adapters em uma GPU

# Inicia TGI com 2 adapters LoRA
docker run -d --gpus all -p 8080:80 \
    ghcr.io/huggingface/text-generation-inference:latest \
    --model-id Qwen/Qwen2.5-7B-Instruct \
    --lora-adapters \
        "atendimento=hub:my-org/qwen-suporte,vendas=hub:my-org/qwen-vendas"

# Requisição usando um adapter
curl POST /generate -d '{
    "inputs": "Como devolvo um produto?",
    "parameters": {"adapter_id": "atendimento"}
}'

TGI vs vLLM

Dicas de produção

Sirva LLMs com a stack oficial da HuggingFace

Ganhe R$ 25 grátis no GPUBrasil e suba TGI em 90 segundos.

Começar Grátis →

Conclusão

TGI é a escolha pragmática para times que já dominam HuggingFace e querem tirar workload de Inference Endpoints sem reescrever código. Combinado com o GPUBrasil, é uma migração indolor com economia significativa e dados em território brasileiro.

Compare: vLLM · LiteLLM proxy