Deploy do modelo Gemma-4-26B-A4B-it-GGUF com Supervisor para gerenciamento de processos e reinício automático

1. Visão Geral do Projeto

O modelo Gemma-4-26B-A4B-it-GGUF da série Gemma 4 do Google é um modelo de chat MoE (Mixture of Experts) de alto desempenho, capaz de processar até 256.000 tokens e com suporte nativo a compreensão multimodal (texto e imagem). Ele demonstra excelente desempenho em raciocínio, matemática, programação e chamadas de função, sendo totalmente gratuito para uso comercial sob a licença Apache 2.0.

Parâmetro Descrição
Nome do Modelo Gemma-4-26B-A4B-it
Caminho do Modelo /root/ai-models/unsloth/gemma-4-26B-A4B-it-GGUF/
Versão Quantizada UD-Q4_K_M.gguf (16,8 GB)
Arquitetura de Deploy llama_cpp_python + Gradio WebUI
Porta de Acesso 7860
Ambiente de Execução Conda (torch28)

2. Preparação do Ambiente e Deploy Rápido

2.1 Requisitos de Hardware

Recomenda-se uma GPU NVIDIA RTX 4090 com pelo menos 18 GB de memória de vídeo. Abaixo está a configuração de hardware do ambiente de teste:

# Verificar informações da GPU
nvidia-smi --query-gpu=name,memory.total --format=csv

Exemplo de saída:

name, memory.total [MiB]
NVIDIA GeForce RTX 4090 D, 23028

2.2 Instalação do Ambiente Base

Primeiro, crie e ative o ambiente conda:

conda create -n gemma_env python=3.10
conda activate gemma_env
pip install llama-cpp-python gradio

2.3 Downloda e Configuração do Modelo

Baixe o arquivo do modelo quantizado para o diretório especificado:

mkdir -p /root/ai-models/unsloth/gemma-4-26B-A4B-it-GGUF/
wget -O /root/ai-models/unsloth/gemma-4-26B-A4B-it-GGUF/UD-Q4_K_M.gguf [URL_DO_MODELO]

3. Configuração do Supervisor para Gerenciamento de Processos

3.1 Instalação do Supervisor

sudo apt-get update
sudo apt-get install supervisor

3.2 Criar Arquivo de Configuração do Serviço

Adicione o seguinte conteúdo ao arquivo /etc/supervisor/conf.d/gemma-webui.conf:

[program:gemma-webui]
directory=/root/gemma-4-26B-A4B-it-GGUF
command=/root/miniconda3/envs/gemma_env/bin/python webui.py
autostart=true
autorestart=true
startretries=3
stderr_logfile=/root/gemma-4-26B-A4B-it-GGUF/logs/webui.log
stdout_logfile=/root/gemma-4-26B-A4B-it-GGUF/logs/webui.log
user=root
environment=HOME="/root",USER="root"

3.3 Inicialização e Verificação

# Recarregar configuração do Supervisor
sudo supervisorctl reread
sudo supervisorctl update

# Iniciar o serviço
sudo supervisorctl start gemma-webui

# Verificar o status
sudo supervisorctl status gemma-webui

4. Deploy do WebUI e Acesso

4.1 Criar Programa Principal do WebUI

Adicione o seguinte código ao arquivo /root/gemma-4-26B-A4B-it-GGUF/webui.py:

from llama_cpp import Llama
import gradio as gr

model_path = "/root/ai-models/unsloth/gemma-4-26B-A4B-it-GGUF/UD-Q4_K_M.gguf"

# Carregar o modelo com parâmetros otimizados
ai_model = Llama(
    model_path=model_path,
    n_ctx=4096,
    n_threads=10,
    n_gpu_layers=35
)

def generate_chat_response(message):
    response = ai_model.create_chat_completion(
        messages=[{"role": "user", "content": message}],
        max_tokens=1024,
        temperature=0.65
    )
    return response['choices'][0]['message']['content']

# Configurar interface Gradio
chat_interface = gr.Interface(
    fn=generate_chat_response,
    inputs=gr.Textbox(label="Sua pergunta"),
    outputs=gr.Textbox(label="Resposta"),
    title="Chat com Gemma-4-26B"
)

chat_interface.launch(server_name="0.0.0.0", server_port=7860)

4.2 Acessar a Interface Web

Após o início do serviço, você pode acessar a interface através de:

O carregamento inicial do modelo leva cerca de 1 minuto; as requisições subsequentes serão mais rápidas.

5. Otimização da Estratégia de Reinício Automático

5.1 Reinício com Monitoramento de Memória

Modifique a configuração do Supervisor para incluir o monitoramento de memória:

[program:gemma-webui]
...
autorestart=true
startretries=3
stopasgroup=true
killasgroup=true

5.2 Script de Verificação de Saúde (Health Check)

Crie o arquivo /root/gemma-4-26B-A4B-it-GGUF/health_check.py:

import urllib.request
import sys

service_url = "http://localhost:7860"
timeout_seconds = 15

try:
    with urllib.request.urlopen(service_url, timeout=timeout_seconds) as response:
        if response.status != 200:
            raise Exception("Status code inválido")
except Exception as e:
    print(f"Falha no health check: {e}", file=sys.stderr)
    import subprocess
    subprocess.run(["supervisorctl", "restart", "gemma-webui"], check=True)

Configure uma tarefa cron (verificação a cada 5 minutos):

(crontab -l ; echo "*/5 * * * * /root/miniconda3/envs/gemma_env/bin/python /root/gemma-4-26B-A4B-it-GGUF/health_check.py") | crontab -

6. Solução de Problemas Comuns

6.1 Serviço Falha ao Iniciar

# Verificar logs
tail -100 /root/gemma-4-26B-A4B-it-GGUF/logs/webui.log

# Verificar conflito de porta
ss -tlnp | grep :7860

6.2 Falha ao Carregar o Modelo

# Verificar memória da GPU livre
nvidia-smi --query-gpu=memory.free --format=csv

# Tentar uma versão quantizada menor, se necessário
sed -i 's/UD-Q4_K_M/UD-IQ4_NL/g' webui.py

6.3 Sugestões de Otimização de Desempenho

Para uma GPU RTX 4090, os seguintes parâmetros podem ser ajustados:

ai_model = Llama(
    model_path=model_path,
    n_ctx=4096,
    n_threads=14,  # Ajustar de acordo com o número de núcleos da CPU
    n_gpu_layers=40,  # Máximo de camadas na GPU
    main_gpu=0,
    tensor_split=[1.0],  # Alocação para GPU única
    seed=1234,
    use_mmap=True,
    use_mlock=False
)

Tags: LLM gemma supervisor llama-cpp-python Gradio

Publicado em 6-15 17:44 por Thomas