当我尝试通过评估>并行内核配置在mathematica中配置远程内核时...然后我转到“远程内核”并添加主机。之后我尝试启动远程内核,其中只有一些启动(它们的数量不同)。我得到了一个像以下一样的消息。
KernelObject :: rdead:出现通过远程[nodo2]连接的子内核 死。 >> LinkConnect :: linkc:无法连接 的LinkObject [36154 @ 192.168.1.104,49648 @ 192.168.1.104,38,12。 >> General :: stop:将禁止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]}
一旦它加载了所有内核,但它通常没有,只有一个或两个远程内核。
答案 0 :(得分:10)
提供的信息非常少,因此这个答案可能不是100%有用。
始终要考虑的第一个问题是远程计算机上的许可。如果某些内核启动,但其他内核没有启动,则可能是因为该机器上的内核许可证已用完。本文的其余部分将假定许可不是问题。
连接方法
默认情况下, Mathematica 中的远程内核接口采用 rsh 协议,这对许多环境来说都不是正确的选择,因为 rsh 是不是一个非常安全的协议。
另一个选项是 ssh ,它得到了更广泛的支持。有许多 ssh 客户端,但我将专注于 Mathematica 附带的客户端,即 WolframSSH.jar 。该客户端是基于Java的,它具有在 Mathematica (Mac,Window和Linux)支持的所有平台上运行相同的额外好处。
为了避免为每个内核连接键入密码,可以方便地创建私钥/公钥对。私钥保留在您的计算机上,公钥需要放在远程计算机上(通常位于远程主目录的.ssh文件夹中)。
要生成私钥/公钥对,您可以使用WolframSSHKeyGen.jar文件,如下所示:
java -jar c:\path\to\mathematica\SystemFiles\Java\WolframSSHKeyGen.jar
并按照出现的对话框上的说明进行操作。完成后,将公钥复制到.ssh文件夹
在远程机器上。就我而言,我调用了密钥kernel_key
,kernel_key.pub
自动命名为。
您现在可以从命令行测试连接,如下所示(使用远程计算机上的ls
命令):
java -jar c:\path\to\mathematica\SystemFiles\Java\WolframSSH.jar --keyfile kernel_key arnoudb@machine.example.com ls
如果这样做,你应该能够完成Mathematica方面的工作。
远程内核连接
要建立连接,您需要以下设置,即远程计算机的名称:
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]
这使用配置函数并将其定义为使用4个远程内核:
remote = ConfigureKernel[machine, user, ssh, privatekey, math, 4]
这将启动内核:
LaunchKernels[remote]
此命令验证内核是否全部连接且远程:
ParallelEvaluate[$MachineName]