首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Mathematica中配置并行远程内核?

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

Stack Overflow用户
提问于 2011-07-21 22:58:37
回答 1查看 4.2K关注 0票数 15

当我试图通过Evaluation>Parallel内核配置在mathematica中配置远程内核时.然后我去“远程内核”并添加主机。在此之后,我尝试启动远程内核,但只有一些内核被启动(它们的数量不同)。我得到的信息如下所示。

KernelObject::r死人:通过remotenodo2连接的子内核看起来已经死了。LinkConnect::linkc:无法连接到LinkObject36154@192.168.1.104,49648@192.168.1.104,38,12. >>通用::stop: LinkConnect::linkc的进一步输出将在此计算过程中被抑制。>>

有什么办法让这件事起作用吗?

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

这是我为$ConfiguredKernels // InputForm所做的

代码语言:javascript
复制
{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]}

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

EN

回答 1

Stack Overflow用户

发布于 2011-11-11 20:20:19

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

首先要考虑的问题是远程计算机上的许可。如果一些内核启动,而另一些内核没有启动,那么您可能已经用完了该机器上内核的许可证。这篇文章的其余部分将假定许可不是问题所在。

连接方法

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

另一个选项是ssh,它得到了更广泛的支持。有很多ssh客户端,但我将重点介绍一个附带在Mathematica中的客户机,即WolframSSH.jar。这个客户端是基于java的,它有一个额外的好处,就是在Mathematica (Mac、Window和Linux)支持的所有平台上运行相同的功能。

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

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

代码语言:javascript
复制
java -jar c:\path\to\mathematica\SystemFiles\Java\WolframSSHKeyGen.jar

然后按照对话框上的说明进行操作。完成后,将公钥复制到远程计算机上的.ssh文件夹。在我的例子中,我调用了键kernel_keykernel_key.pub自动被这样命名。

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

代码语言:javascript
复制
java -jar c:\path\to\mathematica\SystemFiles\Java\WolframSSH.jar --keyfile kernel_key arnoudb@machine.example.com ls

如果这是可行的,你应该能够完成数学方面的事情。

远程内核连接

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

代码语言:javascript
复制
machine = "machine.example.com";

登录名,通常为$UserName:

代码语言:javascript
复制
user = $UserName;

ssh二进制位置:

代码语言:javascript
复制
ssh = FileNameJoin[{$InstallationDirectory, "SystemFiles", "Java", "WolframSSH.jar"}];

如上所述的私钥:

代码语言:javascript
复制
privatekey = "c:\\users\\arnoudb\\kernel_key";

内核的启动命令:

代码语言:javascript
复制
math = "math -mathlink -linkmode Connect `4` -linkname `2` -subkernel -noinit >& /dev/null &";

一个配置函数,用于将所有内容组合在一起:

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

这将使用配置函数并将其定义为使用4个远程内核:

代码语言:javascript
复制
remote = ConfigureKernel[machine, user, ssh, privatekey, math, 4]

这就启动了内核:

代码语言:javascript
复制
LaunchKernels[remote]

此命令验证内核是否全部连接和远程:

代码语言:javascript
复制
ParallelEvaluate[$MachineName]
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6783840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档