O que é computação de alto desempenho (HPC)?

Imagem via Pixabay

#Computação 

A computação de alto desempenho combina recursos computacionais juntos como um único recurso. Os recursos combinados são frequentemente chamados de supercomputador ou cluster de computação. O HPC torna possível fornecer intensidade computacional e processar cargas de trabalho e aplicativos computacionais complexos em altas velocidades e em paralelo. Antes de nos aprofundarmos no HPC, vamos explorar como ele difere da supercomputação.

HPC vs supercomputação.

Atualmente, supercomputação se tornou sinônimo de computação de alto desempenho.

No entanto, eles não são exatamente intercambiáveis: supercomputadores e supercomputação geralmente se referem às implantações de cluster maiores e à computação que ocorre lá. HPC se refere principalmente a uma computação realizada usando computadores extremamente rápidos em clusters que variam de clusters HPC de pequena escala a grandes supercomputadores. Na maioria das vezes, clusters e supercomputadores HPC compartilham a mesma arquitetura e são construídos a partir de servidores de commodities.

Historicamente, a supercomputação era um tipo de computação de alto desempenho que aproveitava um conjunto especial de sistemas. Semelhante aos clusters HPC de hoje, eles trabalhavam em problemas massivamente complexos ou com muitos dados, mas comparar os dois é um pouco como comparar maçãs com peras quando se trata de poder de computação. Até mesmo um mero telefone celular hoje é mais poderoso do que os primeiros supercomputadores.

Por exemplo, alguns telefones celulares podem atingir alguns gigaflops, enquanto o CDC 6600, um supercomputador projetado por Seymour Cray na década de 1960, foi estimado para fornecer cerca de três megaflops. Na época, os supercomputadores eram mais poderosos do que qualquer outra coisa no mercado e muito caros para construir e desenvolver. Sua arquitetura era muito superior aos computadores pessoais que estavam disponíveis. É por isso que eles eram chamados de supercomputadores.

Ao contrário dos clusters HPC atuais, os supercomputadores eram bem diferentes em termos de arquitetura. No fim das contas, eles eram enormes sistemas multiprocessadores com funcionalidade muito especializada e eram geralmente reservados para o reino de governos e universidades de pesquisa. Avançando para 2023, você descobrirá que os sistemas HPC agora são aplicados em uma vasta gama de indústrias.

Quais são os principais casos de uso para HPC?

O HPC é usado para resolver alguns dos problemas computacionais mais avançados e difíceis que temos hoje. Esses problemas existem em todos os setores, como ciência, engenharia ou negócios. Alguns dos casos de uso mais populares para HPC incluem:

– Modelagem climática e previsão do tempo;

– Exploração de petróleo e gás;

– Engenharia automotiva e aeroespacial;

– Análise financeira e avaliação de risco;

– Descoberta de medicamentos e dobramento de proteínas;

– Processamento de imagem e vídeo;

– Criptografia reversa e detecção de intrusão para segurança cibernética;

– Pesquisa e análise genômica

Esses casos de uso são resolvidos com equações numéricas – como aquelas em dinâmica de fluidos computacional (CFD). Eles analisam ou processam grandes conjuntos de dados como aqueles em análise de dados de alto desempenho (HPDA), inteligência artificial e machine learning.

Cargas de trabalho para esses diferentes casos de uso podem ser classificadas em um ou muitos tipos diferentes, dependendo de como são executadas ou processadas. O processamento em lote, por exemplo, envolve a execução de um grande número de trabalhos semelhantes em uma sequência. O processamento em tempo real envolve o processamento de dados em tempo real conforme eles chegam. O processamento interativo envolve a execução de aplicativos interativos, como simulações ou visualizações de dados.

Vamos explorar alguns desses casos de uso com mais detalhes, pois eles estão intimamente relacionados ao HPC.

Dinâmica de Fluidos Computacional (CFD):

A Dinâmica de Fluidos Computacional (CFD) é um ramo da ciência que usa métodos numéricos e algoritmos para resolver e analisar fluxos de fluidos. É usada para estudar o movimento de sólidos, líquidos e gases, e para analisar e prever os efeitos dos fluxos de fluidos em estruturas e sistemas. A CFD é uma ferramenta importante para engenheiros e cientistas, pois pode ser usada para estudar o comportamento de sistemas complexos em uma ampla gama de aplicações, incluindo engenharia aeroespacial, automotiva e biomédica.

Análise de dados de alto desempenho (HPDA):

A análise de dados de alto desempenho (HPDA) é o processo de analisar grandes quantidades de dados de forma rápida e eficiente para obter insights úteis. Envolve o uso de técnicas especializadas, hardware e software para analisar dados em escala, identificar padrões e tendências e tomar decisões em tempo real. A análise de dados de alto desempenho pode ser usada em vários campos, como finanças, saúde e marketing. O objetivo final é melhorar a eficiência e aumentar os lucros.

IA (Inteligência Artificial) e machine learning

IA (inteligência artificial) e machine learning são campos relacionados da ciência da computação com foco no desenvolvimento de sistemas de computador que podem aprender, raciocinar e tomar decisões. IA e machine learning (ML) envolvem o uso de algoritmos para identificar padrões e tendências em conjuntos de dados e para fazer previsões e decisões a partir dos dados. IA e ML são usados em uma variedade de aplicações, incluindo mineração de dados, processamento de linguagem natural, veículos autônomos e muito mais.

Então, como o HPC funciona? Vamos explorar os componentes por trás da arquitetura de cluster HPC e ferramentas comuns usadas para executar cargas de trabalho HPC. Primeiro, vamos definir o que queremos dizer com um cluster HPC.

O que são clusters HPC?

Os clusters HPC são uma coleção de recursos usados para o propósito principal de executar cargas de trabalho computacionais.

Os clusters HPC consistem em:

– Estações de trabalho que interagem com a carga de trabalho para pré ou pós-processamento;

– Servidores que são frequentemente implantados como nós de computação, cabeça e armazenamento;

        – Nós de computação calculam as cargas de trabalho;

        – Nós de cabeça são para acesso do usuário e interação do cluster;

        – Nós de armazenamento são para dados, armazenamento geral ou computacional;

– Um sistema operacional usado para operar os servidores;

– Um provisionador de cluster que garante a homogeneidade do nó e é usado para implantar o sistema operacional no qual os servidores são executados.

– Uma rede para comunicação entre nós;

– Soluções de armazenamento:

        – Uma solução de armazenamento de propósito geral para armazenar aplicativos e dados do usuário;

        – Um sistema de arquivos em cluster de alta velocidade e baixa latência geralmente usado para armazenamento computacional;

        – Armazenamento de objetos, em alguns casos;

– Recursos de agendamento;

– Cargas de trabalho e as bibliotecas das quais essas cargas de trabalho dependem;

– Serviços auxiliares, incluindo:

        – Gerenciamento de identidade para manter o acesso do usuário consistente em todo o cluster;

        – Uma pilha de observabilidade e monitoramento que fornece insights sobre a utilização de recursos de carga de trabalho.

Arquitetura de cluster HPC

Componentes de um cluster HPC:

Estações de trabalho e visualização remota

Os usuários devem ser capazes de definir cargas de trabalho e visualizar seus resultados antes e depois da computação. Isso geralmente ocorre em estações de trabalho. Elas podem ser locais para o usuário ou acessadas remotamente. É comum que cargas de trabalho de HPC tenham uma etapa de pré e pós-processamento. Às vezes, isso pode ser a criação de um modelo 3D baseado em CAD ou uma simulação visual, dados gráficos ou resultados numéricos. Isso geralmente é realizado com recursos gráficos de VDI, colocalizados com os recursos de cluster de HPC se houver considerações de transferência de dados. Por outro lado, eles podem ser implementados com estações de trabalho locais onde os dados são transferidos de ou para o cluster de HPC, conforme necessário para visualização local ou trabalho posterior.

As soluções de gerenciamento de cluster para VDI com suporte a GPU ou vGPU incluem:

– MAAS e LXD para gerenciar recursos de VDI;

– OpenStack;

– Soluções da Citrix.

As organizações também podem provisionar estações de trabalho remotamente para HPC. Soluções que possibilitam uma experiência de estação de trabalho remota incluem:

– Software de acesso remoto, como VNC, que fornece acesso ao ambiente de desktop;

– Ambientes de desktop, como Ubuntu Desktop em execução em uma VM;

– Estações de trabalho de desktop em execução na nuvem, como Ubuntu em espaços de trabalho AWS.

Servidores

Um servidor é um computador ou sistema que fornece recursos, dados, serviços ou programas para outros computadores, conhecidos como clientes, em uma rede. Os servidores podem fornecer várias funcionalidades, geralmente chamadas de serviços, como compartilhar dados ou recursos entre vários clientes ou executar cálculos para um cliente.

Exemplos comuns de tipos de servidor incluem servidores web, servidores de aplicativos, servidores de banco de dados e servidores de arquivos. Na computação de alto desempenho, os servidores são usados para dois propósitos principais: computar modelos matemáticos ou processar dados e servir dados por meio de servidores de arquivos. Os servidores usados para computação e processamento de dados são geralmente chamados de nós de computação. Os servidores que servem dados são geralmente chamados de nós de armazenamento.

Nós de computação

As notas de computação são o componente de processamento de um cluster HPC. Eles executam a carga de trabalho usando recursos locais, como CPU, GPU, FPGA e outras unidades de processamento. Essas cargas de trabalho também usam outros recursos no nó de computação para processamento, como memória, armazenamento e adaptador de rede. As cargas de trabalho usam a largura de banda disponível desses componentes subjacentes. Dependendo de como a carga de trabalho usa esses componentes, ela pode ser limitada por um ou mais deles durante a execução. Por exemplo, algumas cargas de trabalho que usam muita memória podem ser limitadas em largura de banda ou capacidade de memória. Cargas de trabalho que usam muitos dados ou geram uma grande quantidade de dados durante a computação podem ser limitadas em sua velocidade de processamento devido à largura de banda da rede ou restrições de desempenho de armazenamento – se esses dados forem gravados no armazenamento como parte da computação daquela carga de trabalho. Algumas cargas de trabalho podem precisar apenas de muitos recursos computacionais e ser limitadas pela capacidade de processamento do cluster.

Ao criar e projetar esses clusters, é importante entender a utilização de recursos da carga de trabalho e projetar o cluster com isso em mente. A melhor maneira de entender o uso de recursos de carga de trabalho é monitorando os recursos usados. Isso permite que você entenda as limitações.

Nós principais

Nós principais ou nós de acesso atuam como um ponto de entrada em um cluster HPC. É onde os usuários interagem com a entrada e saída de suas cargas de trabalho e obtêm acesso aos sistemas de armazenamento local disponíveis para esse cluster. É também onde eles agendam suas cargas de trabalho. O agendador, por sua vez, executa processos em nós de computação.

Nós de armazenamento

Um nó de armazenamento é um computador ou servidor responsável por armazenar e fornecer acesso a dados em uma rede. Os nós de armazenamento são normalmente conectados a outros nós de armazenamento em um cluster de armazenamento e fornecem acesso a dados armazenados no cluster. Eles geralmente são conectados a outros nós de armazenamento ou computação por meio de uma rede de alta velocidade, como InfiniBand ou Ethernet, fornecendo acesso aos dados diretamente ou por meio de um sistema de arquivos. Existem vários protocolos para fornecer acesso ao armazenamento, desde compartilhamento NFS tradicional até outras implementações de armazenamento compartilhado, como Lustre ou BeeGFS

Sistema operacional

Para operar os nós, você precisa de um sistema operacional (SO). O SO é responsável por gerenciar a memória, o processador, o armazenamento e outros componentes do computador. Ele também fornece uma interface entre o usuário e os servidores, permitindo que os usuários interajam com o computador e executem programas. Os sistemas operacionais comuns usados em HPC incluem Windows, macOS e Linux.

Linux em HPC

O sistema operacional Linux, provavelmente um dos projetos de código aberto mais reconhecidos, tem sido um driver para software de código aberto em HPC e foi impulsionado por casos de uso de HPC. A NASA foi um dos primeiros usuários do Linux e o Linux, por sua vez, foi fundamental para o primeiro cluster Beowulf. Os clusters Beowulf eram essencialmente clusters criados usando servidores de commodities e interconexões de alta velocidade, em vez de mainframes ou supercomputadores mais tradicionais. O primeiro cluster Beowulf foi implantado na NASA e moldou o HPC como o conhecemos hoje. Ele impulsionou a adoção do Linux a partir de então no governo e se expandiu bem além desse setor para outros. Hoje, esse tipo de cluster também é usado por empresas.

O HPC impulsionou muitos esforços de desenvolvimento no Linux, todos focados fortemente em reduzir a latência e aumentar o desempenho em toda a pilha – da rede ao armazenamento.

O Ubuntu é o sistema operacional Linux preferido por 66% dos desenvolvedores e é ideal para HPC. Ele pode ser usado para estações de trabalho, para acessar clusters HPC ou instalado em servidores, dando ao usuário uma experiência uniforme em ambos.

Provisionamento de cluster

A homogeneidade do nó é importante em HPC para garantir a consistência da carga de trabalho. É por isso que é comum ver clusters HPC provisionados com soluções de metal como serviço que ajudam as organizações a gerenciar essa infraestrutura em escala.

Soluções de provisionamento de cluster

MAAS

Metal as a Service ou MAAS, é um projeto de código aberto desenvolvido e mantido pela Canonical. O MAAS foi criado com um propósito: provisionamento bare-metal centrado em API. O MAAS automatiza todos os aspectos do provisionamento de hardware, desde a detecção de uma máquina em rack até a implantação de um sistema operacional personalizado em execução. Ele torna o gerenciamento de grandes clusters de servidores, como os do HPC, fácil por meio de abstração e automação. Ele foi criado para ser fácil de usar, tem uma IU abrangente – diferente de muitas outras ferramentas neste espaço – e é altamente escalável graças ao seu design desagregado. O MAAS é dividido em um controlador de região que gerencia o estado geral do cluster, em qualquer lugar, desde manter informações sobre a especificação geral do hardware até manter informações sobre quais servidores foram provisionados e quais servidores estão disponíveis.

Além disso, ele torna tudo isso disponível para o usuário. O MAAS também vem com um controlador de rack sem estado que lida com inicialização PXE e controle de energia. Vários controladores de rack podem ser implantados, permitindo fácil expansão independentemente do tamanho do ambiente. É notável que o MAAS pode ser implantado em uma configuração altamente disponível, dando a ele a tolerância a falhas que projetos comparáveis no setor não têm.

xCAT

Extreme Cloud Administration Toolkit ou xCAT, é um projeto de código aberto desenvolvido pela IBM. Seu foco principal é no espaço HPC, com recursos principalmente que atendem à criação e gerenciamento de clusters sem disco, instalação paralela e gerenciamento de nós de cluster Linux. Também é adequado para configurar pilhas de computação de alto desempenho, como agendadores de tarefas em lote. Ele também tem a capacidade de clonar e criar imagens de máquinas Linux e Windows. Ele tem alguns recursos que atendem principalmente a servidores IBM e Lenovo. Ele é usado por muitos grandes sites governamentais HPC para a implantação de clusters HPC sem disco.

Warewulf

O propósito declarado do Warewulf é ser um “sistema de provisionamento de sistema operacional de contêiner sem estado e sem disco para grandes clusters de sistemas bare metal e/ou virtuais”. Ele tem sido usado para provisionamento de cluster HPC nas últimas duas décadas. O Warewulf foi recentemente reescrito usando Golang em sua versão mais recente, Warewulf v4.

Redes

Conforme mencionado acima, cargas de trabalho HPC paralelas dependem muito da comunicação entre processos. Quando essa comunicação ocorre dentro de um nó de computação, ela é apenas passada de um processo para outro pela memória desse nó computacional. Mas quando um processo se comunica com um processo em outro nó computacional, essa comunicação precisa passar pela rede. Essa comunicação entre processos pode ser bastante frequente. Se for esse o caso, é importante que a rede tenha baixa latência para evitar atrasos de comunicação entre processos. Afinal, você não quer gastar um tempo valioso de computação em processos aguardando entregas de mensagens. Em casos em que os tamanhos de dados são grandes, é importante entregar esses dados o mais rápido possível. Isso é possível por redes de alto rendimento. Quanto mais rápido a rede puder entregar dados, mais cedo qualquer processo poderá começar trabalhando na carga de trabalho. Comunicação frequente e grandes tamanhos de mensagens e dados são recursos regulares de cargas de trabalho HPC. Isso levou à criação de soluções de rede especializadas que geralmente oferecem baixa latência e alto rendimento para atender às demandas específicas de HPC.


Publicado em 13/09/2024 22h19

Artigo original: