Skip to main content

LLM Local Com Pouca VRam - llama.ccp + turbo quant 2 com Bonsai 2 27B

Updated 3 min readMarkdown

Como sempre e de forma recorrente na minha vida me interessei por um assunto e usei minhas horas vagas aos finais de semana para experimentar, descobrir e desvendar.

Há tempos venho me interessando por rodar IA Localmente - Qwen, Bonsai, Wan, DeepSeek, GPT, Laya, etc - porem não estava contente em fazer isso no meu computador principal que alias é bem capaz de fazer isso, sou chato e cuidado com ele e receoso de torrar minha querida GPU (Ainda mais nos preços atuais de mercado).

Surgiu para mim a oportunidade de adquirir uma RTX 3070 8GB e junto dela um chipset A520 com um Ryzen 5700G e 16GB Ram a um preço bacana.

O desafio aqui é evidente fazer 8GB de VRam render sem fazer offload dos modelos.

Testei alguns modelos entre eles os que mais gostei foram o Qwen 2.5 Coder 7B, Qwen3.5 9B Q4 e Ternary Bonsai 2 27B, todos com o mesmo problema de contexto reduzido.

LLama.cpp Com Turbo Quant

Instalei a ultima versão do Debian Server em um SSD, llama.cpp pre compilado e baixei alguns modelos. Evidentemente não pude trazer contextos maiores que 8k em alguns e não mais que 4k em modelos quantizados, a pouca VRam estava me limitando então pesquisando descobri alguns forks bem interessantes:

Projeto / Fork Repositório GitHub Contribuição para o projeto Papel
PrismML prismml-eng/llama.cpp Base do llama.cpp modificada para suportar modelos ternários, incluindo o Bonsai 27B com quantização PTQ1_0. Base principal
TurboQuant amesianx/turboquant Referência para os algoritmos de quantização e compressão do KV cache. Referência algorítmica
TurboQuant PrismML CUDA jarkevithwlad/turboquant-prismml-cuda Integração de TurboQuant com PrismML, incluindo implementação CUDA para KV cache quantizado. Referência de implementação
Adaptive KV Streaming RaymondHuang210129/llama.cpp-adaptive-kv-streaming Arquitetura de paginação do KV cache, transferência entre RAM e VRAM, prefetch assíncrono e gerenciamento adaptativo da memória GPU. Referência para evolução futura

Junto do GPT Astra juntei alguns forks que implementavam o Turbo Quant no Llama.cpp da Prism para poder rodar o Bonsai 2 com Turbo Quant resutando nesta branch aqui. Como resultado consegui chegar a 90k de contexto com o Ternary Bonsai 2 27B.

./bin/llama-server  
\-m /opt/models/bonsai2-heretic/Ternary-Bonsai-2-27B-Uncensored-Heretic-PTQ1\_0.gguf  
\--host 0.0.0.0  
\--port 8081  
\-ngl 99  
\-c 90112  
\-np 1  
\--jinja  
\--flash-attn on  
\--cache-type-k turbo2  
\--cache-type-v turbo2  
\--reasoning auto   
\--min-p 0  
\--mmproj /opt/models/bonsai2-heretic/mmproj-Q8\_0.gguf  
\--no-mmproj-offload  

Não é perfeito, perde-se um pouco mais de tempo no prefill porem abre caminho para usos mais extensos da LLM.

Cache K/V Consultas por bloco Prefill % da velocidade do Q4_1
Q4_1/Q4_1 Caminho convencional 870,36 tokens/s 100%
TURBO2/TURBO2 8 360,66 tokens/s 41,4%
TURBO2/TURBO2 4 418,57 tokens/s 48,1%

*testes usando llama-bench
**Não testei ainda usando 2 consultas por bloco

SandBox, Pi Agent, Zed e VSCode

Criei um sandbox com Docker + Pi Agent para realizar vários experimentos de forma isolada. Obtive bons resultados com os 90k de contexto. A compactação funcionou como esperado e a qualidade do trabalho foi muito bom.

Na IDE Zed usei extensão com ACP e VSCode usei a extensão Pendant.

No comments yet. Be the first to comment.