AMD系インスタンスにNvidiA HPC SDKを入れて色々やってみる話①【導入と動作確認編】
はじめに
突然ですが皆さん、Fortranはご存じでしょうか!理数系の出身・専攻中の方なら名前ぐらいは知っている方も多いかもしれません。筆者は理数系専攻でしたが、当時のプログラミングはせいぜいMATLABで関数組み合わせて数値シミュレーションを行える程度のものでしたので、FortranもMATLABの使いにくい版類似版程度の認識でした。最近お客様の問い合わせから、Fortranに興味を持ったので、実行環境を整備することにしました。
また、Fortranと直接の関係はないのですが、今回はFortranやCのコードを比較的簡単な改修で並列処理化することを目的としたOpenACCも合わせて導入してみました。通常、既存のコードをCUDAやOpenCLで並列処理化するのは、程度によりますがかなり手間のかかる改修となります。一方、OpenACCを使えば、並列処理化したい箇所に少し構文を挿入するだけで簡単に並列処理演算が行えるようになります。簡単に行えるどころか、限定的な局面ではパフォーマンス面でCUDAを上回ったという報告があるくらい、とんでもないポテンシャルを秘めた子なので、この機に導入してみましょう!
今回の記事では、AMD系のdlインスタンス(amd1dl, amd2dl, amd3dl、詳しくは公式サイトを参考にしてください)にFortranのコードをOpenACCで並列化できるような環境を構築します。今後週一(長くとも隔週を目指して・・・)ペースで順次Fortranの動作確認とOpenACCの簡単な解説を行っていきたいと思います。
前提
この記事は下記の条件を満たした方を対象としております。
- HGAでインスタンスを作成済であること(インスタンスタイプはamd1dl, amd2dl, amd3dlのいずれか)
- インスタンスにログイン可能であること(方法, VSCodeでの接続も推奨します)
環境構築:Nvidia HPC SDKの導入
FortranとOpenACCの導入は簡単です。インスタンスにNvidia HPC SDKを導入すれば完了です。最後の方にいわゆるパスを通すという作業が控えていますが、こちらも解説通りにやれば問題ありませんのでご安心くださいね。
まずはNvidia HPC SDKの公式サイトにアクセスしましょう。リンク先ページの下の方に「Download」というボタンがあるのでクリックします(下図)。

クリックするとダウンロードページに遷移します。下図を参考に
- 「I accept the license agreement」(利用規約に同意する)にチェックを入れる
- 下図を参考に「Bundled with the newest plus two previous CUDA versions」セクションの「Linux x86_64 DEB」をクリックします。要は、必要のためCUDAと一緒にインストールするが、最新版のCUDAでトラブったとき古いCUDAにスイッチできるように古いCUDAも一緒にインストールしちゃおうということです。また、「DEB」というのは「Debian」というOS(Linux ディストリビューション)の一種で、HGAインスタンスに使われているOSはUbuntuというDebianの派生形の(様な)OSなのでこれに該当します。
- 2.の操作を行うとインストール用のコマンドが表示されます。コピペで良いのですが、改行を示す「\」がコピペ時にちゃんと扱われない場合があるので、下記に実行すべきコマンド群を列挙します(2020/12/18有効版です)。
wget https://developer.download.nvidia.com/hpc-sdk/20.11/nvhpc-20-11_20.11_amd64.deb
wget https://developer.download.nvidia.com/hpc-sdk/20.11/nvhpc-2020_20.11_amd64.deb
wget https://developer.download.nvidia.com/hpc-sdk/20.11/nvhpc-20-11-cuda-multi_20.11_amd64.deb
sudo apt-get install ./nvhpc-20-11_20.11_amd64.deb ./nvhpc-2020_20.11_amd64.deb ./nvhpc-20-11-cuda-multi_20.11_amd64.deb
上記コマンドを順番に実行していくのが確実です。すべてのコマンドが実行し終わるまでに大体30分程度かかります。気長に待ちましょう。

上記のコマンドが全て実行出来たらインストール完了です!
”パスを通す”
と、言いたいところなのですが、最後に一つだけやらなければならない作業があります。それはパスを通すという作業です。この作業はインストールしたツールをどのディレクトリ内からでも実行できるようにするために行います。例えば、インスタンスへのログイン時は、デフォルトだとホームディレクトリというディレクトリにいますが、そこからインストールしたHPC SDKのコマンドを実行しようとすると
/opt/nvidia/hpc_sdk/Linux_x86_64/20.11/compilers/bin/nvfortran [コード].f90
という冗談みたいなコマンドを実行する必要があります。あまり深いことは考えずターミナルで
export PATH="$PATH:/opt/nvidia/hpc_sdk/Linux_x86_64/20.11/compilers/bin"
というコマンドを実行すれば完了です。動作確認としてターミナルに
nvfortran --version
と入力したときに下図のような表示が出れば成功です。

ただ、上記のパスの通し方だと、インスタンスからログアウトして再ログインする際にリセットされてしまいます。そこで、インスタンスにログイン時に自動的にパスを通してくれるようにする必要があります。これはホームディレクトリ内にある.bashrcというファイルを編集することで可能になります。これはちょっと難しい処理なのですが、Linux系のOS(ディストリビューション)に触れているとほぼ必ずと言っていいほどやることになる処理となるので、今のうちに経験してみましょう!なお、VSCodeからインスタンスに接続していることを前提としております。最初にホームディレクトリに移動してVSCodeで.bashrcを開きます:
cd
code .bashrc
すると、下図のようなファイルが出るので、一番下に以下を貼り付けます。
# Nvidia HPC SDKへの実行パスを通す
export PATH="$PATH:/opt/nvidia/hpc_sdk/Linux_x86_64/20.11/compilers/bin"
「#」はコメントを任意に書くために用いただけでマストではありません。

追記が完了したら、以下のコマンドを実行して.bashrcをロードしましょう:
source .bashrc
これにて完了です!.bashrcがとても奥が深いファイルの一つなので、少なくともその点は意識しておくことをおすすめします。
それでは、今回はこれにて終了です。次回は、実際に筆者と一緒にFortranのコードを書いて実行してみましょう!他にもOpenACCで並列化したりと、とにかく色々やってみたいですね。
次回もお楽しみに!
[HGAoffcial]
[dot]
[/dot]