2011-07-21 12 views
14

Cuando intento configurar kernels remotos en mathematica a través de Evaluation> Parallel Kernel Configuration ... luego voy a "Kernels Remotos" y agrego hosts. Después de eso trato de lanzar kernels remotos y solo algunos de ellos se lanzan (el número de ellos varía). Y recibo un mensaje como el siguiente.¿Cómo configurar kernels remotos paralelos en Mathematica?

KernelObject :: RDEAD: Subkernel conectado a través de mando a distancia [nodo2] aparece muerto. >> LinkConnect :: linkc: no se puede conectar a LinkObject [36154 @ 192.168.1.104,49648 @ 192.168.1.104,38,12]. >> General :: stop: la salida adicional de LinkConnect :: linkc será suprimida durante este cálculo. >>

¿Alguna idea de cómo hacerlo funcionar?

Ten en cuenta que a veces carga algunos de los núcleos remotos pero nunca todos. Gracias por adelantado.


Esta es mi ouput de $ConfiguredKernels // InputForm

{SubKernels`LocalKernels`LocalMachine[4], 
SubKernels`RemoteKernels`RemoteMachine["nodo2", 2], 
SubKernels`RemoteKernels`RemoteMachine["nodo1", 2], 
SubKernels`RemoteKernels`RemoteMachine["nodo3", 2], 
SubKernels`RemoteKernels`RemoteMachine["nodo4", 2], 
SubKernels`RemoteKernels`RemoteMachine["nodo5", 2]} 

Una vez que se ha cargado todos los granos, pero por lo general no es así, sólo uno o dos núcleos remotos.

+0

Por cierto, esto ocurre con Mathematica 8, que se utiliza para trabajar con Mathematica 7 – Ivan

+0

¿Alguien ha confirmado o replicado este problema? –

+0

Puedo confirmar que esto no funciona. Intenté conectarme a mi propio kernel local a través de la interfaz remota del kernel en Mathematica 8.0.1, y falló con el mismo mensaje de error. –

Respuesta

10

Se proporciona muy poca información, por lo que esta respuesta puede no ser 100% útil.

El primer problema para considerar siempre es la licencia en la máquina remota. Si algunos kernels se lanzan, pero otros no, es posible que se hayan quedado sin licencias para los kernels en esa máquina. El resto de esta publicación asumirá que la licencia no es el problema.

método de conexión

La interfaz de núcleo remoto en Mathematica por defecto asume el protocolo rsh, que no es la elección correcta para muchos entornos, porque rsh no es un protocolo muy seguro.

La otra opción es ssh, que es mucho más compatible. Hay muchos clientes ssh, pero me centraré en un cliente incluido con Mathematica, es decir, WolframSSH.jar. Este cliente está basado en Java, que tiene el beneficio adicional de funcionar igual en todas las plataformas compatibles con Mathematica (Mac, Windows y Linux).

Para evitar tener que escribir una contraseña para cada conexión del kernel, es conveniente crear un par de claves privadas/públicas. La clave privada permanece en su computadora y la clave pública debe colocarse en la computadora remota (generalmente en la carpeta .ssh del directorio principal remoto).

Para generar un par de claves pública/privada puede utilizar el archivo WolframSSHKeyGen.jar, así:

java -jar c:\path\to\mathematica\SystemFiles\Java\WolframSSHKeyGen.jar 

y siga las instrucciones que aparecen en los cuadros de diálogo que se presentan. Cuando termine, copie la clave pública a.ssh carpeta en la máquina remota. En mi caso, llamé a las teclas kernel_key y kernel_key.pub se denominó automáticamente de esa manera.

Ahora puede probar la conexión de una línea de comandos, al igual que (mediante el comando ls en la máquina remota):

java -jar c:\path\to\mathematica\SystemFiles\Java\WolframSSH.jar --keyfile kernel_key [email protected] ls 

Si esto funciona, debe ser capaz de terminar en el lado Mathematica de cosas.

núcleo remoto Conexión

Para realizar una conexión necesita los siguientes ajustes, el nombre de la máquina remota:

machine = "machine.example.com"; 

El nombre de usuario, por lo general $ usuario:

user = $UserName; 

La ubicación binaria de ssh:

ssh = FileNameJoin[{$InstallationDirectory, "SystemFiles", "Java", "WolframSSH.jar"}]; 

La clave privada como se describió anteriormente:

privatekey = "c:\\users\\arnoudb\\kernel_key"; 

El comando de inicio para el núcleo:

math = "math -mathlink -linkmode Connect `4` -linkname `2` -subkernel -noinit >& /dev/null &"; 

Una función de configuración para poner todo junto:

ConfigureKernel[machine_, user_, ssh_, privatekey_, math_, number_] := 
SubKernels`RemoteKernels`RemoteMachine[ 
    machine, 
    "java -jar \"" <> ssh <> "\" --keyfile \"" <> privatekey <> "\" " <> user <> "@" <> machine <> " \"" <> math <> "\"", number] 

Este utiliza el función de configuración y lo define para usar 4 núcleos remotos:

remote = ConfigureKernel[machine, user, ssh, privatekey, math, 4] 

Esto inicia los granos:

LaunchKernels[remote] 

Este comando verifica si los granos están todos conectados y remota:

ParallelEvaluate[$MachineName] 
+0

Ver mi pregunta editada. – Ivan

Cuestiones relacionadas