O PRISMA rodando em modelo aberto, sem nenhuma API de terceiros.
O mesmo produto, as mesmas 17 perguntas com gabarito e o mesmo corretor, em quatro modelos. Nos três testes com pesos abertos, o processo do PRISMA estava impedido pelo sistema operacional de falar com qualquer endereço que não fosse a própria máquina. Esta página mostra os registros: o bloqueio, os pesos conferidos, os contadores dos dois lados, a máquina, e cada pergunta com a resposta e a nota.
O que isto prova e o que não prova. Prova que o PRISMA responde sem fornecedor de modelo, com pesos públicos conferidos byte a byte, em máquina que nós ligamos e desligamos. Não prova que já foi instalado dentro de uma empresa: o 27B e o Flash-Next rodaram em GPU alugada num datacenter; só o teste do 4B rodou num computador pessoal. São registros nossos, não auditoria de terceiros. Endereços IP, nomes de servidor e e-mails foram retirados desta versão pública.
Quatro modelos, o mesmo gabarito.
| Modelo e onde rodou | Gabarito | Mediana por caso | Tokens/s | Idas ao modelo |
|---|---|---|---|---|
| DeepSeek por API API da DeepSeek (referência) | 17/17 | 4,3 s | 228 | 48 |
| Qwen3.8-27B-FP8 1× RTX PRO 6000 96 GB alugada (RunPod, Islândia), vLLM 0.29 | 16/17 | 8,6 s | 46 | 63 |
| Qwen3.8-Flash-Next-FP8 2× RTX PRO 6000 96 GB, contexto cortado a 32k | 14/17 | 30,0 s | 23 | 77 |
| Qwen3.5-4B (Q4) GPU de um notebook: RTX 4050 Laptop 6 GB, Ollama 0.32 | 13/17 | 10,5 s | 44 | 53 |
A barra combinada antes do teste era 15 de 17, turno mediano abaixo de 30 s e nenhuma chamada de ferramenta malformada. O 27B passou. O caso que ele perdeu é de notação: fundo certo e valor certo, escrito "R$ 3.424 bi" com ponto onde o português usa vírgula. As três perdas do Flash-Next são respostas vazias por estouro do contexto de 32 mil tokens, limite imposto pela memória das placas, não pelo modelo. O 4B errou conta: somou subclasses por cima do total.
Nenhuma API de terceiros estava ao alcance.
O serviço do PRISMA rodou sob um filtro de rede do kernel: só o endereço de laço é permitido. De dentro do próprio processo, tentamos falar com a DeepSeek, a OpenAI e o Hugging Face.
De dentro do processo
# 2026-09-19T01:31:30Z de DENTRO do cgroup da unidade prisma-qwen (filtro IPAddressDeny=any ativo): https://api.deepseek.com -> 000 (Connection timed out after 8002 milliseconds) https://api.openai.com -> 000 (Connection timed out after 8002 milliseconds) https://huggingface.co -> 000 (Connection timed out after 8002 milliseconds) http://127.0.0.1:8001/v1/models (tunel, com token) -> 200 # o mesmo curl FORA do cgroup, para comparar: https://api.deepseek.com -> 401
A unidade do serviço
[Unit] Description=PRISMA — instancia de teste com modelo aberto (vLLM por tunel) [Service] EnvironmentFile=/home/ubuntu/prisma-qwen.env ExecStart=/home/ubuntu/app/prisma-app/backend/.venv/bin/python -m app.main IPAddressDeny=any IPAddressAllow=localhost [Install] IPAddressAllow=127.0.0.0/8 ::1/128 IPAddressDeny=0.0.0.0/0 ::/0 EnvironmentFiles=/home/ubuntu/prisma-qwen.env (ignore_errors=no)
Variáveis de ambiente do processo (só os nomes)
# nomes das variaveis do ambiente do processo (so nomes) HOME INVOCATION_ID JOURNAL_STREAM LANG LOGNAME MEMORY_PRESSURE_WATCH MEMORY_PRESSURE_WRITE PATH PRISMA_ACERVO PRISMA_BANCO PRISMA_BASE_MODELO PRISMA_CHAVE_MODELO PRISMA_COOKIE_SEGURO PRISMA_CORPO_EXTRA PRISMA_HOST PRISMA_MCP_PYTHON PRISMA_MODELO PRISMA_PORTA PRISMA_TRACO QWEN_API_KEY SHELL SYSTEMD_EXEC_PID USER
Nenhuma variável DEEPSEEK ou OPENAI. A porta 8001 é um túnel SSH aberto pelo servidor do PRISMA até a máquina do modelo, onde o vLLM escutava só em 127.0.0.1.
Os pesos são os públicos, byte a byte.
Os dois modelos foram baixados do Hugging Face no commit fixado, e cada arquivo teve o sha256 conferido contra o que o Hugging Face publica. Qualquer pessoa refaz essa conferência sem depender de nós.
# Qwen/Qwen3.8-27B-FP8 @ 017b9c7af6b5689d5dd426a76e0bc077eb5ca20a: 81 entradas no Hugging Face # Qwen/Qwen3.8-27B-FP8: 30.89 GB em disco # Qwen/Qwen3.8-Flash-Next-FP8 @ 236dfdf285828023ca3bcd3f37366c58a3469b13: 144 entradas no Hugging Face # Qwen/Qwen3.8-Flash-Next-FP8: 185.56 GB em disco # arquivos com problema: 0 ok-sha256 layers-0.safetensors 07f700e293baeaf3cd4240c3df1a948c4403f16961ea7979e86c8d6a9f8fd466 ok-sha256 layers-1.safetensors 35840b5d452c6e438d000e5c1d8d1bc793d257394404689b8f9424749eee8edc ok-sha256 layers-10.safetensors ab5fbc076ccd6514aba3ab67a0ac1d6701ad395d40cccc0086cf0284ef5d68c9 ok-sha256 layers-11.safetensors 076b4ba44e9311c8fb8fdc0045f8ce9fd0c75584ade4e95510056b7db4b7ec61 ok-sha256 layers-12.safetensors 86d8ec0b8fc8e3ffbdfd667b97050533ddf5a4d273b4fe1190a4335542c52829 ok-sha256 layers-13.safetensors 71dd986134f4338a7b8290ed24993ad34a0f77b76a4cc060fe6403e36dcdda5b ...
Os números dos dois lados batem.
O PRISMA registra cada ida ao modelo. O vLLM, do outro lado do túnel, tem os próprios contadores. No teste do 27B:
O que rodou, e onde.
A placa (GPU alugada, teste do 27B)
Sat Sep 19 01:21:02 2026 +-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 595.91.07 Driver Version: 595.91.07 CUDA Version: 13.2 | +-----------------------------------------+------------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 NVIDIA RTX PRO 6000 Blac... On | 00000000:77:00.0 Off | 0 | | N/A 30C P8 35W / 600W | 0MiB / 97887MiB | 0% Default | | | | Disabled | +-----------------------------------------+------------------------+----------------------+
Durante o teste: 267 amostras · uso até 100% · memória até 90.383 MiB. No Flash-Next: 932 amostras · memória até 94.587 MiB por placa.
A linha do servidor do modelo
vllm serve /workspace/prisma/modelos/Qwen3.8-27B-FP8 --host 127.0.0.1 --port 8000 --served-model-name qwen3.8-27b --tensor-parallel-size 1 --max-model-len 65536 --gpu-memory-utilization 0.92 --enable-auto-tool-choice --tool-call-parser qwen3_xml --reasoning-parser qwen3 --enable-log-requests --enable-log-outputs
Versões
vllm 0.29.0 | torch 2.13.0+cu130 | cuda 13.0 VLLM_USE_FLASHINFER_SAMPLER=0 TORCH_CUDA_ARCH_LIST=12.0 VLLM_CACHE_ROOT=/workspace/prisma/cache/vllm
Os pods alugados
| Pod | GPU | Datacenter | Preço |
|---|---|---|---|
| 30nges3iz2cj08 | 1× RTX PRO 6000 Blackwell Server Edition | EUR-IS-1 | US$ 2,09/h |
| i425oxd4f0v7ry | 1× RTX PRO 6000 Blackwell Server Edition | EUR-IS-1 | US$ 2,09/h |
| 0jhhbqd2nb76oz | 2× RTX PRO 6000 Blackwell Server Edition | EUR-IS-1 | US$ 4,18/h |
A primeira subida do 27B morreu no aquecimento (o FlashInfer não reconheceu a placa dentro daquela imagem) e foi refeita. Fica registrada.
O mesmo PRISMA, com o modelo numa placa de 6 GB.
O Qwen3.5-4B quantizado rodou inteiro na placa de vídeo de um computador pessoal, servido pelo Ollama só em 127.0.0.1. O PRISMA, na nuvem, chegou até ele por um túnel SSH aberto pelo próprio computador. Funcionou e chamou as 14 ferramentas sem errar o formato, mas o modelo é pequeno demais: fez 13 de 17 e errou conta em dois patrimônios.
Sat Sep 19 13:56:01 2026 +-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 591.94 Driver Version: 591.94 CUDA Version: 13.1 | +-----------------------------------------+------------------------+----------------------+ | GPU Name Driver-Model | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 NVIDIA GeForce RTX 4050 ... WDDM | 00000000:01:00.0 On | N/A | | N/A 53C P8 2W / 45W | 5781MiB / 6141MiB | 11% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+
Durante o teste: 98 amostras · uso até 100% · memória até 5.837 MiB de 6.141.
O bloqueio de rede, de novo
# 2026-09-19T11:56:33Z de DENTRO do cgroup da unidade prisma-qwen (IPAddressDeny=any ativo):
https://api.deepseek.com -> 000 (Connection timed out after 6002 milliseconds)
https://api.openai.com -> 000 (Connection timed out after 6002 milliseconds)
http://127.0.0.1:8001/v1/models (tunel reverso ate o PC do David) -> 200
# quem escuta na 8001 da AWS:
LISTEN 0 128 127.0.0.1:8001 0.0.0.0:* users:(("sshd",pid=1185,fd=7))
Cada pergunta, a resposta inteira e a nota.
Escolha o modelo. As respostas são as que o PRISMA devolveu no teste, sem edição. A nota é do corretor automático, o mesmo para todos.
Para baixar e conferir.
| Arquivo | O que é | Tamanho |
|---|---|---|
| RELATORIO.md | Relatório do teste na GPU alugada (27B e Flash-Next) | 10 KB |
| RELATORIO-LOCAL.md | Relatório do teste na GPU do notebook (4B) | 5 KB |
| 27b-bloqueio-de-rede.txt | De dentro do processo: DeepSeek, OpenAI e Hugging Face inalcançáveis; só o túnel responde | 0 KB |
| 27b-unidade-systemd.txt | A unidade do serviço, com IPAddressDeny=any e IPAddressAllow=localhost | 2 KB |
| 27b-variaveis-de-ambiente.txt | Nomes das variáveis do processo: nenhuma chave DeepSeek ou OpenAI | 0 KB |
| 27b-traco-por-pedido.jsonl | Uma linha por ida ao modelo: destino, tokens, tempo, ferramentas | 14 KB |
| 27b-comando-vllm.txt | A linha exata do vllm serve | 0 KB |
| 27b-versoes.txt | vLLM, torch e CUDA | 0 KB |
| 27b-nvidia-smi.txt | A placa, antes de carregar o modelo | 2 KB |
| 27b-gpu-durante.csv | Uso e memória da GPU a cada 5 s durante o teste | 29 KB |
| 27b-contadores-vllm.prom | Contadores do próprio vLLM no fim da sessão | 55 KB |
| 27b-arranque-do-pod.log | Arranque do pod: placa, sshd, modelo, comando | 3 KB |
| 27b-nota-do-corretor.txt | Saída do corretor, caso a caso | 2 KB |
| pesos-sha256.txt | sha256 de cada arquivo de peso, conferido contra o Hugging Face (225 arquivos) | 22 KB |
| flash-comando-vllm.txt | Flash-Next: a linha do vllm serve, com as concessões de memória | 0 KB |
| flash-contadores-vllm.prom | Flash-Next: contadores do vLLM | 58 KB |
| flash-nota-do-corretor.txt | Flash-Next: saída do corretor | 2 KB |
| deepseek-nota-do-corretor.txt | DeepSeek: saída do corretor | 2 KB |
| notebook-bloqueio-de-rede.txt | Notebook: o mesmo bloqueio; a porta do modelo é o túnel até o PC | 0 KB |
| notebook-traco-por-pedido.jsonl | Notebook: uma linha por ida ao modelo | 12 KB |
| notebook-nvidia-smi.txt | Notebook: a placa (RTX 4050 Laptop) | 2 KB |
| notebook-gpu-durante.csv | Notebook: uso e memória da GPU a cada 5 s | 9 KB |
| notebook-modelfile.txt | Notebook: o modelo servido e o contexto | 12 KB |
| notebook-nota-do-corretor.txt | Notebook: saída do corretor | 5 KB |
| 27b-servidor-vllm-recorte.log | Recorte do log do vLLM: arranque e as 64 linhas de pedido (o log inteiro tem 15.001 linhas e traz o prompt de sistema. por isso não é publicado) | 19 KB |
O texto inteiro, como foi escrito no dia.
Relatório do teste na GPU alugada (27B e Flash-Next)
PRISMA com modelo aberto hospedado por nós — relatório do teste de 19/09/2026
Todas as horas são UTC. Cada afirmação abaixo aponta para o arquivo desta pasta
que a sustenta. SHA256SUMS fecha o conjunto.
1. O que foi feito
O PRISMA (o mesmo backend, o mesmo MCP do acervo, o mesmo front React que está em
prisma.davidariasfinance.com) respondeu às perguntas de teste usando, no lugar
da API da DeepSeek, o Qwen3.8-27B-FP8: pesos abertos (Apache 2.0) baixados
do Hugging Face, servidos por vLLM 0.29.0 numa GPU RTX PRO 6000 Blackwell
96 GB alugada na RunPod (Secure Cloud, datacenter EUR-IS-1, Islândia). O
PRISMA ficou na AWS (Estocolmo) e falou com o modelo por um túnel SSH aberto
pela AWS; o vLLM escutava só em 127.0.0.1 dentro do pod, sem porta pública.
No mesmo dia, com as mesmas perguntas, o mesmo código rodou contra a DeepSeek (braço de referência). A produção (porta 8787) não foi tocada.
2. O que isto prova, e o que não prova
Prova:
- Nenhuma API de modelo de terceiros foi usada no braço Qwen. O processo do
backend e o subprocesso do acervo rodaram sob
IPAddressDeny=any+IPAddressAllow=localhost(filtro de rede do kernel, por cgroup). De dentro desse cgroup,api.deepseek.com,api.openai.comehuggingface.conão conectam;127.0.0.1:8001(o túnel) responde 200 com o token e 401 sem ele. →aws/resultados/qwen27b-bloqueio.txt,qwen27b-unidade.txt. O ambiente do processo não tem nenhuma variávelDEEPSEEK*nemOPENAI*. →qwen27b-ambiente-nomes.txt(só nomes, nunca valores). As 63 idas ao modelo foram todas parahttp://127.0.0.1:8001/v1/. →qwen27b-traco.jsonl. A única conexão de saída do servidor durante o braço foi o SSH para o pod ([ip]:10666); as outras linhas são o meu próprio SSH de controle, de entrada. →qwen27b-conexoes.txt. - Os pesos são os públicos, byte a byte. Commit
017b9c7af6b5689d5dd426a76e0bc077eb5ca20adeQwen/Qwen3.8-27B-FP8; os 81 arquivos conferidos contra o Hugging Face (sha256 dossafetensors, tamanho dos pequenos), 0 divergência. O mesmo para os 144 arquivos doQwen3.8-Flash-Next-FP8. →2026-09-19/fase1/sha256.txt. Qualquer pessoa refaz essa conferência sem depender de nós. - Os números dos dois lados batem. O traço do PRISMA soma 517.501 tokens de
entrada e 15.633 de saída em 63 pedidos; o teste de imagem, feito direto no
vLLM, somou 1.708 + 32 em 1 pedido. Os contadores do próprio vLLM no fim da
sessão: 519.209 de entrada, 15.665 de saída, 64 pedidos concluídos,
0 erro. É a mesma conta, até o último token.
→
pod-fase2-27b/fase2-27b/metrics-fim.prom,qwen27b-traco.jsonl,qwen27b-imagem.json. - A máquina.
nvidia-smiantes, depois e a cada 5 s durante (267 amostras, uso até 100%, memória até 90.383 MiB de 97.887), a linha exata dovllm serve, o log inteiro do servidor com cada pedido e cada resposta (14.842 linhas), versões de tudo. →pod-fase2-27b/fase2-27b/. Criação e término de cada pod, com id, GPU, datacenter e US$/h, nas respostas cruas da API da RunPod. →2026-09-18/runpod/,2026-09-19/runpod/.
Não prova, e ninguém deve ler isto aqui: que rodou dentro da empresa de um cliente. A GPU é de um datacenter da RunPod. O nome correto é auto-hospedado com pesos abertos: nada na receita depende da RunPod nem da AWS, então ela roda igual num servidor do cliente ou na conta de nuvem dele. Também é registro nosso, não auditoria de terceiros; o que terceiros atestam é a fatura da RunPod (exportável do painel) e os hashes do Hugging Face.
3. Resultado
DeepSeek (API, deepseek-chat) |
Qwen3.8-27B-FP8 (nosso, 1× RTX PRO 6000) | |
|---|---|---|
| Fumaça (CNPJ do Cloudwalk Bela) | certo, 3,2 s | certo, 3,5 s |
| Gabarito de 17 casos (mesmo corretor) | 17/17 | 16/17 |
| — numéricos (PL, subordinação) | 10/10 | 10/10 |
| — extremos (mês de pico) | 4/4 | 4/4 |
| — armadilhas | 2/2 | 2/2 |
| — atribuição (fundo irmão) | 1/1 | 0/1 (ver nota) |
| Tempo mediano por caso | 4,3 s | 8,6 s |
| Bateria de 5 turnos, total | 17,8 s | 87,7 s |
| Tempo até o 1º token (mediana por ida) | 0,80 s | 0,49 s |
| Velocidade de geração (mediana) | ~217 tokens/s | ~45 tokens/s |
| Idas ao modelo (fumaça + bateria + gabarito + front) | 48 | 63 |
| Chamadas de ferramenta malformadas | 0 | 0 |
| Leitura de imagem (página de regulamento → 2 taxas) | não testado | certo, 1,9 s |
| Busca no acervo | só lexical | só lexical |
A barra combinada antes do teste era ≥ 15/17, turno mediano < 30 s e zero chamada malformada. O 27B passou.
Nota sobre o caso perdido. A pergunta era o PL do SOLIS CAPITAL CORE, e a
armadilha é citar o número do fundo irmão. O Qwen pegou o fundo certo e o valor
certo, mas escreveu "R$ 3.424 bi", com ponto onde o português usa vírgula
("3,424 bi"). O corretor lê isso como outro número e reprova, com razão: é erro
de notação, não de dado nem de atribuição. Mantive a nota estrita. É o tipo de
coisa que uma linha no prompt de sistema resolve, e vale medir de novo depois.
→ aws/resultados/qwen27b-nota.txt, qwen27b-gabarito.json.
Sobre a velocidade. O Qwen responde mais rápido no primeiro token e gera
~5× mais devagar: um modelo denso de 27B numa placa só é limitado pela banda de
memória. Na bateria a diferença cresce porque ele escreve respostas mais longas e
chama ferramenta em turnos em que a DeepSeek respondeu de memória da conversa
(fidc_buscar, fidc_comparar, fidc_indicadores). Não foi usada decodificação
especulativa (o repositório traz os pesos MTP para isso), que é o primeiro ajuste
a tentar.
Front. O React de produção, em Chromium headless, 5 turnos: login em 76 ms,
1º texto entre 1,5 e 6,5 s, turnos de 14,7 a 40,9 s. Os 2 erros de console são o
401 da checagem de sessão antes do login, que a produção também mostra.
→ 2026-09-19/fase2-27b/front/ (capturas por turno + app-resultado.json).
3b. Segundo modelo: Qwen3.8-Flash-Next-FP8 (rodou, mas em condição apertada)
MoE de 125B com ~6B ativos, 185,6 GB de pesos (licença Qwen Community 1.0, não
Apache). Rodou em 2× RTX PRO 6000 96 GB (US$ 4,18/h), --tensor-parallel-size 2,
pela mesma instância travada e pelo mesmo túnel. Carregou 86,5 GiB por placa em
14 min 22 s e sobrou 2,96 GiB para cache. Para caber, três concessões que
mudam o resultado e por isso ficam à vista: contexto limitado a 32.768
tokens, sem CUDA graphs (--enforce-eager) e no máximo 4 sequências.
→ aws/resultados/pod-fase3-flash/fase3-flash/ (comando.txt, servidor.log,
nvidia-smi-durante.csv com 932 amostras, pico de 94.587 MiB por placa).
| Qwen3.8-Flash-Next-FP8 (2× RTX PRO 6000, modo apertado) | |
|---|---|
| Fumaça | certo, 8,6 s |
| Gabarito de 17 casos | 14/17: as 3 perdas são respostas vazias por estouro de contexto; os 14 casos respondidos estão todos certos |
| Tempo mediano por caso | 30 s |
| Bateria de 5 turnos | 267 s, com o 1º turno vazio pelo mesmo estouro |
| Velocidade de geração | ~22 tokens/s (sem CUDA graphs; não é o que o modelo entrega) |
| Chamadas de ferramenta por caso (mediana) | 2, com casos de 9 e 11 (DeepSeek e 27B: 1) |
| Leitura de imagem | certo, 3,5 s |
| Bloqueio de rede, túnel, contadores | iguais ao 27B: traço 875.152 + 16.223 tokens em 77 pedidos, mais a imagem (1.708 + 32), contra 876.860 / 16.255 / 78 do vLLM |
Leitura honesta: este braço prova que o Flash-Next roda no PRISMA por
esta arquitetura e acerta o que consegue responder. Não mede o modelo de forma
justa. Ele abre e lê mais documentos por pergunta que os outros dois, e com o
teto de 32k (imposto pela memória, não pelo modelo, que aceita 262k) cinco
pedidos passaram do limite e o vLLM recusou (400 maximum context length).
A velocidade também é a do modo de economia de memória. Para julgar o Flash-Next
é preciso 2×H200 ou 4× RTX PRO 6000 (US$ 8–9/h, em outro datacenter).
→ flash-nota.txt, flash-gabarito.json, flash-journal-prisma.txt, flash-bloqueio.txt.
Conclusão dos dois: para "roda no seu ambiente", o 27B é o candidato: cabe numa placa só, passou na barra (16/17, zero chamada malformada, lê imagem) e o custo de hospedar é o de uma GPU de 48–96 GB. O que falta nele é velocidade (decodificação especulativa, ou duas placas) e uma linha de prompt sobre notação numérica em português.
4. O que quebrou no caminho (fica registrado)
- O volume de 220 GB estourou a cota: o Flash-Next tem 185,6 GB, não os ~157 GB
que eu tinha. Volume aumentado para 260 GB, download retomado.
→
2026-09-18/fase1-tentativa1/. - Primeira subida do 27B morreu no aquecimento: o FlashInfer não reconheceu a
Blackwell dentro da imagem
runpod/pytorch("requires sm75 or higher"), com o modelo já carregado. Resolvido com o amostrador nativo do vLLM eTORCH_CUDA_ARCH_LIST=12.0. Custou US$ 0,31. →2026-09-19/fase2-27b-tentativa1/. - A primeira rodada do braço DeepSeek foi descartada por dois erros meus (o campo
da resposta inteira não estava sendo gravado; a primeira pergunta do gabarito
bateu no limite de 6/min). Refeita inteira. →
aws/resultados/descartado-0100/. - O pod do 27B marcou FECHADO mas não se apagou sozinho; terminei pela API. No Flash-Next terminei pela API logo após copiar os logs.
- No braço Flash-Next o teste de imagem rodou às 02:22, enquanto o gabarito ainda corria (um laço de espera meu venceu antes da hora); pode ter somado alguns segundos a um caso.
5. Custos (RunPod)
Saldo no começo US$ 6,39. Fase 1 (download, 3 pods de US$ 0,24/h): ~US$ 0,25. 27B: tentativa morta US$ 0,31 + sessão boa de ~24 min a US$ 2,09/h ≈ US$ 0,85. Flash-Next: sessão de ~40 min a US$ 4,18/h ≈ US$ 2,75 (14 min só carregando os pesos do volume de rede). Saldo no fim US$ 2,29; gasto total do teste ≈ US$ 4,10. Volume de 260 GB: US$ 0,61/dia enquanto existir.
Relatório do teste na GPU do notebook (4B)
PRISMA com o modelo rodando na GPU do notebook do David — 19/09/2026
Continuação de ../evidencias/RELATORIO.md (mesmo dia, mesmas perguntas, mesmo
corretor). Aqui o modelo não está num datacenter: está na placa de vídeo do
computador do David. Horas do servidor em UTC; as do PC em hora local (UTC+2).
1. O que rodou, e onde
| peça | onde | prova |
|---|---|---|
| Modelo Qwen3.5-4B (4,7B parâmetros, Q4_K_M, 3,39 GB, Apache 2.0, visão + ferramentas) | NVIDIA GeForce RTX 4050 Laptop, 6 GB, no PC do David | nvidia-smi-antes.txt, nvidia-smi-durante.csv (98 amostras, uso até 100%, até 5.837 MiB), ollama-ps.json (3,6 GB de 3,6 GB na GPU, contexto 24.576), ollama-servidor.log (offloaded 34/34 layers to GPU, flash_attn = enabled) |
Servidor do modelo: Ollama 0.32.1, escutando só em 127.0.0.1:11434 |
PC do David | ollama-servidor.log, ollama-modelos.json (digest 2a654d98e6fb… do qwen3.5:4b), ollama-modelfile.txt, ollama-pull.log |
| PRISMA (backend, MCP do acervo, login, cota) | AWS, Estocolmo, instância de teste na 8788 | aws/resultados/local4b-unidade.txt |
| Ligação | túnel SSH reverso aberto pelo PC: a porta 127.0.0.1:8001 da AWS é o sshd, que entrega no Ollama do PC. Nada do PC fica exposto à internet |
local4b-bloqueio.txt (LISTEN 127.0.0.1:8001 … sshd), tunel-reverso.log |
Por que 4B e não 8B: a placa tem 6 GB e o PRISMA manda de 4 a 16 mil tokens por pedido (só o prompt de sistema com as 14 ferramentas são 4,3 mil). Um 8B/9B quantizado ocupa 5 a 6,6 GB e não deixa espaço para esse contexto; derramaria para a CPU. O 4B com contexto de 24.576, atenção flash e cache em 8 bits ficou 100% na GPU. (Na primeira tentativa, sem esses dois ajustes, ficou 18% na CPU.) O Qwen3.8 não tem tamanho pequeno; o Qwen3.5 é a geração anterior da mesma família.
2. Prova de que nenhuma API de terceiros foi usada
Igual aos outros braços: a unidade prisma-qwen roda sob IPAddressDeny=any +
IPAddressAllow=localhost. De dentro do cgroup dela, api.deepseek.com e
api.openai.com não conectam; 127.0.0.1:8001 responde 200. O ambiente do
processo não tem variável DEEPSEEK* nem OPENAI*. As 53 idas ao modelo foram
todas para http://127.0.0.1:8001/v1/.
→ local4b-bloqueio.txt, local4b-ambiente-nomes.txt, local4b-traco.jsonl.
Conta cruzada: o log do Ollama no PC registra 56 pedidos de
/v1/chat/completions; são as 53 idas do traço do PRISMA, 1 do teste de imagem
e 2 de aquecimento que eu fiz localmente antes de abrir o túnel.
3. Resultado
| DeepSeek (API) | Qwen3.8-27B (RunPod, 1 GPU 96 GB) | Qwen3.5-4B (GPU do notebook) | |
|---|---|---|---|
| Fumaça (CNPJ do Cloudwalk Bela) | certo | certo | errou: chamou a ferramenta certa e desistiu ("não foi possível identificar") |
| Gabarito de 17 casos | 17/17 | 16/17 | 13/17 |
| — numéricos | 10/10 | 10/10 | 7/10 |
| — extremos | 4/4 | 4/4 | 4/4 |
| — armadilhas | 2/2 | 2/2 | 1/2 |
| — atribuição | 1/1 | 0/1 (notação) | 1/1 |
| Tempo mediano por caso | 4,3 s | 8,6 s | 10,5 s |
| Bateria de 5 turnos | 17,8 s | 87,7 s | 52,1 s |
| 1º token (mediana por ida) | 0,80 s | 0,49 s | 2,35 s |
| Geração | ~217 tok/s | ~45 tok/s | ~43 tok/s |
| Chamadas de ferramenta malformadas | 0 | 0 | 0 |
| Leitura de imagem (página de regulamento) | — | certo, 1,9 s | certo, 15,7 s |
O que os erros são. Não é encanamento, é o modelo:
num-pl-4: a ficha traz o PL total e o PL por subclasse. O 4B somou a sênior e a subordinada por cima do total e afirmou R$ 13,27 bi onde o certo é R$ 8,46 bi, com linha de fonte e tudo.num-pl-20: o mesmo erro (R$ 6,15 bi onde é R$ 3,47 bi).num-pl-0e a fumaça: a ferramenta devolveu "termo ambíguo" com candidatos, e ele ficou tentando variações do nome até desistir, em vez de escolher o candidato.arm-inad-zero: a conclusão está certa ("não é risco zero"), mas ele inventou números de apoio.
Número errado dito com confiança é o pior erro possível neste domínio. O 4B não serve para o PRISMA como está. O que ele prova é outra coisa: a arquitetura aceita um modelo em qualquer lugar, inclusive na mesa de quem usa, e até um 4B quantizado chama as 14 ferramentas sem errar o formato e lê imagem. A qualidade da resposta é função do tamanho do modelo, e o 27B é onde ela chega perto da DeepSeek.
4. O que mexi no PC
- Parei o
deskapp serve(porta 8765,trading_agents/desk), a pedido. - Baixei
qwen3.5:4b(3,4 GB) e crieiprisma-local-4b(o mesmo modelo comnum_ctx 24576). Ficam em~/.ollama;ollama rmapaga. - Reiniciei o Ollama com
OLLAMA_FLASH_ATTENTION=1,OLLAMA_KV_CACHE_TYPE=q8_0, preso a127.0.0.1; no fim devolvi o Ollama normal.