2011-07-21 48 views
14

當我嘗試通過評估>並行內核配置在mathematica中配置遠程內核...然後我去「遠程內核」並添加主機。之後,我嘗試啓動遠程內核,只有其中一些啓動(它們的數量各不相同)。我收到了像以下這樣的msg。如何在Mathematica中配置並行遠程內核?

KernelObject :: rdead:Subkernel通過遠程[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

順便說一句,這種情況使用Mathematica 8,用於使用Mathematica 7的工作 – Ivan

+0

有沒有人確認或複製過這個問題? –

+0

我可以證實這是行不通的。我嘗試通過Mathematica 8.0.1上的遠程內核接口連接到我自己的本地內核,並且失敗時顯示相同的錯誤消息。 –

回答

10

給出的信息很少,所以這個答案可能不是100%有用。

要始終考慮的第一個問題是遠程計算機上的許可。如果某些內核啓動了,但其他內核卻不啓動,則可能已經耗盡該機器上內核的許可證。這篇文章的其餘部分將假定許可不是問題。

連接方法

默認情況下數學遠程內核接口假定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_keykernel_key.pub這些鍵被自動命名。

您現在可以測試在命令行的連接,就像這樣(使用遠程機器上的ls命令):

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

如果一切正常,你應該能夠完成對Mathematica的側的東西。

遠程內核連接

爲了讓你需要以下設置的連接,遠程計算機的名稱:

machine = "machine.example.com"; 

的登錄名,通常是$用戶名:

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] 
+0

看我編輯的問題。 – Ivan