Alguma sugestão para criar código R usa vários processadores?

28

Eu tenho scripts R para ler grandes quantidades de dados csv de arquivos diferentes e depois executar tarefas de aprendizado de máquina como svm para classificação.
Existem bibliotecas para usar vários núcleos no servidor para R.
ou
Qual é a maneira mais adequada de conseguir isso?

mohans
fonte
Só não vejo como o fato de importar dados e executar o SVM tem alguma relevância para a questão. É por isso que acho que é mais uma questão SO. Mas eu podia ver Xrefs como sendo uma boa solução a longo prazo, uma vez que é de R ...
Shane
3
Não tenho nenhum problema com esse tipo de perguntas e respostas aqui. R não é uma linguagem tão convencional (como Python ou Java) que um quant diria naturalmente: "Oh, essa é uma questão geral de programação, então eu deveria ir ao StackOverflow ou similar e perguntar isso ou procurar soluções". Na verdade, é mais uma pergunta para uma lista de discussão R ou site de grupo. Para atender aos analistas iniciantes que desejam aprender R, também devemos ter uma resposta aqui.
Paul
2
Vote para se manter aberto; muito relevante para os estatísticos, porque as maneiras pelas quais nossos problemas podem ou não ser divididos em fluxos paralelos são relevantes para a pergunta que está sendo feita.
#
@chl: Obrigado por aumentar isso. Na verdade, verifiquei todas as referências não comerciais desse segmento logo depois que ele apareceu, mas não consegui encontrar nada que funcionasse no Windows 7 x64.
whuber
1
whuber, a solução que apresento funciona com o win 7 e não é comercial (leia o post ao qual vinculei para obter detalhes). Ele é fornecido com um ambiente comercial, mas pode ser separado dele (como meu post mostra como). E o próprio código é GPL ...
Tal Galili

Respostas:

16

Se estiver no Linux, o mais direto é o multicore . Além disso, sugiro dar uma olhada no MPI (especialmente com o pacote de neve ).

De maneira mais geral, dê uma olhada em:

  1. A visão de computação de alto desempenho no CRAN.
  2. "Estado da arte em computação paralela com R"

Por fim, recomendo usar o pacote foreach para abstrair o back-end paralelo no seu código. Isso tornará mais útil a longo prazo.

Shane
fonte
Eu uso principalmente multicore, ainda gosto mais de neve do que neve e Rmpi ​​por sua tolerância a falhas e interface limpa.
@mbq +1 para queda de neve - abstrai ainda mais a neve e torna a computação paralela com R bastante simples.
Sharpie
6

Se você estiver usando o GNU / Linux, as respostas anteriores de Shane e Dirk são ótimas.

Se você precisar de uma solução para Windows, existe uma nesta postagem:

Processamento multicore paralelo com R (no Windows)

Embora o pacote ainda não esteja no CRAN. pode ser baixado desse link.

Tal Galili
fonte
5

Shane está correto. Tanto o multicore quanto o Rmpi são vencedores.

Uma cobertura ligeiramente mais ampla do tópico está na exibição de tarefas CRAN em computação de alto desempenho . Isso também vincula a um artigo de pesquisa bastante recente sobre Parallel Computing with R do JSS.

Por fim, alguns exemplos e dicas práticas estão no tutorial Introdução ao HPC com R que dou de vez em quando - consulte minha página de apresentações para obter a cópia mais recente da semana passada em useR.

Dirk Eddelbuettel
fonte
Bem, mutexes necessários. Como comentei sua resposta, só vi a primeira versão (em bruto) e descobri bem, posso expandir o mc e o Rmpi. E então você fez e eu pareço um imitador. Como a vida.
Dirk Eddelbuettel
Por outro lado, minha resposta deriva da leitura de seu artigo / apresentação no passado. Então eu acho que estou copiando você também.
Shane
5

Notei que nas respostas anteriores faltam algumas considerações gerais sobre o HPC.
Primeiro, nenhum desses pacotes permitirá que você execute um SVM em paralelo. Portanto, o que você pode acelerar é a otimização de parâmetros ou a validação cruzada, mas você deve escrever suas próprias funções para isso. Ou, é claro, você pode executar o trabalho para diferentes conjuntos de dados em paralelo, se for o caso.
A segunda questão é a memória; se você deseja distribuir o cálculo por alguns computadores físicos, não há almoço grátis e você deve copiar os dados - aqui você deve considerar se faz sentido predistribuir uma cópia dos dados nos computadores para salvar alguma comunicação. Por outro lado, se você deseja usar vários núcleos em um computador, o multicore é especialmente apropriado porque permite que todos os processos filhos acessem a memória do processo pai, para que você possa economizar tempo e muito espaço na memória.


fonte
1
+1 Excelente ponto sobre como isso não lida com a divisão da validação cruzada.
Shane
Aliás, houve algum trabalho recente (2013) ao habilitar o HPC para SVMs individuais pelo dCSE ( hector.ac.uk/cse/distributedcse/reports/sprint03/… ). Há um pacote sprintpara o R com uma função psvm, mas eles estão um pouco atrasados ​​em acompanhar as alterações do R 3.0 e as novas diretrizes de envio do CRAN, portanto, o download atual não está disponível no CRAN nem é totalmente compatível com o R 3.0. Sua milhagem pode variar.
estrela brilhante
3

As respostas de Shane e Dirk estão no local.

No entanto, você pode querer dar uma olhada em uma versão comercial do R, chamada Revolution R, criada para lidar com grandes conjuntos de dados e executar em vários núcleos. Este software é gratuito para acadêmicos (que pode ser o seu caso, eu não sei)

Dave Kellen
fonte
5
Eu discordo um pouco. O Revolution faz um ótimo trabalho de vendas na obtenção de compartilhamento de ideias (como evidenciado pelo seu post), mas a partir de agora há muito pouco no produto que você ainda não obteria com o R normal (pelo menos no Linux). Intel MKL, claro, mas você pode obter o Goto Blas. No Windows, eles oferecem doSMP, que ajuda como multicore não pode ser construído lá.
Dirk Eddelbuettel
2
Mas, é claro, o doSMP é exatamente o que o OP estaria procurando se estivesse trabalhando em um ambiente Windows.
#