Executando Mathematica remotamente
Se você tem a sua disposição um cluster ou grid de computação de alta performance onde o Mathematica está instalado, você pode carregar a interface gráfica do Mathematica no seu computador mas executar todos os comandos na outra máquina de melhor performance. Não é necessário usar nenhum terminal bash; o Mathematica entre os dois computadores conversam sozinhos. Pelo menos para mim essa conexão é bem mais rápida do que carregar a GUI do Mathematica inteira remotamente, i.e. usando algo como o X11 forwarding.
Primeiro, você tem que ter o Mathematica instalado nas duas máquinas. Não é necessário que sejam a mesma versão, mas observe que o núcleo do Mathematica que será executado é o do computador remoto. Qualquer pacote a ser usado deve estar instalado lá. Note também que a versão do Mathematica que será executada é a do computador remoto; então se você tiver Mathematica 8 instalado no seu computador mas o núcleo instalado no computador remoto for Mathematica 7, você não vai poder usar nada específico do Mathematica 8.
O Mathematica possui dois elementos: o núcleo (Kernel) e a interface gráfica. Os Notebooks são uma espécie de script para o kernel. Você pode ter mais de um kernel funcionando ao mesmo tempo. Por padrão, o Mathematica vem configurado para executar um único kernel. Com o tutorial que se segue, você vai adicionar mais kernels ao Mathematica que serão executados em outro computador.
Mais de um Kernel não deve ser confundido com computação em paralelo, que o Mathematica implementa com subkernels. Hoje em dia com clusters e processadores multi-core, cada Kernel do Mathematica admite subkernels, um para cada processador. Em uma máquina Dual Core por exemplo, você pode configurar dois subkernels de um dado kernel. Em uma máquina com 12 processadores, você pode ter até 12 subkernels. O Mathematica não invoca subkernels automaticamente, ele por padrão usará um único core do seu computador. Ou seja, se você tem um Intel Quad Core 2.0 GHz, o Mathematica usa apenas um dos quatro processadores 2.0GHz. Para executar mais de um subkernel você deve prefixar os seus comandos com algo como o Parallelize
:
primes = Table[Prime[10^i], {i, 11}]; IntegerLength /@ primes // Parallelize // AbsoluteTiming
Por padrão, ao usar esse comando o Mathematica invocará o número máximo de subkernels possíveis. Em um Quad Core, são 4. Ele então vai dividir a tarefa entre os 4 processadores. Nem todos os processos podem ser divididos em subkernels, no entanto. Após iniciar uma execução remota do Mathematica para um cluster de alta performance, se você quiser usar todo o potencial do cluster, terá que executar comandos como o Parallelize
. Em uma computação longa com muita paralelização, é recomendável inicializar os subkernels com o comando LaunchKernels[]
.
O Mathematica não tem uma implementação satisfatória de execução remota. Os problemas são vários, e.g. portas aleatórias de conexão, que quase sempre serão bloqueadas por Firewall. A alternativa abaixo usa uma conexão ssh do computador local para o remoto e transfere toda a comunicação do kernel remoto por ssh.
Passo 1: Instalar scripts
Devido a limitação do WordPress.com, eu renomeei os arquivos para .doc. Primeiro, você precisa baixar os seguintes arquivos dependendo da sua plataforma e salvá-los no seu computador. Importante: eu só testei para o MacOSX.
- Mac OS X: tunnel e ssh-askpass para
~/Library/Mathematica/FrontEnd
(sua home, não o diretório raiz), comotunnel.sh
essh-askpass
(o último sem extensão). - Linux: tunnel para
~/.Mathematica/FrontEnd
comotunnel.sh
. - Windows: tunnel.bat, para algo como
\Documents and Settings\seu_usuario_windows\Application Data\Mathematica\FrontEnd
, salve-o comotunnel.bat
.
No Mac OS X e no Linux, após transferir e renomear os arquivos, execute o Terminal e aplique os comandos chmod +x tunnel.sh
e chmod +x ssh-askpass
no diretório onde os scripts foram salvos.
Passo 2: Configurar o Mathematica
No Mathematica no seu computador, siga estes passos:
- Acesse o menu Evaluation > Kernel Configuration Options.
- Clique em “Add”.
- Escolha um nome para o núcleo, e.g. “Cluster remoto”.
- Marque a opção “Append name to…” se quiser que os comandos executados no computador remoto e os resultados do computador remoto sejam explicitamente identificados no Notebook do Mathematica. Por exemplo, cada resultado será prefixado como
Out [Cluster remoto]: =
.
- No Mac, por uma questão de compatibilidade com o Linux, marque “Translate Return into New Line”.
- Marque “Advanced Options”
Os próximos passos requerem mais explicação:
Arguments to MLOpen deve conter verbatim, uma única linha:
-LinkMode Listen -LinkProtocol TCPIP -LinkOptions MLDontInteract -LinkHost 127.0.0.1
Launch Command para Mac ou Linux
"`userbaseDirectory`/FrontEnd/tunnel.sh" user@remote_machine
"/mathematica/default/Executables/math" "`linkname`"
e para Windows:
"`userbaseDirectory`\FrontEnd\tunnel.bat" user@remote_machine
"/mathematica/default/Executables/math" "`linkname`"
onde /mathematica ... /math
deve ser substituído pelo caminho completo do executável de linha de comando do Mathematica no computador remoto. Esse arquivo estará no diretório do executável do Mathematica com nome math
. Substitua também user@remote_machine
pelo seu login (user) seguido do endereço IP ou hostname do computador remoto.
No Windows, você ainda precisará do PuTTY.
Pronto. Ao abrir um Notebook, o Kernel remoto pode ser escolhido no menu Evaluation > Notebook’s Kernel. Você pode forçar a inicialização do Kernel em Evaluation > Start Kernel. No Mac, uma janela aparecerá perguntando sua senha; no Linux o Terminal fará isso. Se tudo der certo, o Mathematica local irá inicializar o kernel remoto. O bash script tunnel.sh
e o tunnel.bat
salvam no diretório onde eles estão um arquivo .log, útil para debug.
Sobre esse tutorial: Essa estratégia foi desenvolvida por Sascha Kratky. O ssh-askpass
para Mac foi escrito por Richard Brittain, especialista em computação aqui em Dartmouth College.
Comentários