3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

cupy on HIP(ROCm)のビルドに関するメモ

Last updated at Posted at 2019-11-23

まえがき

Radeon GPUでTensorflowやpytorchのタスクを動作可能にしたROCmですが最近cupyに対応するようになりました.

https://qiita.com/kz_lil_fox/items/05bb375225e80fa99e39
元々非公式ならリポジトリである程度動いていたようですが最近公式のrcリポジトリでも対応したようです.
今までCUDA専用だったCupyがAMDに対応したことになり、Chainer/CuPyのROCm対応が一歩前進したことを意味します.

Experimental support of AMD GPUs are added (#1094). See the installation guide for how to install CuPy with AMD support. Note that this feature is still experimental, and we do not guarantee the API stability.
Supported Versions: ROCm 2.6+.

まだ実験的サポートっぽいので(7.00rc1だし当たり前ですが)バグだらけの継ぎ接ぎ状態だと思われますが環境構築から簡単なテストまでやりたいと思います。

追加情報

2019/12/02現在
先程ビルドエラーのfixがマスターブランチに追加されたみたいです.
https://github.com/cupy/cupy/commit/04cc7c264b3e6d22ad5093cd1a42a34da388d426
今後ちゃんとリリースが出ると思いますがすぐやりたい人はやってみてください

公式ドキュメント

https://github.com/cupy/cupy/pull/1094
https://docs-cupy.chainer.org/en/latest/install_rocm.html
一応英語チュートリアルがちゃんとあるので詳細はこちらをご参照ください。
おそらく動作要件はROCmにある程度準拠すると思われます

テスト環境①

ROCm Version: 2.9.6
OS ubuntu 18.04.1
GPU0 RadeonⅦ
GPU1 GTX1080Ti(テスト用兼画像出力用)
CPU Xeon E5-2603 v4
gcc g++ (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0

テスト環境②

ROCm Version: 2.9.6
OS ubuntu 16.04.3
GPU0 RadeonⅦ
GPU1 GTX1080Ti(テスト用兼画像出力用)
CPU Xeon  E5-2603 v4
gcc g++ (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609
こっちではビルドが成功した

備考 テスト環境②でのみビルド成功

実際の環境構築

sudo apt update
sudo apt upgrade
git clone https://github.com/cupy/cupy.git -b v7.0.0rc1

7.0.0rc1をcloneしてみます.

環境変数の指定が必要なので任意のアーキテクチャに合わせる必要があります

私は~/.bashrcに環境変数を設定してます

export HCC_AMDGPU_TARGET=gfx900
# ここ使ってるGPUアーキテクチャにあわせる
export __HIP_PLATFORM_HCC__
export CUPY_INSTALL_USE_HIP=1
export PATH=$ROCM_HOME/bin:$PATH

あとはここらへんを追加して source ~/.bashrcすればいいと思います.

sudo apt install hipblas hipsparse rocrand

またここらへんが追加済みであるか確認しておくと良いでしょう.
またcompileにg++が必要です. gccはたいてい入ってると思いますが念の為確認しましょう

$ g++ --version

またPython環境破壊を防止する為ここではminicondaを使用しています
https://qiita.com/T_keigo_wwk/items/1817b6488526778aa8f2

conda create -n cupy python=3.6
cd cupy #cupyのRepository内に入る
conda activate cupy
pip install -U setuptools pip
pip install cython

これのインストールはそこそこ時間かかります.
そのうちビルド済みバイナリとかpipで直接入るようになるとうれしいです

python setup.py install または pip install . , python setup.py develop
以上の方法でビルドできます

ビルドエラーについて

以下のエラーがよく発生しており、いまいちよくわかっていない

キャプチャ.PNG

cudaDeviceGetByPCIBusId’ was not declared in this scope

condaを使う場合の注意

If you are using certain versions of conda, it may fail to build CuPy with error g++: error: unrecognized command line option ‘-R’. This is due to a bug in conda (see conda/conda#6030 for details). If you encounter this problem, please downgrade or upgrade it.

特定バージョンでビルドがうまくいかないらしいです.
おそらく最新バージョンを使えば問題ないと思います.

2019年10月現在このバージョンが最新版ですので可能ならconda以外のパッケージ管理が安全かもしれません.

簡単な動作テストをしてみる.

pip install jupyter

jupyter notebookを使ってみます

テストコードを書いてくださっていた方がいらっしゃるのでこれを使います
https://qiita.com/samacoba/items/d18e6cf09f544477aff4

pythonで簡単にGPU計算ができるCupyを紹介

git clone https://github.com/samacoba/Mytest.git
jupyter-notebook

/Mytest/No_01_cupy_array.ipynbを試しに実行してみます.

Screenshot from 2019-10-31 02-57-24.png

一応無事に実行されましたが本当にAMDのGPUで実行されているのかはわからないですが一応エラーなく行列計算をすることができました

次にこちらに乗っていたテストを試してみます
https://qiita.com/kz_lil_fox/items/05bb375225e80fa99e39

cd ..
cd cupy
python ./examples/gemm/sgemm.py 
m=1398 n=1197 k=2886
start benchmarking

=============================Result===============================
hand written kernel time 2.475200080871582 ms
cuBLAS              time 1.054854393005371 ms

トラブルシュート

python ./setup.py --install
Options: {'package_name': 'cupy', 'long_description': None, 'wheel_libs': [], 'wheel_includes': [], 'no_rpath': False, 'profile': False, 'linetrace': False, 'annotate': False, 'no_cuda': False, 'use_hip': True}

-------- Configuring Module: cuda --------
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
gcc: warning: /opt/rocm/include/: linker input file unused because linking not done
/home/rocm-test/miniconda3/compiler_compat/ld: /opt/rocm/include/: file not recognized: Is a directory
collect2: error: ld returned 1 exit status
Cannot build a stub file.
Original error: command 'g++' failed with exit status 1

************************************************************
* CuPy Configuration Summary                               *
************************************************************

Build Environment:
  Include directories: ['/opt/rocm/include', '/opt/rocm/rocrand/include']
  Library directories: ['/opt/rocm/lib', '/opt/rocm/rocrand/lib']
  nvcc command       : (not found)

Environment Variables:
  CFLAGS          : /opt/rocm/include/
  LDFLAGS         : (none)
  LIBRARY_PATH    : (none)
  CUDA_PATH       : (none)
  NVTOOLSEXT_PATH : (none)
  NVCC            : (none)
  ROCM_HOME       : /opt/rocm

Modules:
  cuda      : No
    -> Include files not found: ['hip/hip_runtime_api.h', 'hip/hiprtc.h', 'hipblas.h', 'hiprand/hiprand.h']
    -> Check your CFLAGS environment variable.

ERROR: CUDA could not be found on your system.
Please refer to the Installation Guide for details:
https://docs-cupy.chainer.org/en/stable/install.html

こんな感じでパスが通ってないと怒られる

export PATH=$ROCM_HOME/bin:$PATH
export ROCM_PATH=/opt/rocm
export ROCM_HOME=/opt/rocm

あたりを追加したら治った.

まとめ

まだ安定してビルド出来てないことがある
ビルドがまだ困難な段階にあるので本格的な使用に耐えるものではなくテスト版であると考えると良さそうです.
動作報告とかまだ少ないのが厳しいところ

参考

付録(Dockerでのテスト)

ビルドエラーが発生する環境をDockerで再現できたのでメモ代わりにdockerfileを残しておく
rocmとdockerインストールされる環境なら再現可能なはずです


FROM rocm/dev-ubuntu-16.04:2.7


LABEL OBJECT="HIP on Cupy v7.0.0 Run Test"
## rocm-dev  16,04-test

RUN sudo apt update && sudo apt install -y \
    wget software-properties-common \
    hipblas hipsparse rocrand rocthrust

RUN sudo apt install -y  git
RUN sudo apt install -y g++
# python3 setup
RUN sudo apt install -y python3-pip
RUN sudo pip3 install cython

# define parameters
# Test GPU is Radeon7(vega20)
ENV HCC_AMDGPU_TARGET gfx906
ENV __HIP_PLATFORM_HCC__ ''
ENV ROCM_HOME /opt/rocm
ENV CUPY_INSTALL_USE_HIP 1
ENV PATH ${ROCM_HOME}/bin:${PATH}
ENV CFLAGS "-I${ROCM_HOME}/hip/include -I${ROCM_HOME}/hipblas/include -I${ROCM_HOME}/hipsparse/include -I${ROCM_HOME}/hiprand/include ${CFLAGS}"
ENV LDFLAGS "-L${ROCM_HOME}/hipblas/lib -L${ROCM_HOME}/hipsparse/lib -L${ROCM_HOME}/hiprand/lib ${LDFLAGS}"
ENV NVCC hcc
ENV CUDA_PATH ${ROCM_HOME}/bin



# cupy build&install
WORKDIR /opt
RUN sudo chmod 777 /opt
RUN git clone https://github.com/cupy/cupy.git -b  v7.0.0

# RUN git clone https://github.com/cupy/cupy.git 
RUN cd cupy &&  python3  setup.py develop

補足説明

一応 master branchでもHIP buildのマージがなされているようなのでこちらも要チェックである.

v7.0.0rc1リリースは前述の通りプレリリースであり、まともにビルドがまだ出来ません.
一方11/30現在、cupyコミッターによる修正が行われており、一応こちらでもdepブランチですがビルド成功を確認しました.
マスターブランチ等にそのうちマージされると思うのでリポジトリの様子を見て必要なブランチやリリースをcloneしてください.

12/05追記! v7.0.0がrcではなくなりました!
https://github.com/cupy/cupy/releases/tag/v7.0.0

各種fixも追加されているのでこちらをご使用ください.

3
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?