#前置き
NVIDIA の Rapidsai が 21.10 に上がったので、最速じゃないけどなる早でビルド用スクリプトを出してみた(ビルド出来たが、全部じゃなくてもテストがまずまず通ればOKとする)
GPUを活用した機械学習ツールNVIDIA RAPIDSのビルド方法。今回は 21.10)での構築方法を紹介。Arch Linux の環境では、CUDA11.4.2 + GCC11 (not GCC10)がデフォルト開発環境になってしまってるけど、大抵のコンポーネントまではGCC11でビルドできる。ただし、CUGRAPHはGCC11はビルド不可。GCC10じゃないとビルド出来ない。なお、Arch Linux では、CUDA11.4.2のポストプロセッサとしてのGCCに11を設定してるが、RapidsAIでは CUDA11.4.2 に、GCC10を設定しないとビルドできなかった。
やったこと=RAPIDS のビルド
データ処理、機械学習のフレームワークRAPIDSを Arch Linux でビルドした。ただし、ビルドまでにエライ手間がかかったので、皆さんへの共有も兼ねて
0. 基本構成その0 ・・・ Cupyのビルド方法についてはこちらの記事で紹介してます。
- 基本構成その1 ・・・ いまここ。RMM, cuDFというRAPIDS の基本コンポーネントの一部のビルド手順。
- 基本構成その2 ・・・ こちら。CUMLというRAPIDS の基本コンポーネントの一部のビルド手順。ついでに、cuSignal という信号制御ライブラリや、cuxfilter という描画データ変換ライブラリも。
- 基本構成その3 ・・・ こちら。グラフを扱うCUGraphのビルド手順。
RAPIDSについて
RAPIDS って何?
NVIDIAが中心となってとりまとめている、GPUを使ったデータ処理&機械学習のフレームワークツールのスイート。Rapidsaiから提供。何が出来るかについては、例えば石黒さんの記事とか参照のこと。
##主なコンポーネント
- RMM(RAPIDS Memory Manager)...GPU上での分散メモリ処理のためのライブラリ
- CUDF(DataFrame library)...データ前処理・管理のためのライブラリ(Pandas に相当)
- CUML(Machine Learning library)...機械学習のためのライブラリ(SciPy, SciKit-Learn に相当)。ただしAPI一覧のとおり、かなりのアルゴリズムがManifold関連中心に充実しているのに対して、scikit-learn に存在するAPIが未実装だったりするのでまだまだ発展形だったりする。
- CuPy...Preferred Networksによって開発されている線形代数を中心とした数式計算処理ライブラリ群(Numpyに相当)。RAPDISのコンポーネントでは無いが、大きく依存している
#ビルド方法
GitHubリンクに、PKGBUILDとかビルド順とか。で済ませたいですが、補足説明を。あと参考までにビルドの依存関係をつけます。(あらたに rmm というパッケージが python-rmm とは別に登場)
#事前想定
- NVIDIA GeForce RTX/GTXを持っている人
- CUDA含めた開発環境が揃っている。
- Arch Linux の使い手。EndeavourOSなど派生ディストリビューションでもOKだが、Manjaro のように独自リポジトリを持ち、カーネル、ドライバなどのリリースのペースが異なるものは関知しません。
- yay とか PKGBUILD とかが何やってるかが、ある程度わかること。
##ビルド順
0 事前に、pacman で spdlog をインストールしてください
sudo pacman -S spdlog
その後、 /etc/makepkg.cfg のコンパイルフラグに、「-DSPDLOG_FMT_EXTERNAL」というフラグをつけて、SPDLOGはOSにインストールしたほうを呼び出す設定にしてください。
CFLAGS="-march=rocketlake -mtune=native -DSPDLOG_FMT_EXTERNAL -O3 -pipe -fno-plt -fexceptions \
-Wp,-D_FORTIFY_SOURCE=2,-D_GLIBCXX_ASSERTIONS \
-Wformat -Werror=format-security \
-fstack-clash-protection -fcf-protection"
2Apache Arrow
CUDFのキモである大規模データの管理はこのライブラリに依存している。バージョン5.0.0を入れてる
なお、ORC(Optimized Row Columnar)を使うためには、事前に
2.5Apache Orc
を入れておく必要がある。なお、Pythonラッパとして、pyorcがあるが、これはApache謹製ではないので、使うのはご用心。
3NVTX
The NVIDIA® Tools Extension SDK
4rmm
21.08ではcudf rmm をまとめてたが、バージョンアップのときのアンインストール&インストールの手間のため、rmmとcudfを分離した。
5CUDF
~~ここでは、CUDF のライブラリだけでなくRMMのC++ヘッダやcmake定義もインストールされる。その関係で、CUDFのマイナーバージョンアップのときは、CUDF(およびビルド依存したコンポーネント)を一度外さないといけないっぽい。~~というのはなくなり、rmmはrmm、cudfはcudf で別々にインストールするようにした。
6Python RMM
RMMのPythonライブラリは別途ビルドが必要
7Python PyArrow
Apache Arrowの Python ラッパ
8Python Distributed
0Python Dask
Arch Linux の現時点(2021.9.1)に入っているバージョン(2021.3.0)だとdask-cudf周りが動かないっぽいのでバージョンを(2021.9.1)にあげている
10Python NVTX
NVIDIA Tools Extension LibraryのPython実装。
11Python Dask CUDA
Python でDASKまわり特にCUDAと連携するための箇所を制御するためのライブラリ(らしい)。11のCudfでDASKとの連携をビルドするために必要
12Python CUDF
CUDFのPython ラッパ。
$ python
Python 3.9.6 (default, Jun 30 2021, 10:22:16)
[GCC 11.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cudf
>>> import dask_cudf
>>>
とやってエラーがでなければいちおう成功。実際、pytest も。2108では通らなかった binop (2項演算子、スカラ型とベクトル型の演算とか)かなり通ってるけど、Apache ORC 周りは異常終了してしまう。
を実行する必要がある
#記録
- (2021.10.8 1:48 JST)...初版(21.10版)
- (2021.10.8 9:25 JST)...微修正
- (2021.10.8 21:08 JST)...パッケージrmm書き忘れの訂正
- (2021.10.13 13:52 JST)...rmm/cudf のバージョンが 21.10.00から21.10.01に更新
- (2021.10.15 22:43 JST)...Apache ORCの記載漏れに今更気づく。とりあえず追加修正。
#おことわり
この記事は、筆者以外の方の環境でも同様に成功することを保証するものではありません。ビルドや動作確認の失敗(ないとは思いますが)環境が破壊されても責任は一切負いかねます(基本的には自己責任でお願いします。)。
#今回紹介したリンク
https://github.com/gdaisukesuzuki/PKGBUILD_rapidsai2110