AI - Instalando nosso Primeiro Modelo de AI Offline

Olá meus Unicórnios! 🦄✨

Nesta altura do campeonato você já deve ser utilizado o ChatGPT ao menos uma vez na vida.

E também deve ter tido uma surpresa com os gastos! Depois que começas a utilizar uma grande quantidade de Tokens, e muitas conversações, os gastos começam a Subir.

Então, hoje iremos implantar nosso próprio "ChatGPT" offline.

Para isto, iremos utilizar o Ollama que possui os modelos mais comuns:

Ollama
Get up and running with large language models.

O modelo que iremos utilizar é o "Llama 3.1", modelo criado pela Meta, que é um dos melhores modelos Offline disponíveis na atualidade:

llama3.1
Llama 3.1 is a new state-of-the-art model from Meta available in 8B, 70B and 405B parameter sizes.

Você pode conhecer mais do Projeto em:

Llama 3.1
The open source AI model you can fine-tune, distill and deploy anywhere. Our latest models are available in 8B, 70B, and 405B variants.

Este modelo tem três versões, com tamanhos diferentes:

  • 8B: 4.7GB
  • 70B: 40GB
  • 405B: 231GB

Para este tutorial, iremos utilizar o modelo 8B com "4.7GB".

💡
Maior o modelo, melhor e mais preciso ele será.
Porem, também mais pesado ele será, o que ira requerer mais recursos do seu computador.

Instalando o Ollama

Para instalar o Ollama, acesse o link abaixo e clique em "Download for Windows":

Download Ollama on Windows
Download Ollama on Windows

Depois abra o arquivo baixado "OllamaSetup.exe".

Clique em "Install":

Aguarde a Instalação Finalizar:

Depois que a Instalação for Encerrada, o Instalador ira fechar automáticamente.

Instalando o Modelo "Llama 3.1" no "Ollama"

O Ollama não instala automaticamente os modelos, precisamos instalar todos os modelos que desejados.

Podemos identificar o caminho para instalação, de cada modelo e sua linguagem, em:

GitHub - ollama/ollama: Get up and running with Llama 3.1, Mistral, Gemma 2, and other large language models.
Get up and running with Llama 3.1, Mistral, Gemma 2, and other large language models. - ollama/ollama

Para o "Llama 3.1" na versão "8B" iremos utilizar:

Abra o PowerShell o preencha o comando de instalação:

ollama run llama3.1

Aguarde o Download e Instalação do modelo:

Depois da instalação ser finalizada, será exibido "success":

Funcionamento da API

O Ollama cria uma API com métodos muito similares a OpenAI.

A API fica na porta "11434", e seu acesso é feito pelo caminho "/api/".

Para exemplo, iremos buscar todos os Modelos Instalador/Ativados fazendo uma GET para "/api/tags":

http://localhost:11434/api/tags

A resposta será os modelos que você tem instalado:

{
  "models": [
    {
      "name": "llama3.1:latest",
      "model": "llama3.1:latest"
    }
  ]
}

O que precisamos obter aqui é o campo "name" que será o campo que iremos utilizar na API de Conversão:

llama3.1:latest

Utilizando a API de Conversação

Para criar uma conversa, iremos enviar um POST para "/api/chat" onde precisamos enviar um Json semelhante ao Json abaixo:

{
  "model": "llama3.1:latest",
  "stream": false,
  "options": {
    "temperature": 0,
    "num_ctx": 256
  },
  "keep_alive": "24h",
  "messages": [
    {
      "role": "system",
      "content": "Bot que deve responder como um Bruxo de Hogwarts"
    },
    {
      "role": "user",
      "content": "Quem é Harry Potter?"
    },
    {
      "role": "assistant",
      "content": "Harry Potter é o protagonista da série de livros de fantasia do mesmo nome, escrita por J.K. Rowling."
    },
    {
      "role": "user",
      "content": "E qual a casa de Harry Potter em Hogwarts?"
    }
  ]
}

A resposta será retornado no elemento "message.content":

{
  "model": "llama3.1:latest",
  "created_at": "2024-07-31T21:13:29.7581227Z",
  "message": {
    "role": "assistant",
    "content": "O jovem Harry Potter é um Gryffindor! A coragem e a lealdade são as características que o definem, e ele tem o privilégio de ser membro da mais nobre das casas de Hogwarts. Além dele, outros notáveis membros da casa incluem Ron Weasley e Hermione Granger, seus melhores amigos e companheiros em muitas aventuras."
  },
  "done_reason": "stop",
  "done": true,
  "total_duration": 101823170000,
  "load_duration": 13484578100,
  "prompt_eval_count": 78,
  "prompt_eval_duration": 32615899000,
  "eval_count": 85,
  "eval_duration": 55702339000
}

💡
Observe que estamos definindo o "keep_alive" como "24h", isto ira deixar o modelo na memória Ram por 24 hrs, gerando respostas mais rápidas.

Abrindo Ollama para o Mundo Exterior

Por padrão, o Ollama tem sua API aberta apenas o o "Localhost".

Inicialmente feche o Ollama, em "Quit Ollama" na barra de relógio:

Pesquise "system environment variables" no menu iniciar e clique em "Edit the system environment variables":

Clique em "Environment Variables...":

Clique em "New...":

No campo "Variable name" preencha com "OLLAMA_HOST" e no campo "Variable value" preencha com "0.0.0.0", em seguida, clique em "OK":

Clique em "OK" novamente nas duas janelas:

Reabra o Ollama através do Menu Inicial:

Comparando Velocidade de alguns Modelos

Para esta comparação, estamos utilizando uma máquina virtual com 16 gb de RAM, e 8 Cores de um processador Ryzen 7 5700G.

Em todas as requisições irei utilizar o mesmo exemplo enviado ao "/api/chat" mais acima.

A comparação de tempo será da primeira requisição e da segunda requisição e também irei comparar a resposta gerada.

Llama 3.1 - 8B

➡️ Primeira Requisição: 31 segundos
➡️ Segunda Requisição: 21 segundos

💬 Resposta:

O jovem Harry Potter é um Gryffindor! A coragem e a lealdade são as características que o definem, e ele tem o privilégio de ser membro da mais nobre das casas de Hogwarts. Além dele, outros notáveis membros da casa incluem Ron Weasley e Hermione Granger, seus melhores amigos e companheiros em muitas aventuras.

Phi 3 Mini - 3.8B (Mini)

➡️ Primeira Requisição: 15 segundos
➡️ Segunda Requisição: 8 segundos

💬 Resposta:

Harry Potter pertence à Casa das Tochas na escola mágica de Hogwarts. Apesar disso, ele tem uma conexão especial com as Pedras da Fênix e é frequentemente associado a elas por sua importância em seu destino.

Gemma 2 - 2B (Mini)

➡️ Primeira Requisição: 10 segundos
➡️ Segunda Requisição: 6 segundos

💬 Resposta:

Ah, Harry! Ele é um bruxo de uma força inigualável e lealdade que brilha como o próprio sol. Ele foi escolhido para a Casa dosbruxos, onde a coragem e a sabedoria se misturam em harmonia.

Mistral - 7B

➡️ Primeira Requisição: 27 segundos
➡️ Segunda Requisição: 15 segundos

💬 Resposta:

Ó, minha amiga, Harry Potter é o jovem herói da nossa escola de magia e bruxaria, Hogwarts. E ele pertence à Casa de Gryffindor, a mais brava e corajosa das casas de Hogwarts!

Por hoje é só, meus unicórnios! 🦄✨

Que a magia do arco-íris continue brilhando em suas vidas! Até mais! 🌈🌟