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

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](https://github.com/prismml-eng/llama.cpp?utm_source=chatgpt.com) | Base do `llama.cpp` modificada para suportar modelos ternários, incluindo o Bonsai 27B com quantização PTQ1\_0. | Base principal |
| TurboQuant | [amesianx/turboquant](https://github.com/amesianx/turboquant?utm_source=chatgpt.com) | 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](https://github.com/jarkevithwlad/turboquant-prismml-cuda?utm_source=chatgpt.com) | 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](https://github.com/RaymondHuang210129/llama.cpp-adaptive-kv-streaming?utm_source=chatgpt.com) | 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](https://github.com/lucasnsa/llama.cpp/tree/feature/turboquant-2bit-kv-cache). Como resultado consegui chegar a 90k de contexto com o Ternary Bonsai 2 27B.

```shell
./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](https://pi.dev/) 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](https://zed.dev/) usei extensão com ACP e VSCode usei a extensão Pendant.
