Pesquisar este blog

Páginas

sexta-feira, 4 de abril de 2025

Guia Completo: Executando LLaMa 3 com Podman, Ollama e Open WebUI

 

LLaMa 3

Introdução:

A inteligência artificial generativa, impulsionada por modelos como o LLaMa 3, está transformando nossa interação com a tecnologia e remodelando a interação homem-máquina. Este guia prático mostra como rodar o modelo de linguagem LLaMa 3 em um ambiente conteinerizado com Podman, usando a simplicidade do Ollama e a interface amigável do Open WebUI. Mesmo que você já tenha o modelo baixado, mostraremos como integrá-lo perfeitamente, se não, este guia já inclui o passo a passo para baixar o modelo, facilitando todo o processo.

Destaques:

  • Implantação simplificada: Use Podman para conteinerizar LLaMa 3 e Open WebUI.
  • Gerenciamento fácil com Ollama: Baixe e execute o modelo com um único comando.
  • Integração com Ollama: Aproveite o Ollama para gerenciamento eficiente do modelo.
  • Interface amigável e intuitiva: Interaja com LLaMa 3 através do Open WebUI.
  • Armazenamento externo: Utilize um modelo LLaMa 3 pré-baixado, otimizando o uso de recursos.
  • Passo a passo detalhado: Instruções claras para SLES 15 SP6 e OpenSUSE 15.6.

Ambiente:

  • Sistema Operacional da VM: SLES 15 SP6 ou OpenSUSE 15.6
  • Diretório de Armazenamento do Modelo: /opt/llama-models (Este diretório será criado e populado durante o processo com o modelo LLaMa 3)
  • Diretório de Armazenamento do Modelo: /opt/llama-models

Pré-requisitos:

  • Podman instalado em sua VM.
  • Uma conexão de internet ativa para baixar o modelo.

Preparação:

Passo 1: Preparando a VM

1.1 Instalando o Podman:SLES 15 SP6 ou OpenSUSE 15.6:

sudo zypper install podman

1.2. Criando o Diretório de Armazenamento (se ainda não existir):

sudo mkdir -p /opt/llama-models
sudo chown -R $USER:$USER /opt/llama-models

Explicação detalhada dos comando:

  • -p: Cria diretórios pai se não existirem.
  • chown: Garante que seu usuário tenha permissão de escrita no diretório.

1.3. Criando o Volume Podman:

podman volume create llama-storage

Este volume armazenará o modelo.

Passo 2: Executando o LLaMa 3 com Ollama

2.1 Executando o Contêiner Ollama:

podman run -d --name ollama --restart=always -p 11434:11434 -v /opt/llama-models:/root/.ollama/models ollama/ollama serve

Explicação detalhada do comando:

Comando Base: podman run

  • podman: Este é o comando principal. podman é uma ferramenta de gerenciamento de contêineres semelhante ao Docker, mas com algumas diferenças importantes (principalmente em relação à arquitetura sem daemon). Ele permite criar, executar, gerenciar e interagir com contêineres.
  • run: Este subcomando de podman faz duas coisas principais:

a. Cria um novo contêiner a partir de uma imagem especificada (neste caso, ollama/ollama). Se a imagem não existir localmente, podman tentará baixá-la de um registro (como o Docker Hub, por padrão).

b. Inicia o contêiner recém-criado, executando o comando especificado dentro dele (neste caso, serve).

Opções de Execução e Configuração:

  • -d (ou --detach): Este é um dos modificadores mais importantes. Ele diz ao podman para executar o contêiner em segundo plano (detached mode). Isso significa que:

a. O terminal não ficará bloqueado esperando o processo dentro do contêiner terminar. Você terá o prompt de volta imediatamente.

b. O contêiner continuará rodando mesmo que você feche o terminal. Ele se torna um processo independente.

c. Para interagir com o contêiner em execução em segundo plano, você precisará usar outros comandos podman, como podman logs (para ver a saída), podman stop (para pará-lo) ou podman exec (para executar comandos dentro do contêiner).

  • --name ollama: Esta opção dá um nome ao contêiner: ollama. Isso é extremamente útil! Em vez de ter que se referir ao contêiner pelo seu ID (um longo hash alfanumérico gerado automaticamente), você pode usar este nome amigável em outros comandos podman. Por exemplo: podman stop ollama é muito mais fácil de lembrar e usar do que podman stop a7b3f91c2d8e. Se você não fornecer um nome, o podman gerará um nome aleatório.
  • --restart=always: Esta é uma política de reinicialização. Ela diz ao podman o que fazer se o contêiner parar (seja por um erro, um comando de parada manual ou um reinício do sistema). As opções comuns são:

a. no (padrão): Não reinicia o contêiner automaticamente.

b. on-failure: Reinicia o contêiner apenas se ele sair com um código de erro diferente de zero (indicando uma falha). Você pode especificar um número máximo de tentativas de reinicialização, por exemplo, --restart=on-failure:5.

c. always: Sempre reinicia o contêiner, independentemente do motivo da parada. Isso é útil para garantir que seu serviço (neste caso, o servidor Ollama) esteja sempre em execução. Ele tentará reiniciar o contêiner indefinidamente.

d. unless-stopped: Similar a always, mas se você parar o contêiner manualmente (podman stop), ele não será reiniciado automaticamente após um reboot do sistema. É útil se você quiser que o contêiner permaneça parado depois que você o parar explicitamente.

  • -p 11434:11434 (ou --publish 11434:11434): Esta opção faz o mapeamento de portas. Ela permite que você acesse o servidor Ollama (que está rodando dentro do contêiner) a partir da sua máquina host (a máquina onde você executou o comando podman). O formato é [porta no host]:[porta no contêiner].

a. 11434:11434: Significa que a porta 11434 da sua máquina host será encaminhada para a porta 11434 dentro do contêiner. O servidor Ollama, por padrão, escuta na porta 11434. Com esse mapeamento, você poderá acessar o servidor Ollama a partir da sua máquina host usando o endereço localhost:11434 ou o IP da sua máquina host, seguido da porta 11434 (por exemplo, 192.168.1.10:11434).

b. Você poderia usar portas diferentes. Por exemplo, -p 8080:11434 faria com que o servidor Ollama fosse acessível na porta 8080 da sua máquina host.

  • -v /opt/llama-models:/root/.ollama/models (ou --volume /opt/llama-models:/root/.ollama/models): Esta opção cria um volume compartilhado entre o host e o contêiner. Isso permite que dados persistam mesmo que o contêiner seja removido. É crucial para armazenar os modelos do Ollama de forma persistente. O formato é [diretório no host]:[diretório no contêiner].

a. /opt/llama-models: Este é um diretório na sua máquina host. Você deve criá-lo antes de executar o comando (mkdir -p /opt/llama-models). É aqui que você colocará os arquivos de modelo do Ollama que você quer usar.

b. :/root/.ollama/models: Este é o diretório dentro do contêiner onde o Ollama espera encontrar os modelos. O podman mapeia esses dois diretórios. Qualquer alteração feita em um diretório será refletida no outro. Isso significa que:

§  Você pode baixar modelos do Ollama diretamente para /opt/llama-models na sua máquina host, e eles estarão automaticamente disponíveis para o servidor Ollama dentro do contêiner.

§  Se o servidor Ollama baixar ou modificar modelos dentro do contêiner, essas mudanças serão salvas em /opt/llama-models no host, e não serão perdidas se o contêiner for recriado.

Imagem e Comando do Contêiner:

  • ollama/ollama: Esta é a imagem do contêiner que você quer usar. É o nome da imagem no formato [repositório]/[nome da imagem]:[tag]. Neste caso:

a. ollama: É o nome do repositório (provavelmente no Docker Hub).

b. ollama: É o nome da imagem.

c. Se não houver uma tag especificada (como :latest ou :v1.0), o podman usará a tag latest por padrão. É recomendado, para reprodutibilidade, sempre especificar uma tag. Por exemplo ollama/ollama:0.1.20

  • serve: Este é o comando que será executado dentro do contêiner quando ele for iniciado. É o comando específico do aplicativo Ollama para iniciar o servidor. O podman executa esse comando como o processo principal dentro do contêiner.

Em resumo, o comando completo faz o seguinte:

a. Baixa a imagem ollama/ollama (se ela não existir localmente).

c. Cria um novo contêiner a partir dessa imagem.

d. Dá o nome ollama ao contêiner.

e. Configura o contêiner para ser reiniciado automaticamente sempre que parar.

f. Mapeia a porta 11434 do host para a porta 11434 do contêiner.

g. Cria um volume compartilhado entre /opt/llama-models no host e /root/.ollama/models no contêiner.

h. Executa o comando serve dentro do contêiner em segundo plano.

i. Deixa o contêiner rodando em segundo plano.

Este comando é uma forma robusta e reproduzível de executar o servidor Ollama. Ele garante que o servidor esteja sempre em execução, que os modelos sejam persistentes e que você possa acessá-lo facilmente a partir da sua máquina host. As opções de reinicialização e volume são cruciais para um ambiente de produção ou desenvolvimento estável.

2.2 Verificando e Iniciando o Modelo (Opcional, mas recomendado):Acessando o Contêiner:

podman exec -it ollama bash 

2.3 Listando os Modelos Disponíveis:

ollama list

Você deverá ver llama3 na lista, confirmando que o Ollama reconheceu o modelo no volume montado.

2.4 Iniciando o Modelo (para teste rápido):

ollama run llama3

Este comando inicia uma sessão interativa com o modelo dentro do contêiner. Você pode sair da sessão digitando /exit. Este passo é principalmente para verificação.

Passo 3: Configurando o Open WebUI

3.1 Criando o Contêiner Open WebUI:

podman run -d -p 8080:8080 -v open-webui-data:/app/backend/data --name open-webui ghcr.io/open-webui/open-webui:main

Explicação detalhada do comando:

Comando Base: podman run

  • podman: A ferramenta de gerenciamento de contêineres.
  • run: O subcomando para criar e iniciar um novo contêiner a partir de uma imagem.

Opções de Execução e Configuração:

  • -d (ou --detach): Executa o contêiner em segundo plano (detached mode). O terminal não fica bloqueado, e o contêiner continua rodando mesmo se você fechar o terminal.
  • -p 8080:8080 (ou --publish 8080:8080): Faz o mapeamento de portas.

a. 8080:8080: A porta 8080 da sua máquina host é encaminhada para a porta 8080 dentro do contêiner. O Open WebUI, por padrão, escuta na porta 8080. Isso significa que você acessará a interface web do Open WebUI através do seu navegador, usando http://localhost:8080 (ou o IP da sua máquina host, seguido de :8080).

b. -v open-webui-data:/app/backend/data (ou --volume open-webui-data:/app/backend/data): Cria um volume para persistência de dados. Há uma diferença sutil, mas importante, em relação ao comando anterior:

c. open-webui-data: Este é o nome de um volume nomeado. Em vez de especificar um caminho absoluto no host (como /opt/alguma-coisa), você está dando um nome ao volume. O podman gerencia o armazenamento físico desse volume para você (geralmente em um local padrão do sistema, como /var/lib/containers/storage/volumes/ no Linux, mas você não precisa se preocupar com isso). A vantagem de usar um volume nomeado é a facilidade de gerenciamento. Você se refere a ele pelo nome em outros comandos podman.

d. :/app/backend/data: Este é o diretório dentro do contêiner onde o Open WebUI armazena seus dados (como configurações, histórico de conversas, etc.). O podman monta o volume nomeado open-webui-data nesse diretório. Os dados gravados nesse diretório dentro do contêiner serão persistidos no volume nomeado, mesmo que o contêiner seja removido ou recriado.

e. --name open-webui: Dá o nome open-webui ao contêiner, facilitando a referência a ele em outros comandos podman (por exemplo, podman stop open-webui).

Imagem e Comando do Contêiner (Implícito):

a. ghcr.io/open-webui/open-webui:main: Esta é a imagem do contêiner. Ela vem de um registro diferente do Docker Hub:

b. ghcr.io: É o GitHub Container Registry (um serviço de registro de contêineres fornecido pelo GitHub).

c. open-webui: É a organização/usuário no GitHub.

d. open-webui: É o nome da imagem.

e. :main: Esta é a tag da imagem. Ela indica qual versão da imagem você quer usar. A tag main geralmente se refere à versão de desenvolvimento mais recente (o branch principal do repositório do projeto). É importante notar que usar main pode levar a comportamentos inesperados, pois o código está em constante mudança. Para um ambiente de produção, é altamente recomendável usar uma tag específica de versão (por exemplo, ghcr.io/open-webui/open-webui:v1.0.0). Isso garante reprodutibilidade e evita surpresas causadas por atualizações inesperadas.

§ Comando Implícito: Neste caso, o comando a ser executado dentro do contêiner não é especificado explicitamente. Quando isso acontece, o podman usa o comando padrão definido na própria imagem. A imagem open-webui já foi criada com um comando padrão (provavelmente algo como npm start ou um script similar que inicia o servidor web do Open WebUI). Você poderia sobrescrever esse comando padrão, adicionando um comando no final da linha, mas geralmente não é necessário.

Em resumo, este comando faz:

a. Baixa a imagem ghcr.io/open-webui/open-webui:main do GitHub Container Registry (se não existir localmente).

b. Cria um novo contêiner a partir dessa imagem.

c. Dá o nome open-webui ao contêiner.

d. Mapeia a porta 8080 do host para a porta 8080 do contêiner.

e. Cria um volume nomeado chamado open-webui-data e o monta em /app/backend/data dentro do contêiner.

f. Executa o comando padrão da imagem (que inicia o servidor Open WebUI) dentro do contêiner em segundo plano.

3.2 Configurando a Conexão com o Ollama:

Abra um navegador e acesse http://[endereco-ip]:8080.Faça login ou crie uma conta (se for a primeira vez que usa o Open WebUI).Vá para Settings (ícone de engrenagem).Na aba Connections, habilite Ollama.No campo Ollama Base URL, insira: http:// [endereco-ip]:11434 (o IP da sua VM e a porta do Ollama). É fundamental que este endereço esteja correto.Clique em Save.

Passo 4: Testando a Integração

4.1 Acessando o Open WebUI: Vá para http://192.168.56.104:7860 no seu navegador.

4.2 Selecionando o Modelo: Na interface principal, no campo "Select a model", escolha "ollama" e, em seguida, selecione "llama3".

4.3 Interagindo com o LLaMa 3: Digite suas perguntas ou comandos na caixa de texto e pressione Enter. O LLaMa 3, executando via Ollama, processará sua solicitação e exibirá a resposta.

Conclusão:

Este guia forneceu um roteiro completo para implantar o LLaMa 3 em um ambiente conteinerizado, combinando a robustez do Podman, a simplicidade do Ollama e a interface intuitiva do Open WebUI. Ao seguir estas etapas, você pode desbloquear o potencial do LLaMa 3 para uma variedade de aplicações, desde chatbots e geração de texto até análise de dados e muito mais. A conteinerização não apenas simplifica a implantação, mas também garante portabilidade e escalabilidade para seus projetos de IA.

Experimente esta configuração e compartilhe suas experiências! Quais casos de uso você está explorando com o LLaMa 3? Deixe seus comentários e perguntas abaixo.

#Podman #Containers #Docker #DevOps #OpenSource #LLM #AI #MachineLearning #LocalAI #Ollama #OpenWebUI #LocalLLM #Containerization #Commandline #Linux #GenerativeAI #CLI #TechTutorial #HowTo