MLOps Series Parte 2: Testando a robustez de sistemas seguros de Machine Learning usando Machine Learning Ops

Robustez é a capacidade de um sistema em malha fechada tolerar perturbações ou anomalias enquanto os parâmetros do sistema variam em uma ampla faixa. Existem três testes essenciais para garantir que o sistema de aprendizado de máquina seja robusto nos ambientes de produção: teste de unidade, teste de dados e modelo e teste de integração.

Teste de unidade

Os testes são realizados em componentes individuais, cada um com uma única função dentro do sistema maior (por exemplo, uma função que cria um novo recurso, uma coluna em um DataFrame ou uma função que adiciona dois números). Podemos realizar testes de unidade em funções ou componentes individuais; um método recomendado para realizar testes de unidade é a abordagem Arrange, Act, Assert ( AAA ):

1.    Organizar : Configure o esquema, crie instâncias de objeto e crie dados/entradas de teste.
2.    Agir : executar código, chamar métodos, definir propriedades e aplicar entradas aos componentes a serem testados.
3.    Assert : Verifique os resultados, valide (confirme se as saídas recebidas são as esperadas) e limpe (resíduos relacionados ao teste).

Dados e teste de modelo

É importante testar a integridade dos dados e modelos em operação. Os testes podem ser realizados no pipeline MLOps para validar a integridade dos dados e a robustez do modelo para treinamento e inferência. A seguir estão alguns testes gerais que podem ser realizados para validar a integridade dos dados e a robustez dos modelos:

1. Teste de dados

A integridade dos dados de teste pode ser verificada inspecionando os cinco fatores a seguir: precisão, integridade, consistência, relevância e pontualidade. Alguns aspectos importantes a serem considerados ao ingerir ou exportar dados para treinamento e inferência de modelo incluem o seguinte:

• Linhas e colunas: verifique as linhas e colunas para garantir que nenhum valor ausente ou padrão incorreto seja encontrado.

• Valores individuais: verifique os valores individuais se estiverem dentro do intervalo ou se tiverem valores ausentes para garantir a exatidão dos dados.

• Valores agregados: Verifique agregações estatísticas para colunas ou grupos dentro dos dados para entender a correspondência, coerência e precisão dos dados.

2. Teste do modelo

O modelo deve ser testado durante o treinamento e depois de ter sido treinado para garantir que seja robusto, escalável e seguro. A seguir estão alguns aspectos do teste de modelo:

• Verifique a forma da entrada do modelo (para o modelo serializado ou não serializado).

• Verifique a forma e a saída do modelo.

• Testes comportamentais (combinações de entradas e saídas esperadas).

• Carregue artefatos de modelos serializados ou empacotados na memória e nos destinos de implementação. Isso garantirá que o modelo seja desserializado corretamente e esteja pronto para ser servido na memória e nos destinos de implantação.

• Avalie a precisão ou as principais métricas do modelo de ML.

Teste de integração

O teste de integração é um processo em que componentes de software individuais são combinados e testados como um grupo (por exemplo, processamento ou inferência de dados ou CI/CD).

Integração de dois módulos representados por dois círculos sobrepostos no centro.

Figura 1: Teste de integração (dois módulos)

Vejamos um exemplo hipotético simples de realização de testes de integração para dois componentes do fluxo de trabalho MLOps. No módulo Build, as etapas de ingestão de dados e treinamento do modelo possuem funcionalidades individuais, mas quando integradas, realizam o treinamento do modelo de ML usando os dados ingeridos para a etapa de treinamento. Ao integrar o módulo 1 (ingestão de dados) e o módulo 2 (treinamento do modelo), podemos realizar testes de carregamento de dados (para verificar se os dados ingeridos vão para a etapa de treinamento do modelo), testes de entrada e saída (para confirmar se os formatos esperados são inseridos e gerados em cada etapa), bem como quaisquer outros testes que sejam específicos do caso de uso.

Em geral, os testes de integração podem ser feitos de duas maneiras:

1. Teste do Big Bang

Uma abordagem na qual todos os componentes ou módulos são integrados simultaneamente e depois testados como uma unidade.

2. Teste incremental

O teste é realizado mesclando dois ou mais módulos que estão logicamente conectados um ao outro e, em seguida, testando a funcionalidade do aplicativo. Os testes incrementais são conduzidos de três maneiras:

• Abordagem de cima para baixo

• Abordagem de baixo para cima

• Abordagem sanduíche: uma combinação de cima para baixo e de baixo para cima

O teste de integração pode testar os módulos usando uma abordagem de baixo para cima ou de cima para baixo.

Figura 2: Teste de integração (teste incremental)

A abordagem de teste de cima para baixo é uma forma de realizar testes de integração de cima para baixo no fluxo de controle de um sistema de software. Os módulos de nível superior são testados primeiro e, em seguida, os módulos de nível inferior são avaliados e mesclados para garantir a operação do software. Stubs são usados ​​para testar módulos que ainda não estão prontos. As vantagens de uma estratégia de cima para baixo incluem a capacidade de obter um protótipo inicial, testar módulos essenciais com alta prioridade e descobrir e corrigir defeitos graves mais cedo. Uma desvantagem é que ele requer um grande número de stubs e os componentes de nível inferior podem ser testados de forma insuficiente em alguns casos.

A abordagem de teste de baixo para cima testa primeiro os módulos de nível inferior. Os módulos que foram testados são usados ​​para auxiliar no teste de módulos de nível superior. Este procedimento é continuado até que todos os módulos de nível superior tenham sido completamente avaliados. Quando os módulos de nível inferior tiverem sido testados e integrados, o próximo nível de módulos é criado. Com a técnica bottom-up, você não precisa esperar que todos os módulos sejam construídos. Uma desvantagem é que os módulos essenciais (no nível superior da arquitetura de software) que afetam o fluxo do programa são testados por último e, portanto, têm maior probabilidade de apresentar defeitos.
A abordagem de teste sanduíche testa os módulos de nível superior juntamente com os módulos de nível inferior, enquanto os componentes de nível inferior são mesclados com os módulos de nível superior e avaliados como um sistema. Isso é denominado teste de integração híbrida porque combina metodologias de cima para baixo e de baixo para cima.

Arbit: Especialista em MLOps!

Pode não ser parecer fácil gerar valor para seus dados, mas a Arbit, pode ajudá-lo. Há mais de 20 anos atuando com inteligência de dados, a Arbit possui especialistas para implementar as melhores soluções ao seu ambiente de negócios. Fale conosco agora mesmo

Deixe um comentário

O seu endereço de e-mail não será publicado.