Faça seu próprio GPT offline e privado: mudanças entre as edições

De Área31 Hackerspace
Sem resumo de edição
Sem resumo de edição
 
(9 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 6: Linha 6:


= Motivo =
= Motivo =
Parabéns! Se você já está navegando nas águas avançadas da criptografia, protegendo seus dados com zelo, está na hora de dar um passo adiante na segurança e privacidade digital. Imagine a possibilidade de executar um modelo de linguagem poderoso, como o h2ogpt, diretamente na sua própria GPU, mantendo todo o processo offline e totalmente privado. Isso não é apenas uma ideia futurista; é uma realidade ao seu alcance e repleta de benefícios incríveis.
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.


Ao rodar o h2ogpt localmente, em sua própria GPU, você dá um grande salto em termos de privacidade e controle de dados. Aqui, cada palavra processada, cada comando executado, permanece confinado dentro do seu próprio hardware. Nada transita pela internet, eliminando riscos de interceptação, vazamentos ou exploração indevida de seus dados por terceiros.
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!


E não é só a privacidade que se destaca. A performance também é um fator a ser celebrado. GPUs são poderosas e capazes de realizar cálculos complexos a uma velocidade impressionante. Isso significa respostas mais rápidas e uma interação mais fluida com o modelo h2ogpt, tudo processado na velocidade da luz pelo seu próprio hardware.


Além disso, ao operar o h2ogpt offline, você se torna independente da internet. Isso não só garante operações ininterruptas em casos de falhas de conexão, mas também significa que você pode usar o modelo em locais remotos ou em situações onde a conectividade é um desafio.
== 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:


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!


[[Image:Pc-ancap-rtx3070.jpeg|400px]] [[Image:gadsden-gpu.gif|600px]]


== 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.
[[Image:Aorus3070.png|400px]]


= Procedimento =
= Procedimento =
Linha 26: Linha 23:
Obtenha a versão mais recente no site oficial: https://docs.conda.io/projects/miniconda/en/latest/
Obtenha a versão mais recente no site oficial: https://docs.conda.io/projects/miniconda/en/latest/
{{console|body=
{{console|body=
###i## wget https://repo.anaconda.com/miniconda/Miniconda3-py310_23.1.0-1-Linux-x86_64.sh
$ ##i## wget https://repo.anaconda.com/miniconda/Miniconda3-py310_23.1.0-1-Linux-x86_64.sh
###i## bash Miniconda3-py310_23.1.0-1-Linux-x86_64.sh
$ ##i## bash Miniconda3-py310_23.1.0-1-Linux-x86_64.sh
$ ##i## echo 'export PATH="${PATH}:~/miniconda3/bin"' >> ~/.bashrc
}}
}}


Saia da sessão e faça login novamente para carregar as variáveis de ambiente e crie o novo ambiente h2ogpt:
Saia da sessão e faça login novamente para carregar as variáveis de ambiente e crie o novo ambiente h2ogpt:
{{console|body=
{{console|body=
###i## conda create --name=h2ogpt python=3.10
$ ##i## conda create --name=h2ogpt python=3.10
###i## conda activate h2ogpt
$ ##i## conda activate h2ogpt
}}
}}


Linha 39: Linha 37:
Clone o repo oficial do h2ogpt:
Clone o repo oficial do h2ogpt:
{{console|body=
{{console|body=
###i## git clone https://github.com/h2oai/h2ogpt.git
$ ##i## git clone https://github.com/h2oai/h2ogpt.git
###i## cd h2ogpt ; conda install cudatoolkit=12.3 -c conda-forge -y
$ ##i## cd h2ogpt ; conda install cudatoolkit=12.3 -c conda-forge -y
###i## export CUDA_HOME=$CONDA_PREFIX  
$ ##i## export CUDA_HOME=$CONDA_PREFIX  
}}
}}


Instale as dependências:
Instale as dependências:
{{console|body=
{{console|body=
###i## pip install -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu123
$ ##i## pip install -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu123
###i## GPLOK=1 bash docs/linux_install.sh
$ ##i## GPLOK=1 bash docs/linux_install.sh
###i## pip install --upgrade urllib3 botocore
$ ##i## pip install --upgrade urllib3 botocore
}}
}}


Linha 54: Linha 52:
Baixe um modelo para testes iniciais:
Baixe um modelo para testes iniciais:
{{console|body=
{{console|body=
###i## python generate.py --base_model=h2oai/h2ogpt-gm-oasst1-en-2048-falcon-7b-v3 --score_model=None --prompt_type=human_bot
$ ##i## python generate.py --base_model=h2oai/h2ogpt-gm-oasst1-en-2048-falcon-7b-v3 --score_model=None --prompt_type=human_bot
}}
}}
[[Image:H2ogpt-install-model.png|800px]]
[[Image:H2ogpt-install-model.png|800px]]
Linha 61: Linha 59:
Após efetuar o download, execute o comando abaixo caso sua GPU tenha mais de 4GB de vram:
Após efetuar o download, execute o comando abaixo caso sua GPU tenha mais de 4GB de vram:
{{console|body=
{{console|body=
###i## python generate.py --base_model=h2oai/h2ogpt-gm-oasst1-en-2048-falcon-7b-v3 --score_model=None --prompt_type=human_bot --load_4bit=True
$ ##i## python generate.py --base_model=h2oai/h2ogpt-gm-oasst1-en-2048-falcon-7b-v3 --score_model=None --prompt_type=human_bot --load_4bit=True
}}
}}
[[Image:H2ogpt-run-model.jpg|800px]]
[[Image:H2ogpt-run-model.jpg|800px]]
Linha 68: Linha 66:
Caso sua GPU tenha mais que 8GB de vram:
Caso sua GPU tenha mais que 8GB de vram:
{{console|body=
{{console|body=
###i## python generate.py --base_model=h2oai/h2ogpt-gm-oasst1-en-2048-falcon-7b-v3 --score_model=None --prompt_type=human_bot --load_8bit=True
$ ##i## 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:
{{console|body=
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:
{{console|body=
$ ##i## export 'PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:64'
$ ##i## 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:
{{file|name=run-gpt.sh|lang=bash|body=
#!/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:
Verifique o uso da GPU:
{{console|body=
{{console|body=
###i## nvidia-smi
$ ##i## nvidia-smi
}}
}}


Linha 80: Linha 98:


{{console|body=
{{console|body=
###i## nvtop
$ ##i## nvtop
}}
}}


Linha 87: Linha 105:
Acesse via web:
Acesse via web:


[[Image:H2ogpt-web.png|800px]]
[[Image:H2ogpt-web2.png|800px]]
 
 
= Use via CLI com python =
Crie o arquivo de teste:
{{file|name=test.py|lang=python|body=
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:
{{console|body=
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:
 
{{file|name=prompt.py|lang=python|body=
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:
{{console|body=
$ ##i## python3 prompt.py tell me about guns
}}
 
Deve retornar algo tipo:
{{console|body=
Loaded as API: http://localhost:7860/ ✔
Resposta recebida:  Guns are used to kill people.
}}
 
= Resposta por audio =
Instale as dependências:
{{console|body=
$ ##i## pip install -r ./reqs_optional/requirements_optional_langchain.txt
}}
 
Execute com suporte a comando de voz via web:
{{console|body=
$ ##i## 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:
Mais infos:

Edição atual tal como às 02h25min de 25 de abril de 2024

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
user $  echo 'export PATH="${PATH}:~/miniconda3/bin"' >> ~/.bashrc

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.