CRAN Task View: High-Performance and Parallel Computing with Rの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載しました。

Maintainer: Dirk Eddelbuettel
Contact: Dirk.Eddelbuettel at R-project.org
Version: 2019-07-03
URL: https://CRAN.R-project.org/view=HighPerformanceComputing

このCRANタスクビューには、Rを使用した高性能コンピューティング(HPC)に役立つ、トピック別に分類されたパッケージのリストが含まれています。この文脈では、我々は、Rをもう少し押し進めることに関連するものとして、むしろゆるやかに「高性能コンピューティング」を定義しています。コンパイルされたコード、並列コンピューティング(明示モードと暗黙モードの両方)、大きなオブジェクトとプロファイリングを使用して作業します。

特に断りのない限り、ハイパーリンクを含むすべてのパッケージは、Comprehensive R Archive NetworkのCRANから入手できます。

このタスクビューで説明されているいくつかの領域が急速に変化しています。このタスクビューの追加や拡張の提案をタスクビューのtask view maintainerにお送りください。

Achim Zeileis, Markus Schmidberger, Martin Morgan, Max Kuhn, Tomas Radivoyevitch, Jochen Knaus, Tobias Verbeke, Hao Yu, David Rosenberg, Marco Enea, Ivo Welch, Jay Emerson, Wei-Chen Chen, Bill Cleveland, Ross Boylan, Ramon Diaz-Uriarte, Mark Zeligman, Kevin Ushey, Graham Jeffries, Will Landau, Tim Flutre, Reza Mohammadi, Ralf Stubner, Bob Jansen(そして私がここに追加することを忘れているかもしれない他の人たち)による提案と修正に感謝しています。

貢献は常に歓迎され、励まされます。2008年10月のこのCRANタスクビューの開始以来、ほとんどの貢献は電子メールの提案として到着しました。この特定のタスクビューファイルのソースファイルもGitHubリポジトリ(以下を参照)に格納され、プルリクエストも可能です。

Rの直接サポートは、リリース2.14.0から始まりました。multicore コアとsnowのパッケージの(わずかに改訂された)コピーを組み込んだ新しいパッケージparallelが含まれています。一部のタイプのクラスタは、基本パッケージ’parallel’によって直接処理されません。しかし、パッケージvignette で説明したように、snowのような機能を提供する並列部分は、MPIクラスタを含むsnowクラスターを受け入れます。

parallelパッケージには、L’Ecuyer et al(2002)に続く複数のRNGストリームのサポートも含まれており、mclapplyとsnowクラスタの両方をサポートしています。

R 2.14.0用にリリースされたバージョンには、基本機能が含まれています。高水準の便利機能は、後のRリリース用に計画されています。

並列コンピューティング:明示的並列処理

  • いくつかのパッケージは、並列コンピューティングに必要な通信層を提供します。この分野における最初のパッケージは、PVM(並列仮想マシン)の標準およびライブラリを使用するLiとRossiniによるRPVMだった。rpvmはもはや積極的に維持されていませんが、そのCRANのアーカイブディレクトリから利用できます。
  • 近年では、代わりのMPI(メッセージ・パッシング・インタフェース)規格では、並列コンピューティングでの事実上の標準となっている。これはYuによるRmpiを経由してRでサポートされています。
    • Rmpiパッケージは、まだ積極的に維持され、成熟しているとMPI APIから非常に多くの機能へのアクセスだけでなく、R固有の拡張機能を多数提供しています。
    • Rmpiは、LAM/MPI、MPICH/MPICH2、オープンMPIおよびDeino MPIの実装で使用することができます。これは、LAM/MPIはメンテナンスモードになり、新たな開発がオープンMPIに焦点を当てていることに留意すべきである。
  • pbdMPIパッケージは、直接、バッチ並列実行するために特に有用である単一のプログラム/複数データ(SPMD)並列プログラミングスタイルをサポートするために、MPIをインタフェースするためのS4クラスを提供します。
    • pbdSLAPは、この上に構築し、ScaLAPACKのバージョン2.0.2に基づいて倍精度でスケーラブルな線形代数パッケージ(すなわちBLACS、PBLASとScaLAPACK)を使用しています。
    • pbdBASEは、これらの上に構築されpbdDMATが「ビッグデータによるプログラミング」のための分散型密行列を提供するために構築しその上にコアクラスおよび分散データ・タイプのための方法を提供する。
    • pbdNCDF4パッケージは、(手動で同期せずに)同じファイルへの書き込みを複数のプロセスを可能にし、テラバイト規模ファイルをサポートしています。
    • pbdDEMOパッケージは、これらのパッケージの例、および詳細なvignetteを提供しています。
    • pbdPROFパッケージは、fpmpi、MPIP、またはTAUなどのMPIプロファイリングライブラリを介してのMPI通信SPMDコードをプロファイルします。
  • 代わりはREvolutionコンピューティングからnws(NetWorkSpaces)パッケージで提供されています。これは、並列コンピューティングへの以前のLindaSpacesアプローチの後継であり、Pythonのためのツイストネットワーキングツールキットの上に実装されています。
  • Tierneyらのsnow(ワークステーションの簡易ネットワーク)パッケージはPVM、MPI、NWSだけでなく、直接のネットワークソケットを使用することができます。それは、通信内容を隠すことによって抽象化レイヤを提供します。
    • snowFTパッケージは、snowに耐障害性の拡張機能を提供します。
  • Knausによるsnowfallパッケージは、snowに、より最近の代替手段を提供します。関数は、順次または並列モードで使用することができる。
  • foreachパッケージは、明示的なループカウンタを使用せずに、コレクション内の要素を一般的な反復を可能にする。副作用を伴わずにforeachを使用すると、doMC(シングルワークステーション上のパラレル/マルチコアを使用した)、doSNOWsnowを使用、上記参照)、doMPIRmpiを使用)パッケージ、doFuturefuture または future.BatchJobsを使用)とdoRedisrredisを使用)パッケージを介して可能である並列でループを実行が容易になります。
  • futureパッケージは、関数呼び出しを介して、または暗黙的に、約束のいずれかを介して、futureの抽象化を介してsynchroneous(シーケンシャル)と非同期(並列)の評価を可能にします。
  • Rboristパッケージは、データを再ステージングで、アルゴリズムでのパフォーマンスのボトルネックであるどちらの分割基準を決定する際にマルチコアハードウェアの効率的な利用を促進するランダムフォレストアルゴリズムにおける予測レベルの並列処理を活用するためにOpenMPプラグマを採用しています。
  • h2oパッケージは、ランダムフォレスト、GBM、GLM(弾性ネット正則をもつ)、ディープラーニングのスケーラブルな実装を持つh2oオープンソースの機械学習環境に接続します。
  • randomForestSRCパッケージは、生存分析、競合リスク分析、分類だけでなく、回帰に適したランダムフォレストの拡張のためのOpenMPだけでなく、MPIの両方を使用することができます。
  • parSimパッケージは、ローカルまたはHPCクラスタのいずれかで、1つまたは複数のコアを使用してシミュレーションを実行できます。
  • qsubパッケージは、gridengineクラスタ上で実行するコマンドを送信できます。

並列コンピューティング:暗黙の並列性

  • ティアニー(link)によるpnmathパッケージは、ユーザーからの明示的な要求はなく複数のコアを利用することができる代替品で、内部のR関数の数を置き換えることによって(例えば、GCC4.2以降)暗黙的な並列処理のための最近のコンパイラのオープンMP並列処理ディレクティブを使用しています。代替pnmath0パッケージには、新しいコンパイラが利用できない環境のためにPthreadsを使用して同じ機能を提供しています。同様の機能は「最終的には」Rへの統合となることが期待されます。
  • Jamitzkyによるrompパッケージは、ユーザーで発表されましたuseR!2008(slides)とFortranを使用して、Open MPの他のインターフェイスを提供しています。コードはまだプレアルファとGoogle Codeプロジェクトのrompから入手できます。R-Forgeのプロジェクトrompはまだ開始されたが、何のパッケージは存在しませんでした。
  • Vera、Jansen、SuppiによるR/パラレルパッケージは、並列実行(link)のためのC++ベースのマスタースレーブディスパッチメカニズムを提供しています。
  • Rdsmパッケージは、マルチコアマシン上で、ネットワーク上に分散共有メモリプログラミングからインスピレーションを得設備を提供することで、両方のスレッドのような並列コンピューティング環境を提供します。
  • RhpcBLASctlは、利用可能なBLASコアの数を検出し、コアの数の明示的な選択を可能にする。
  • Rhpcは、MPIを経由して*apply()スタイルのディスパッチを可能にします。
  • drakeパッケージは、Makeと同様のRに焦点を当てたパイプラインです。並列コンピューティングは、並列、未来、batchtools、future.batchtoolsパッケージ、およびMakefilesに依存しています。Drakeはコード解析を使用してユーザーのワークフローを構成し、並列性を暗黙的にします。

並列コンピューティング:グリッドコンピューティング

  • グロースによるmultiRパッケージは、useR!2008で発表されましたがリリースされていません。なお、グリッドコンピューティングプラットフォーム上のsnowスタイルのフレームワークを提供することができます。
  • チャインによるbiocep-distribプロジェクトは、ローカルまたはグリッド、クラウドコンピューティングのためのJavaベースのフレームワークを提供しています。それは、活発に開発中です。

並列コンピューティング:Hadoop

  • Saptarshi Guhaによって開始されRHIPE 経由でコアチームによって開発されたRHIPEパッケージは、RとHadoop間のインターフェースを提供し、大きなデータに対するDivide and Recombineアプローチを使用してR内の大規模な複雑なデータを分析します。
  • Revolution Analyticsのrmrパッケージは、R / HadoopとMap / Reduceプログラミングフレームワークのインタフェースも提供します。( link
  • 関連パッケージであるLongによるSegueパッケージは、AmazonでのElastic Map Reduce(EMR)上での恥ずかしいほどの並列タスクの実行を容易にします。( link
  • RProtoBufパッケージは、構造化されたデータをシリアル化するためのGoogleの言語に依存しない、プラットフォームに依存し、拡張可能なメカニズムへのインターフェースを提供します。このパッケージは、データがシリアル化され、タスク間で前後に通過している分散型MapReduceの設定で他のシステムからデータストリームを読み取るためにRコードに使用することができます。
  • HistogramToolsパッケージは、MapReduceのアプリケーションでマッパーによって作成されたものなどの構築、集約、操作、およびヒストグラムの多数のプロットのための便利なルーチンの数が用意されています。

並列コンピューティング:乱数

  • 並列コンピューティングのための乱数発生器は、rlecuyerパッケージおよびrstreamパッケージ、sitmoパッケージ、dqrngパッケージを介して利用できます。
  • doRNGパッケージは、さまざまなforeachのバックエンドに適したパッケージrstreamによって生成されるような独立したランダムなストリームを使用して、再現性のある並列のforeachループを実行するための機能を提供します。

並列コンピューティング:リソースマネージャとバッチスケジューラ

  • ジョブスケジューリングツールキットにより、並列コンピューティングのリソースとタスクを管理できます。slurm(リソース管理用シンプルLinuxユーティリティ)プログラムのセットはMPIでうまくいき、slurmジョブはrslurmパッケージを使用してRから送信できます。( link
  • ウィスコンシン大学マディソン校からコンドルツールキット(link)は、このR News articleで説明したようにRと一緒に使用されています。
  • クナウスによるsfClusterパッケージは、snowfallで使用することができます。(link)が、現在は、LAM/MPIに制限されています。
  • ホフマンによるbatchパッケージは、クラスタ上に並列コンピューティングの要求を起動し、結果を収集することができます。
  • BatchJobsパッケージは、PBS/Torque、LSFやSun Grid Engineのようなバッチ・コンピューティング・システム上でのRジョブとその結果を管理するためにReduce、Filterのバリアント、Mapを提供しています。MulticoreおよびSSHシステムもサポートされています。
    • BatchExperimentsパッケージは、統計的な実験を実行するための抽象化層でそれを拡張します。
    • パッケージbatchtoolsは、両方の後継/拡張です。
  • flowrパッケージは、シンプルなデータフレームを介してジョブリスト(依存関係を含む)をコンピューティングクラスタにサブミットするスキャッタギャザーアプローチを入力として提供します。LSFおよびSGE、Torque、SLURMをサポートしています。
  • clustermqパッケージは、ネットワークマウントされたストレージを使用せずに、1行のコードでLSF、SGE、およびSLURM上のジョブとして関数呼び出しを送信します。また、SSH経由のリモートクラスタの使用もサポートしています。

並列コンピューティング:アプリケーション

  • クーンによるcaretパッケージは、クロスバリデーションと予測モデルのブートストラップ特性評価を並列化するために様々なフレームワーク(MPI、NWSなど)を使用することができます。
  • Wuによるバイオコンダクターにmaanovaパッケージは、マイクロアレイ実験の解析のためにsnowRmpiを使用することができます。
  • 鈴木と下平によるpvclustパッケージは、マルチスケールブートストラップを経由して、階層的クラスタリングのためのsnowRmpiを使用することができます。
  • Feinererによるtmパッケージは、並列化されたテキストマイニングのためのsnowRmpiを使用することができます。
  • ディアス・ウリアルテによるvarSelRFパッケージは、ランダムフォレストを介して可変選択の並列化の使用のためにsnowRmpiを使用することができます。
  • 変化点のベイズ解析のためのアードマンとエマーソンによるbcpパッケージは、並列化操作のためのforeachを使用することができます。
  • Bioconductorのポラードらmulttestパッケージは、複数の仮説のリサンプリング・ベースのテストのためにsnowRmpiまたはrpvmを使用することができますで。
  • 以下すべては、snowでサポートされているソケットのプロトコルまたはMPI、PVM、NWSのいずれか一つを使用して並列化された操作のためにsnowを使用することができます。
    • b-splinesを使用してboostingを経由してフィットするGLMおよびGAMモデルのBinderによるGAMBoostパッケージ
    • 多変量および傾向スコアマッチングのためのSekhonによるMatchingパッケージ
    • スパイク列の解析のためPouzatによるSTARパッケージ
    • ベイジアンネットワーク構造学習用スクタリによるbnlearnパッケージ
    • 潜在位置およびクラスタモデルのKrivitskyとHandcockによるlatentnetパッケージ
    • リニアグループ化分析のためのハリントンによるlgaパッケージ
    • 予測誤差のparallised推定のためのPorzeliusとバインダーによるpeperrパッケージ
    • オペレーションリサーチロケーショナル分析のためのFernandez・PalacinとMunoz・Marquezによるorlocaパッケージ
    • アフィメトリクスマイクロアレイの並列正規化のためにSchmidberger、VicedoとMansmannでデリバティブをaffyParaパッケージを使用して、遺伝的最適化のためのMebaneとSekhonによるrgenoudパッケージ
    • 差分式として、標準的なマイクロアレイ解析に不確実性を伝播されるピアソンらによるpumaパッケージ
  • bugsparallelパッケージは、WindBUGSを使用して複数のMCMCチェーンの分散コンピューティングのためのRmpiを使用しています。
  • Chenらによるxgboostパッケージは、非常に効率的で柔軟性が高く、移植性が高くなるように設計された最適化された分散勾配ブースティングライブラリです。同じコードは、Hadoop、SGE、MPIなどの主要な分散環境で動作します。
  • partDSAパッケージは、全体の共変量空間にわたって集中的かつ総合的な検索に基づいて、ますます複雑な予測因子の区分定数推定リストを生成するためのnwsを使用しています。
  • dcloneパッケージは、グローバルな最適化アプローチとデータクローニングとJAGS、WinBUGSおよびOpenBUGSをサポートするベイジアンマルコフ連鎖モンテカルロ法を使用して複雑なモデルの最尤推定の手順を実装するための低レベル関数を使用して、最尤推定点推定値と標準誤差を得るために、ベイジアンのMCMCのツールを活用するシミュレーテッドアニーリングのバリアントを提供します。
    • 並列コンピューティングは、snowのパッケージを介して支持されています。
  • pmclustパッケージは、高次元の(超)大規模データのための教師なしモデルベースのクラスタリングを利用しています。パッケージには、有限混合ガウスモデルのためのEMアルゴリズムの並列バージョンを実行するためにpbdMPIを使用しています。
  • 今日では、多くのパッケージがパラレルパッケージによって提供される機能を使用できます。1つの例はpls です。
  • pbapplyパッケージは、「* apply」ファミリーの中でベクトル化Rの機能のためのプログレスバーを提供し、いくつかのバックエンドをサポートしています。
  • Sim.DiffProcパッケージは、多次元ItoとStratonovich確率微分方程式を並列にシミュレートおよび推定します。
  • Allaireらによるkerasパッケージは、高レベルのニューラルネットワークAPIを提供します。これは、畳み込みネットワーク、再帰ネットワーク、両方の組み合わせ、およびカスタムニューラルネットワークアーキテクチャの高速実験を可能にすることに焦点を当てて開発されました。
  • mvnfastは、相撲乱数ジェネレータを使用して、多変量分布と正規分布を並行して生成します。

並列コンピューティング:GPU

  • rgpuパッケージは、(リンクは下記参照)、GPUを利用してバイオインフォマティクス解析を高速化することを目指しています。
  • gcbdパッケージは、BLASとGPUのためのベンチマークフレームワークを実装しています。
  • OpenCLパッケージは、GPUプログラミングのハードウェアとベンダー中立のインターフェースを可能にするOpenCLへのRからのインターフェースを提供します。
  • permGPUパッケージは、CUDA(>=4.5)を使用して、GPU上でのRNAマイクロアレイ研究の文脈で順列リサンプリング推論を計算します。
  • gpuRパッケージは、GPU対応の機能を提供します:OpenCLを知る必要なしに典型的なR構文をミラーリングする典型的なRオブジェクト(例えばベクトル、行列)をラップするために新しいgpu *とvcl *クラスが提供されます。
  • Allaireらによるtensorflowパッケージは、データフローグラフを使用した数値計算を可能にするR内の完全なTensorFlow APIへのアクセスを提供します。柔軟なアーキテクチャにより、ユーザーはデスクトップ、サーバー、またはモバイルデバイスの1つまたは複数のCPUまたはGPUに単一のAPIで計算を展開できます。
  • Tangらによるtfestimatorsパッケージは、リニアモデルやディープニューラルネットワークを含む多くの異なるモデルタイプの実装を提供する高度なAPIを提供します。また、任意の新しいモデルタイプをTensorFlowの分散パワーを無料でカスタム見積もりとして定義する柔軟なフレームワークも提供します。
  • BDgraphパッケージは、OpenMPおよびC ++を使用して実装された並列サンプリングアルゴリズムを使用して、多変量連続、離散および混合データの無向グラフモデルでベイジアン構造を学習するための統計ツールを提供します。
  • ssgraphパッケージは、多変量の連続データ、離散データ、および混合データに対してスパイクスラブのプリオーナを使用する無向グラフモデルのベイジアン推論を提供します。パッケージの計算集約型タスクは、OpemMPをC ++経由で使用しています。

大容量メモリと、メモリ不足のデータ

  • ラムリーによるbiglmパッケージは、Rのメインメモリの外部に格納されたデータセットにlm()とglm()機能を提供するために、増分計算を使用しています。
  • Adlerらのffパッケージは、メモリにロードするには大きすぎるデータセットへのファイルベースのアクセスを提供し、多数の上位レベルの機能も提供します。
  • (ファイルを経由して同様に)このようなメモリ内のマトリックスのような大きなオブジェクトを格納ケインとエマーソン許可によるbigmemoryは、パッケージとは、それらを参照するために外部のポインタオブジェクトを使用しています。これはRの内部メモリの限界に衝突することなく、Rからの透過的なアクセスを許可します。同じコンピュータ上で複数のRプロセスも大きなメモリー・オブジェクトを共有することができます。
  • データベース・パッケージの数が多いと(例えばグロタンディークとDowleによるdata.tableによるsqldfなど)データベースの似たパッケージは、潜在的な関心でもあるが、ここでレビューしていない。
  • HadoopStreamingパッケージは、Hadoopのストリーミングで使用するためのmap/reduceスクリプトを書くためのフレームワークを提供します。それはまた、Hadoopを必要としないストリーミング形式でデータを操作が容易になります。
  • speedglmパッケージは、大規模なデータに(一般化)線形モデルをフィットすることを許可する。メモリ内データ・セットの場合、speedlm()またはspeedglm()は新しいデータ装備されているモデルを更新することができるupdate.speedlm()と一緒に使用することができます。メモリ不足のデータ・セットの場合、shglm()が利用可能です。それは因子の存在下で動作し、単一の行列を確認することができます。
  • セリグマンらbiglarsパッケージは、最小角度回帰、lasso回帰やステップワイズ回帰のための大規模よりもメモリのデータセットをサポートするためにffを使用することができます。
  • MonetDB.Rパッケージは、RがバックエンドとしてMonetDBの列指向、オープンソースのデータベースシステムにアクセスすることができます。
  • デヨングらffbaseパッケージは、ffパッケージに基本的な統計機能を追加します。
  • LaFパッケージは、ASCIIファイルまたは固定幅フォーマットの大きなCSVへの高速アクセスのための方法を提供します。
  • bigstatsrパッケージは、メモリマップされたアクセスを介してファイルベースの大規模な行列でも動作し、いくつかの行列演算、PCA、疎行法などを提供します。

コンパイルされたコードのための容易なインタフェース

  • Sklyarらのinlineパッケージは、Rには、C、C++またはFortranのコードを追加することが容易になります。これは、コンパイルのケア、リンクとRの文字列として格納されて埋め込まれたコード・セグメントのロードを取ります。
  • EddelbuettelとFrancoisによるRcppパッケージは、C++関数(とバック)に簡単にRオブジェクトを転送するC++のclasesの数を提供しています。
    • 同じ著者によるRInsideパッケージは、より速く、より直接的なデータ転送のためにC++アプリケーションへR自体を簡単に埋め込むのを可能にします。
  • アライアらによるRcppParallelパッケージは、Intel Threading Building BlocksTinyThread ライブラリがバンドルされています。Rcppと共に、RcppParallelは、安全、高性能、並行実行C++コードを記述し、RおよびRのパッケージ内にそのコードを使用することを容易にします。
  • ウルバーネクによるrJavaパッケージは、CおよびC++のための.Call()インタフェースに類似のJavaへの低レベルのインタフェースを提供します。
  • Allaireのreticulateパッケージは、Pythonモジュール、クラス、関数へのインタフェースを提供します。Rユーザーは、Rのtensorflowtfestimatorsなどの多くの高性能Pythonパッケージにアクセスできます。

プロファイリングツール

  • profrprofvisは、プロファイリングのためRprofインターフェースからの出力を視覚化することができます。
  • ティアニーによるproftoolsパッケージ及びVisserのaprofによるパッケージは、また、出力をプロファイリング分析することができます。
  • GUIProfilerパッケージは、Rプログラムをプロファイリングの結果を可視化します。

関連する記事

  • R言語 CRAN Task View:極値解析R言語 CRAN Task View:極値解析 CRAN Task View: Extreme Value Analysisの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載した。 Maintainer: Christophe Dutang, Kevin Jaunatre Contact: Christophe.Dutang at […]
  • R言語 CRAN Task View:確率分布R言語 CRAN Task View:確率分布 CRAN Task View: Probability Distributionsの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載した。 Maintainer: Christophe Dutang, Patrice Kiener Contact: Christophe.Dutang at […]
  • R言語 CRAN Task View:統計教育R言語 CRAN Task View:統計教育 CRAN Task View: Teaching Statisticsの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載しました。 Maintainer: Paul Northrop Contact: p.northrop at […]
  • R言語 CRAN Task View:水文データとモデリングR言語 CRAN Task View:水文データとモデリング CRAN Task View: Hydrological Data and Modelingの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載しました。 Maintainer: Sam Zipper, Sam Albers, Ilaria Prosdocimi Contact: samuelczipper at […]
  • R言語 CRAN Task View:欠損データR言語 CRAN Task View:欠損データ CRAN Task View: Missing Dataの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載しました。 Maintainer: Julie Josse, Nicholas Tierney and Nathalie Vialaneix (r-miss-tastic […]
R言語 CRAN Task View:Rでの高性能並列コンピューティング

One thought on “R言語 CRAN Task View:Rでの高性能並列コンピューティング

Comments are closed.