起動と接続
Wolfram言語は同じマシンでローカルに,またはネットワークで接続された他のマシンでリモートに,並列カーネルをさまざまな方法で実行できる.さらに,ネットワークは特化した管理アプリケーションによって制御されている同種グリッドのこともあれば,異種グリッドのこともある.これらのさまざまな設定をすべて使うために,Wolfram言語は並列カーネルを起動し,それらと通信する必要がある.リモートマシンを使う場合は,並列カーネルを起動するのは複雑である.どのように並列カーネルが起動されても,通信には必ずWSTPが使われる.
一般にWolfram言語は必要に応じて自動的に並列カーネルを起動する.これには並列環境設定で選ばれた設定が使われるが,コマンドLaunchKernelsを使って手動でカーネルを起動することもできる.これはバッチモードで実行しているときに便利なことがある.
このセクションでは並列カーネルの起動と並列カーネルへの接続に関する問題点について述べる.ここで取り上げるのは,提供されているいくつかの接続方法であり,そのどれもがWolfram言語が実行される可能性のある種々のタイプの環境に特化している.
カーネルの起動
Wolfram言語の並列計算では通常並列コマンドが実行されたときに自動的にカーネルが起動される.起動されるカーネルは並列環境設定で設定されたものである.デフォルトの設定では,同じコンピュータ上で実行中のカーネルを,ローカルカーネル接続法を使って起動するというものである.コアが2つのマシンでは,並列カーネルは2つ起動する.$ConfiguredKernelsを使うと,自動的に起動されることになるカーネルを見ることができる.以下の例では2つのローカルカーネルが起動する.
LaunchKernelsを引数なしで使うと,設定されたカーネルが起動する.ここでは2つのカーネルが起動する.
LaunchKernelsを使う必要はない.代りにParallelTable等の並列コマンドを使った場合も,カーネルは自動的に起動する.
実行中のカーネルはいつでもKernelsで調べられる.次の例では起動された2つのカーネルが示される.
環境設定で設定しなくても,LaunchKernelsを使ってカーネルを手動で起動することもできる.詳細は接続方法ごとに異なる.次のセクションで詳細を述べる.
このセクションの残りの部分では,さまざまな接続方法における設定と起動について述べる.
ローカルカーネル
ローカルカーネル接続法は,マスターWolfram言語と同じコンピュータ上の並列カーネルを実行する場合に使う.これはマルチコア環境に適しており,並列計算の設定としては最も簡単なものである.
ローカルカーネル接続法の設定は並列環境設定を使って行う.設定パネルは以下のようなものである.
並列カーネルはすべて同じコンピュータ上でマスターカーネルとして起動しているので,これは最も簡単な設定である.主に問題となるのはいくつカーネルを起動するかということであるが,自動設定ではプロセッサコアと並列カーネルライセンスの数を使う.
プロセッサコアの数は$ProcessorCountで調べられる.この値を変更したい場合は,保護を外してから新しい値を割り当てる.ここでは値は2である.
並列カーネルライセンスの数は$MaxLicenseSubprocessesで与えられる.これはWolframシステムのライセンスで制御される.ここでは値は4である.
4という設定は,並列カーネルが4つまで起動できることを意味する.
手動による起動
手動でカーネルを起動したいが,設定メカニズムを避けたいという場合は,引数を直接LaunchKernelsに渡すことができる.これはコマンドラインから直接バッチモードでWolfram言語を実行している場合に便利なことがある.
LaunchKernels[num] | num 個のローカルカーネルを起動する |
LaunchKernels["localhost"] | ローカルカーネルを起動する |
LaunchKernels[LocalMachine[num]] | num 個のローカルカーネルを起動する |
LaunchKernels[LocalMachine[cmd]] | オペレーティングシステムコマンド cmd を使ってローカルカーネルを起動する |
ローカルカーネル接続法では,整数(カーネル数を設定する)を渡すか文字列localhostを指定することで,LaunchKernelsから直接ローカルカーネルを起動することができる.また,LocalMachine内ではより詳細な設定を指定することもできる.これにはまずLocalKernels`パッケージをロードする必要がある.これを以下に示す.
これで引数をLocalMachineに渡すことができるようになった.以下では起動するローカルカーネル数を設定する.
リモートカーネルの起動に使うコマンドを変更すると,より便利なことがある.デフォルトのコマンドは$mathkernelで設定されており,一般に次のような設定となっている.
コマンドはLocalMachineに直接渡すことができる.以下は標準のインストール設定ではないWolframシステムに適している.
別の方法として,カーネルを起動する前に$mathkernelの値を変更するというものも挙げられる.
並列カーネルを起動した後は,Wolfram言語の全並列関数を使うことができる.
Lightweight Grid
Lightweight Grid接続法はマスターWolfram言語と異なるコンピュータの並列ワーカーを実行するときに使用される.これはWolfram Research Lightweight Gridテクノロジーを使ってリモートマシンでWolfram言語を起動する.この方法は異機種ネットワークおよび管理テクノロジーのない場合に適している.
Lightweight Grid接続法の設定は,並列環境設定を使って行う.設定パネルは以下のようなものである.
この設定では,マスターカーネルにはLightweight Gridマネージャを実行する他の3つのコンピュータがあり,各々が2つのカーネルを起動するように設定されている.
詳細はLightweight Gridのドキュメントを参照されたい.
手動による起動
手動でカーネルを起動したいが,設定メカニズムを避けたいという場合は,引数を直接LaunchKernelsに渡すことができる.これはコマンドラインから直接バッチモードでWolfram言語を実行している場合に便利なことがある.
LaunchKernels[url] | サーバ url でLightweight Gridを使ってカーネルを起動する |
LaunchKernels[LightweightGrid[url]] | サーバ url でLightweight Gridを使ってカーネルを起動する |
Lightweight Grid接続法では,Lightweight Gridマネージャの名前を渡すことで,LaunchKernelsから直接カーネルを起動することができる.また,LightweightGrid内ではより詳細な設定を指定することができる.これにはまずLightweightGridClient`パッケージをロードする必要がある.これを以下に示す.
カーネルを起動するときにLightweightGridで引数を使う.以下に例を示す.
並列カーネルを起動した後は,Wolfram言語の全並列関数を使うことができる.
詳細は Lightweight Gridのドキュメントを参照されたい.
クラスタインテグレーション
クラスタインテグレーション接続法はマスターWolfram言語と異なるコンピュータの並列ワーカーを実行するときに使用される.これは多数の他社のクラスタ管理テクノロジーと統合する.
クラスタインテグレーション接続法の設定は並列環境設定で行う.設定パネルは以下のようなものである.
この設定では,1つのクラスタがヘッドノードclusterbossでWindows Computer Cluster Serverを使うように設定されている.各マシンは2つのカーネルを実行するように設定されている.
Wolfram言語は以下のクラスタ管理テクノロジーをサポートする:
詳細はクラスタインテグレーションのドキュメントに記載されている.
手動による起動
手動でカーネルを起動したいが,設定メカニズムを避けたいという場合は,引数を直接LaunchKernelsに渡すことができる.これはコマンドラインから直接バッチモードでWolfram言語を実行している場合に便利なことがある.
Cluster Integrationカーネルの手動による起動
クラスタインテグレーション接続法では,LaunchKernelsから直接カーネルを起動することができる.これにはまずClusterIntegration`パッケージをロードする必要がある.これを以下に示す.
特定のクラスタを起動するには,そのクラスタの名前をLaunchKernelsに渡す必要がある.例えばWindows Compute Cluster Serverを使う場合はCCSを使う.2つのカーネルを起動する例を示す.
これが正しく動作するためには,Windows Compute Cluster Serverが動作するように設定されていなければならない.
並列カーネルを起動した後は,Wolfram言語の全並列関数を使うことができる.
詳細はCluster Integrationのドキュメントを参照されたい.
リモートカーネル
リモートカーネル接続法は,マスターWolfram言語と異なるコンピュータの並列ワーカーを実行するときに使用される.これは起動にリモートシェル呼出しテクノロジーを使うため,一般に設定と管理がより難しい.
リモートカーネル接続法の設定は並列環境設定で行う.設定パネルは以下のようなものである.
この設定では,2つのリモートマシンがそれぞれ4つの並列カーネルを提供するように設定されている.
デフォルトの設定では,Windowsではrshを,他のプラットフォームではsshを使ってカーネルを起動する.これは,sshは通常Windowsでは使えないからである.もちろん,どのマシンもマスターマシンからリモートシェルが起動できるように設定されていなければならない.
カーネルを起動するための起動コマンドは変更することができる.起動コマンドでは,そのコマンドが実際に使用される前に挿入される多くのパラメータを使うことができる.例えば,パラメータ`1`は使用されているリモートマシンの名前を参照する.
ユーザ名のデフォルトの値は$Usernameを使うというもので,これはローカルのWolfram言語を実行しているユーザを指す.
手動による起動
手動でカーネルを起動したいが,設定メカニズムを避けたいという場合は,引数を直接LaunchKernelsに渡すことができる.これはコマンドラインから直接バッチモードでWolfram言語を実行している場合に便利なことがある.
LaunchKernels[RemoteMachine[host]] | マシン host でリモートカーネルを起動する |
LaunchKernels[RemoteMachine[host,num]] | マシン host で num 個のリモートカーネルを起動する |
LaunchKernels[RemoteMachine[host,command,num]] | リモートコマンドとして command を使ってマシン host で num 個のリモートカーネルを起動する |
リモートカーネル接続法では,LaunchKernelsから直接カーネルを起動することができる.これにはまずRemoteKernels`パッケージをロードする必要がある.これを以下に示す.
起動するためには,RemoteMachineで引数を渡す.次の例はマシンremote1.wolfram.comのリモートカーネルを1つ起動する.
リモートカーネルを起動するためのコマンドを変更すると便利なことがある.デフォルトのコマンドは$RemoteCommandで設定されており,一般に以下のような設定になっている.rshはWindowsでのみ使用し,他のプラットフォームではsshを使うことに留意されたい.
リモートコマンドのパラメータは前のセクションに記載されている.ユーザ名の引数は$RemoteUsernameで設定され,デフォルトでは$Usernameとなっている.
コマンドはRemoteMachineに直接渡すことができる.以下は標準のインストール設定ではないWolframシステムに適している.
別の方法として,カーネルを起動する前に$RemoteKernelの値を変更するというものも考えられる.
並列カーネルを起動した後は,Wolfram言語の全並列関数を使うことができる.
WSTPServerカーネル
リモートカーネル接続法は,マスタWolfram言語から異なるコンピュータ上の並列リモートワーカーを実行するときに使用する.これは実行中のWSTPServerに接続でき,これらのサーバからカーネルを要求することができる.
WSTPServerサーバカーネル接続法は並列環境設定から有効化できる.設定用のパネルは以下のようなものである.カーネルは手動で設定しなければならない.
手動による起動
WSTPServerのカーネルはURLを使ってwstp://server:port の形で指定できる.ポート番号はオプションである.
wstp:のURLはLaunchKernelsの引数として直接指定できる.
"raspi4b"というマシン上のWSTPServerのリストから2つのカーネルを起動する.
WSTPServerカーネルは$ConfiguredKernelsにも含むことができる.その場合はこれらをWSTPServerKernel[]の項目に加える.
並列カーネルを起動したら,Wolfram言語の並列関数が使用できる.
生のWSTP接続
手作業で設定したWSTPリンクを介して接続されたカーネルに加えることもできる.
次の例では,生のリンク接続のアプリケーションをロードする.それからコマンドラインオプションで-subkernelと-mathlinkを指定して別のWolfram言語を起動する.最後にリンクはLaunchKernelsに渡され,リモートカーネルがワーカーカーネルになる.