ROCm3.x 4.x（RadeonOpenCompute)の対応CPUやGPU、OSについて

メモも兼ねてCUDAをHIP-langに変換してAMD GPU上で動かしたり、Tensorflowを動かしたりOpenCLを動かせるプラットフォームROCmについてのハードウェアに関する部分をまとめます。

# Navi (RDNA)GPU(RX5700XT,5700,5600）をお持ちのかた、RX6900シリーズを購入検討されてる方へ
ROCm3.9がリリースされてもなお公式ではRDNAはサポートされてません、部分的に動作する報告もあがってますが人柱志望、GPUそのもので遊びたい方以外には推奨できない状態です

GPGPUを動かすことに重きを置く方はVega64/56/RadeonⅦの中古を購入するかAmazonでRTX3090をポチって下さい

#更新情報

2019/6/21 誤字などを修正、OSについて加筆
https://github.com/RadeonOpenCompute/ROCm

2019/08/06
Polarisの今後のサポートに関して追記
Naviの今後のサポートについて追記

2019/08/30
Thunderbolt3によるeGPUについてとROCm2.7について
動作要件はここに書いてあるんですが色々書いてあってわかりづらいので自分が理解してる限りを書いておきます。

2019/09/27
流石にPolarisが古くなってきたのでやめたほうが良い旨を追加

2019/10/08
追記などをページの最後に移動、Navi GPUが今後どうなるかなどの私見について記述.

2019/11/27
Support for SLES 15 SP1対応の旨などを追加

2019 12/20
Cent/RHELのv7.7の追加サポートがROCm3.0追加された旨を追加

2020 01/04
分かりづらい表現などの修正を実施.

2020 03/28
Hawaiiの対応について追記

2020 04/6 
GFX8のフォーラムURLを追加

2020/10/28
Naviについて

2020/12/20
ROCm4.0がReleaseされたので全体的に古くなってる部分を追記

2021/03/21
誤字の修正
Ubuntu20対応について

2021/11/01
この記事の更新終了のお知らせと近況について追記

#現在の状況について

※お知らせ
この記事にちょくちょくROCｍのバージョン周りについて追記してましたがそろそろ負えなくなったのでこの記事は一旦アーカイブとします、


[ROCmv4.5](https://github.com/RadeonOpenCompute/ROCm/tree/f088317e4483b8f75ec55ac3bb040f23e5abd2d4) の動向ですが  [こちらのブログ](https://www.coelacanth-dream.com/posts/2021/10/30/rocm-4_5-release/)が一番すっきりしています。

流石にPolarisことgfx803は厳しくなってきているようです、じわじわRDNA対応も見えては来てますが依然微妙な感じです。

MI25のEOLなど、Vega10もそろそろ終わりの様子です・・・


最近ですがOpenMPオフロードなど[おもしろそう](https://rocmdocs.amd.com/en/latest/Programming_Guides/openmp_support.html)なトピックもあるので触りたい人は触ってみてもいいかもしれません・・・動くGPUを入手できるならですが・・・


##お断り
 また多分この記事は即陳腐化すると思われます。ROCmのリポジトリをみてればわかりますが日々活発な開発が続いており毎月のように最近は新バージョンがリリースされているのでその度に仕様が改善されつづけているからです。

~~特にハードウェア対応はかつてよりじわじわ緩くなっているのは今はダメでも今後動く可能性があります。~~
最近ではVega56.Vega64.RadeonⅦぐらいしかコンシューマーGPUでは完全な動作は期待できない始末でRadeonOpenComputeの名が泣くレベルでハードウェア制限がキツイ状態です。
現在該当GPUの正規品を適正価格で入手するのは難しく、中古や海外輸入しか手立てがなくなっている状況です、Polarisでも動作しますがある程度制限があるので随時Repositoryのissueなどを確認したほうがよいです

###公式ドキュメント
最新情報は以下をご参照ください。
https://rocm-documentation.readthedocs.io/en/latest/

https://rocm.github.io/hardware.html

##OSについて

当たり前ですが基本Linuxです。
当方ではUbuntu16.04&18.04でしか動作させたことはありませんがCentOS等のRPM系ディストリビューションでも動作実績がありinstall方法も公式からドキュメントが出ております。

https://rocm.github.io/ROCmInstall.html#ubuntu-support---installing-from-a-debian-repository

公式でのサポートOSは


    Ubuntu 20.04.1 (5.4 and 5.6-oem) and 18.04.5 (Kernel 5.4)

    CentOS 7.8 (3.10.0-1127) & RHEL 7.9 (3.10.0-1160.6.1.el7) (Using devtoolset-7 runtime support)

    CentOS 8.2 (4.18.0-193.el8) and RHEL 8.2 (4.18.0-193.1.1.el8) (devtoolset is not required)

    SLES 15 SP2

公式リポジトリのREADMEを見ればわかりますが以上の通りです

### Ubuntu20について
5.8カーネルが現在のUbuntu20.04LSTではデフォルトになってると思いますがこのままだと動作しないので
カーネルをダウンバージョンしてからインストール作業をしてください
・参考
https://qiita.com/PythonGakusei/items/a6f44b8ec60f8fc3df7d
##CPU要件

CPUはIntelであれば第4世代以降(Haswell)
AMDであればRyzen以降のCPUが基本になります。

基本的にPCIe 3.0とPCIe atomicsをサポートなCPUであれば動くと言う認識でいいのですが一部微妙な部分があります。

>Some Ivy Bridge-E systems

と公式リポジトリに掲載されておりますが必ずしも動くと言うわけではなく、上記のatomicsとPCIE 3.0にフル対応してる必要があるようです。

またIvy Bridege-EP　Xeon E5 2660v2とASUS px79 MBとGFX803(Radeon ProDuo)にて動作確認をしたところ動かなかったのでEPではダメなのかもしれません。

まあリポジトリにも以下のようにかかれてるのでIvy-Eは動くことはあってもIvy-EPはダメなのかなあ・・みたいな感じがあります
>Intel Xeon E5 v3 or newer CPUs;




##PCIE2.0とGFX900以降のGPUについて

GFX900(Vega10)以降のGPUでもPCIE2.0にも一応対応するようになったようで当方では動作確認はしてませんが動くようです。
ただしGFX803以前ではエラーを吐いて動かないようです

###参考
https://noroue4.hatenablog.com/entry/2019/02/05/234553

ただし公式も

>ROCm 2.5.x should support PCIe 2.0 enabled CPUs such as the AMD Opteron, Phenom, Phenom II, Athlon, Athlon X2, Athlon II and older Intel Xeon and Intel Core Architecture and Pentium CPUs. However, we have done very limited testing on these configurations, since our test farm has been catering to CPUs listed above. This is where we need community support. If you find problems on such setups, please report these issues.

動かしてみないとわからないみたいなことを言ってる節があるので我こそはと言う人は古いマシンにVega56あたりでも刺して見るといいかもしれません。

###eGPUへの対応について

>Thunderbolt 1, 2, and 3 enabled breakout boxes should now be able to work with ROCm. Thunderbolt 1 and 2 are PCIe 2.0 based, and thus are only supported with GPUs that do not require PCIe 3.0 atomics (e.g. Vega 10). However, we have done no testing on this configuration and would need community support due to limited access to this type of equipment.

~~またThunderboltも多分使えるだろうみたいな記述もあるのでモバイルマシンでも動かせるかもしれません。~~
Thunderbolt3で動作確認しました
詳細は後述の項目をご覧ください
~~公式もテストしてないみたいなので自分が人柱になってissueにレポートを送るだけの存在になる覚悟でやる必要がありそうです・・・~~~


#GPUについて
AMDではGPUの型番以外にGCNバージョンでGFX ***でアーキテクチャを分類しています

Hawaii(2013~)をGFX7
Polalis(2016),Fiji(2015~)をGFX8
Vega(2017~)をGFX9
NAVI(2019Q3?~)をGFX10

とアーキテクチャごとに分類してドキュメントでは記述していることがあり、AMD GPUに詳しくない人からすると新種のGPUでも発生しましたか？みたいな感じでたまにわかりづらいです。

https://rocm.github.io/hardware.html
対応GPUリストはここが見やすいのでここを見れば全解決しそうです^^
ただなんかPCIE対応あたりの記述が最新のREADMEと食い違ってるような・・・
##GFX7

####追記
https://github.com/RadeonOpenCompute/ROCm/issues/1006
https://github.com/RadeonOpenCompute/ROCm/issues/871

ROCm2.0あたりでGFX7のsupportは実質打ち切られていたようです、上記issueで議論されています
動作は現行ヴァージョンではあまり期待できないと思います

R9 290X、390Xあたり（Hawaii)のGPUがこれに該当します

ここで重要なのはTongaでは動きません。

>“Tonga” chips, including the following GPUs:

    Radeon R9 285
    Radeon R9 380
    Radeon R9 380X
    FirePro W7100
    FirePro S7150
    FirePro S7100X
    FirePro S7150x2

同じ200番台ですがアーキテクチャが若干違うので動きませんので要注意です。

##GFX8
###GFX803
####Fiji
コンシューマーではR9 FuryX,R9 Fury,R9 Nanoあたりが該当します。
RAMが少ない欠点がありますが動きます。

####Polaris
RX400番代からRX500番代までのミドル〜エントリクラスのGPUです。
例のグラボの通名で知られるRX470のマイニングエディションなど高コスパなGPUが市場に大量にあるので試してみたいなら ~~これがベターです~~  ROCm2.7ぐらいからサポートが切られることになり、動作しない事例も報告されだしたので今後はVega10&20がメインになりそうです.

一応installすれば動きますが万全の動作を期待できるかどうかは怪しいです
お試し用と言った感じでしょう

Tensorflowの動作周りがうまく行ってないらしいです、フォーラムが荒れてます
https://github.com/ROCmSoftwarePlatform/tensorflow-upstream/issues/479
上位アーキテクチャばかりにリソースつぎ込みやがって！みたいな怒りを感じます


##GFX9
ROCmの本領はFP16対応などの観点からVega以降のアーキテクチャで発揮されますので資金力がある人はGFX9以降がおすすめです。
###GFX900
通称Vega10と言われているモノになりますコンシューマーではVega64/56がこれに該当します。


###GFX906
世界初の7nm GPUであるVega20のことです
コンシューマーではRadeonⅦがこれに該当します。

ROCm2.4で性能が改善したのもありTensorflow-rocmではGTX1080Ti~RTX2080程度の性能が出ており、HBM2 16GBとVRAMも豪華かつ元々HPC向けとされていたVega20なのでROCmっぽいことするならこれが最強であることは間違いありません。

###GFX908
ゲーミング向けのRDNAと対をなすCDNAにあたる Instinct MI100もサポートされています（当たり前ですが）



#GFX10
現時点でGFX10は存在せず予告されているNAVIアーキテクチャがこれに該当します。
~~多分対応するものと思われます~~
※2019/8/6に追記 ROCm2.6ではまだサポートされず今後も未定
まあGPGPU向けのアーキテクチャではなくゲーム向けっぽいので素直にVegaを使ったほうがよいと思われる。

#APU(Raven Ridge)について
RyzenU,RyzenGなどに搭載されているAPUについては事情が入り組んでいます。

##現状
ROCmのインストール自体はできますがHIP-lang(CUDAエミュレーションなやつです）が動かずOpenCLしか動かない現状があるのでAPUのみでROCmの本領を発揮するのが厳しい現状がありますのでAPUで深層学習の類をするならばPlaidMLやMiOpen-OpenCLなどOpenCLなバックエンドを使ってくれるプラットフォームを用意する必要がありそうです。

##これから
次にリリースされそうなROCm2.6でVegaM(主にIntel Gシリーズに搭載されているやつです）をサポートするみたいな話があるらしいので今後どこかのヴァージョンでAPUに対応してくれたりすると嬉しいですね。

##古い世代のAPUについて

>AMD "Carrizo" and "Bristol Ridge" APUs are enabled to run OpenCL, but do not yet support HCC, HIP, or our libraries built on top of these compilers and runtimes.

多分HIPなどは動きません・・・諦めてください
これもOpenCLは動くみたいですが。。。。

#Thunderbolt3接続によるeGPU(ノートパソコン接続）について

公式では動作未確認の未サポート（動くかも知れないがわからない）状態でしたが一部条件下で動作を確認しました


>>Not supported or limited support under ROCm
Limited support
ROCm 2.7.x should support PCIe 2.0 enabled CPUs such as the AMD Opteron, Phenom, Phenom II, Athlon, Athlon X2, Athlon II and older Intel Xeon and Intel Core Architecture and Pentium CPUs. However, we have done very limited testing on these configurations, since our test farm has been catering to CPUs listed above. This is where we need community support. If you find problems on such setups, please report these issues.
Thunderbolt 1, 2, and 3 enabled breakout boxes should now be able to work with ROCm. Thunderbolt 1 and 2 are PCIe 2.0 based, and thus are only supported with GPUs that do not require PCIe 3.0 atomics (e.g. Vega 10). However, we have done no testing on this configuration and would need community support due to limited access to this type of equipment.



先日DynaBookU63/DでGPU BoxにThunderbolt3で接続したところtensorflow-rocmの動作を確認しました。
ただしコレには制約が有り、Polaris（RX470)では動作せずVega10（Vega56）でのみで動作しました。
一応eGPUでもROCmが動作することが確認できたことになります。
ちなみに動作したBoxはAKiTiO Nodeでした。
アマゾンで34,000円ぐらいで入手可能です。


#ROCm2.7について

基本的にはマイナーチェンジです、最近RCCLがapt install rcclでインストールできるようになりました。
 rocRandやrocm-smiの機能強化など付随アプリの改善がメインと思われます
ただしRX470や580などPolarisなボードでapt upgradeでアップグレードした際にTensorflow-ROCｍで動作しなくなるなどの（した例もあり）事例が報告されているのでROCｍ2.6のほうが無難かもしれません


#ROCm2.9について
実は今までサポートされてなかったらしいのですが今回でubuntu 18.04.3をサポートするそうです。
普通に動いていたので意識していませんでした…
2.8は非常に小さいヴァージョンアップだったので特筆すべきことはなさそうです

また今までコンテナ技術への対応がDockerのみだったみたいなんですがSingularityコンテナに対応したみたいです。
未検証ですが 
>ROCm 2.9 adds support for Singularity container version 2.5.2.

とあるのでHPCコンテナ技術への対応を見るにスパコン参入への本気度が少々伺えます。


他にAMD Radeon Augmentation Library (RALI)なるものが追加されたようです。
どういうものかはよくわかってないのですがOpenVXのAMD実装版みたいなやつであるMIVisionX、そのHIP実装がサポートされたと言ったところなのでしょうか。　



#まとめ

RyzenとRadeonⅦを買ってUbuntuを入れればハズレはありません買いましょう



#追記1　Polarisアーキテクチャの今後のサポートについて
ROCm2.6のMIOpenでは最後のPolaris(RX500/RX400)GFX803の正式サポートリリースになるようです、つまり今後RX480-RX590
なGPUで深層学習などを行う場合、新機能などが完全に動作しない可能性があります。
現時点でROCmで推奨出来るGPUは実質Vega10とVega20だけと言うことになります


#追記2　GFX1010、Naviについて

https://github.com/RadeonOpenCompute/ROCm/issues/833

2019年10月7日現在でもNaviはGCNアーキテクチャからRDNAアーキテクチャに変化したしたものもあってどうやらすぐにはサポートされないようです。
~~OpenClでも動作が怪しいそうなのでGPGPU用途にはかなり不向きなようです。~~
※マイニングではそれなりに高速という報告がありました。
サポートされたとしてもFP32性能が特段高いわけでもないので素直にVega10&20を買ったほうがいいです。

これは私見ですが、あまりAMDはNaviのROCｍ対応を真面目にする気がないのではないかと思われます
https://www.phoronix.com/scan.php?page=news_item&px=Radeon-ROCm-2.9-Released

>Notably absent is no Navi support with ROCm 2.9. AMD has remained quite about if/when they intend to support the current Navi graphics processors with ROCm. With the upcoming "Arcturus" GPU being Vega derived and appearing to be their next compute accelerator, it appears they aren't in a rush for supporting Navi.

　ここにも書かれていますが次期アーキテクチャのArcturusに対応するのを急いでるのに対してNaviは発売されてからそれなりに時間が経っておりいくつかヴァージョンアップをしているのにも関わらず未だにROCmのサポートに組み込まれていません。
仮に対応したとしても実際パフォーマンスや安定性を考えると即使い物になるとは考えづらいです。
##なぜNaviはROCmで冷遇気味なのか
　その理由の一つとしてはNaviはHPC向けではなくゲーミング主体で開発されたGPUの為深層学習などの用途で使われることを想定していないので開発リソースが振り向けられて居ないことが理由であると思われます。

　ArcturusはNext VegaというべきHPC向けのアーキテクチャになる見込みで今後AMDはゲーミング向けとGPGPU向けでアーキテクチャを区別して開発していく方向を取ったと考えるのが無難であると思います。

ゲーミング向けGPUはどうなるのかと言うと今後はNaviのアーキテクチャ（RDNA)を拡張したものをラインアップしていくと言うのが大筋の見方になっています‥VegaではHBM2など広帯域な高速VRAMを搭載していましたが高コストと言わざる得ませんでしたがNaviではGDDR6などの安価なVRAMに切り替えることで高コストパフォーマンスなゲーミングGPUを実現することができます、しかしこれはGPGPUユーザーからすると必ずしも福音とは言い難くゲーミングGPUとして安く最適な計算資源を購入できなくなる可能性があるということです。
ただこうなるとNVIDIAのTesla同様にGPGPU向けカードはWS/Serverのみと言った方向性を取る可能性もあり今後のAMDのラインナップ次第ではROCｍの魅力であった安価な計算資源と言う点がなくなってしまうと考えられわざわざ使う理由が今後薄れてしまうかもしれません。

1ユーザーのわがままではありますがAMDの皆さんはこれについてしっかり考えてほしいです‥