eidoc, quando começou essa tendência de rodar o modelo localmente eu também tentei só para ver o custo CPU dessa ferramenta. Tempos depois, o Fábio Akita publicou um vídeo em que ele também tentou "rodar" esses modelos localmente com sucesso (o cara tem uma infra muito melhor do que a minha!):
https://www.youtube.com/watch?v=O68y0yRZL1Y: Entendendo Como ChatGPT Funciona - Rodando sua Própria IA
Meses depois o Akita fez uma live fornecendo mais algumas informações/opiniões a respeito do assunto. Acho que foi quando começou aquele medo se as IAs iriam nos substituir.
https://www.youtube.com/watch?v=UDrDg6uUOVs: Entendendo o Básico de IA e Redes Neurais - IAs vão te substituir??
Nesta parte aqui do vídeo ele sugere o LMStudio, pela facilidade de uso, algo do tipo all batteries included. Fica só a seu cargo o download de um modelo mais apropriado para seu uso. Se não tiver tempo de ver o vídeo todo, veja somente o trecho a partir deste ponto que deixei no link.
Minhas experiências
Na época em que experimentei um modelo em infraestrutura bem mais inferior que a sua, o chat.cpp
com ggml.c
(e um modelo pequeno quantizado) funcionou localmente e razoavelmente bem. Infelizmente não achei mais o repositório de onde baixei o fonte, mas hoje em dia há vários forks de forks do repositório principal.
https://github.com/ggerganov/llama.cpp (repositorio principal)
Devido à onda de ataques por supply chain, deixo algumas dicas, sugestões antes que prossiga:
- leia as instruções e recomendações no
README.md
no repositório que escolher. Verifique se é o que precisa;
- baixe, por conta e risco, um desses forks de forks, pois parecem mais enxutos que o repositório principal. Compilam facilmente com
make
;
- avalie se o código fonte é seguro, makefile etc. que irá compilar (note que é apenas C/C++, sem dependências de Python), ou seja, confira se a aplicação não vai se apoderar de seus dados, vazá-los etc.;
- verificando que não há problemas, compile o código e rode o
chat.exe
(ou chat
se estiver usando Linux) juntamente com o modelo que escolheu;
- sempre avalie a segurança dos códigos, arquivos usados na compilação e derivados para evitar futuros ataques por supply chain. Nem sempre o que é opensource estará livre de supresas.
Note que os repositórios não disponiblizam modelos, mas instruções de onde baixar um deles. Escolha aquele que é mais apropriado para a quantidade de mémória de sua infraestrutura. O tamanho varia desde uns 4GB (quantizado) a bem mais que isso. Se estiver usando cache em disco, tente desatívá-lo para manter o modelo só em memória RAM. Isso pode limitar o tamanho do modelo que vai usar para uns 8GB e, esgotando a memória RAM, o sistema trava, um efeito colateral desta medida. Logo, procure o melhor compromisso começando com modelos pequenos, digamos 4GB, para ver se vale a pena. Observe quanto consomem de memória para ter uma ideia da proporção que não é 1:1 mas algo como 1:1,5. Não usei o termo 4B/8B/etc. pois 4GB/8GB é o que fica mais fácil para eu associar com o tamanho de memória física. 4B/8B/etc. geralmente se referem a número de parâmetros e não necessariamente está relacionado 1:1 com o tamanho de arquivo. Outro detalhe, dependendo do sistema de arquivos que utilizar (algo raro, como FAT32), pode ter problemas para armazenar arquivos maiores que 4GB.
"Rodando" um modelo quantizado com cerca de 4GB em um notebook i5 você vai notar que consome muito processamento. O notebook pode aquecer, precisando que a ventilação esteja desobstruída para não perder desempenho. Daí você verifica se vale a pena o custo benefício de "rodar" localmente sem GPU. Pode também testar em outro hardware dedicado, como PC. Você pode modular a compilação ativando chaves específicas para o tipo de arquitetura (instruções especiais da CPU como as SSE, AVX etc.). Notebooks, para eficiência e segurança, podem diminuir o desempenho para evitar superaquecimento, mas esta aplicação rodava sem maiores problemas. Em PC desktop era um pouco mais rápida.
É muito provável que você consiga rodar modelos especialistas em vez de um modelo genérico. Só não sei onde encontrá-lo para baixar, específico para sua área de atuação profissional.
_
Exemplo: Baixar os arquivos do repositório...
$ git clone https://github.com/antimatter15/alpaca.cpp.git
Cloning into 'alpaca.cpp'...
remote: Enumerating objects: 515, done.
remote: Counting objects: 100% (44/44), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 515 (delta 41), reused 41 (delta 41), pack-reused 471 (from 1)
Receiving objects: 100% (515/515), 1.32 MiB | 1.86 MiB/s, done.
Resolving deltas: 100% (281/281), done.
Remover arquivos desnecessários, só para ver o que é o mínimo necessário. Isso pode facilitar a inspeção completa dos arquivos, ver o que realmente fazem...
$ rm -rf screencast.gif .gitignore .git .github/
Isto é o que sobrou. É suficiente para invocar o utilitário make
que fará a compilação das aplicações chat
e quantize
...
$ l
total 468
476 8 -rw-rw-r-- 1 4126 2024-12-05 10:07:54 README.md
499 4 -rwxrwxr-x 1 309 2024-12-05 10:07:54 quantize.sh*
495 12 -rw-rw-r-- 1 11425 2024-12-05 10:07:54 quantize.cpp
474 8 -rw-rw-r-- 1 5528 2024-12-05 10:07:54 Makefile
464 4 -rw-rw-r-- 1 1072 2024-12-05 10:07:54 LICENSE
493 24 -rw-rw-r-- 1 22153 2024-12-05 10:07:54 ggml.h
485 324 -rw-rw-r-- 1 328260 2024-12-05 10:07:54 ggml.c
484 8 -rw-rw-r-- 1 5418 2024-12-05 10:07:54 convert-pth-to-ggml.py
462 8 -rw-rw-r-- 1 4377 2024-12-05 10:07:54 CMakeLists.txt
483 44 -rw-rw-r-- 1 41202 2024-12-05 10:07:54 chat.cpp
512 4 -rw-rw-r-- 1 3254 2024-12-05 10:07:54 utils.h
504 20 -rw-rw-r-- 1 19260 2024-12-05 10:07:54 utils.cpp
O utilitário make
vai invocar a compilação e gerar dois executáveis. Note que o executável chat
tem menos que 500 KB, faz uso de apenas algumas bibliotecas.
$ ldd chat
linux-vdso
libstdc++
libm.so
libgcc_s.so
libpthread.so
libc.so
ld-linux-x86-64
Testes futuros
https://thesecmaster.com/blog/how-to-turn-your-raspberry-pi-into-an-ai-chatbot-server