LoginSignup
13
10

More than 3 years have passed since last update.

【動くとは言ってない】Tensorflow2.0のAMD GPU向け環境構築【Tensorflow-rocm2.0.0】

Last updated at Posted at 2019-12-18

TF2.0アドベントカレンダー19日目の記事です.

まずお詫びですが本来ならAMDでTensorflow2.0環境下においてもどれぐらい定番モデルで性能が出るかを軽くテストしようと思ってたのですがまさかのTF公式ベンチマークが2.0未対応だったと言うオチだったので今から直して動かす時間もないのでAMD GPUでも一応TF2.0が動きますよ!と言うお話に変更しました。

テスト環境

Ubuntu18.04とRadeonⅦでテストしてます.
ROCm versionはv2.10です(version 2.1という意味ではない)

AMD GPUにおけるTensorflow

ROCmとは

最近は有名になってきましたが2016年にOpenGPUに一環としてROCmがリリースされCUDA互換をめざしたGPGPUプラットフォームが公開されました。 当時はカスタムLinuxカーネルをぶち込めだのHaswell以降のCPUとHawaii以降のGPUアーキテクチャとPCIE3.0のサポートを用意しろだの当時の水準としては若干厳しい要求水準でした。
まだTensorflowも出てきてそれほど経って居らずCUDAのみでしたがそれから3年が経ち相対的に要求水準も下がったのもあって導入も用意になりました。

必要環境

ROCm(RadeonOpenCompute)の対応CPUやGPU、OSについて
公式Document

大体ココらへんに書いてありますが端的に言うとMacとWindowsでは動きません、AMDのGPUが採用されていることからMacユーザーの方から興味を持ってもらえることがありますがLinuxでしか基本動作しません。

個人的にはUbutnuがなんだかんだで導入ハードルが一番低い気がします。

またAPUでは動きません、PCIeにぶっ刺すタイプのGPUをご検討ください。
要約するとPolaris以降で(ただしNaviを除く)のディスクリートGPUとHaswell or Rezen以降のCPUでPCIE GEN3を搭載したlinuxマシンをご用意ください.

できればVega10以降のアーキテクチャが望ましいです、またNavi(RX5700/5700XT)は現時点ではまだ未対応です、ご注意ください
なんだかんだで制約多いやんけ

ROCmのセットアップ

私が環境のセットアップに使ってるシェルスクリプトです
ubuntu 18.04を想定しています.

基本的にリポジトリを追加してdkmsからROCmをインストールして各種ライブラリを入れていく感じです
yes | sudo apt install miopen-hipなどがありますがこれはNVIDIAに相当するところのcudnnです。



wget -qO - http://repo.radeon.com/rocm/apt/debian/rocm.gpg.key | sudo apt-key add - 
echo 'deb [arch=amd64] http://repo.radeon.com/rocm/apt/debian/ xenial main' | sudo tee /etc/apt/sources.list.d/rocm.list
yes | sudo apt update
yes | sudo apt install rocm-dkms
sudo usermod -a -G video $LOGNAME
yes | sudo apt install roctracer-dev
yes | sudo apt install rccl
yes | sudo apt install rocblas
yes | sudo apt install hipblas
yes | sudo apt install rocfft
yes | sudo apt install rocsparse
yes | sudo apt install miopen-hip 
yes | sudo apt install miopengemm
yes | sudo apt install hipsparse 
yes | sudo apt install rocrand

echo 'export PATH=$PATH:/opt/rocm/bin:/opt/rocm/profiler/bin:/opt/rocm/opencl/bin/x86_64' | sudo tee -a /etc/profile.d/rocm.sh
# docker 

prf=`cat <<'EOF'
export HIP_VISIBLE_DEVICES=0
export HCC_HOME=/opt/rocm/hcc
export ROCM_PATH=/opt/rocm
export HIP_PATH=/opt/rocm/hip
export PATH=/usr/local/bin:$HCC_HOME/bin:$HIP_PATH/bin:$ROCM_PATH/bin:/opt/rocm/opencl/bin/x86_64:$PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/rocm/opencl/lib/x86_64
export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
EOF
`
echo "$prf" >> ~/.bashrc

必要に応じてpip3などを入れるなどします

yes | sudo apt-get install python-pip python2.7 python2.7-dev python3 |
yes | sudo apt install python3-pip |

参考 https://www.gpueater.com/help_ja.html

大体これでROCm環境のセットアップは終わります

導入が成功したかどうかは/opt/rocm/bin/rocminfo(PATHが通ってればrocminfoのみで大丈夫です)でGPU情報が表示されるかどうかでわかります。
失敗している場合はエラーを吐くはずです

Tensorflow-rocm2.0の導入

CUDA向けのtensorflow-gpuと同様に

pip3 install tensorflow-rocm==hoge_tensorflow_version

で大丈夫です.
2系のパッケージとしては現時点で

2.0.0b1, 2.0.0b2, 2.0.0b3, 2.0.0, 2.0.1, 2.1.0rc0

が用意されています.

Dockerについて

ROCmでは公式Docker imageが用意されてます、またNvidia dockerのような面倒くさいインストールも無用です

docker pull rocm/tensorflow:rocm2.10.0-tf2.0-dev

ROCmとDockerをインストールして上記のイメージをpullするだけよいです。
使い方としてはtensorflow-gpuのimageと置き換えて使う感じが正しいのでしょうか

rocm-tfのイメージは各種用意されているのでお好きなイメージをpullして使ってください.

動かしてみる

TF2でも一応AMD GPUが使えるよ!と言う話でした

ただし信頼性の観点ではかなり微妙で

https://github.com/tensorflow/docs/blob/master/site/ja/tutorials/images/cnn.ipynb
ココらへんとかテストしたんですが(tensorflow-gpuをtensorflow-rocmに置き換えて)なぜか勝手にCPUを使ったりしているので正直凄い怪しいところがあります.

適当にいくつかカレンダーの皆さんが書いてくれやつを試せるだけ試してみる.

ちゃんと動かないんだなこれが!w

一本目

TensorFlow 2.0でのMINSTの実行とTensorBoardでの可視化まで(2019年版)

定番のMINST

 python ./minst.py 
2019-12-19 03:34:08.688838: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libhip_hcc.so
*** stack smashing detected ***: <unknown> terminated
Aborted (core dumped)

内部で謎のコアダンプを起こして死亡

https://github.com/ROCmSoftwarePlatform/tensorflow-upstream/issues/652
過去バージョンのROCmでもなんかあったっぽい

2本目

KerasでInceptionとか色々な自作Modelを作ってみる話【Colab付き】
ipynbをcolabからダウンロードさせていただき例によってtensorflow-gpuの部分をrocm==2.0.1に書き換えて実行させていただきました.

ひとまずチュートリアル1の学習タスクを走らせてみたところの様子です.
Screenshot from 2019-12-19 03-53-10.png

HBM2 16GBが食い尽くされとる・・

Tensorflow-rocmあるあるなんですが最初のepochで異常に時間を食うと言う特徴があります。
以下をご覧ください
Screenshot from 2019-12-19 03-57-00.png

Epoch1/10だけ98sもかかっておりなにしとるんじゃと言った感じです。
ただそれ以降はcolab(おそらくTeslaK80?)で12sほどでしたが6sで済んでるので実際性能は出せてると思うんですが最初のepochで以上に時間が掛かるのをどうにかしてほしいですね...
VRAMを食い過ぎなだけな気もしますが...

チュートリアル2:Functional APIの学習タスクを試しましたが(batchサイズを試しに64にしてみるなどしています)
Screenshot from 2019-12-19 04-17-08.png

やはり最初のエポックで大爆死しています.

まだやはり一応動きますの段階を脱してるとは言えない感じですかねこれは...

あと何故か100epochテストでは
Screenshot from 2019-12-19 04-26-26.png

1epochでもさっきほど時間を取ってません、もしかしてVRAM確保とかに時間かけてるのかな・・・

時間があればrocprfあたりで動作検証したほうがいいかもしれないですがこれはまた今度どこかで…

ダウンロード.png
ダウンロード (1).png

ちなみにちゃんと学習結果も再現できました

まとめ

対応したが動くとは言ってない

時間がなくてしっかり検証してなくて申し訳無いのですが一応動くよってことを覚えてもらえば幸いです。

謝礼

参考にさせていただいたカレンダーの皆さんありがとうございました、せっかく書いてもらったにも関わらずまともに動かなくて若干申し訳なさを感じております。

13
10
2

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
13
10