ROME: como alterar as saídas do modelo sem tocar no arquivo de pesos

ROME (Rank-One Model Editing) — um método para editar cirurgicamente associações factuais em modelos de linguagem. Ele tem como alvo uma matriz de pesos específica em uma camada intermediária e aplica uma atualização de posto um, permitindo que as saídas do modelo sejam alteradas sem retreiná-lo.
Como a edição funciona Na demonstração da Stealthium, um pequeno transformer PyTorch é carregado de um checkpoint em disco. Nada no modelo ou em seus pesos é um artefato criado. Em vez disso, o código malicioso chega por meio de uma biblioteca Python importável: ele se injeta no PyTorch, é armado por uma variável de ambiente e aplica a edição quando o modelo é colocado em modo de avaliação.
Da perspectiva do driver, isso parece inferência padrão do modelo com uma série adicional de lançamentos de kernels CUDA. A modificação ocorre em três estágios, cada um caracterizado por um conjunto de kernels e uma pilha de chamadas:
  1. Coleta de chaves. O modelo é executado em prompts de calibração, e as ativações necessárias da camada intermediária são acumuladas em um buffer (CatArrayBatchedCopy_vectorized). Pilha: _keys → _calibrate → _eval.
  2. Cálculo dos pesos alvo. Um sistema linear é resolvido: multiplicação de matrizes (ampere_sgemm_32x128_nt) e decomposição LU (getrf_pivot) produzem a atualização necessária. Pilha: _calibrate → _eval.
  3. Escrita nos pesos ativos. A atualização é adicionada no local aos pesos do modelo na memória da GPU (CUDAFunctorOnSelf_add). Pilha: _calibrate → _eval. O terceiro estágio altera os pesos usando uma matriz de posto um: uma matriz de posto um derivada das chaves coletadas é adicionada a uma das matrizes de pesos do modelo. A forma e o tamanho do tensor permanecem inalterados, então o modelo continua funcionando normalmente enquanto produz saídas diferentes.
Por que as ferramentas de segurança padrão não detectam isso Os pesos são corrigidos diretamente na memória da GPU: não há acesso a arquivos, nenhuma chamada de sistema extra e nem mesmo mapeamento de memória. O mesmo processo python3 e o mesmo contexto CUDA são usados. Ferramentas tradicionais de segurança de endpoint, como EDRs e ferramentas de monitoramento em nível de aplicação, concentram-se na atividade de processos: abrir arquivos, gerar processos filhos e comunicar-se pela rede. Dessa perspectiva, a carga de trabalho parece um trabalho normal de inferência. Um kernel que adiciona dois tensores enquanto gera uma saída é indistinguível de um que aplica uma atualização aos pesos: seus argumentos são ponteiros brutos para a memória do dispositivo.
Fornecedor
Produto