Sistema amigável pode ajudar desenvolvedores a construir simulações e modelos de IA mais eficientes
Ao gerar automaticamente código que aproveita dois tipos de redundância de dados, o sistema economiza largura de banda, memória e computação.

O novo compilador, chamado SySTeC, pode otimizar cálculos aproveitando automaticamente a escassez e a simetria nos tensores. Créditos: Imagem: iStock
Os modelos de inteligência artificial de rede neural usados em aplicações como processamento de imagens médicas e reconhecimento de fala realizam operações em estruturas de dados extremamente complexas que exigem uma quantidade enorme de computação para serem processadas. Esta é uma das razões pelas quais os modelos de aprendizado profundo consomem tanta energia.
Para melhorar a eficiência dos modelos de IA, pesquisadores do MIT criaram um sistema automatizado que permite que desenvolvedores de algoritmos de aprendizado profundo aproveitem simultaneamente dois tipos de redundância de dados. Isso reduz a quantidade de computação, largura de banda e armazenamento de memória necessários para operações de aprendizado de máquina.
As técnicas existentes para otimizar algoritmos podem ser complicadas e normalmente permitem que os desenvolvedores aproveitem apenas a escassez ou a simetria — dois tipos diferentes de redundância que existem em estruturas de dados de aprendizado profundo.
Ao permitir que um desenvolvedor crie um algoritmo do zero que aproveita ambas as redundâncias ao mesmo tempo, a abordagem dos pesquisadores do MIT aumentou a velocidade dos cálculos em quase 30 vezes em alguns experimentos.
Como o sistema utiliza uma linguagem de programação amigável, ele poderia otimizar algoritmos de aprendizado de máquina para uma ampla gama de aplicações. O sistema também poderia ajudar cientistas que não são especialistas em aprendizado profundo, mas querem melhorar a eficiência dos algoritmos de IA que usam para processar dados. Além disso, o sistema poderia ter aplicações em computação científica.
“Por muito tempo, capturar essas redundâncias de dados exigiu muito esforço de implementação. Em vez disso, um cientista pode dizer ao nosso sistema o que ele gostaria de computar de uma forma mais abstrata, sem dizer ao sistema exatamente como computar”, diz Willow Ahrens, um pós-doutorado do MIT e coautor de um artigo sobre o sistema , que será apresentado no Simpósio Internacional sobre Geração e Otimização de Código.
Ela é acompanhada no artigo pela autora principal Radha Patel '23, SM '24 e pelo autor sênior Saman Amarasinghe, professor do Departamento de Engenharia Elétrica e Ciência da Computação (EECS) e pesquisador principal do Laboratório de Ciência da Computação e Inteligência Artificial (CSAIL).
Cortando a computação
No aprendizado de máquina, os dados são frequentemente representados e manipulados como matrizes multidimensionais conhecidas como tensores. Um tensor é como uma matriz, que é uma matriz retangular de valores dispostos em dois eixos, linhas e colunas. Mas, diferentemente de uma matriz bidimensional, um tensor pode ter muitas dimensões, ou eixos, tornando os tensores mais difíceis de manipular.
Modelos de deep-learning realizam operações em tensores usando multiplicação e adição de matrizes repetidas — esse processo é como as redes neurais aprendem padrões complexos em dados. O grande volume de cálculos que devem ser realizados nessas estruturas de dados multidimensionais requer uma quantidade enorme de computação e energia.
Mas, devido à maneira como os dados nos tensores são organizados, os engenheiros geralmente podem aumentar a velocidade de uma rede neural eliminando cálculos redundantes.
Por exemplo, se um tensor representa dados de revisão de usuários de um site de comércio eletrônico, como nem todos os usuários revisaram todos os produtos, a maioria dos valores naquele tensor provavelmente é zero. Esse tipo de redundância de dados é chamado de esparsidade. Um modelo pode economizar tempo e computação armazenando e operando apenas em valores diferentes de zero.
Além disso, às vezes um tensor é simétrico, o que significa que a metade superior e a metade inferior da estrutura de dados são iguais. Nesse caso, o modelo só precisa operar em uma metade, reduzindo a quantidade de computação. Esse tipo de redundância de dados é chamado de simetria.
“Mas quando você tenta capturar essas duas otimizações, a situação se torna bastante complexa”, diz Ahrens.
Para simplificar o processo, ela e seus colaboradores construíram um novo compilador, que é um programa de computador que traduz código complexo em uma linguagem mais simples que pode ser processada por uma máquina. Seu compilador, chamado SySTeC, pode otimizar computações tirando vantagem automaticamente da esparsidade e da simetria em tensores.
Eles começaram o processo de construção do SySTeC identificando três otimizações principais que podem ser realizadas usando simetria.
Primeiro, se o tensor de saída do algoritmo for simétrico, então ele só precisa computar metade dele. Segundo, se o tensor de entrada for simétrico, então o algoritmo só precisa ler metade dele. Finalmente, se os resultados intermediários das operações do tensor forem simétricos, o algoritmo pode pular computações redundantes.
Otimizações simultâneas
Para usar o SySTeC, um desenvolvedor insere seu programa e o sistema otimiza automaticamente seu código para todos os três tipos de simetria. Então, a segunda fase do SySTeC realiza transformações adicionais para armazenar apenas valores de dados diferentes de zero, otimizando o programa para escassez.
No final, o SySTeC gera código pronto para uso.
“Dessa forma, obtemos os benefícios de ambas as otimizações. E o interessante sobre simetria é que, como seu tensor tem mais dimensões, você pode obter ainda mais economia em computação”, diz Ahrens.
Os pesquisadores demonstraram acelerações de quase um fator de 30 com código gerado automaticamente pelo SySTeC.
Como o sistema é automatizado, ele pode ser especialmente útil em situações em que um cientista deseja processar dados usando um algoritmo que ele está escrevendo do zero.
No futuro, os pesquisadores querem integrar o SySTeC em sistemas de compiladores de tensor esparso existentes para criar uma interface perfeita para os usuários. Além disso, eles gostariam de usá-lo para otimizar o código para programas mais complicados.
Este trabalho é financiado, em parte, pela Intel, pela National Science Foundation, pela Defense Advanced Research Projects Agency e pelo Departamento de Energia.