Melhorando os Métodos de Teste de Compiladores de Deep Learning
Uma nova técnica melhora os testes para carregamento de modelos em compiladores de deep learning.
― 8 min ler
Índice
Compiladores de Deep Learning ajudam a melhorar o desempenho de modelos complexos usados em aplicações de IA. Esses compiladores pegam modelos feitos em diferentes frameworks, os otimizam e preparam pra várias plataformas de hardware. Mas, esses compiladores podem ter bugs, que podem causar sérios problemas nos modelos que eles geram.
Bugs podem aparecer em três etapas principais do processo de compilação: carregando o modelo, otimizando ele e transformando em um código que o hardware específico consegue entender. Os métodos de teste anteriores se concentravam principalmente nas etapas de Otimização, esquecendo a etapa crucial de carregamento do modelo. Isso é importante porque, se tiver bugs na forma como os modelos são carregados, compromete todo o processo.
Os métodos existentes para testar esses compiladores não abordam o quão bem eles carregam os modelos; muitas vezes, pulam direto pra otimização. Este artigo apresenta uma nova técnica pra melhorar os testes na etapa de carregamento do modelo, aproveitando o conhecimento de testes já realizados em bibliotecas de deep learning.
Visão Geral do Problema
Compiladores de Deep Learning pegam modelos construídos em várias bibliotecas, como PyTorch, e transformam eles num formato comum chamado representação intermediária (IR). Cada modelo tem diferentes operações, como convolução e funções de ativação, que precisam ser convertidas com precisão pro formato IR. Se a conversão falhar em qualquer ponto, pode dar resultados errados quando o modelo é rodado.
As técnicas de teste usadas atualmente pra esses compiladores não cobrem adequadamente o processo de carregamento do modelo. A maioria foca nas etapas de otimização, o que pode levar a bugs não descobertos na etapa anterior de carregamento do modelo.
A Solução
Pra testar melhor a etapa de carregamento do modelo, foi desenvolvido um novo approach. Esse approach extrai informações úteis de testes existentes de bibliotecas de deep learning. A ideia é que o conhecimento embutido nesses testes de bibliotecas pode ajudar a criar testes melhores pra etapa de carregamento do compilador.
Estratégia de Migração de Testes
A solução proposta inclui uma técnica chamada migração de testes. Essa técnica usa testes existentes de várias bibliotecas de deep learning como fontes pra criar novos testes pros compiladores. O processo envolve algumas etapas chaves:
Coletando Entradas de Teste: Testes de diferentes bibliotecas de deep learning são reunidos. Isso inclui testes escritos por humanos e testes gerados por ferramentas que criam testes automaticamente com base em informações fornecidas.
Extraindo Instâncias de Operadores: Desses testes, casos específicos de operações (como convolução ou pooling) são extraídos. Esses casos indicam como um Operador pode ser aplicado com várias configurações.
Criando Modelos pra Teste: Cada caso extraído é embalado pra formar um modelo simples que serve como entrada de teste pro compilador. Assim, os testes são especialmente desenhados pra focar em quão bem o compilador carrega diferentes operadores de modelo.
Priorizando Testes: Pra garantir que os testes mais impactantes sejam rodados primeiro, uma estratégia chamada priorização de testes é implementada. Essa estratégia identifica quais testes podem descobrir bugs mais cedo e foca neles.
Benefícios da Migração
A abordagem de migração tem várias vantagens. Usando testes existentes de bibliotecas de deep learning, conseguimos rapidamente reunir uma variedade de casos de teste sem precisar de muitos esforços novos de design de teste. Isso é especialmente útil dada a grande quantidade de operações em modelos de deep learning, que podem ter várias configurações de parâmetros.
Avaliação do Novo Método
Pra validar a eficácia desse método, ele foi aplicado em oito frontends de três compiladores de deep learning bem conhecidos: TVM, TensorRT e OpenVINO. Cada frontend pega modelos de bibliotecas específicas e os carrega no compilador.
A técnica conseguiu detectar vários bugs desconhecidos durante o processo de teste. Cada bug detectado foi confirmado ou corrigido pelos desenvolvedores, mostrando a eficiência e praticidade da abordagem.
Bugs Detectados
No total, um número significativo de bugs foi encontrado que antes tinha passado despercebido. Isso incluiu bugs relacionados ao manuseio incorreto de parâmetros, lógica errada dentro do processo de carregamento do modelo, e até problemas ligados à forma dos tensores.
Os resultados confirmaram que muitos bugs na etapa de carregamento do modelo estão ligados a problemas simples que podem surgir da forma como operações específicas são tratadas. Focando em testar esses operadores, a nova abordagem conseguiu desvendar bugs que os métodos anteriores não pegaram.
O Papel da Priorização de Testes
Um aspecto crítico do novo método é o foco na priorização de testes. Ao classificar os testes com base em quão provável é que descubram bugs, o teste pode ser muito mais eficiente. Isso é especialmente importante porque testar pode ser demorado.
O processo de priorização considera dois fatores principais:
Diversidade de Assinaturas de Operadores: A frequência de ocorrências de operadores nos testes de bibliotecas e nos testes de compiladores é considerada. Se uma função aparece frequentemente nos testes de bibliotecas mas raramente nos testes de compiladores, pode ser um sinal de que essa área precisa de mais atenção.
Diversidade de Configurações de Parâmetros: Diferentes configurações do mesmo operador podem se comportar de forma diferente. Testar cada configuração ajuda a garantir que todos os potenciais problemas sejam pegados.
Focando primeiro nos testes mais promissores, o novo método aumenta as chances de detectar bugs mais cedo no processo de teste.
Comparação com Técnicas Existentes
Quando comparada com métodos de teste tradicionais como NNSmith e COMET, a nova técnica baseada em migração mostrou melhorias significativas. Os testes criados a partir do conhecimento migrado detectaram mais bugs únicos, especialmente na etapa de carregamento do modelo dos compiladores.
NNSmith e COMET geravam testes sem aproveitar o conhecimento existente nas bibliotecas. O novo método, no entanto, se beneficia do rico conjunto de testes já disponível, tornando-se muito mais eficaz.
Contribuições Únicas
A capacidade da técnica de migração de aproveitar testes existentes permitiu uma maior gama de cenários de teste. Isso é crucial porque muitas operações de deep learning podem ter interações complexas que precisam ser testadas com cuidado.
O novo método também complementou estratégias de teste existentes, mostrando que ambas podem trabalhar juntas de forma eficaz. Ao abordar vários aspectos do teste, ele forneceu uma abordagem mais completa pra garantir a confiabilidade dos compiladores de deep learning.
Trabalhos Futuros e Aplicações
O sucesso dessa técnica de migração abre várias possibilidades pra pesquisas futuras. Isso inclui:
Expandindo Fontes de Migração: Mais tipos de testes de diferentes bibliotecas podem ser incluídos, permitindo uma gama ainda mais ampla de testes.
Melhorando Oráculos de Teste: Melhores métodos pra determinar se um teste passa ou falha podem aumentar ainda mais a confiabilidade dos testes.
Aplicação em Outros Domínios: As técnicas desenvolvidas aqui podem potencialmente ser usadas fora dos compiladores de deep learning pra testar outros tipos de software que dependem de princípios semelhantes.
Aprimorando Testes de Regressão: À medida que novos bugs são descobertos e corrigidos, incluir esses testes em testes de regressão ajudará a manter a qualidade do software ao longo do tempo.
Lidando com Comportamentos Indefinidos: Pesquisar maneiras de detectar e abordar comportamentos indefinidos em operações ajudará a reduzir falsos positivos durante os testes.
Conclusão
A técnica baseada em migração apresenta uma maneira eficaz e eficiente de aprimorar os testes para a etapa de carregamento de modelos em compiladores de deep learning. Ao extrair e aproveitar o conhecimento existente de bibliotecas de deep learning, essa abordagem garante uma avaliação abrangente do desempenho do compilador.
Através da extração cuidadosa de instâncias de operadores e da priorização inteligente dos testes, o método conseguiu detectar inúmeros bugs que as técnicas anteriores negligenciaram. Isso não só demonstra a eficácia do método, mas também destaca o valor de uma abordagem colaborativa para testes de software.
À medida que o deep learning continua a crescer e evoluir, garantir a confiabilidade dos compiladores será essencial. A abordagem de teste baseada em migração tem o potencial de fazer contribuições significativas para esse campo, abrindo caminho pra aplicações de IA mais robustas no futuro.
Título: A Tale of Two DL Cities: When Library Tests Meet Compiler
Resumo: Deep Learning (DL) compilers typically load a DL model and optimize it with intermediate representation.Existing DL compiler testing techniques mainly focus on model optimization stages, but rarely explore bug detection at the model loading stage. Effectively testing the model loading stage requires covering diverse usages of each DL operator from various DL libraries, which shares a common objective with DL library testing, indicating that the embedded knowledge in DL library tests is beneficial for testing the model loading stage of DL compilers. In this work, we propose OPERA to extract such domain knowledge from the test inputs for DL libraries. OPERA constructs diverse tests from the various test inputs for DL libraries (including the test inputs documented in DL libraries and those generated by recent fuzzers). In addition, it incorporates a diversity-based test prioritization strategy to migrate and execute those test inputs that are more likely to detect diverse bugs earlier. We considered three sources of tests in DL libraries for migration and used eight frontends from three DL compilers (e.g., TVM, TensorRT, and OpenVINO) for evaluation. OPERA detected 170 previously unknown bugs in total, 90 of which have been confirmed/fixed by developers, demonstrating the effectiveness of such the migration-based idea. The test prioritization strategy in OPERA improves testing efficiency with migrated tests by 11.9%~47.4% on average compared to general test prioritization strategies.
Autores: Qingchao Shen, Yongqiang Tian, Haoyang Ma, Junjie Chen, Lili Huang, Ruifeng Fu, Shing-Chi Cheung, Zan Wang
Última atualização: 2024-08-14 00:00:00
Idioma: English
Fonte URL: https://arxiv.org/abs/2407.16626
Fonte PDF: https://arxiv.org/pdf/2407.16626
Licença: https://creativecommons.org/licenses/by/4.0/
Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.
Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.
Ligações de referência
- https://github.com/apache/tvm/pull/15060
- https://github.com/AnonymousWorks/OPERA
- https://github.com/apache/tvm/issues/14805
- https://github.com/apache/tvm/pull/14820
- https://github.com/apache/tvm/pull/15053
- https://github.com/apache/tvm/issues/14794
- https://github.com/apache/tvm/pull/15016
- https://github.com/ShenQingchao/OPERA
- https://dl.acm.org/ccs.cfm