Digamos que eu execute uma computação de supercomputador em 100k núcleos por 4 horas em http://www.nersc.gov/users/computational-systems/edison/configuration , trocando cerca de 4 PB de dados pela rede e executando cerca de 4 TB de I / O. O cálculo é todo inteiro, portanto, os resultados estão certos ou errados (sem erros numéricos intermediários).
Supondo que o código esteja correto, gostaria de estimar a probabilidade de que o cálculo esteja errado devido a uma falha de hardware. Qual é uma boa maneira de fazer isso? Existem boas fontes para os números necessários para fazer essa estimativa?
error-estimation
Geoffrey Irving
fonte
fonte
Respostas:
Você já olhou os vários relatórios exascale que foram publicados? Hoje, as falhas graves não são uma preocupação significativa - com certeza elas acontecem, mas sua frequência não é suficientemente alta para causar sérias preocupações. Porém, estima-se que sejam suficientemente frequentes em sistemas de escala exascânica com ou mais núcleos que os códigos precisam estar preparados para reagir adequadamente. Penso que estas questões foram expostas nos relatórios sobre roteiros para a escala exascal.O ( 108)
Lembro-me de que, entre os vários modos de falha, inversões de bit único na memória ou nos núcleos do processador não eram as preocupações mais significativas. Em vez disso, eram nós inteiros em queda, por exemplo, devido a falha no disco, falhas no sistema operacional, etc. Os projetos atuais de exascale exigem, portanto, uma verificação periódica dos códigos na RAM flash, transmitindo preferencialmente os dados do ponto de verificação fora do nó. Os códigos precisarão ser capazes de reiniciar em tempo real a partir de um estado salvo anteriormente, se o sistema encontrar que um nó desapareceu, substituindo esse nó por um nó de inicialização a quente em outras partes do sistema.
fonte
Eu acho que você começa coletando taxas de erro de componentes, como DRAM, como esta pesquisa do Google sobre erros de DRAM na natureza: um estudo de campo em larga escala Eles encontraram ~ 1% de chance de obter um erro incorrigível por ano.
Não tenho certeza se é isso que você está interessado. Eu estaria mais interessado em erros indetectáveis. Erros tais que os métodos típicos de verificação de erros não seriam detectados. Por exemplo, quando você envia pacotes pela ótica, eles são acompanhados por algum tipo de CRC, o que permite uma pequena chance de erro.
ATUALIZAÇÃO: este artigo Arquiteturas para detecção e recuperação de erros on-line em processadores multicore fala sobre arquitetura multicore confiável, mas também cobre aspectos diferentes de confiabilidade do sistema e possui bibliografia
fonte
Você pode tentar perguntar aos administradores do cluster em que está computando. Imagino que, como parte do processo de validação, eles tenham enfrentado o problema de estimar a probabilidade de erros de hardware.
fonte
Parece épico. Se ninguém fez esse experimento, considere executar 100k núcleos separados, fazendo algo como repetir uma entrada sha1 repetidamente, ver qual é a taxa de erro. (Desconfortável, desconfio), a partir daí faça o mesmo, mas faça com que eles negociem resultados da cadeia de hash de vez em quando para obter as taxas de erro da sua rede. Imagino que isso também seja muito pequeno, mas suspeito que você possa conseguir pelo menos alguns usando seu superaglomerado por algumas horas :)
Essa abordagem garante que todo cálculo seja correto, pois o hash é extremamente sensível a trocas de bit único, enquanto que mesmo um cálculo inteiro inteiro pode ocultar erros nas ramificações, ou seja, todo o cálculo não seria elíptico em cada estado de memória consecutivo.
Eu tenho trabalhado em uma maneira de garantir que o código tenha sido executado corretamente por um cluster externo cuja motivação é trapacear, enviando resultados falsos. A solução em que convergi é integrar o hash no cálculo com alguma frequência que torna a trapaça menos eficiente do que fazer o trabalho.
fonte