BLASの変更によるRの高速化

R
Author

Kentaro Kamada

Published

March 10, 2024

参考

概要

R言語の計算速度はそれほど速くはないが、いくつか工夫することで高速化が可能。

  • ベクトル演算の駆使
  • 並列化(paralell, future, furrrなど)
  • BLAS (Basic Linear Algebra Subprograms) の変更

今回はBLASの変更による高速化について。

BLASとは

BLASは、行列演算を高速に行うためのライブラリ。たとえば分散や共分散を計算するときは、行列の掛け算をする必要がある。機械学習やニューラルネットワークでは行列の掛け算が多用されるため、BLASの高速化は全体としての計算速度の向上に大きく貢献する。

BLASはオープンソースのものもあるが、各CPU、GPUメーカーがそれぞれのチップに適したライブラリを提供している。

  • RについてるBLAS
    • RにデフォルトでついてくるBLAS
  • OpenBLAS
    • オープンソースのBLASで、homebrewでインストール可能
    • pythonのnumpyで使われているらしい
  • ATLAS
    • こちらもオープンソース
  • MKL
    • Intelが提供するBLAS
    • Macだと使えない
  • NVBLAS
    • NVIDIAが提供するBLAS
    • GPUを使用するのでめちゃくちゃ速いらしい
    • NVIDIAのGPUじゃないと使えない…
  • Accelerate
    • Appleが提供
    • 今回使用するやつ

BLASの変更

以下、homebrewでRをインストールしていることを前提とする。

terminalで以下のコマンドを実行する。

cd /Library/Frameworks/R.framework/Resources/lib
ln -sf libRblas.veclib.dylib libRblas.dylib

意味としては、RはlibRblas.dylibをBLASとして認識するので、libRblas.veclib.dyliblibRblas.dylibにリンクすることで、libRblas.veclib.dylibをBLASとして使うようにする。

もどすときはlibRblas.veclib.dylibの代わりに、libRblas.0.dylib(デフォルトのBLAS)をリンクすればよい。

cd /Library/Frameworks/R.framework/Resources/lib
ln -sf libRblas.0.dylib libRblas.dylib