まえがき
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
以上の方法でビルドできます
ビルドエラーについて
以下のエラーがよく発生しており、いまいちよくわかっていない
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を試しに実行してみます.
一応無事に実行されましたが本当に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も追加されているのでこちらをご使用ください.