Como lidar com muitos dados?

14

Nossas simulações de dinâmica de plasma geralmente produzem muita informação. Durante as simulações, registramos várias propriedades físicas em uma grade (x, y, z, t) que é tão grande quanto (8192x1024x1024x1500), por pelo menos 10 propriedades. Esta informação é processada após a simulação ser concluída. Com isso nós

  1. fazer filmes de propriedades,
  2. realizar uma análise de Fourier,
  3. calcular propriedades médias.

Esse simples despejo de tanta informação quanto possível funcionou bem quando estudamos sistemas menores. Isso nos deu a flexibilidade de interagir com os resultados e decidir mais tarde o que queríamos fazer com ele. Também nos permitiu alocar nossos recursos computacionais (tempo de CPU) para simplesmente executar as simulações.

Iniciamos o processo de fazer a análise de Fourier em tempo real e filtrar apenas uma faixa selecionada de escalas de comprimento. Por razões numéricas, às vezes precisamos resolver escalas de comprimento menores do que realmente estamos interessados; portanto, nesses casos, esse filtro ajuda bastante. Também estamos explorando várias bibliotecas de E / S paralelas , por exemplo , opções de E / S paralela, em particular HDF5 paralelo .

Quais estratégias estão disponíveis para maximizar a eficiência do processamento de dados?

Existe algum benefício em realizar todas as análises (não incluindo pós-processamento, por exemplo, filmes e plotagens) em tempo real?

Eu posso imaginar esse problema surgindo em outras áreas de pesquisa. Por exemplo, você pode ter uma simulação de dinâmica molecular que precisa evoluir por um longo tempo, mas está interessado no breve momento em que algo interessante está acontecendo. Ou no CFD, o desenvolvimento inicial pode ser lento, mas depois que a turbulência se instala, você pode precisar de uma resolução de tempo maior para monitorar a dinâmica.

Existem exemplos disponíveis gratuitamente de coleta sofisticada de resultados de simulações?

Yann
fonte
Isso pode parecer uma pergunta ampla. Se você se sente assim, faça sugestões sobre como posso ser mais específico.
Yann
1
Veja também como alguns grupos experimentais lidam com esse problema. Física de alta energia (como um CERN) e astrofísica podem ter escalas de dados ainda maiores que precisam ser armazenadas (ou mesmo filtradas antes de serem armazenadas porque os dados chegam mais rápido do que podem ser gravados em qualquer armazenamento), distribuídas e analisadas.
Brian Diggs

Respostas:

10

Eu acho que você pode ter que dividir sua saída para corresponder às suas metas:

  1. para os filmes de propriedades, você provavelmente não precisa da resolução espacial completa e de todas as variáveis. Escolha com cuidado o que deseja mostrar e pense na resolução final do filme que você exibirá, provavelmente não terá 8 bilhões de pixels.
  2. Para as análises de Fourier (ou coisas como POD), se forem temporais, você provavelmente pode apenas experimentar algumas centenas de pontos escolhidos com sabedoria em seu domínio. Se eles são espaciais, você provavelmente precisará apenas de alguns instantâneos e não de 1500. E, novamente, não de todas as propriedades.
  3. Para a média do tempo, você pode continuar adicionando ao mesmo campo e não precisa se preocupar com a dimensão do tempo, certo? A média espacial é dolorosa, principalmente se você quiser observar sua evolução ao longo do tempo. Porém, mais processamento on-line antes de descarregar os dados pode reduzir o tamanho deles ...

Isso significa bastante trabalho para ter saídas dedicadas em vez de uma grande genérica, mas isso deve ajudar a manter o custo e o tamanho baixos. Espero que isto ajude !

Apenas mais uma coisa que quero acrescentar, em geral, a resolução total dos dados é necessária apenas para reiniciar arquivos, ou seja, arquivos para reiniciar sua simulação. Você não precisa de muitos deles para uma determinada simulação (digamos 100, para que, se algo acontecer entre 2 reinicializações, você perca no máximo 1% do seu cálculo), enquanto você provavelmente deseja aumentar a frequência de saída do seu computador. filmes. E você pode fazer isso em apenas 1/64 da resolução, por exemplo (1 a cada 4 pontos em cada direção).

FrenchKheldar
fonte
Por que a média espacial é dolorosa? Basta fazê-lo on-the-fly e escrever o resultado, que deve ser pequeno.
David Ketcheson
@DavidKetcheson A média espacial é dolorosa porque requer muita comunicação e é potencialmente influenciada pela topologia do seu domínio, não? Claro, se você tem uma grade ortogonal pura alinhada com seu quadro de referência, isso não é muito ruim, mas você ainda precisa fazer uma combinação inteligente de computação e MPI_REDUCE, porque com uma grade desse tamanho, você não pode simplesmente fazer um ALL_REDUCE em 1 processador eu acho ...
FrenchKheldar
1
Ok, agora eu entendo o seu comentário. Mas a comunicação geralmente não é ruim, pois é possível calcular a média local de cada processo localmente e, em seguida, reduzir apenas um único valor flutuante por processo. Na minha experiência (em um BlueGene / P de 65K núcleos), o custo disso é trivial, especialmente se comparado aos custos de E / S. De fato, fazemos um ALL_REDUCE em todos os 65K núcleos a cada passo e é muito rápido.
David Ketcheson
@DavidKetcheson Na verdade, agora também acho que entendi errado o seu argumento e também estava superestimando o custo da redução de dados. O que eu tinha em mente era algo como uma média em escala de azimute / azimutal onde você teria que armazenar / produzir os dados 2D completos que podem ou não estar na mesma grade que a grade computacional. Mas você está certo, o custo real do MPI_ALL_REDUCE não é um problema em si.
FrenchKheldar
8

Eu acho que os mestres atuais dessa arte são os grandes experimentos de física de partículas (eu estou mais familiarizado com CDF e D0 porque sou velho e trabalho na Universidade de Chicago). Eles possuem acionadores de hardware que descartam petabytes (ou mais) por ano. No entanto, esse é o assunto da quantização / discretização, ou "jogando fora apenas o que você não precisa". Não tenho certeza de que você possa dar uma resposta sensata em geral. Seria melhor restringir o problema para algo como "Eu tenho uma simulação PDE discretizada da seguinte maneira e gostaria de reduzir eficientemente a amostra".

Matt Knepley
fonte
3

Peter LePage é bastante famoso nos círculos de redes QCD por sugerir um método pelo qual redes de redes grandes inviáveis ​​podem ser reduzidas encontrando e aplicando boas soluções analíticas de curto alcance.

Isso equivale a notar que um conjunto de splines bem escolhidos pode permitir uma integração precisa com menos nós que o método trapezoidal (exceto que, no seu caso, você pode tirar proveito dele em quatro dimensões ao mesmo tempo).

O resultado é que você troca o tamanho bruto do conjunto de dados por mais computação por nó - etapa, mas sai à frente no final devido à alta dimensionalidade do seu problema.

Não sou um assunto que conheço bem o suficiente para dar dicas decentes, mas funcionou em alguns campos no passado.

dmckee --- gatinho ex-moderador
fonte
3

A questão é um pouco ampla, por isso fornecerei uma resposta correspondentemente vaga que sugere possíveis técnicas nesses casos.

1) Processamento on-the-fly, no qual você já está trabalhando. Uma maneira de executar o processamento on-the-fly e, ainda assim, dissociá-lo da etapa de geração de dados é gerar um arquivo de saída cíclico que sempre contém as últimas N etapas e fazer com que a análise seja executada em um processo separado. Obviamente, você deve sincronizar os dois para evitar uma condição de corrida.

2) Escolhendo os dados armazenados com mais cuidado. Infelizmente, isso é altamente específico da situação.

3) Compacte seus dados antes de armazená-los ou use uma biblioteca de armazenamento com opções de compactação integradas, como HDF5.

4) Armazene pontos de verificação regulares em vez da saída total. Se você armazenar um ponto de verificação completo a cada N etapas, ou seja, dados suficientes para reiniciar a simulação a partir daí, poderá reconstruir os dados ausentes de maneira altamente paralela, se e quando necessário. Observe que, no caso dos métodos de Monte-Carlo, o ponto de verificação deve incluir o estado dos geradores de números aleatórios. Você pode realmente considerar isso uma técnica de compactação altamente específica do aplicativo.

Khinsen
fonte