インテル® Xeon Phi™ コプロセッサー向けのサポートを利用して R を実行する

同カテゴリーの次の記事

インテル® MKL とインテル® DAAL によるビッグデータ解析のスピードアップ

この記事は、インテル® デベロッパー・ゾーンに公開されている「Running R with Support for Intel® Xeon Phi™ Coprocessors」の日本語参考訳です。


この記事の PDF 版はこちらからご利用になれます。

概要

R は、統計計算および解析向けの無料のオープンソース・ソフトウェア環境です。広範な UNIX* および Linux* プラットフォーム、Windows*、macOS* でビルドおよび実行できます。R プロジェクトの Web サイト http://www.r-project.org/ (英語) からソースコードをダウンロードして実行ファイルをビルドするか、サポートされる各 OS 用の事前ビルド済み実行ファイルをダウンロードすることができます。ほとんどのユーザーは、事前ビルド済み実行ファイルをダウンロードします。この記事では、インテル® コンパイラーとインテル® マス・カーネル・ライブラリー (インテル® MKL) を使用して R をビルドし、ビルドした実行ファイルをインテル® Xeon® プロセッサーおよびインテル® Xeon Phi™ コプロセッサー上で実行する方法を示します。

R とインテル® ソフトウェア・ツールの入手

R をダウンロードするには、次の操作を行います。

  • http://www.r-project.org/ (英語) に移動して、ページの左側にある “CRAN” (Comprehensive R Archive Network) リンクをクリックします。CRAN ミラーの一覧が表示されます。
  • 使用するミラーのリンクをクリックします。
  • 表示されるページの左側にある “R Sources” リンクをクリックします。
  • 最新のソースコード・リリースは、ページの上部の目立つところに表示されているはずです。リンクをクリックして、ブラウザーの指示に従ってソフトウェアをダウンロードします。
  • パッケージは通常、アーカイブおよび圧縮されています。ご使用の OS 用の適切な展開ツールを使用して、ソフトウェアをインストールします。

インテル® ソフトウェア・ツールをダウンロードするには、次の操作を行います。

  • https://www.isus.jp/intel-parallel-studio-xe/ に移動します。
  • ツールを評価するか、購入するかを決定します。購入する場合は、[価格] ボタンをクリックします。評価する場合は、[評価版] ボタンをクリックします。
  • 表示されるページの指示に従って、評価または購入手続きを完了してください。
  • ライセンスファイル、シリアル番号、インストール手順を含むメールが送られてきます。手順に従ってツールをダウンロードして、インストールしてください。

インテル® ソフトウェア・ツールのビルド

Linux* では、インテル® ソフトウェア・ツールがデフォルトの場所 (/opt/intel/composerxe) にインストールされている場合、次のコマンドを実行してビルドします。

$ source /opt/intel/composerxe/bin/compilervars.sh intel64
$ ./configure --with-blas="-L/opt/intel/composerxe/mkl/lib/intel64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm" --with-lapack CC=icc CFLAGS=-O2 CXX=icpc CXXFLAGS=-O2 F77=ifort FFLAGS=-O2 FC=ifort FCFLAGS=-O2
$ make
$ make check

R のビルドに関する詳細は、次の記事を参照してください。

インテル® MKL を利用して R をビルドすると、最適化された行列乗算ルーチンを多くの R データ解析計算で利用することができます。

R 実行ファイルをビルドしたら、デフォルトのビルドやダウンロードした実行ファイルと同様に実行します。

インテル® Xeon® プロセッサー上でのベースライン・パフォーマンス

各種 Linux* 向けの事前ビルド済み実行ファイルは、GNU* ツールを利用してビルドされています。残念ながら、これらの実行ファイルは、マルチコアシステム上でも、並列に実行可能な行列演算でシングルスレッド・パフォーマンスしか達成できません。以下の表は、Red Hat* Enterprise Linux* 6.3 上で、インテル® C++ コンパイラー (icc) 14.0.1 とインテル® MKL でビルドした R と gcc 4.4.6 でビルドされた “デフォルト” のパフォーマンスを比較したものです。インテル® MKL でビルドした実行ファイルは、行列演算をマルチコアで実行するため、これらの演算を非常に高速に実行できます。テストには、以下の Web サイトにある R benchmark-2.5 を使用しました。

http://r.research.att.com/benchmarks/R-benchmark-25.R (英語)

大きなワークロード・サイズをテストするため行列サイズを増やしています。テストの結果、インテル® MKL でビルドされた R は、gcc ビルドよりも 13 倍も高速になりました。

インテル® Xeon Phi™ コプロセッサー向けのサポートを利用して R を実行した結果

テスト gcc ビルドの
実行時間 (秒)
icc/インテル® MKL
ビルドの実行時間 (秒)
5000×5000 行列の作成、転置、変形 3.25 2.95
5000×5000 正規分布乱数行列 ^1000 5.13 1.52
14,000,000 乱数値の並べ替え 1.61 1.64
5600×5600 クロス積行列 (b = a’ * a) 97.44 0.56
4000×4000 行列の線形回帰 (c = a \ b’) 46.06 0.49
4,800,000 乱数値の FFT 0.65 0.61
1200×1200 乱数行列の固有値 5.55 1.37
5000×5000 乱数行列式 34.18 0.55
6000×6000 行列のコレスキー分解 37.07 0.47
3200×3200 乱数行列の逆数 29.49 0.57
3,500,000 フィボナッチ数列の計算 (ベクトル演算) 1.31 0.38
6000×6000 ヒルベルト行列の作成 (行列演算) 0.77 0.99
400,000 ペアの最大公約数 (再帰) 0.63 0.56
1000×1000 テプリッツ行列 (ループ) 2.24 2.34
90×90 行列に対するエスコフィエの図式解放 (混在) 9.55 6.02
合計 274.93 21.01

システム構成:

  • 2 ソケット/24 コア
  • プロセッサー: インテル® Xeon® プロセッサー E5-2697 v2 @ 2.70GHz (12 コア)、インテル® ハイパースレッディング・テクノロジー有効
  • オペレーティング・システム: Red Hat* Enterprise Linux* 2.6.32-358.6.2.el6.x86_64.crt1 #4 SMP Fri May 17 15:33:33 MDT 2013 x86_64 x86_64 x86_64 GNU*/Linux*
  • メモリー: 64GB
  • コプロセッサー: 2x インテル® Xeon Phi™ コプロセッサー 7120P: 61 コア @ 1.238GHz、4-way インテル® ハイパースレッディング・テクノロジー有効、メモリー: 15872MB
  • インテル® メニーコア・プラットフォーム・ソフトウェア・スタック 2.1.6720-16
  • インテル® C++ コンパイラー 13.1.3 20130607 (2013.5.192)

インターネットを検索すると、独立した、同様の比較結果が得られます。Revolution Analytics の記事 (http://www.revolutionanalytics.com/revolution-revor-enterprise-benchmark-details (英語)) では、インテル® コンパイラーでビルドされた独自の R 製品を Windows* 上でテストした結果を説明しています。http://www.r-bloggers.com/speeding-up-r-with-intels-math-kernel-library-mkl/ (英語) には、汎用 BLAS でビルドされた R とインテル® MKL でビルドされた R を Ubuntu* 上で実行した結果の比較があります。

インテル® Xeon Phi™ コプロセッサー向けの R サポート

インテル® ソフトウェア・ツールを利用してビルドするその他の利点は、インテル® Xeon Phi™ コプロセッサーが搭載されているシステムでは、インテル® MKL が特定の並列行列演算をコプロセッサーへ自動でオフロードできることです。インテル® ソフトウェア・ツール向けの前述の手順に従ってビルドした場合、R をインテル® Xeon Phi™ コプロセッサーで実行するための準備はすでに完了しています。次の環境変数を設定して、インテル® MKL に行列演算をオフロードするように指示できます。

$ export MKL_MIC_ENABLE=1

R が行列演算を開始すると、インテル® MKL はプラットフォームのホスト・プロセッサーとコプロセッサー間でワークを分割します。MKL_HOST_WORKDIVISION および MKL_MIC_0_WORKDIVISION 環境変数でワークの比率を指定できます。例えば、次のように指定します。

$ export MKL_HOST_WORKDIVISION=0.1
$ export MKL_MIC_0_WORKDIVISION=0.9

この場合、インテル® MKL はワークの 90% をインテル® Xeon Phi™ コプロセッサーに送り、10% をホスト・プロセッサーで実行します。インテル® Xeon Phi™ コプロセッサーが 2 つある場合は、次のように指定します。

$ export MKL_HOST_WORKDIVISION=0.2
$ export MKL_MIC_0_WORKDIVISION=0.4
$ export MKL_MIC_1_WORKDIVISION=0.4

この場合、インテル® MKL はワークの 80% をインテル® Xeon Phi™ コプロセッサーに送り (2 つのカード間で等分して 40% ずつ実行)、20% をホスト・プロセッサーで実行します。さまざまな比率を試して、最適なワークの比率を見つけることができます。

インテル® MKL の自動オフロードのパフォーマンスは、R で解析するワークロードのサイズに大きく依存します。インテル® MKL には、自動オフロードにより利点を得るのに十分なワークロード・サイズを決定するためのヒューリスティックのセットが含まれています。これは、引き続き調査中の分野です。ぜひ皆さんのワークロードで試してみて、結果を共有してください。

まとめ

インテル® ソフトウェア・ツールでビルドした R は、GNU* ツールで事前ビルドされたまたはユーザーによってビルドされた実行ファイルと比較して、パフォーマンスが大幅に向上しました。この記事では、R とインテル® ソフトウェア・ツールをダウンロードしてビルドし、インテル® MKL の自動オフロード機能によりホスト・プロセッサーとインテル® Xeon Phi™ コプロセッサーで R を実行する方法を説明しました。実際にこの方法を試してみて、その結果を共有してください。

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

関連記事

  • インテルの Caffe* を CentOS* 7.2 上にインストールするインテルの Caffe* を CentOS* 7.2 上にインストールする この記事は、エクセルソフト株式会社 Technical Support の竹田 賢人が執筆しました。 はじめに ここでは、インテルの Caffe* の動作に必要なコンポーネントを準備して、動作環境を構築する手順を紹介します。CPU 動作を行うので GPU を扱わない都合上、CUDA* […]
  • Docker* 上に Ubuntu* 16.04 とインテル® Distribution for Python* の実行環境を構築する手順Docker* 上に Ubuntu* 16.04 とインテル® Distribution for Python* の実行環境を構築する手順 この記事は、エクセルソフト株式会社 Technical Support の竹田 賢人が執筆しました。 1. はじめに インテル® Distribution for Python* はインテル® プロセッサー上で効果的に動作する Python* 実行環境を提供しており、Python* 実行環境だけでなく、Anaconda* […]
  • インテル Parallel Universe 27 号日本語版の公開インテル Parallel Universe 27 号日本語版の公開 インテル Parallel Universe マガジンの最新号が公開されました。この号では、20 周年を迎える OpenMP* について取り上げます。また、新しいインテル® AVX-512 命令セットにより以前は不可能だったベクトル化を行う方法について紹介します。新しいインテル® Advisor […]
  • ビッグデータ解析とマシンラーニングの有効利用ビッグデータ解析とマシンラーニングの有効利用 この記事は、インテルの The Parallel Universe Magazine 26 号に収録されている、インテル® […]
  • Intel® OpenCL SDK 1.1 の導入Intel® OpenCL SDK 1.1 の導入 インテルより初めての製品版となる Intel® OpenCL SDK 1.1 が 2011年 6月にリリースされました。この記事では、すでに OpenCL プログラムを開発している開発者、あるいは OpenCL について多少の知識を持つユーザーを対象に、Intel® OpenCL SDK 1.1 […]