#前置き
NVIDIA の Rapidsai の最新ブランチから 21.12 に上がり、ほぼ全コンポーネントの正式リリースが出たので、ビルドしてみる。(ビルド出来たが、全部じゃなくてもテストがまずまず通ればOKとする。
Release Statement はこちら
GPUを活用した機械学習ツールNVIDIA RAPIDSのビルド方法。今回は 21.12)での構築方法を紹介。Arch Linux の環境では、CUDA11.5.1 + GCC11 (not GCC10)がデフォルト開発環境になってしまってるけど、大抵のコンポーネントまではGCC11でビルドできる。Arch Linux では、CUDA11.5.1のポストプロセッサとしてのGCCに11(最新バージョン)を設定してるが、RapidsAIでは CUDA11.5.1 に、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とかビルド順とか。で済ませたいですが、補足説明を。あと参考までにビルドの依存関係をつけます。
#事前想定
- NVIDIA GeForce RTX/GTXを持っている人
- CUDA含めた開発環境が揃っている。
- Arch Linux の使い手。EndeavourOSなど派生ディストリビューションでもOKだが、Manjaro のように独自リポジトリを持ち、カーネル、ドライバなどのリリースのペースが異なるものは関知しません。
- yay とか PKGBUILD とかが何やってるかが、ある程度わかること。
- CUDA11.5.1+GCC10 の組み合わせです(プリプロセッサでデフォルトGCC11を指定するとビルドできなかった・・)。
##ビルド順
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のキモである大規模データの管理はこのライブラリに依存している。バージョンは6.0.1。今回はC++ライブラルだけでなく、Pythonライブラリも同時生成している。なお、動作確認テストではApache ORCのPythonラッパが必要らしいがこのようにApache Arrowと ORCは共存できない。実際両方ロードしようとするとコアを吐く。
3NVTX
The NVIDIA® Tools Extension SDK
4.[rmm]
(https://github.com/gdaisukesuzuki/PKGBUILD_rapidsai_2112/tree/main/rmm)
Rapidsaiから提供。rmmというC++(ヘッダファイルとCMAKE定義ファイルのみだが)、およびpython-rmm というPyhonライブラリ両方提供
5.nvcomp
データ圧縮ライブラリ
6.python-nvtx
7.python-distributed
8.python-dask
9.python-dask-cuda
CUDFのビルド前に必要
10.cuDF
ここでは、cuDF のC++ライブラリ(cudf)だけでなく、Pythonのライブラリ (python-cudf)も一緒にビルドしている。実は pythonライブラリには分散処理用の dask-cudf も含まれているが、今回は、まとめて Python-cudf というパッケージにひとまとめにしている。
$ python
Python 3.9.9 (main, Nov 20 2021, 21:30:06)
[GCC 11.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cudf
>>> import dask_cudf
>>>
前述したとおり、pytest する際は、、Apache ORC 周りはテストしないよう回避しておこう。
#今後の予定
(一旦はなし)
#記録
- (2021.11.16 23:58 JST)...初版(バージョン21.12+CUDA11.5対応)
- (2021.11.17 00:10 JST)...Python-rmm が抜けていたのを訂正
- (2021.11.17 22:50 JST)...cuGRAPH のビルド記事もアップしたのでリンクを追加
- (2021.11.21 11:25 JST)...cuML のビルド記事もアップしたのでリンクを追加
- (2021.12.06 20:30 JST)...RMM、cuDFの21.12正式版が出たので一部表現を変更
- (2021.12.10 09:10 JST)...全コンポーネント21.12リリース。
- (2021.12.21 09:20 JST)...Python3.10 & cudf 21.12.02リリース。
#おことわり
この記事は、筆者以外の方の環境でも同様に成功することを保証するものではありません。ビルドや動作確認の失敗(ないとは思いますが)環境が破壊されても責任は一切負いかねます(基本的には自己責任でお願いします。)。
#今回紹介したリンク
https://github.com/gdaisukesuzuki/PKGBUILD_rapidsai_2112