Monte um servidor GenAI em seu próprio hardware disponível. Este projeto fornece uma interface web para interagir com modelos LLaMA e Stable Diffusion (entre outros) para geração de texto, imagem, vídeo e 3D.
Muitas pessoas têm uma boa GPU em mãos e estão dispostas a usá-la em vez de pagar por assinaturas de OpenAI, Anthropic, etc. Aqui, você pode hospedar seus próprios modelos de IA, embora com muitas limitações em comparação com esses excelentes serviços. Depois, você pode acessá-lo de qualquer lugar com um navegador da web, como seu telefone ou outro computador.
O front-end para isso está hospedado nas páginas do GitHub, enquanto o back-end está hospedado na máquina do servidor disponível.
Após a configuração, o frontend estará disponível em https://[username].github.io/PersonalAIserver
. Siga as instruções abaixo para configurar o back-end.
Para o frontend, apenas uma ação do GitHub precisa ser configurada para construir a página do projeto. Em seu repositório bifurcado, navegue até Settings -> Pages -> Source
e defina-o como "Ações do GitHub". A compilação será executada automaticamente quando você enviar para o repositório, graças ao arquivo .github/workflows/main.yml
.
Caso queira rodar o frontend localmente, siga as instruções abaixo. Requer Node.js, instalável a partir do gerenciador de versão do nó (nvm).
nvm install 20
npm install -D @shadcn/ui
npx shadcn@latest init # Select default style, any color, and dont use css variables.
npx shadcn@latest add alert button card input textarea # Accept defaults
npm install lucide-react
npm install -D @tailwindcss/typography
npm install clsx tailwind-merge
npm install
npm install sharp
npm run dev
Isso deve servir ao frontend em http://localhost:3000
, que você pode acessar com um navegador da web.
Isso usa conda para gerenciamento de pacotes, mas fique à vontade para usar qualquer outro gerenciador de pacotes.
Em seu terminal no diretório backend, execute os seguintes comandos:
conda create -n personalai python=3.11
conda activate personalai
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
pip install -r requirements.txt
users.json
no diretório backend com o seguinte formato: {
"username1": {
"username": "username1",
"password": "password1",
"disabled": false
},
"username2": {
"username": "username2",
"password": "password2",
"disabled": false
}
...
}
.secret
no diretório backend com uma string aleatória de sua escolha. Isso é usado para criptografar o token JWT. Eu recomendo gerar um com: import secrets
secret_key = secrets.token_hex(32)
print(secret_key)
e depois copiando a saída.
Settings -> Secrets and variables -> Actions
em seu repositório bifurcadoNEXT_PUBLIC_API_URL
e o valor sendo a URL do servidor backend (mais detalhes abaixo). Exemplo: https://api.example.com
.backend/backend.py
, ajuste o CORSMiddleware
próximo à linha 40 para incluir os URLs do seu frontend.huggingface-cli login
e use seu token de acesso pessoal criado acima como senha.python backend/backend.py --public
ou remova --public
se desejar executar o servidor apenas no localhost. Localhost requer que você execute o frontend localmente também.Existem muitas opções para hospedar o back-end em uma URL pública, mas recomendo usar o Cloudflare Tunnel. O Cloudflare Tunnel roteia o tráfego da Internet para o seu servidor sem expor uma porta ou seu IP local. Ele também suporta HTTPS, criptografia SSL e proteção DDoS, entre outros recursos de segurança que você mesmo precisaria configurar e manter.
Outras opções incluem:
Para o Cloudflare Tunnel, você precisará de um nome de domínio e uma conta Cloudflare.
cloudflared tunnel login
. Esta etapa abre uma janela do navegador para fazer login com sua conta Cloudflare.cloudflared tunnel create genai-api
. Esta etapa gera um ID de túnel. Anote isso nas próximas etapas. tunnel: <your-tunnel-id>
credentials-file: /home/user/.cloudflared/<tunnel-id>.json
ingress:
- hostname: <your-api-url>
service: http://localhost:8000
- service: http_status:404
O <your-api-url>
deve ser o nome de domínio que você registrou nos servidores de nomes da Cloudflare e pode ser um subdomínio. Por exemplo, se você possui example.com
, poderá usar genai.example.com
ou api.example.com
. 5. Crie o registro DNS cloudflared tunnel route dns <tunnel-id> <your-api-url>
. Isso cria o túnel para a Cloudflare rotear o tráfego da Internet para o seu servidor sem expor uma porta ou seu IP local.
Em backend/backend.py
, você pode alterar os modelos usados. Encontre o modelo no Hugging Face que você gostaria de usar para geração de texto/imagem e ajuste as configurações do modelo ModelManager
(linha ~127). Por padrão, usa o modelo LLaMA 3.2-1B-Instruct para geração de texto e o modelo de meio Stable Diffusion 3.5 para geração de imagens. Abaixo estão os requisitos de VRAM para cada modelo testado.
Tipo de modelo | Nome do modelo | Uso de VRAM (GB) | Notas |
---|---|---|---|
Texto | metal-lhama/Lhama-3.2-1B-Instruir | ~8 | Modelo base para geração de texto |
Imagem | estabilidadeai/difusão estável-3,5-médio | ~13 | Funciona bem em RTX 4090 |
Imagem | estabilidadeai/difusão estável-3,5-grande | ~20-30 | Excede 4.090 VRAM para prompts longos |
Nota: O uso de VRAM pode variar dependendo da resolução da imagem, comprimento dos prompts de texto e outros parâmetros. Os valores mostrados são aproximados para configurações padrão. Modelos de transformadores quantizados são suportados para reduzir ainda mais o uso de VRAM, mas não são usados por padrão (consulte backend/backend.py
linhas 178-192). O grande modelo de difusão estável mal cabe na VRAM do meu 4090 com quantização. As velocidades do chatbot são extremamente rápidas no meu 4090, com a geração de imagens levando até 30 segundos para 100 etapas para imagens de 1024x1024.
O prompt do sistema para o modelo de idioma pode ser encontrado em backend/system_prompt.txt
. No momento, é uma versão do modelo Claude 3.5 Sonnet da Anthropic, lançado em 22 de outubro de 2024. https://docs.anthropic.com/en/release-notes/system-prompts#claude-3-5-sonnet