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

Maintainer: Dirk Eddelbuettel
Contact: Dirk.Eddelbuettel at R-project.org
Version: 2018-10-30
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を使用しています。
  • harvestrパッケージは、(再現性)のシミュレーションのためのヘルパー関数が用意されています。
  • 今日では、多くのパッケージがパラレルパッケージによって提供される機能を使用できます。 1つの例はpls です。
  • pbapply パッケージは、「* apply」ファミリーの中でベクトル化Rの機能のためのプログレスバーを提供し、いくつかのバックエンドをサポートしています。
  • Sim.DiffProc パッケージは、多次元ItoとStratonovich確率微分方程式を並列にシミュレートおよび推定します。
  • Allaireらによるkeras パッケージは、高レベルのニューラルネットワークAPIを提供します。 これは、畳み込みネットワーク、再帰ネットワーク、両方の組み合わせ、およびカスタムニューラルネットワークアーキテクチャの高速実験を可能にすることに焦点を当てて開発されました。

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

  • rgpuパッケージには、(リンクは下記参照)、GPUを利用してバイオインフォマティクス解析を高速化することを目指しています。
  • gcbdパッケージには、BLASとGPUのためのベンチマークフレームワークを実装しています。
  • OpenCLのパッケージは、GPUプログラミングのハードウェアとベンダー中立のインターフェースを可能にするOpenCLへのRからのインターフェースを提供します。
  • permGPU パッケージは、CUDA(>=4.5)を使用して、GPU上でのRNAマイクロアレイ研究の文脈で順列リサンプリング推論を計算します。
  • gpuR パッケージは、GPU対応機能を提供しています: 新しいgpu*とvcl*クラスは、OpenCLを知らなくても、一般的なRの構文をミラーリングしており、典型的なRオブジェクト(例えばベクトル、行列)をラップするために設けられています。
  • 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パッケージにアクセスできます。

プロファイリングツール

  • ウィッカムによるprofrパッケージには、プロファイリングのため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:Web技術とサービスR言語 CRAN Task View:Web技術とサービス CRAN Task View: Web Technologies and Servicesの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載した。 Maintainer: Scott Chamberlain, Thomas Leeper, Patrick Mair, Karthik Ram, Christopher […]
  • R言語 CRAN Task View:空間データの分析R言語 CRAN Task View:空間データの分析 CRAN Task View: Analysis of Spatial Dataの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載した。 Maintainer: Roger Bivand Contact: Roger.Bivand at […]
  • R言語 CRAN Task View:時空間データの処理と分析R言語 CRAN Task View:時空間データの処理と分析 CRAN Task View: Handling and Analyzing Spatio-Temporal Dataの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載した。 Maintainer: Edzer Pebesma Contact: edzer.pebesma at […]
R言語 CRAN Task View:Rでの高性能並列コンピューティング

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

Comments are closed.