問題タブ [snow]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - 並列/マルチコア プロセスを使用した回帰
Linux クラスターの R で次のコードを実行しようとしています。処理能力をフルに活用したい (コア/ノード/メモリを指定)。以下のコードは、基本的に GAM 回帰に基づいて予測を実行し、結果を複数のデータ セットの CSV ファイルとして保存します (ここでは 2 つだけを示します)。
このコードを Rmpi/snow/doParallel などの並列パッケージに渡すことはできますか? ありがとうございました!
データ
r - R foreach: 単一マシンからクラスターへ
次の (簡略化された) スクリプトは、UNIX クラスター (4 つの仮想コア) のマスター ノードで正常に動作します。
16 * 4
クラスター内の 16 個のノード (合計で仮想コア)を活用したいと考えています。
で指定された並列バックエンドを変更するだけでよいと思いますmakeCluster
。しかし、どうすればいいですか?ドキュメントはあまり明確ではありません。
このかなり古い (2013) 投稿http://www.r-bloggers.com/the-wonders-of-foreach/に基づいて、デフォルトのタイプを変更する必要があるようです (sock
またはMPI
- どちらが unix で動作しますか? )
編集
foreach の作成者によるこのビネットから:
デフォルトでは、doParallel は Unix ライクなシステムではマルチコア機能を使用し、Windows では Snow 機能を使用します。マルチコア機能は、コンピューターのクラスターではなく、単一のコンピューターでのみタスクを実行することに注意してください。ただし、スノー機能を使用して、Unix のようなオペレーティング システム、Windows、またはその組み合わせを使用して、クラスターで実行することができます。
とはyou can use the snow functionality
どういう意味ですか? どうすればいいですか?
r - R: クラスターのワーカーに「チェックポイント」を設定します
次のコードを使用して...
1. 並列クラスターを作成します
2. ソース test.R
3. 'test.R' で定義された関数でいくつかの並列作業を行います
残念ながら、私は古いパッケージに依存しています :-(
「チェックポイント」を使用して、CRAN パッケージの過去のスナップショットを利用できます
私の質問は...どうすればクラスターワーカーで古いパッケージを
利用できますか?
以下は機能しません。
コマンド
TRUE を返します。しかし、2番目
ハングするだけです。なぜ労働者がその命令に固執するのか私にはわかりません。どうにかしてワーカーを調べて、ユーザーの入力を待っているだけなのかどうかを確認できますか?
r - R 並列、parLapply() は lapply() と同じものを返さない
私は仕事でいくつかのコードをより速く実行することを任されており、並列計算で障害に遭遇しました。並行して実行したいオリジナルの for ループがあります。for ループを使用せずにコードを再現し、代わりに lapply() を使用するのが最も簡単に思えますが、これはループと同じくらい長く実行されます。parLapply() を使用してコードを書き直すと、lapply() と元の for ループの結果とは異なる結果になりますが、はるかに迅速な結果が得られます。どちらも同等です。このプログラムの目的は、各国の各満期レベルでのキャッシュ スプレッド (スプレッド カーブ) を計算することです。
「bonddata.csv」リンク: http://www.mediafire.com/download/hfcdbryhedpso77/bonddata.csv 「weocountries.csv」リンク: http://www.mediafire.com/download/7x15csw7lwwataj/weocountries.csv
必要なデータとライブラリの読み込み:
キャッシュ スプレッドを計算する関数の作成:
元のコード:
lapply() コード:
parLapply() コード:
データフレームの比較:
コードが適切に実行された場合、結果のデータフレーム "cashspreads" および "cashspreads2" は、データフレーム "cashspreads3" と比較できません。
これが同じデータフレームを生成しない理由について何か考えはありますか?
r - clusterApply または clusterMap 内の Windows コマンドに進行状況を出力します。
Rのsnowパッケージを使用して、複数のコアでpythonスクリプトを呼び出しています。進行状況をコンソールに出力したいのです。cat()
、message()
またはprint()
関数内で使用しても出力が得られません。これにより、関数の進行状況を追跡することが難しくなります。
clusterApply または clusterMap 関数内でコマンド ラインに出力を出力することは可能ですか?
これは私の現在のスクリプトです:
r - R: 雪塊内の疎行列の操作
雪で作られた並列クラスターの下で igraph によって生成されたスパース行列を操作しようとしていますが、行列の合計を取得したり、 which(element > 0) のような操作を行ったりするなどの操作は、非要素であっても機能しないようです-パラレルバージョンはそうです。これは私がやろうとしていることの簡単な例です:
これを実行すると、次のエラーが返されます
ただし、これは機能します。
すべてをクラスターにエクスポートしたので、データ構造が何らかの方法で異なる方法で処理されるのは非常に奇妙です。私は何が欠けていますか?
r - R 並列処理 - ノードの選択
8 コアのコンピューターで並列パッケージを使用して、Windows上の R で大量のデータを処理しようとしています。行ごとに処理する必要がある大きな data.frame があります。行ごとに、その行が処理されるのにかかる時間を見積もることができます。これは、行ごとに 10 秒から 4 時間まで大きく変動する可能性があります。
エラーが発生すると、結果セット全体が失われる可能性があるため、clusterApplyLB 関数の下でプログラム全体を一度に実行したくありません (これがおそらく最も最適な方法であることはわかっています)。プログラムを実行する最初の試みは、プログラムをブロックに分割し、各ブロックを個別に並行して実行し、その並行実行からの出力を保存してから、次のブロックに進むことでした。
問題は、7 倍の「リアルタイム」で実行するのではなく (8 コアを持っていますが、1 つのスペアを保持したかった)、行を実行すると、約 2 倍でしか実行されないように見えることです。これは、各コアへの行の割り当てが非効率的であることが原因であると推測しています。
たとえば、2 つのコアで 10 行のデータがあり、そのうちの 2 行は 4 時間で実行でき、残りの 2 行は 10 秒かかります。理論的には、これを実行するのに 4 時間 10 秒かかる可能性がありますが、非効率的に割り当てられた場合、8 時間かかる可能性があります。(明らかにこれは誇張ですが、より多くのコアとより多くの行で見積もりが正しくない場合、同様の状況が発生する可能性があります)
これらの時間を見積もり、正しい順序であると見積もった順序で clusterApplyLB に送信すると (所要時間を最小限に抑えるために見積時間をコア全体に分散させるため)、必要なコアに送信されない可能性があります。私が見積もった時間内に終わらないかもしれないからです。たとえば、2 つのプロセスの所要時間が 10 分と 12 分で、11.6 分と 11.4 秒かかると見積もった場合、行が clusterApplyLB に送信される順序は予想とは異なります。この種のエラーは小さいように見えるかもしれませんが、複数の長時間行を最適化した場合、この順序の混乱により、2 つの 4 時間行が異なるノードではなく同じノードに移動する可能性があります (これにより、私の合計時間)。
TL;DR。私の質問: R 並列処理関数 (たとえば、clusterApplyLB、clusterApply、parApply、または任意の sapply、lapply、または foreach バリアント) にどの行をどのコア/ノードに送信する必要があるかを伝える方法はありますか? 自分が置かれている状況がなくても、これは非常に有益で興味深い情報提供になると思います。