OS XでXGBoostをビルドする

XGBoost-勾配ブースティング法を実装するC ++ライブラリ。これは、Kaggleで勝つアルゴリズムの説明でますます発見されています。 RまたはPythonから使用するには、対応するバインディングがありますが、ライブラリ自体はソースからアセンブルする必要があります。 makeを実行すると、検出されないヘッダーとサポートされていないOpenMPについて報告する多くのエラーが表示されました。 まあ、初めてではありません。



進行は止まっておらず、アルゴリズムはいくらか単純化されています:

  1. / usr / bin / ruby​​ -e "$(curl -fsSL raw.githubusercontent.com/Homebrew/install/master/install)"
  2. brew install gcc --without-multilib
  3. pip install xgboost
  4. Kaggleリーダーボードのトップを征服する


XGBoostの起動時に、見つからなかった/usr/local/lib/gcc/5/libgomp.1.dylibライブラリを誓う可能性があることがフィールドから報告されています。 この場合、それを見つけて指定されたパスに配置する必要があります。



以前は、次のことを行う必要がありました。

  1. Xcodeをダウンロード
  2. コマンドラインツールをインストールする
  3. OpenMPサポートを使用したClangのビルド
  4. Intel OpenMPライブラリを構築する
  5. OpenMPライブラリと対応するヘッダーへのパスを登録します
  6. XGBoostをビルドする
  7. Pythonバインディングを設定する
  8. Kaggleリーダーボードのトップを征服する


1. Xcodeをダウンロードする

XcodeはApp Storeから無料でダウンロードできます。 インストール後、ターミナルのコマンドラインでgcc -vと入力すると、画面に次のようなものが表示されます。

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer//usr --with-gxx-include-dir=/usr/include/c++/4.2.1 Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn) Target: x86_64-apple-darwin14.3.0 Thread model: posix
      
      





2. コマンドラインツールをインストールする

この手順をスキップすると、コンパイラは標準のCおよびC ++ライブラリを見つけることができません。 ターミナルで実行する必要があります

 xcode-select --install
      
      





指示に従います。



3. OpenMPサポートを使用してClangをビルドする

このコンパイラバージョンは、並列化のためのOpenMP命令をサポートし、Intelスタッフによって開発されています。 いつかこのブランチがトランクに戻り、OpenMPが最初のClangですぐに利用できるようになることが望まれます。 どうやら、しばらく前にbrewを使用してclang-ompをインストールできましたが、この幸せな時間が過ぎました。 そのため、コンパイラーをコンパイルします。

 mkdir clang-omp && cd clang-omp git clone https://github.com/clang-omp/llvm git clone https://github.com/clang-omp/compiler-rt llvm/projects/compiler-rt git clone -b clang-omp https://github.com/clang-omp/clang llvm/tools/clang mkdir build && cd build cmake ../llvm -DCMAKE_BUILD_TYPE=Release make -j 4
      
      





マシンに4つ以上のコアがある場合は、最後のコマンドの番号を修正するのが理にかなっています。



4. Intel OpenMPライブラリをビルドします

OpenMPをサポートするライブラリもソースからコンパイルされます。 ダウンロード 、解凍、収集:

 mkdir build && cd build cmake .. make -j 4
      
      





5. OpenMPライブラリと対応するヘッダーへのパスを登録します

XGBoostのアセンブリ中にコンパイラとリンカーが必要なコンポーネントを見つけることができるように、それらへのパスを登録する必要があります。 これを行うには、次の行を〜/ .bash_profileに追加します。

 export C_INCLUDE_PATH=PATH_TO_LIBOMP/libomp/exports/common/include/:$C_INCLUDE_PATH export CPLUS_INCLUDE_PATH=PATH_TO_LIBOMP/libomp/exports/common/include/:$CPLUS_INCLUDE_PATH export LIBRARY_PATH=PATH_TO_LIBOMP/libomp/exports/mac_32e/lib/:$LIBRARY_PATH export DYLD_LIBRARY_PATH=PATH_TO_LIBOMP/libomp/exports/mac_32e/lib/:$DYLD_LIBRARY_PATH
      
      





ご想像のとおり、PATH_TO_LIBOMPはライブラリが置かれているフォルダーへのパスです。 変更を有効にするには、コマンドを実行する必要があります
 source ~/.bash_profile
      
      





すべてが正しく機能していることを確認する必要があります。 これを行うには、サンプルプログラムを作成します

 #include <omp.h> #include <stdio.h> #include <iostream> int main(int argc, char** argv) { std::cout << "Hello!" << std::endl; #pragma omp parallel printf("Hello from thread %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads()); return 0; }
      
      





コンパイルしてみてください:

 PATH_TO_CLANGOMP/clang-omp/build/bin/clang++ sample.cpp -o sample -fopenmp
      
      





すべてが正常であれば、プログラムを起動すると、画面にいくつかのスレッドからのメッセージが表示されます。



6. XGBoostをビルドする

もうすぐです。 xgboostフォルダーにはMakefileがあり、最初の行は次のように編集する必要があります。

 export CC = PATH_TO_CLANGOMP/clang-omp/build/bin/clang export CXX = PATH_TO_CLANGOMP/clang-omp/build/bin/clang++ export MPICXX = mpicxx export LDFLAGS= -pthread -lm export CFLAGS = -Wall -O3 -msse2 -Wno-unknown-pragmas -funroll-loops -fopenmp
      
      





収集するもの:

 make -j 4
      
      





勝利



7. Pythonバインディングを設定する

 cd wrapper python setup.py install
      
      





xgboost / demoのデモスクリプトを使用して、XGBoostバインディングが適切に機能していることを確認できます。



8. Kaggleでリーダーボードのトップを征服する

突然、電気が切れました。残念ながら、この最も重要な部分は失われ、将来的にカバーされます。



All Articles