Simple Science

Ciência de ponta explicada de forma simples

# Informática# Computação distribuída, paralela e em cluster# Inteligência Artificial

Uma Nova Abordagem para Aprendizado Profundo e Programação de HPC

Apresentando um framework pra simplificar o desenvolvimento de kernels de DL e HPC em várias CPUs.

― 6 min ler


Framework de DeepFramework de DeepLearning Simplificadopara aplicações de DL e HPC.Uma solução de programação eficiente
Índice

Nos últimos anos, as áreas de Aprendizado Profundo (DL) e Computação de Alto Desempenho (HPC) avançaram bastante. Mas, as formas de programar esses sistemas não acompanharam o ritmo. Muitos desenvolvedores ainda dependem de bibliotecas antigas, feitas para plataformas específicas. Essa dependência pode trazer problemas, já que essas bibliotecas podem funcionar bem só em certas tarefas e mal em outras. Este artigo apresenta um novo framework que visa resolver essas questões, facilitando para os programadores criarem kernels eficientes e flexíveis de DL e HPC para sistemas modernos de CPU.

Entendendo o Problema

Teve uma convergência entre aprendizado profundo e computação de alto desempenho, o que significa que eles compartilham várias tarefas computacionais comuns. Mas, os métodos de programação usados nessas duas áreas frequentemente estão defasados. Muitos programadores ficam presos usando bibliotecas rígidas e específicas de fornecedores que entregam um desempenho ótimo em plataformas específicas. Isso resulta em códigos que não podem ser facilmente movidos ou adaptados para diferentes tarefas ou sistemas. Por conta disso, o desenvolvimento de aplicações pode ficar caro e demorado.

Essas bibliotecas específicas de fornecedores podem ter um desempenho ruim em muitos casos, tornando difícil criar códigos flexíveis ou de uso geral. Além disso, à medida que a arquitetura de CPU continua a evoluir, essas bibliotecas muitas vezes não aproveitam totalmente os novos recursos. Isso dificulta o desenvolvimento de aplicações eficientes que funcionem bem em diversos designs de CPU.

Introduzindo o Novo Framework

O novo framework busca melhorar a forma como o código de DL e HPC é desenvolvido. Ele foca em duas etapas principais:

  1. Usando Primitivas de Processamento de Tensor (TPPs): TPPs são um conjunto de operações simplificadas de tensor 2D que podem ser usadas para construir tarefas mais complexas.
  2. Abstrações de Loop de Alto Nível: Esta etapa permite que os programadores declarem loops lógicos de uma maneira mais fácil, sem entrar em detalhes complicados sobre como os dados devem ser organizados ou a ordem das operações.

Ao dividir o desenvolvimento de kernels nessas duas etapas, o framework permite que os programadores foquem na visão geral, em vez de se perderem nos detalhes do código para diferentes plataformas.

Os Benefícios do Framework

Um grande benefício desse framework é que ele permite um código mais portátil. Como o núcleo dos cálculos é expresso usando TPPs, o código pode ser adaptado para diferentes sistemas sem precisar de reescritas grandes. Isso significa que os desenvolvedores não precisam começar do zero toda vez que querem rodar seu código em uma arquitetura de CPU diferente.

Além disso, usar abstrações de alto nível para loops facilita o controle de como as tarefas são executadas. Os programadores podem especificar as propriedades que desejam para seus loops sem ter que escrever manualmente um código complicado. Isso resulta em códigos mais claros e fáceis de manter, tornando mais simples as adaptações futuras.

Como o Framework Funciona

O framework opera através de uma ferramenta chamada PARLOOPER, que simplifica a criação de loops em torno das TPPs.

Etapa 1: Declarando TPPs

A primeira etapa ao usar o PARLOOPER é definir o núcleo computacional de um kernel usando TPPs. Isso significa que os programadores expressam seus cálculos principais em termos das operações básicas oferecidas pela biblioteca TPP. Isso pode ser feito de uma forma bem direta, facilitando para os desenvolvedores focarem na lógica real de seu código.

Etapa 2: Especificando Loops com PARLOOPER

Uma vez que os cálculos principais estão definidos, os programadores podem então declarar os loops lógicos que vão envolver as TPPs. Esta etapa é facilitada pelo PARLOOPER, que permite aos usuários especificar as restrições e propriedades de seus loops sem escrever manualmente toda a estrutura.

Na hora da execução, os usuários podem fornecer um único parâmetro que informa ao PARLOOPER como configurar os loops. Isso permite que os loops se adaptem com base nas necessidades da computação específica e nas capacidades do hardware subjacente. Esse processo em duas etapas oferece uma grande flexibilidade, mantendo um desempenho alto.

Desempenho e Flexibilidade

A eficiência do novo framework foi testada em vários sistemas de CPU, demonstrando sua capacidade de superar soluções existentes. Usando TPPs combinadas com o PARLOOPER, os desenvolvedores podem alcançar altos níveis de desempenho em diversas aplicações.

O framework não só oferece velocidade; ele também facilita a adaptação ao novo hardware à medida que este se torna disponível. Isso é essencial no mundo acelerado da tecnologia, onde novos designs e capacidades de CPU surgem constantemente. A habilidade de escrever código flexível com mínimo esforço é uma vantagem significativa.

Aplicações Práticas

Esse framework foi usado para desenvolver vários tipos de aplicações, incluindo:

  1. Multiplicação de Matrizes Geral (GEMM): Esta é uma operação comum em DL que envolve multiplicar duas matrizes. O framework facilita a implementação eficiente dessa operação, independentemente do hardware específico.

  2. Perceptrons de Múltiplas Camadas (MLPs): O framework permite a criação de redes neurais complexas que podem tirar proveito das últimas capacidades de hardware enquanto simplificam o processo de programação.

  3. Redes Neurais Convolucionais (CNNs): Essas redes são amplamente usadas em tarefas de processamento de imagens, e o framework mostrou grande potencial em acelerar sua implementação.

  4. Operações em Matrizes Esparsas: O framework também suporta operações avançadas envolvendo matrizes esparsas, que podem reduzir os requisitos de memória e melhorar o desempenho em diversas aplicações.

Conclusão

A necessidade de métodos de programação flexíveis e eficientes em DL e HPC é clara. O novo framework oferece uma solução ao proporcionar uma forma de desenvolver código portátil que pode se adaptar a várias arquiteturas de CPU. Com seu foco em TPPs e abstrações de loop de alto nível, esse framework não só simplifica o processo de desenvolvimento, mas também melhora o desempenho das aplicações.

À medida que a tecnologia avança, essa abordagem ajudará os desenvolvedores a acompanharem os desafios emergentes e a aproveitarem ao máximo o novo hardware. No geral, o framework representa um avanço em tornar a programação de DL e HPC mais acessível e eficiente para todos os desenvolvedores.

Fonte original

Título: Harnessing Deep Learning and HPC Kernels via High-Level Loop and Tensor Abstractions on CPU Architectures

Resumo: During the past decade, Deep Learning (DL) algorithms, programming systems and hardware have converged with the High Performance Computing (HPC) counterparts. Nevertheless, the programming methodology of DL and HPC systems is stagnant, relying on highly-optimized, yet platform-specific and inflexible vendor-optimized libraries. Such libraries provide close-to-peak performance on specific platforms, kernels and shapes thereof that vendors have dedicated optimizations efforts, while they underperform in the remaining use-cases, yielding non-portable codes with performance glass-jaws. This work introduces a framework to develop efficient, portable DL and HPC kernels for modern CPU architectures. We decompose the kernel development in two steps: 1) Expressing the computational core using Tensor Processing Primitives (TPPs): a compact, versatile set of 2D-tensor operators, 2) Expressing the logical loops around TPPs in a high-level, declarative fashion whereas the exact instantiation (ordering, tiling, parallelization) is determined via simple knobs. We demonstrate the efficacy of our approach using standalone kernels and end-to-end workloads that outperform state-of-the-art implementations on diverse CPU platforms.

Autores: Evangelos Georganas, Dhiraj Kalamkar, Kirill Voronin, Abhisek Kundu, Antonio Noack, Hans Pabst, Alexander Breuer, Alexander Heinecke

Última atualização: 2024-03-15 00:00:00

Idioma: English

Fonte URL: https://arxiv.org/abs/2304.12576

Fonte PDF: https://arxiv.org/pdf/2304.12576

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.

Mais de autores

Artigos semelhantes