[正式版リリース]GPUを活用した機械学習ツールNVIDIA RAPIDSをArch Linux + CUDA11.5 でビルドした (Ver21.12版) (3) cuGRAPH

#前置き
GPUを活用した機械学習ツールNVIDIA RAPIDSのビルド方法。今回は最新版＝21.12）での構築方法を紹介。Arch Linux の環境では、CUDA11.5.1 + GCC11 となっているのですが、一応ビルドできて、テストも数値エラーやメモリエラーは起きるが一応最後までまわる。12月9日までに正式版21.12がリリースされたが、ちゃんと動いているので

Release Statement は[こちら](https://medium.com/rapids-ai/rapids-release-21-12-fc5cfcfc1cb8)


# やったこと＝RAPIDS のビルド
データ処理、機械学習のフレームワーク[RAPIDS](https://rapids.ai/)を  [Arch Linux](https://www.archlinux.org/)  でビルドした。ただし、ビルドまでにエライ手間がかかったので、皆さんへの共有も兼ねて
0. **基本構成その0** ・・・ Cupyのビルド方法については[こちらの記事](https://qiita.com/daisuzu_/items/971ff080bb8e16d7c815)で紹介してます。
1. **基本構成その1** ・・・ [こちら](https://qiita.com/daisuzu_/items/ffd7fc82b8410b9e14b4)。RMM, cuDFというRAPIDS の基本コンポーネントの一部のビルド手順。
2. **基本構成その2** ・・・ [こちら](https://qiita.com/daisuzu_/items/cfd8ace0d7e6ae88dd36)。cuMLというRAPIDS の基本コンポーネントの一部のビルド手順。ついでに、cuSignal という信号制御ライブラリも。
3. **基本構成その3** ・・・ いまここ。グラフを扱うcuGraphのビルド手順。

# cuGraph って何？
NVIDIAから提供されている、グラフ分析用ライブラリ。上述の[github](https://github.com/rapidsai/cugraph)や[ドキュメント](https://docs.rapids.ai/api/cugraph/stable/)のとおり、RAPIDS経由で提供されている.

#事前想定
* NVIDIA GeForce RTX/GTX を持っている人
* CUDA含めた開発環境が揃っている。
* Arch Linux の使い手。EndeavourOSなど派生ディストリビューションでもOKだが、Manjaro のように独自リポジトリを持ち、カーネル、ドライバなどのリリースのペースが異なるものは関知しません。
* yay とか PKGBUILD とかが何やってるかが、ある程度わかること。


#ビルド方法
[GitHubリンク](https://github.com/gdaisukesuzuki/PKGBUILD_rapidsai_2112)に、PKGBUILDとかビルド順とか。で済ませたいですが、補足説明を。あと参考までにビルドの依存関係をつけます。
![ 2021-11-16 23.13.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64164/70acb509-ceca-f85e-a808-dea759d3b270.png)


０  事前に、pacman で spdlog をインストールしてください。外部でspdlogを持つ強い根拠はないです。[別記事](https://qiita.com/daisuzu_/items/ffd7fc82b8410b9e14b4)のとおりRAPIDSの他コンポーネントのビルド設定と合わせただけです。

```
sudo pacman -S spdlog
```

その後、 /etc/makepkg.cfg のコンパイルフラグに、「-DSPDLOG_FMT_EXTERNAL」というフラグをつけて、SPDLOGはOSにインストールしたほうを呼び出す設定にしてください。

```
CFLAGS="-march=skylake-avx512 -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"
```


１．[gunrock](https://github.com/gdaisukesuzuki/PKGBUILD_rapidsai_2112/tree/main/gunrock)
公式サイトは[こちら](https://gunrock.github.io/)。カリフォルニア大デービス校で開発された、GPUで動作するグラフ分析ライブラリ。このライブラリはなぜかGCC111ではビルドできなかったので、CUDAのバックエンドコンパイラだけでなく、C++コンパイラもGCC10を使ってビルドした。あと、Ampere（SM86）の処理部分がちゃんとは書かれてないがそこまでは手をつけてない(cugraphのPythonテストコードは通るけど、gunrockビルド中に作られるテストアプリはコアを吐いて異常終了する)


２. [python-ucx](https://github.com/gdaisukesuzuki/PKGBUILD_rapidsai_2112/tree/main/python-ucx)
rapidsai が提供する、dask-cudaを用いた分散処理の通信部分を担うライブラリ。cuGraphはNCCLなどGPU間の通信処理をベースに実装されているので、強制的に必要となる（1GPUでも動作はする）。[基本構成その1](https://qiita.com/daisuzu_/items/ffd7fc82b8410b9e14b4)にあるとおり、cuDFのインストールが前提。


３. [cuGraph](https://github.com/gdaisukesuzuki/PKGBUILD_rapidsai_2112/tree/main/cugraph)
GITにあるファイルをローカルに置いて、ビルドすればOK。こちらはGCC11でビルドできる(ただしCUDAコンパイラはGCC10が必要)。C++ライブラリ（cugraph）とPythonライブラリ（python-cugraph）が同時にビルドできるようになった。あとは、test中のコマンドなどで動作を確認してほしいが、CPU vs GPU の動作比較となるため、networkXのインストールも必要になる。


```
sudo pacman -S python-networkx
```

#事前想定
cuGRAPHのPythonのテストは自分の環境ではFAILは出現しなかった。1GPUじゃなく複数GPUだとどうなるかは不明。誰か RTX3090を2枚以上恵んでください。あとはgunrock のSM86対応をやりたいが、最適なパラメータ設定が不明。パラメータを過大に設定するとマシンごとおじゃんになりそうだし。

#記録
1. (2021.11.17 22:45 JST)...初版
1. (2021.11.18 14:35 JST)...cuGraph ビルドで、C++とPython両方のライブラリをまとめてビルドできるようにした。
1. (2021.11.21 11:30 JST)...cuML 記事作成したので。
1. (2021.12.21 09:25 JST)...Rapids21.12 正式版リリース。Python3.10 対応。


#おことわり
この記事は、筆者以外の方の環境でも同様に成功することを保証するものではありません。**ビルドや動作確認の失敗**、（ないとは思いますが）**環境が破壊されても責任は一切負いかねます**（基本的には自己責任でお願いします。）。

#今回紹介したリンク
[https://github.com/gdaisukesuzuki/PKGBUILD_rapidsai_2112](https://github.com/gdaisukesuzuki/PKGBUILD_rapidsai_2112)