Faça seu próprio GPT offline e privado

De Área31 Hackerspace
Membro do hackerspace feliz por ter seu próprio GPT rodando em casa, com sua GPU fuderosa, tirando mó onda.
Autor: 
* Coffnix

Motivo

Utilizar o modelo de linguagem h2ogpt na própria GPU é uma decisão estratégica que coloca a segurança cibernética como pilar central. Ao manter o processamento de dados confinado ao seu hardware, você elimina a vulnerabilidade associada à transmissão de dados pela internet, um ponto crítico onde ocorrem frequentemente interceptações e vazamentos. Essa abordagem assegura uma camada robusta de privacidade e segurança, tornando-se essencial em um cenário onde ameaças digitais estão constantemente evoluindo.

Além de reforçar a segurança, essa escolha traz benefícios significativos em termos de desempenho e independência. As GPUs proporcionam uma interação rápida e eficiente com o modelo h2ogpt, garantindo respostas ágeis. Operar offline também significa autonomia da internet, permitindo a continuidade do trabalho mesmo em situações de falhas de conexão ou em locais remotos. Em resumo, a adoção do h2ogpt em modo offline não é apenas uma medida de proteção cibernética, mas também uma estratégia para melhorar a performance e manter o controle total sobre a infraestrutura de inteligência artificial. Por fim, ao rodar o h2ogpt de maneira isolada, você se torna o verdadeiro guardião de sua própria segurança digital. Assim como aprendeu a criar e gerenciar storages criptografados em seu roteador residencial, agora você está no controle total da operação e da integridade de um dos mais avançados sistemas de processamento de linguagem natural. Em resumo, ao optar por esse caminho, você não só assegura a privacidade e segurança dos seus dados, mas também desfruta de uma performance notável, independência da internet e o controle total da sua infraestrutura de IA. Portanto, se você valoriza a segurança e a privacidade, rodar o h2ogpt na sua própria GPU é uma escolha inteligente e poderosa. Divirta-se explorando esta nova fronteira de autonomia e proteção digital!


Requisitos

Aqui utilizamos OpenSUSE com GPU nvidia modelo AORUS GeForce RTX™ 3070 MASTER 8G, mas você tem liberdade de utilizar em qualquer distro, adapte somente os comandos e arquivos caso utilize outra distro ou placa de video nvidia. E sim, o display LCD dessa placa de video tem uma cobrinha dando tiros:



Procedimento

Instale o anaconda

Obtenha a versão mais recente no site oficial: https://docs.conda.io/projects/miniconda/en/latest/

user $  wget https://repo.anaconda.com/miniconda/Miniconda3-py310_23.1.0-1-Linux-x86_64.sh
user $  bash Miniconda3-py310_23.1.0-1-Linux-x86_64.sh

Saia da sessão e faça login novamente para carregar as variáveis de ambiente e crie o novo ambiente h2ogpt:

user $  conda create --name=h2ogpt python=3.10
user $  conda activate h2ogpt

Instale o h2oGPT

Clone o repo oficial do h2ogpt:

user $  git clone https://github.com/h2oai/h2ogpt.git
user $  cd h2ogpt ; conda install cudatoolkit=12.3 -c conda-forge -y
user $  export CUDA_HOME=$CONDA_PREFIX

Instale as dependências:

user $  pip install -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu123
user $  GPLOK=1 bash docs/linux_install.sh
user $  pip install --upgrade urllib3 botocore

Execute o h2oGPT

Baixe um modelo para testes iniciais:

user $  python generate.py --base_model=h2oai/h2ogpt-gm-oasst1-en-2048-falcon-7b-v3 --score_model=None --prompt_type=human_bot


Após efetuar o download, execute o comando abaixo caso sua GPU tenha mais de 4GB de vram:

user $  python generate.py --base_model=h2oai/h2ogpt-gm-oasst1-en-2048-falcon-7b-v3 --score_model=None --prompt_type=human_bot --load_4bit=True


Caso sua GPU tenha mais que 8GB de vram:

user $  python generate.py --base_model=h2oai/h2ogpt-gm-oasst1-en-2048-falcon-7b-v3 --score_model=None --prompt_type=human_bot --load_8bit=True

Caso sua GPU tenha somente 8GB de vram pode ocorrer o seguinte erro:

torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 564.00 MiB. GPU 0 has a total capacty of 7.78 GiB of which 263.56 MiB is free. Including non-PyTorch memory, this process has 7.49 GiB memory in use. Of the allocated memory 6.73 GiB is allocated by PyTorch, and 595.69 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

Caso ocorra o erro acima, e vc queira tenta utilizar o modelo de 8bit, tente parar o X (init 3) e executar da seguinte forma:

user $  export 'PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:64'
user $  python generate.py --base_model=h2oai/h2ogpt-gm-oasst1-en-2048-falcon-7b-v3 --score_model=None --prompt_type=human_bot --load_8bit=True

Caso queira executar via shell script:

   run-gpt.sh (bash source code)
#!/bin/bash
eval "$(conda shell.bash hook)"
conda activate h2ogpt
cd /opt/h2ogpt/
python generate.py --base_model=h2oai/h2ogpt-gm-oasst1-en-2048-falcon-7b-v3 --score_model=None --prompt_type=human_bot --load_4bit=True

Verifique o uso da GPU:

user $  nvidia-smi

user $  nvtop

Acesse via web:


Use via CLI com python

Crie o arquivo de teste:

   test.py (python source code)
import os
import ast
from gradio_client import Client

os.environ['HOST'] = 'http://localhost:7860'

client = Client(os.getenv('HOST'))

# Enviando uma pergunta para o h2oGPT
kwargs = dict(instruction_nochat='Who are you?')
res = client.predict(str(dict(kwargs)), api_name='/submit_nochat_api')

# Processando a resposta
response = ast.literal_eval(res)['response']

# Imprimindo a resposta para diagnóstico
print("Resposta recebida:", response)

# Verificação da resposta
assert 'H2O.ai' in response

Execute o teste, deve retornar algo do tipo:

Loaded as API: http://localhost:7860/ ✔
Resposta recebida:  I am a language model trained by H2O.ai to provide helpful and informative answers to your questions.


Agora crie o código para consultas do prompt via CLI:

   prompt.py (python source code)
import os
import ast
import sys
from gradio_client import Client

# Verificando se algum argumento foi passado
if len(sys.argv) < 2:
    print("Por favor, forneça uma pergunta como argumento.")
    sys.exit(1)

# Concatenando todos os argumentos para formar a pergunta
pergunta = ' '.join(sys.argv[1:])

os.environ['HOST'] = 'http://localhost:7860'

client = Client(os.getenv('HOST'))

# Enviando a pergunta para o h2oGPT
kwargs = dict(instruction_nochat=pergunta)
res = client.predict(str(dict(kwargs)), api_name='/submit_nochat_api')

# Processando a resposta
response = ast.literal_eval(res)['response']

# Imprimindo a resposta
print("Resposta recebida:", response)

Faça uma pergunta:

user $  python3 prompt.py tell me about guns

Deve retornar algo tipo:

Loaded as API: http://localhost:7860/ ✔
Resposta recebida:  Guns are used to kill people.

Resposta por audio

Instale as dependências:

user $  pip install -r ./reqs_optional/requirements_optional_langchain.txt

Execute com suporte a comando de voz via web:

user $  python generate.py --base_model=h2oai/h2ogpt-gm-oasst1-en-2048-falcon-7b-v3 --score_model=None --prompt_type=human_bot --load_4bit=True --max_seq_len=2048 --chatbot_role="Female AI Assistant" --speaker="SLT (female)"

Abra a tela web e faça perguntas, será respondido com audio.

Mais infos:

https://github.com/h2oai/h2ogpt/blob/main/docs/README_LangChain.md

https://pt.scribd.com/document/653382376/H2OGPT-The-Open-Source-GPT-that-Gives-You-Privacy-and-No-Data-Leaks

https://arxiv.org/abs/2306.05443

https://github.com/h2oai/h2ogpt

https://h2o.ai/blog/building-the-worlds-best-open-source-large-language-model-h2o-ais-journey

Cookies nos ajudam a entregar nossos serviços. Ao usar nossos serviços, você concorda com o uso de cookies.