Laya, JEV e Clef contra as minhas regras: um benchmark de decisão
Três modelos que escolhem um label e devolvem probabilidades, testados em dois trabalhos reais meus. O fine-tune pequeno ganhou onde foi treinado, o de 27B ganhou onde ninguém treinou nada, e no esforço de PR as regras venceram todos.
Um modelo de decisão (programa que escolhe entre opções) recebe um contexto (as informações necessárias) e uma lista de opções. Ele escolhe uma e devolve probabilidades (chances em números). Tenho dois trabalhos assim: descobrir a intenção de uma frase falada para o Home Assistant e estimar o esforço de um PR (pedido para revisar mudanças no código). Em 26 e 27 de outubro, medi três candidatos e uma referência pequena, comparando com o que eu já tinha rodando.
Os candidatos:
- Laya: meu fine-tune (ajuste feito com exemplos) do laya-multilingual, com 322 milhões de parâmetros (valores internos do modelo). Ele roda no Mac com MPS (recurso que acelera os cálculos). Contei como treinei em outro artigo.
- JEV: uma API (serviço que recebe opções e devolve uma escolha) de decisão tipada (escolha, nota ou sim/não) da TypeSafe. Custa US$ 0,04 por milhão de tokens de entrada (unidades de texto enviadas ao serviço). Só aceita texto e fica hospedada nos EUA. Os parâmetros não são publicados.
- Clef: o
clef:27b, um modelo de decisão com 27 bilhões de parâmetros, servido pelo endpoint/v1/systemonedo Ollama. Endpoint é o endereço usado para chamar o serviço. Testei a versão de nuvem e a local. A versão local exige um download de 18 GB. - tev1:4b: modelo local com 4 bilhões de parâmetros, usado como referência pequena.
Esforço de PR: as regras ganham
Usei 67 casos reais do log de shadow (registro de testes em que o modelo não muda a decisão). Cada caso gerou duas decisões, num total de 134. As regras sem modelo acertaram 99,3%.
Mesmos 67 casos reais, duas cabeças cada. Pisos determinísticos são regras sem modelo.
Ver dados
| Pisos determinísticos | 99,3% |
|---|---|
| Clef (27B, nuvem) | 96,3% |
| Laya (decisões tipadas) | 92,5% |
| Classe majoritária | 66,4% |
| Laya base, sem fine-tune | 15,7% |
O Clef em nuvem acertou 96,3%. Seu p50 (tempo mediano) foi 557 ms. Brier de 0,095 e ECE de 0,12 são duas medidas para avaliar as probabilidades. O Laya acertou 92,5% em 26 ms, mas teve Brier de 0,34 e ECE de 0,35. Ele acerta, mas suas probabilidades não refletem bem essa certeza. A probabilidade máxima média foi 0,58. O Laya base, sem o fine-tune, acertou 15,7%, abaixo até de escolher a classe mais comum (66,4%).
Laya local (Ollama, bf16) contra Clef em nuvem.
Ver dados
| Laya | 26 ms |
|---|---|
| Clef (nuvem) | 557 ms |
O Laya deu os mesmos números no Ollama (bf16, formato de números de 16 bits, 26 ms) e no Python com MPS (30 ms, 2,8 GB de RSS, memória usada pelo processo, e 21 s para carregar).
Para decidir onde colocar cada modelo no roteador, comparei 36 tarefas sintéticas (criadas para o teste). Clef em nuvem e Clef local acertaram 83% das estimativas de esforço. Levaram 580 ms e 3,3 s. JEV acertou 69% em 1,5 s. tev1:4b acertou 47% em 350 ms. Minha conclusão: JEV não ajuda no roteamento. Clef local também não compensa. Teve a mesma acurácia, levou cerca de 6 vezes mais tempo e ocupa 18 GB numa máquina que já sofre com falta de memória.
Clef em nuvem e local empatam em 83%; a diferença está na latência e na memória.
Ver dados
| Clef (nuvem) | 83% |
|---|---|
| Clef (local) | 83% |
| JEV | 69% |
| tev1:4b | 47% |
Intenção da casa: o fine-tune ganha onde foi treinado
Aqui o teste usou dois conjuntos: 44 linhas de probe (perguntas escritas à mão) mais 258 linhas de held-out (dados separados para teste). Medi o percentual de acerto, as ações erradas entre as executadas com p >= 0,70 (probabilidade de pelo menos 0,70) e o p50.
- Laya: 98,0%, 4 ações erradas em 253 executadas, 55 ms.
- JEV: 81,5%, 15 em 184, 1,6 s.
- tev1:4b: 66,9%, 14 em 133, 4,3 s.
O held-out é a distribuição do próprio Laya, então favorece o Laya.
Ver dados
| Laya | 98,0% |
|---|---|
| JEV | 81,5% |
| tev1:4b | 66,9% |
No probe de 44 linhas, Laya acertou 41, JEV acertou 34 e tev1 acertou 28. Os dados de held-out vêm da distribuição do próprio Laya, então favorecem Laya. Mesmo assim, a diferença aparece no probe escrito à mão.
O endpoint /v1/systemone do Ollama limita cada escolha a 26 candidatos. A casa tem 77
labels (nomes das opções). Por isso, tev1, que usa o mesmo endpoint, precisou de cinco
chamadas para comparar as opções. JEV avaliou as 77 em uma chamada. Clef ficou fora
desse teste. Em 21 de outubro, eu já tinha decidido mantê-lo fora da casa.
O que ficou decidido
Laya continua como único modelo de decisão no assistente da casa. Clef roda em shadow (registra sugestões sem mudar o resultado) nas estimativas de esforço de PR. As regras continuam no controle porque já decidem 99,3% desses casos corretamente.
O registro desse shadow precisa guardar qual modelo pedi. O campo model da resposta
remove o sufixo -cloud. Sem guardar o pedido, não dá para distinguir a versão de
nuvem da local.
