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

Maintainer: Dirk Eddelbuettel
Contact: Dirk.Eddelbuettel at R-project.org
Version: 2017-11-10
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, and Kevin Ushey (そして私がここに追加することを忘れているかもしれない他の人たち)による提案と修正に感謝しています。

貢献は常に歓迎され、励まされます。 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つまたは複数のコアを使用してシミュレーションを実行できます。

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

  • ティアニー(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 パッケージは、Rに焦点を当てた再現可能なビルドシステムです。 Make と同様に、ワークフローの中間ステップを整理し、並列化可能な段階で実行します。 parallel :: mclapply()、parallel :: parLapply()、およびMakefiles の3つの代替バックエンドを使用すると、drakesは、オーバーヘッドの少ないシングルノードアプリケーションと真の分散コンピューティングワークロードの両方に対して暗黙の並列処理をサポートします。
  • drake パッケージは、Make に似た、Rを重視したpipeline toolkit です。 並列コンピューティングは、parallel、future、batchtools、future.batchtoolsパッケージ、およびMakefiles に依存しています。 Drakeはコード分析を使用してユーザーのワークフローを構成し、並列性を暗黙的にします。

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

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

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

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

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

  • 並列コンピューティングのための乱数発生器はSevcikovaとロッシーニによるrlecuyerパッケージを経由してご利用いただけます。
  • 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をサポートしています。

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

  • クーンによる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を使用しています。
  • partDSAパッケージには、全体の共変量空間にわたって集中的かつ総合的な検索に基づいて、ますます複雑な予測因子の区分定数推定リストを生成するためのnwsを使用しています。
  • dcloneパッケージには、グローバルな最適化アプローチとデータクローニングとJAGS、WinBUGSおよびOpenBUGSをサポートするベイジアンマルコフ連鎖モンテカルロ法を使用して複雑なモデルの最尤推定の手順を実装するための低レベル関数を使用して、最尤推定点推定値と標準誤差を得るために、ベイジアンのMCMCのツールを活用するシミュレーテッドアニーリングのバリアントを提供する。並列コンピューティングは、snowのパッケージを介して支持されている。
  • pmclustパッケージは、高次元の(超)大規模データのための教師なしモデルベースの??クラスタリングを利用しています。パッケージには、有限混合ガウスモデルのためのEMアルゴリズムの並列バージョンを実行するためにpbdMPIを使用しています。
  • harvestrパッケージは、(再現性)のシミュレーションのためのヘルパー関数が用意されています。
  • 今日では、多くのパッケージは、パラレルパッケージによって提供される機能を使用することができます。一つの例はplsで、別のものは、SGEまたはマルチコア・プラットフォーム上で並列にICA分析を実行することができるPGICAです。
  • sprint (「Simple Parallel R INTerface」の頭字語)パッケージには、Rのハイパフォーマンス・コンピューティング(HPC)並列プログラミングおよびHPCアーキテクチャの使用に慣れていないユーザがアクセスを行うための並列コンピューティングフレームワークを提供します。 それはmedoids、apply、順列テスト、ブートストラップ、ランダムフォレスト、ランクプロダクトとハミング距離の周辺の相関、パーティショニングに対して並列化されたRの機能をもつライブラリが含まれています。
  • pbapply パッケージは、「* apply」ファミリーの中でベクトル化Rの機能のためのプログレスバーを提供し、いくつかのバックエンドをサポートしています。
  • Sim.DiffProc パッケージは、多次元ItoとStratonovich確率微分方程式を並列にシミュレートおよび推定します。

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

  • バックナーとセリグマンによるgputoolsパッケージは、NVIDIAのCUDA言語とCUBLASライブラリの混合物を使用して実装されているいくつかの一般的なデータ・マイニング・アルゴリズムが用意されています。nVidiaのGPUを搭載したコンピュータを考えると、これらの機能は、ネイティブのRルーチンよりも、実質的に、より効率的かもしれません。
  • ダ・シルバによるcudaBayesregパッケージには、fMRIのボクセルの高性能統計分析を提供するために、NVIDIAのCUDAの滞在方法オプションとツールを使用してbayesmパッケージからrhierLinearModelを実装しています。
  • rgpuパッケージには、(リンクは下記参照)、GPUを利用してバイオインフォマティクス解析を高速化することを目指しています。
  • gcbdパッケージには、BLASとのGPU(gputoolsを使用)のためのベンチマークフレームワークを実装しています。
  • OpenCLのパッケージは、GPUプログラミングのハードウェアとベンダー中立のインターフェースを可能にするOpenCLへのRからのインターフェースを提供します。
  • permGPU パッケージは、CUDA(>=4.5)を使用して、GPU上でのRNAマイクロアレイ研究の文脈で順列リサンプリング推論を計算します。
  • gmatrixパッケージには、中間計算がデータ移動を最小限に抑えることによって、潜在的に重要なパフォーマンスの向上と、コプロセッサ上に保持して再利用することができるように、GPUのコプロセッサを使用して、行列やベクトル演算を評価することができます。
  • gpuR パッケージは、GPU対応機能を提供しています: 新しいgpu*とvcl*クラスは、OpenCLを知らなくても、一般的なRの構文をミラーリングしており、典型的なRオブジェクト(例えばベクトル、行列)をラップするために設けられています。

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

  • ラムリーによる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への高速アクセスのための方法を提供します。

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

  • 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への低レベルのインタフェースを提供します。

プロファイリングツール

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

関連する記事

  • R言語 CRAN Task View:確率分布R言語 CRAN Task View:確率分布 CRAN Task View: Probability Distributionsの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載した。 Maintainer: Christophe Dutang Contact: Christophe.Dutang 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言語 CRAN Task View:心理モデルや手法 CRAN Task View: Psychometric Models and Methodsの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載した。 Maintainer: Patrick Mair Contact: mair at […]
  • R言語 CRAN Task View:時系列解析R言語 CRAN Task View:時系列解析 CRAN Task View: Time Series Analysisの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載した。 Maintainer: Rob J. Hyndman Contact: Rob.Hyndman at […]
  • R言語 CRAN Task View:再現性のある研究R言語 CRAN Task View:再現性のある研究 CRAN Task View: Reproducible Researchの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載した。 Maintainer: Max Kuhn Contact: max.kuhn at […]
R言語 CRAN Task View:Rでの高性能並列コンピューティング

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

Comments are closed.