目次
概要
Maintainer: | Dirk Eddelbuettel |
Contact: | Dirk.Eddelbuettel at R-project.org |
Version: | 2024-11-24 |
URL: | https://CRAN.R-project.org/view=HighPerformanceComputing |
Source: | https://github.com/cran-task-views/HighPerformanceComputing/ |
Contributions: | このタスクビューに対する提案や改良は、GitHubのissueやpull request、またはメンテナのアドレスに電子メールで送ってください。詳しくはContributing guideをご覧ください。 |
Installation: | このタスクビューのパッケージは、ctvパッケージを使用して自動的にインストールすることができます。例えば ctv::install.views(“HighPerformanceComputing”, coreOnly = TRUE)は全てのコアパッケージをインストールし、 ctv::update.views(“HighPerformanceComputing”)はまだインストールされていない最新状態のパッケージを全てインストールします。詳しくはCRAN Task View Initiativeをご覧ください。 |
この CRAN タスクビューには、R によるハイパフォーマンスコンピューティング (HPC) に役立つパッケージのリストが、トピックごとにグループ化されています。このコンテキストでは、「ハイパフォーマンスコンピューティング」を、R を少し先に進めることに関連するほぼすべてのこと、すなわちコンパイル済みコードの使用、並列計算(明示および暗示モードの両方)、大きなオブジェクトでの作業およびプロファイリングを、かなり大まかに定義しています。
特に断りのない限り、ハイパーリンクで紹介されているすべてのパッケージはComprehensive R Archive Network (CRAN)から入手可能です。
このタスクビューで議論されているいくつかの領域は、急速に変化しています。このタスクビューの追加や拡張の提案をメンテナに電子メールで送るか、上記のリンク先のGitHubリポジトリに課題またはプルリクエストを提出してください。詳細については、CRAN Task ViewsレポのContributing pageをご覧ください。
提案と修正: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, Matt Fidler, Brent Brewington and Ben Bolder (その他、ここに追加し忘れたかもしれませんが)感謝の意を表しています。
ctvパッケージは、これらのTask Viewをサポートしています。関数install.viewsとupdate.viewsは、それぞれ与えられたタスクビューからパッケージのインストールとアップデートを可能にします。オプションcoreOnlyは、以下のコアとラベル付けされたパッケージに操作を制限することができます。
Rでの直接のサポートはリリース2.14.0からで、新しいパッケージparallelにパッケージmulticoreとsnowのコピーが(少し修正されて)組み込まれています。クラスタの種類によっては、基本パッケージである「parallel」では直接扱えないものもあります。しかし、パッケージヴィネットで説明されているように、snowに似た関数を提供するparallelの部分は、MPIクラスタを含むsnowクラスタを受け入れることができます。パッケージビネットを見るにはvignette(“parallel”)を使ってください。並列パッケージは、L’Ecuyer et al (2002)に従って複数のRNGストリームをサポートし、mclapplyクラスタとsnowクラスタの両方をサポートするようになりました。R 2.14.0用にリリースされたバージョンには基本機能が含まれており,より高レベルの便利な関数が今後のRリリースで計画されています。
並列コンピューティング:明示的並列処理
- いくつかのパッケージは、並列コンピューティングに必要な通信層を提供します。この分野における最初のパッケージは、PVM(並列仮想マシン)の標準およびライブラリを使用するLiとRossiniによるRPVMだった。rpvmはもはや積極的に維持されていませんが、そのCRANのアーカイブディレクトリから利用できます。
- 近年では、代わりのMPI(メッセージ・パッシング・インターフェース)規格では、並列コンピューティングでの事実上の標準となっている。これはYuによるRmpiを経由してRでサポートされています。
- pbdMPIは、直接、バッチ並列実行するために特に有用である単一のプログラム/複数データ(SPMD)並列プログラミングスタイルをサポートするために、MPIをインターフェースするためのS4クラスを提供します。
- Tierneyらのsnow(ワークステーションの簡易ネットワーク)は、PVM、MPI、NWSだけでなく、直接のネットワークソケットを使用することができます。それは、通信内容を隠すことによって抽象化レイヤを提供します。
- Knausによるsnowfallは、snowに、より最近の代替手段を提供します。関数は、順次または並列モードで使用することができます。
- parallellyは、並列作業者の起動とセットアップの制御を追加することで、並列パッケージを強化します。
- foreachは、明示的なループカウンタを使用せずに、コレクション内の要素を一般的な反復を可能にする。副作用を伴わずにforeachを使用すると、doMC(シングルワークステーション上のパラレル/マルチコアを使用した)、doSNOW(snowを使用、上記参照)、doMPI(Rmpiを使用)、doFuture(future を使用)を介して可能である並列でループを実行が容易になります。
- futureは、関数呼び出しを介して、または暗黙的に、約束のいずれかを介して、futureの抽象化を介してsynchroneous(シーケンシャル)と非同期(並列)の評価を可能にします。グローバル変数が自動的に識別されます。コレクション内の要素に対する反復処理もサポートされています。
- futureフレームワークによるmap-reduceの並列呼び出しは、base-Rのapply関数の並列バージョンであるfuture.applyと、purrr関数の並列バージョンであるfurrrによって提供されています。
- 並列化はparallelパッケージ、future.callrはcallrパッケージ、future.batchtoolsはbatchtoolsパッケージで提供されます。
- Rboristは、データを再ステージングで、アルゴリズムでのパフォーマンスのボトルネックであるどちらの分割基準を決定する際にマルチコアハードウェアの効率的な利用を促進するランダムフォレストアルゴリズムにおける予測レベルの並列処理を活用するためにOpenMPプラグマを採用しています。
- h2oは、ランダムフォレスト、GBM、GLM(弾性ネット正則をもつ)、ディープラーニングのスケーラブルな実装を持つh2oオープンソースの機械学習環境に接続します。
- randomForestSRCは、生存分析、競合リスク分析、分類だけでなく、回帰に適したランダムフォレストの拡張のためのOpenMPだけでなく、MPIの両方を使用することができます。
- parSimは、ローカルまたはHPCクラスタのいずれかで、1つまたは複数のコアを使用してシミュレーションを実行できます。
- qsubは、gridengineクラスタ上で実行するコマンドを送信できます。
- miraiは、ローカルまたは分散型の非同期コード評価のための最小限のフレームワークで、完了時に自動的に解決するfutureを実装し、高性能なnanonext NNG Cメッセージングライブラリバインディングをベースに構築されています。
- condorは、sshを介してCondor HPCインストールと対話し、ファイルの転送やリモートコンピュートジョブにアクセスすることができます。
並列コンピューティング:暗黙の並列性
- Tierneyのpnmathパッケージ(link)は、複数の内部R関数を複数のコアを使用できる置換で置き換えることにより、暗黙的な並列処理に最近のコンパイラ(gcc 4.2以降など)のOpenMP並列処理ディレクティブを使用します—明示的に ユーザーからのリクエスト。代替のpnmath0パッケージは、新しいコンパイラが利用できない環境向けにPthreadsを使用して同じ機能を提供します。同様の機能は、「最終的に」Rに統合される予定です。
- JamitzkyによるrompパッケージはuseR! 2008(slides)で発表され、Fortranを使用したOpenMPへの別のインターフェースを提供します。コードはまだアルファ版であり、Google Codeプロジェクトロンプから入手できます。R-Forgeプロジェクトrompが開始されましたが、まだパッケージはありません。
- RhpcBLASctlは、利用可能なBLASコアの数を検出し、コアの数の明示的な選択を可能にします。
- targetsとdrakeは、Makeと同様のRに焦点を当てたパイプラインです。並列コンピューティングは、並列、未来、batchtools、future.batchtoolsパッケージに依存しています。Drakeはコード解析を使用してユーザーのワークフローを構成し、並列性を暗黙的にします。
- flexiblasは、FlexiBLAS(link)が使用されている場合、ライブラリをロードし、場合によっては切り替えることによって、BLAS / LAPACKライブラリを管理します。
並列コンピューティング:グリッドコンピューティング
- GroseによるmultiRパッケージは、useR!2008で発表されましたがリリースされていません。なお、グリッドコンピューティングプラットフォーム上のsnowスタイルのフレームワークを提供することができます。
- Chineによる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コードに使用することができます。
並列コンピューティング:乱数
- 並列コンピューティングのための乱数発生器は、rlecuyerおよびrstream、sitmo、dqrngを介して利用できます。
- doRNGは、さまざまなforeachのバックエンドに適したパッケージrstreamによって生成されるような独立したランダムなストリームを使用して、再現性のある並列のforeachループを実行するための機能を提供します。
並列コンピューティング:リソースマネージャとバッチスケジューラ
- ジョブスケジューリングツールキットにより、並列コンピューティングのリソースとタスクを管理できます。slurm(リソース管理用シンプルLinuxユーティリティ)プログラムのセットはMPIでうまくいき、slurmジョブはrslurmを使用してRから送信できます。(link )
- ウィスコンシン大学マディソン校からコンドルツールキット(link)は、このR News articleで説明したようにRと一緒に使用されています。
- KnausによるsfClusterパッケージは、snowfallで使用することができます。(link)が、現在は、LAM/MPIに制限されています。
- Hoffmannによるbatchは、クラスタ上に並列コンピューティングの要求を起動し、結果を収集することができます。
- BatchJobsは、PBS/Torque、LSFやSun Grid Engineのようなバッチ・コンピューティング・システム上でのRジョブとその結果を管理するためにReduce、Filterのバリアント、Mapを提供しています。MulticoreおよびSSHシステムもサポートされています。
- BatchExperimentsは、統計的な実験を実行するための抽象化層でそれを拡張します。
- batchtoolsは、両方の後継/拡張です。
- clustermqは、ネットワークマウントされたストレージを使用することなく、1行のコードでLSF、SGE、SLURM上のジョブとして関数コールを送信します。また、SSH 経由でのリモートクラスタの使用もサポートしています。
並列コンピューティング:アプリケーション
- Kuhnによるcaretは、クロスバリデーションと予測モデルのブートストラップ特性評価を並列化するために様々なフレームワーク(MPI、NWSなど)を使用することができます。
- Wuによるバイオコンダクターにmaanovaは、マイクロアレイ実験の解析のためにsnowとRmpiを使用することができます。
- 鈴木と下平によるpvclustは、マルチスケールブートストラップを経由して、階層的クラスタリングのためのsnowとRmpiを使用することができます。
- Feinererによるtmは、並列化されたテキストマイニングのためのsnowとRmpiを使用することができます。
- Diaz-UriarteによるvarSelRFは、ランダムフォレストを介して可変選択の並列化の使用のためにsnowとRmpiを使用することができます。
- Bioconductorのポラードらmulttestは、複数の仮説のリサンプリング・ベースのテストのためにsnow、Rmpiまたはrpvmを使用することができますで。
- 以下すべては、snowでサポートされているソケットのプロトコルまたはMPI、PVM、NWSのいずれか一つを使用して並列化された操作のためにsnowを使用することができます。
- Matching:多変量および傾向スコアマッチングのためのSekhon
- bnlearn:ベイジアンネットワーク構造学習用スクタリ
- latentnet:潜在位置およびクラスタモデルのKrivitskyとHandcock
- peperr:予測誤差のparallised推定のためのPorzeliusとバインダー
- orloca:オペレーションリサーチロケーショナル分析のためのFernandez・PalacinとMunoz・Marquez
- rgenoud:アフィメトリクスマイクロアレイの並列正規化のためにSchmidberger、VicedoとMansmannでデリバティブをaffyParaを使用して、遺伝的最適化のためのMebaneとSekhon
- puma:差分式として、標準的なマイクロアレイ解析に不確実性を伝播されるピアソンら
- bugsparallelは、WindBUGSを使用して複数のMCMCチェーンの分散コンピューティングのためのRmpiを使用しています。
- Chenらによるxgboostは、非常に効率的で柔軟性が高く、移植性が高くなるように設計された最適化された分散勾配ブースティングライブラリです。同じコードは、Hadoop、SGE、MPIなどの主要な分散環境で動作します。
- dcloneは、グローバルな最適化アプローチとデータクローニングとJAGS、WinBUGSおよびOpenBUGSをサポートするベイジアンマルコフ連鎖モンテカルロ法を使用して複雑なモデルの最尤推定の手順を実装するための低レベル関数を使用して、最尤推定点推定値と標準誤差を得るために、ベイジアンのMCMCのツールを活用するシミュレーテッドアニーリングのバリアントを提供します。
- 並列コンピューティングは、snowのパッケージを介して支持されています。
- 今日では、多くのパッケージがパラレルパッケージによって提供される機能を使用できます。1つの例はpls です。
- pbapplyは、「* apply」ファミリーの中でベクトル化Rの機能のためのプログレスバーを提供し、いくつかのバックエンドをサポートしています。
- Sim.DiffProcは、多次元ItoとStratonovich確率微分方程式を並列にシミュレートおよび推定します。
- Allaireらによるkerasは、高レベルのニューラルネットワークAPIを提供します。これは、畳み込みネットワーク、再帰ネットワーク、両方の組み合わせ、およびカスタムニューラルネットワークアーキテクチャの高速実験を可能にすることに焦点を当てて開発されました。
- mvnfastは、相撲乱数ジェネレータを使用して、多変量分布と正規分布を並行して生成します。
- rxode2は、常微分方程式(ODE)を複数のユニット(IDでグループ化されたもの)で高速に解くための並列処理(OpenMP経由)を行い、ODEシミュレーション問題ごとに乱数を生成します。
- nlmixr2は、rxode2の並列ODE解法を用いて、非線形混合効果モデルの並列解法を行います(アルゴリズム「saem」用)。
並列コンピューティング:GPU
- rgpuは、(リンクは下記参照)、GPUを利用してバイオインフォマティクス解析を高速化することを目指しています。
- gcbdは、BLASとGPUのためのベンチマークフレームワークを実装しています。
- OpenCLは、GPUプログラミングのハードウェアとベンダー中立のインターフェースを可能にするOpenCLへのRからのインターフェースを提供します。
- Allaireらによるtensorflowは、データフローグラフを使用した数値計算を可能にするR内の完全なTensorFlow APIへのアクセスを提供します。柔軟なアーキテクチャにより、ユーザーはデスクトップ、サーバー、またはモバイルデバイスの1つまたは複数のCPUまたはGPUに単一のAPIで計算を展開できます。
- Tangらによるtfestimatorsは、リニアモデルやディープニューラルネットワークを含む多くの異なるモデルタイプの実装を提供する高度なAPIを提供します。また、任意の新しいモデルタイプをTensorFlowの分散パワーを無料でカスタム見積もりとして定義する柔軟なフレームワークも提供します。
- BDgraphは、OpenMPおよびC ++を使用して実装された並列サンプリングアルゴリズムを使用して、多変量連続、離散および混合データの無向グラフモデルでベイジアン構造を学習するための統計ツールを提供します。
- ssgraphは、多変量の連続データ、離散データ、および混合データに対してスパイクスラブのプリオーナを使用する無向グラフモデルのベイジアン推論を提供します。パッケージの計算集約型タスクは、OpemMPをC ++経由で使用しています。
- GPUmatrixは、MatrixパッケージのAPIを提供しながら、GPUに計算をオフロードすることができます。
大容量メモリと、メモリ不足のデータ
- Lumleyによるbiglmは、Rのメインメモリの外部に格納されたデータセットにlm()とglm()機能を提供するために、増分計算を使用しています。
- Adlerらのffは、メモリにロードするには大きすぎるデータセットへのファイルベースのアクセスを提供し、多数の上位レベルの機能も提供します。
- (ファイルを経由して同様に)このようなメモリ内のマトリックスのような大きなオブジェクトを格納ケインとエマーソン許可によるbigmemoryは、それらを参照するために外部のポインタオブジェクトを使用しています。これはRの内部メモリの限界に衝突することなく、Rからの透過的なアクセスを許可します。同じコンピュータ上で複数のRプロセスも大きなメモリー・オブジェクトを共有することができます。
- データベース・パッケージの数が多いと(例えばグロタンディークとDowleによるdata.tableによるsqldfなど)データベースの似たパッケージは、潜在的な関心でもあるが、ここでレビューしていません。
- MonetDB.Rは、RがバックエンドとしてMonetDBの列指向、オープンソースのデータベースシステムにアクセスすることができます。
- LaFは、ASCIIファイルまたは固定幅フォーマットの大きなCSVへの高速アクセスのための方法を提供します。
- bigstatsrは、メモリマップされたアクセスを介してファイルベースの大規模な行列でも動作し、いくつかの行列演算、PCA、疎行法などを提供します。
- disk.frameは、他のいくつかのパッケージを活用して、RAMよりも大きいデータセットへの効率的なアクセスおよび操作操作を提供します。
- arrowは、ポータブルなApache Arrowインメモリフォーマットと、アウトオブメモリ処理とストリーミングのサポートを含むことができる様々なファイルフォーマット用のリーダを提供します。
コンパイルされたコードのための容易なインターフェース
- Sklyarらのinlineは、Rには、C、C++またはFortranのコードを追加することが容易になります。これは、コンパイルのケア、リンクとRの文字列として格納されて埋め込まれたコード・セグメントのロードを取ります。
- EddelbuettelとFrancoisによるRcppは、C++関数(とバック)に簡単にRオブジェクトを転送するC++のclasesの数を提供しています。
- 同じ著者によるRInsideは、より速く、より直接的なデータ転送のためにC++アプリケーションへR自体を簡単に埋め込むのを可能にします。
- AllaireらによるRcppParallelは、Intel Threading Building BlocksとTinyThread ライブラリがバンドルされています。Rcppと共に、RcppParallelは、安全、高性能、並行実行C++コードを記述し、RおよびRのパッケージ内にそのコードを使用することを容易にします。
- UrbanekによるrJavaは、CおよびC++のための.Call()インターフェースに類似のJavaへの低レベルのインターフェースを提供します。
- Allaireのreticulateは、Pythonモジュール、クラス、関数へのインターフェースを提供します。
- Rユーザーは、Rのtensorflowやtfestimatorsなどの多くの高性能Pythonパッケージにアクセスできます。
ピンバック:R言語 CRAN Task Views | トライフィールズ