mirror of
https://github.com/mcloh/decision-models-benchmark.git
synced 2026-11-06 06:14:11 +00:00
Proteger dados sensíveis e atualizar andamento do plano
- Caminho do compartimento pai e CIDR do SSH saem do código para .secrets/oci-settings.json (fora do Git), com override por DMB_*. - Relatórios de sanidade deixam de gravar o hostname local. - tests/test_sensitive.py falha se OCIDs, chaves, IPs públicos ou valores de .secrets aparecerem em arquivos versionados. - tools/plan_progress.py gera o bloco de andamento por fase no plano. - Plano: status reais das tarefas de F0, F3 e F6; README e docs/05 com GPU em sa-saopaulo-1, runtime CUDA do Rizzo e pipeline sintético. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -19,13 +19,34 @@ flowchart LR
|
||||
|
||||
As fases F0–F1 (infra) e F2–F3 (dados) podem andar em paralelo.
|
||||
|
||||
<!-- PROGRESSO:INICIO -->
|
||||
**Andamento em 2026-10-07:** 40 de 78 tarefas concluídas (51%), 8 em andamento.
|
||||
|
||||
| Fase | Concluídas | Em andamento | Pendentes |
|
||||
|------|-----------|--------------|-----------|
|
||||
| F0 — Infraestrutura OCI | 6 | 2 | 2 |
|
||||
| F1 — Ambiente e artefatos | 9 | 0 | 0 |
|
||||
| F2 — Tarefas de decisão e taxonomia | 4 | 0 | 0 |
|
||||
| F3 — Dados e anotação | 5 | 6 | 1 |
|
||||
| F4 — Contrato JEV e adaptadores | 16 | 0 | 0 |
|
||||
| F5 — Controle de execução | 0 | 0 | 3 |
|
||||
| F6 — Piloto | 0 | 0 | 4 |
|
||||
| F7 — Desenvolvimento e calibração | 0 | 0 | 4 |
|
||||
| F8 — Teste final | 0 | 0 | 4 |
|
||||
| F9 — Métricas e análise | 0 | 0 | 8 |
|
||||
| F10 — Relatório e encerramento | 0 | 0 | 4 |
|
||||
| **Total** | **40** | **8** | **30** |
|
||||
|
||||
Legenda: `[x]` concluída · `[~]` em andamento ou parcial · `[ ]` pendente.
|
||||
<!-- PROGRESSO:FIM -->
|
||||
|
||||
---
|
||||
|
||||
## F0 — Infraestrutura OCI
|
||||
|
||||
- [x] **1.** Criar um compartment OCI dedicado ao benchmark.
|
||||
- ↳ `root/<compartimento-pai>/decision-models`. Recursos em `us-chicago-1`. OCIDs em `.secrets/artefatos-OCI.md` (fora do Git).
|
||||
- [ ] **2.** Aplicar as tags `projeto=benchmark-decisoes-ptbr`, `ambiente=benchmark` e `centro_custo=<definir>` aos recursos do projeto. *(Q13)*
|
||||
- ↳ `<compartimento-pai>/decision-models` (caminho em `.secrets/oci-settings.json`). Recursos em `us-chicago-1`. OCIDs em `.secrets/artefatos-OCI.md` (fora do Git).
|
||||
- [~] **2.** Aplicar as tags `projeto=benchmark-decisoes-ptbr`, `ambiente=benchmark` e `centro_custo=<definir>` aos recursos do projeto. *(Q13)*
|
||||
- ↳ Parcial: `projeto` e `ambiente` aplicadas como tags livres por `infra/oci/provision.py`. Falta `centro_custo`.
|
||||
- [ ] **3.** Criar um orçamento para o compartment.
|
||||
- ↳ **Em aberto por decisão (2026-10-07):** o uso está coberto por cota interna de engenharia. Não será criado no primeiro ciclo.
|
||||
@@ -33,7 +54,7 @@ As fases F0–F1 (infra) e F2–F3 (dados) podem andar em paralelo.
|
||||
- ↳ Em aberto, porque depende da tarefa 3.
|
||||
- [x] **5.** Criar um projeto no OCI Data Science.
|
||||
- ↳ `benchmark-decisoes-ptbr`.
|
||||
- [ ] **6.** Criar buckets no Object Storage para `entrada`, `artefatos`, `resultados` e `logs-imutaveis`.
|
||||
- [~] **6.** Criar buckets no Object Storage para `entrada`, `artefatos`, `resultados` e `logs-imutaveis`.
|
||||
- ↳ Criados com o prefixo `dmb-` (nomes de bucket são únicos no namespace), privados e com versionamento.
|
||||
- ↳ Pendente: a regra de retenção (WORM) de `dmb-logs-imutaveis`, que depende do prazo de retenção (tarefa 77).
|
||||
- [x] **7.** Definir políticas IAM de menor privilégio para leitura dos dados, escrita dos resultados e execução dos jobs.
|
||||
@@ -42,8 +63,9 @@ As fases F0–F1 (infra) e F2–F3 (dados) podem andar em paralelo.
|
||||
- ↳ `dmb-jobs-menor-privilegio`: os jobs (`request.principal.type='datasciencejob'`) leem `dmb-entrada`/`dmb-artefatos`, escrevem em `dmb-resultados`/`dmb-logs-imutaveis`, usam logs e repos. Inclui a política de serviço do Data Science para a VCN.
|
||||
- [x] **8.** Definir uma VCN privada para os jobs, com acesso ao Object Storage por Service Gateway.
|
||||
- ↳ `dmb-vcn` 10.20.0.0/16, sub-rede privada `dmb-subnet-jobs`. A rota e a security list só permitem tráfego para serviços OCI pelo Service Gateway.
|
||||
- [ ] **9.** Criar uma rota temporária de saída por NAT Gateway, só para a aquisição inicial de dependências e pesos.
|
||||
- [x] **9.** Criar uma rota temporária de saída por NAT Gateway, só para a aquisição inicial de dependências e pesos.
|
||||
- ↳ Remover a rota logo após a tarefa 16 e passar pelo gate de egresso antes de qualquer execução. *(Q3)*
|
||||
- ↳ **Não foi necessário:** a aquisição (tarefas 13–16) rodou fora da VCN e enviou os artefatos direto ao bucket; os ambientes são montados por jobs de build com rede gerenciada. `infra/oci/nat.py` fica disponível.
|
||||
- ↳ Criar e ativar **só quando necessário**, com `infra/oci/nat.py on`. Para desligar: `nat.py off`, que fecha a rota e bloqueia o NAT. Na tarefa 78: `nat.py off --delete`.
|
||||
- [x] **10.** Validar que os jobs acessam os buckets sem internet pública.
|
||||
- ↳ Validado em 2026-10-07 com jobs do Data Science em `dmb-subnet-jobs`. Os pesos do Rizzo (4,4 GB) desceram pela Service Gateway em 28 s, com SHA-256 conferido.
|
||||
@@ -85,26 +107,29 @@ As fases F0–F1 (infra) e F2–F3 (dados) podem andar em paralelo.
|
||||
|
||||
## F3 — Dados e anotação
|
||||
|
||||
- [ ] **24.** Coletar textos PT-BR representativos do domínio de destino. *(Q7, Q15)*
|
||||
- ↳ **100% sintéticos** (`datagen.generate`, na VM).
|
||||
- [x] **24.** Coletar textos PT-BR representativos do domínio de destino. *(Q7, Q15)*
|
||||
- ↳ **100% sintéticos** (`datagen.generate`, na VM): 4.068 enunciados em 339 lotes (42 intenções × 7 perfis + 5 categorias fora de escopo × 9 lotes), geradores `llama-4-maverick` e `command-a` alternados.
|
||||
- ↳ A unidade é a **conversa com vários turnos**, não o enunciado isolado. Cada turno guarda o estado (agente ativo e sessões suspensas).
|
||||
- [ ] **25.** Remover ou mascarar dados pessoais, segredos e identificadores que o benchmark não precisa.
|
||||
- [ ] **26.** Separar os textos por domínio, comprimento, grau de ambiguidade e classe esperada.
|
||||
- [x] **25.** Remover ou mascarar dados pessoais, segredos e identificadores que o benchmark não precisa.
|
||||
- [~] **26.** Separar os textos por domínio, comprimento, grau de ambiguidade e classe esperada.
|
||||
- ↳ Acrescentar a posição do turno e a presença de agente ativo ou de sessões suspensas.
|
||||
- [ ] **27.** Criar exemplos adversariais com abreviações, erros de ortografia, regionalismos, textos curtos e várias intenções.
|
||||
- ↳ Primeiro ciclo (só D1): metadados `domain`, `length_bucket`, `ambiguity`, `profile`, `sentiment`, `kind` e `n_options` gravados por `datagen.build`.
|
||||
- [x] **27.** Criar exemplos adversariais com abreviações, erros de ortografia, regionalismos, textos curtos e várias intenções.
|
||||
- ↳ Acrescentar respostas curtas que dependem do contexto ("sim", "o segundo"), troca de assunto, retorno a um assunto anterior e pedidos fora de escopo.
|
||||
- [ ] **28.** Definir os critérios de inclusão e exclusão dos exemplos.
|
||||
- ↳ Perfis de geração: informal/abreviado, erros de digitação, regionalismo, emocional, longo, indireto/múltiplo; fora de escopo em 5 categorias (inclui desabafo emocional sem pedido).
|
||||
- [x] **28.** Definir os critérios de inclusão e exclusão dos exemplos.
|
||||
- ↳ Exclui: duplicatas exatas e aproximadas, comprimento fora de 2–700 caracteres, três rótulos distintos na anotação e falha de anotação. Resultado do `prepare`: 4.057 de 4.068 mantidos (9 duplicatas exatas, 2 aproximadas; 4 trechos mascarados).
|
||||
- [x] **29.** Produzir o guia de anotação humana.
|
||||
- ↳ [06-guia-de-anotacao.md](06-guia-de-anotacao.md), usado literalmente pelos anotadores.
|
||||
- ↳ O guia cobre D1–D4 com exemplos-limite (por exemplo, quando um enunciado curto continua a tarefa do agente ativo e quando inicia um novo agente).
|
||||
- [ ] **30.** Anotar cada exemplo com dois avaliadores independentes.
|
||||
- [~] **30.** Anotar cada exemplo com dois avaliadores independentes.
|
||||
- ↳ Avaliadores = modelos generativos em rodízio (`openai.gpt-5.5`, `google.gemini-2.5-pro`, `xai.grok-4.3`). *(Q15)*
|
||||
- [ ] **31.** Resolver as discordâncias com a revisão de um terceiro avaliador.
|
||||
- [ ] **32.** Registrar, para cada exemplo, a resposta de referência, a justificativa e a versão da taxonomia.
|
||||
- [~] **31.** Resolver as discordâncias com a revisão de um terceiro avaliador.
|
||||
- [~] **32.** Registrar, para cada exemplo, a resposta de referência, a justificativa e a versão da taxonomia.
|
||||
- ↳ Reportar também a concordância entre anotadores.
|
||||
- [ ] **33.** Separar os dados em desenvolvimento, calibração e teste final por grupo de origem. *(Q12)*
|
||||
- [~] **33.** Separar os dados em desenvolvimento, calibração e teste final por grupo de origem. *(Q12)*
|
||||
- ↳ O grupo é `group_id`, ou seja, a conversa.
|
||||
- [ ] **34.** Impedir que textos derivados do mesmo caso apareçam em mais de uma partição.
|
||||
- [~] **34.** Impedir que textos derivados do mesmo caso apareçam em mais de uma partição.
|
||||
- [ ] **35.** Congelar o conjunto de teste final antes de qualquer ajuste de parâmetros.
|
||||
- ↳ Registrar o hash do arquivo congelado e guardar uma cópia em `logs-imutaveis`.
|
||||
|
||||
@@ -143,9 +168,10 @@ As fases F0–F1 (infra) e F2–F3 (dados) podem andar em paralelo.
|
||||
|
||||
## F6 — Piloto
|
||||
|
||||
- [ ] **55.** Executar um piloto de 50 exemplos por candidato em CPU. *(Q11)*
|
||||
- [ ] **55.** Executar um piloto de 50 exemplos por candidato em CPU.
|
||||
- ↳ Sanidade em CPU (us-chicago-1, sub-rede privada) aprovada nos 4 candidatos: Laya 125 ms, GLiNER 194 ms, Rizzo Flow 7,3 s, SemIf 16,4 s (latência mediana). *(Q11)*
|
||||
- [ ] **56.** Executar um piloto de 50 exemplos por candidato em GPU.
|
||||
- ↳ GPU em **sa-saopaulo-1, A10.1**, uma por vez *(Q14)*. Sanidade em GPU já em andamento.
|
||||
- ↳ GPU em **sa-saopaulo-1, A10.1**, uma por vez *(Q14)*. Sanidade em GPU: Laya 21 ms, GLiNER 16 ms, SemIf 66 ms (latência mediana). Rizzo Flow exigiu compilar o llama.cpp com CUDA para a glibc da imagem dos jobs (`infra/ds/build_llama_cuda.sh`).
|
||||
- [ ] **57.** Medir memória de GPU, memória RAM, tempo de carga, tempo de aquecimento e falhas do piloto.
|
||||
- [ ] **58.** Ajustar apenas os parâmetros operacionais necessários para eliminar falhas de execução.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user