International Essays |
Supercomputação Instantânea: Lançamento de Wolfram Compute Services
Supercomputação Instantânea: Lançamento de Wolfram Compute Services
Escalando suas computações
Escalando suas computações
Vamos supor que tenha sido realizada uma computação em Wolfram Language. E agora é preciso escalá-la — talvez 1.000 vezes ou mais. Pois bem: hoje foi lançada uma forma extremamente simplificada de fazer isso. Basta envolver a computação que se deseja escalar com a função e ela será enviada automaticamente para o novo sistema Wolfram Compute Services. Em seguida — seja em um minuto, uma hora, um dia ou o tempo que for necessário — o sistema informará que o processamento foi concluído, permitindo o acesso aos resultados.
Ao longo de décadas, muitas vezes foi necessário realizar cálculos grandes e intensivos (geralmente para fins científicos), envolvendo grandes volumes de dados, milhões de casos, forte irredutibilidade computacional, entre outros desafios. Provavelmente há mais poder computacional disponível em minha própria casa do que na maioria das residências — atualmente, cerca de 200 núcleos de processamento. Em muitas noites, todo esse poder computacional fica em execução durante horas — e, mesmo assim, ainda é necessário muito mais. A partir de agora, existe uma solução simples — para todos: basta enviar sua computação de forma transparente para Wolfram Compute Services, e a execução ocorrerá praticamente em qualquer escala.
Há quase 20 anos, a Wolfram Language já conta com funções integradas como e , que permitem paralelizar subcomputações de maneira imediata. No entanto, para que isso realmente possibilite escalar uma computação, é necessário dispor de capacidade computacional suficiente — algo que, graças a Wolfram Compute Services — qualquer pessoa pode obter instantaneamente.
As ferramentas fundamentais que tornam o Wolfram Compute Services possível já existem na Wolfram Language há vários anos. O que o Wolfram Compute Services faz agora é reunir tudo isso em uma experiência integrada, altamente simplificada e completa. Por exemplo, suponha que se esteja trabalhando em um notebook e desenvolvendo gradualmente uma computação. Em determinado momento, chega-se ao input que se deseja escalar. Normalmente, esse input possui diversas dependências de partes anteriores da computação. Mas não é preciso se preocupar com isso. Basta passar o input desejado pela função RemoteBatchSubmit. O Wolfram Compute Services cuidará automaticamente de todas as dependências e demais requisitos.
Há outro ponto importante, a função RemoteBatchSubmit, assim como todas as funções da Wolfram Language, trabalha com expressões simbólicas, que podem representar qualquer coisa — desde tabelas numéricas até imagens, grafos, interfaces de usuário, vídeos, entre outros. Isso significa que os resultados obtidos podem ser utilizados imediatamente, por exemplo, em um Wolfram Notebook, sem necessidade de importação ou etapas adicionais.
Em que tipos de máquinas é possível usar esse serviço? O Wolfram Compute Services oferece diversas opções, adequadas a diferentes tipos de computação e orçamentos. Existe a opção mais básica, com 1 núcleo e 8 GB de memória — ideal para simplesmente “tirar uma computação da sua própria máquina”. É possível escolher máquinas com maior capacidade de memória — atualmente, até cerca de 1.500 GB. Também é possível optar por máquinas com mais núcleos — atualmente, até 192. E, se uma escala ainda maior de paralelismo for necessária, o Wolfram Compute Services também oferece essa possibilidade, pois pode aplicar uma função a qualquer número de elementos, executando-a em qualquer quantidade de núcleos, distribuídos por múltiplas máquinas.
Um Exemplo Simples
Um Exemplo Simples
Certo, então aqui está um exemplo bem simples — que, por coincidência, vem de um trabalho científico que fiz há algum tempo. Definimos a função PentagonTiling que adiciona aleatoriamente pentágonos não sobrepostos a um agrupamento (cluster):
PentagonTiling[steps_Integer]:=Module{unit,init,res},unit=Polygon[N@CirclePoints[5]];init=[{unit},{{1}},unit];DiscretizeGraphicsGraphicsNest,init,steps["Tiling"]
Para 20 pentágonos, consigo executar isso rapidamente na minha própria máquina:
In[]:=
PentagonTiling[20]
Out[]=
E para 500 pentágonos? Bem, a geometria computacional fica mais complexa, e o processamento levaria tempo demais para eu querer deixar minha própria máquina ocupada com isso. Felizmente, agora existe outra opção: usar o Wolfram Compute Services!
Tudo o que preciso fazer é enviar minha computação para RemoteBatchSubmit:
In[]:=
RemoteBatchSubmit[PentagonTiling[500]]
Out[]=
RemoteBatchJobObject
Imediatamente, um job (tarefa) é criado (com todas as dependências necessárias tratadas automaticamente). Em seguida, o job é colocado na fila para execução. E, poucos minutos depois, recebo um e-mail:
Sem saber quanto tempo vai levar, vou fazer outras coisas. Passado algum tempo, fico curioso para verificar como está o andamento. Clico no link do e-mail, que me leva a um painel de controle (dashboard) — e posso ver que o job está sendo executado com sucesso:
Vou fazer outras coisas. Pouco tempo depois, recebo outro e-mail:
Paralelismo em Larga Escala
Paralelismo em Larga Escala
Obtenho o resultado:
Tudo é programável!
Tudo é programável!
E ainda vem muito mais por aí...
E ainda vem muito mais por aí...