Wolfram mathematica 如何在Mathematica中配置并行远程内核?

Wolfram mathematica 如何在Mathematica中配置并行远程内核?,wolfram-mathematica,mathematica-8,Wolfram Mathematica,Mathematica 8,当我试图通过评估>并行内核配置在mathematica中配置远程内核时。。。然后我转到“远程内核”并添加主机。之后,我尝试启动远程内核,但只启动了其中的一些内核(数量不同)。我得到了如下的味精 KernelObject::rdead:出现通过远程连接的子内核[nodo2] 死了。>>LinkConnect::linkc:无法连接到 链接对象[36154@192.168.1.104,49648@192.168.1.104,38,12]. >> 常规::停止:LinkConnect::linkc的进

当我试图通过评估>并行内核配置在mathematica中配置远程内核时。。。然后我转到“远程内核”并添加主机。之后,我尝试启动远程内核,但只启动了其中的一些内核(数量不同)。我得到了如下的味精

KernelObject::rdead:出现通过远程连接的子内核[nodo2] 死了。>>LinkConnect::linkc:无法连接到 链接对象[36154@192.168.1.104,49648@192.168.1.104,38,12]. >> 常规::停止:LinkConnect::linkc的进一步输出将被抑制 在此计算过程中。>>

有什么办法让它工作吗

考虑到它有时确实加载了一些远程内核,但决不是全部。提前谢谢


这是我对
$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]}

一旦它加载了所有内核,但通常不加载,就只加载一个或两个远程内核。

给出的信息很少,所以这个答案可能不是100%有用

第一个要考虑的问题是远程机器上的许可。如果某些内核启动,但其他内核不启动,则可能该计算机上的内核许可证已用完。本文的其余部分将假定许可不是问题所在

连接方法

Mathematica中的远程内核接口默认采用rsh协议,这对于许多环境来说都不是正确的选择,因为rsh不是一个非常安全的协议

另一个选项是ssh,它得到了更广泛的支持。有许多ssh客户端,但我将重点介绍Mathematica附带的一个客户端,即WolframSSH.jar。这个客户端是基于java的,在Mathematica支持的所有平台(Mac、Windows和Linux)上都可以使用它,这是一个额外的好处

为了避免为每个内核连接键入密码,创建私钥/公钥对很方便。私钥保留在您的计算机上,而公钥需要放在远程计算机上(通常位于远程主目录的.ssh文件夹中)

要生成私钥/公钥对,可以使用WolframSSHKeyGen.jar文件,如下所示:

java -jar c:\path\to\mathematica\SystemFiles\Java\WolframSSHKeyGen.jar
并按照出现的对话框上的说明进行操作。完成后,将公钥复制到.ssh文件夹 在远程机器上。在我的例子中,我调用了keys
kernel\u key
kernel\u key。pub
就是这样自动命名的

现在可以从命令行测试连接,如下所示(在远程计算机上使用
ls
命令):

如果这样做有效,你应该能够在Mathematica方面完成工作

远程内核连接

要建立连接,需要以下设置,包括远程计算机的名称:

java -jar c:\path\to\mathematica\SystemFiles\Java\WolframSSH.jar --keyfile kernel_key arnoudb@machine.example.com ls
machine = "machine.example.com";
登录名,通常为$UserName:

user = $UserName;
ssh二进制位置:

ssh = FileNameJoin[{$InstallationDirectory, "SystemFiles", "Java", "WolframSSH.jar"}];
如上所述的私钥:

privatekey = "c:\\users\\arnoudb\\kernel_key";
内核的启动命令:

math = "math -mathlink -linkmode Connect `4` -linkname `2` -subkernel -noinit >& /dev/null &";
用于将所有内容组合在一起的配置功能:

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

remote = ConfigureKernel[machine, user, ssh, privatekey, math, 4]
LaunchKernels[remote]
此命令验证内核是否都已连接且远程:

ParallelEvaluate[$MachineName]

顺便说一句,这种情况发生在mathematica 8上,它曾经与mathematica 7一起工作。有人确认或复制过这个问题吗?我可以确认这不起作用。我尝试通过Mathematica 8.0.1上的远程内核接口连接到我自己的本地内核,但失败了,并显示了相同的错误消息。为了帮助诊断/重现该问题,以下信息将非常有用:$ConfiguredKernels//InputFormI刚刚遇到了相同的问题。原因似乎是远程机器上的磁盘已满。但这可能只适用于我的情况。