理系大学院生の勉強、研究、日常etc...

私立薬学部卒業、国立の大学院生。バイオ系(?)。機械学習。Python。

NVIDIA,CUDAをインストールしてGROMACSをGPU上で動かす

環境 Linux:ubuntu22.04 実行は2023年6月。 NVIDIA,CUDAをインストールしてGROMAGSをGPU上で動かす

を目的とした記事です。

初心者向け解説追加&トラブル解決向けですので 基本はリンク先の記事通りに従えばうまく行きます。

NVIDIA, CUDAのインストールだけではトラブルは起きないと思いますが、GROMACSのダウンロードしたバージョンによってはGPUとしてCUDAを認識しなかったり、そもそもCMAKEできなかったりします。GROMACSのCMAKEがうまくいかなかったとしてもNVIDIA、CUDAのインストールからやり直す必要はないです。多分。

NVIDIA

だいたいは

qiita.com

↑ここに書いてある手順で大丈夫です。

自分がインストールした時のトラブルを中心に解説します。

* インストール済みNVIDIA,CUDAを確認

Linuxのターミナルを開いて

sudo gedit /etc/modprobe.d/blacklist-nouveau.conf

と打つと、blacklist-nouveau.confというファイルが強制オープンされるので

blacklist nouveau
options nouveau modeset=0

と入力して保存してください。

sudo update-initramfs -u

これでNouveauが無効化されます。 ここまでの手順は間違えて別のバージョンのNVIDIAをインストールしちゃっても繰り返す必要はないです。心配ならその都度、sudo update-initramfs -uをターミナルに打ってください。

dpkg -l | grep nvidia
dpkg -l | grep cuda

現在、インストール済みのnvidiaとcudaのバージョン情報をターミナルに出力させるコマンド。

何か出力された場合は、全てアンインストールしてください。

sudo apt-get --purge remove nvidia-XXX
sudo apt-get --purge remove cuda-XXX

XXXの部分にはdpkg -l | grep nvidiadpkg -l | grep cudaで出力されたバージョン情報を入れてください。環境によっては数字だけを入れてもアンインストールされないかもしれません。

libnvidia-XXX

↑こういう感じで出力されます。XXXの部分をコピペしてください。

sudo apt-get --purge remove nvidia-*
sudo apt-get --purge remove cuda-*

また、全て消すのに↑のコードを使っても構いませんが、環境によっては消えないと思います。 私はうまく消せていませんでした。

全てのnvidia,cudaをremoveできたか確認するためにもう一度

dpkg -l | grep nvidia
dpkg -l | grep cuda

を打って何も出なかったら、次に進んでください。

* Linuxに入れる推奨NVIDIAドライバを確認
ubuntu-drivers devices

いくつか出力されると思いますが、私の環境で470ではダメでしたので今回は525を選択。

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-driver-525 -y
sudo apt upgrade

そして再起動。

sudo reboot

再起動後、デスクトップの解像度が著しく落ちる時がありますが放置して問題ありません。見づらいですが次に進みましょう。

nvidia-smi

と打って、GPUの使用状況が出てきたら成功です。

それではcudaのインストールに進んでください。

CUDA

qiita.com

CUDAのインストールもここに書いてある手順で大体問題ありません。ubuntuのバージョンで使うコードが異なりますのでよく確認してからコピペしてください。

自分のLinuxはubuntu22.04であったので ubuntu22.04用のコードをコピペ。 リンク先に18.4と20.4用のコードがあります。

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.0.0/local_installers/cuda-repo-ubuntu2204-12-0-local_12.0.0-525.60.13-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2204-12-0-local_12.0.0-525.60.13-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2204-12-0-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update

自分がインストールした時のcudaバージョンは、11.5です。

sudo apt-get -y install cuda-11.5

Qiitaでバージョン指定する場合のインストールコードで cuda-11-2と書いてありますがハイフン"-"ではなくドット"."に置き換えてください。 ハイフンはエラーになります。

vi ~/.bashrcと打って

export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"

パス↑を入力してください。

nvcc -V でバージョンが確認できますが、私の場合はnvcc -V を打つと

sudo apt install nvidia-cuda-toolkit

これを入力するようターミナルに要求されたので打ちました。 こうしてnvcc -V によりバージョンが確認できるようになりました。

sudo apt install nvidia-cuda-toolkitでエラーが起きる場合があるかもしれません。それはCUDAのバージョンとNVIDIAのバージョンとの間で起きている依存関係のエラーで起きています。解決に苦労しました。

NVIDIAとの依存関係のエラー

解決策として;

  • 何が入っているか確認して不要なものを取り除きもう一度別のバージョンを入れる
dpkg -l | grep cuda

でバージョンを確認して

sudo apt-get --purge remove cuda-XXX

で取り除いてください。XXXは不要なバージョン。NVIDIAをインストールした時に自動的にCUDAのAPIがインストールされてしまうようです。過去にNVIDIAをインストールした時の情報が残っているかも。エラーが起きないようでしたらそのままにしてください。 この辺は詳しい人いたらコメントで教えてください…

sudo apt-get -y install cuda-11.5を打つ前にsudo apt-get -y install cudaを打ってしまうと最新版のcudaがインストールされてしまいます。そのあとsudo apt-get -y install cuda-11.5を打っても最新版が認識されてしまうのです。これはdpkg -l | grep cudaで複数のバージョンが入っていることが確認できます。 複数のバージョンが入っていると、依存関係によるエラーが起きる時があります。

必要であればNVIDIAもアンインストールして再度セットし直して良いかもしれませんが大変です。

GROMACS

確かにbrew install gromacs でもインストールはできるんですが、そっちはCPU上で動きます。GPU上でGROMACSを動かすには以下の手順に従ってください。

brewでインストールしたGROMACSはアンインストールしました。 nvidia-sminvcc -V この2つのコマンドが問題なく使えていればGROMACSのインストールを開始してOKです。 エラーが出た場合、再起動。再起動しても治らなかったらこのページの最初からやり直してください。再起動のコマンドはsudo rebootです。

英語ですが。参考にしたページ↓

https://bioinformaticsreview.com/20201111/installing-gromacs-on-ubuntu-with-cuda-gpu-support/

まずは任意のバージョンのGROMACSのzipファイルをダウンロードしてください。

manual.gromacs.org

↑のページからダウンロードできます。バージョンはうまくcmakeできてCUDAをGPUとして認識してくれるものを最終的に選べれば良いです。面倒ですが試行錯誤。 自分は2023年、2022年、2021年、2020年…と試して結局2020.4になりました。

ダウンロードしたら解凍します。解凍用ディレクトリを作ってzipファイルを移動。

自分の場合は

mkdir opt
cd opt

フォルダoptを作り、zipファイルを移動。mvコマンドを使っても良かったんですが手動で移動しました。コマンドでやる場合はmv XXX.zip ./(移動先フォルダ名)/ という感じでできます。

そして解凍。 解凍したらフォルダXXX(GROMACSのzip解凍したフォルダ)に移動してbuildというフォルダを作ってください。

tar xvzf XXX(GROMACSのzipファイル)
cd XXX
mkdir build
cd build

buildに移動したあと、

CMAKEします。

sudo cmake .. -DGMX_OPENMP=ON -DGMX_MPI=ON -DGMX_GPU=ON -DBUILD_SHARED_LIBS=OFF -DGMX_PREFERS_STATIC_LIBS=ON -DCMAKE_C_FRAG=mpiicc -DGMX_BUILD_OWN_FFTW=ON -DREGRESSIONTEST_DOWNLOAD=ON -DGMX_QMMM_PROGRAM=NONE -DGMXAPI=OFF -DGMX_EXTERNAL_BLAS=OFF -DGMX_EXTERNAL_LAPACK=OFF

↑スクロールが大変で見づらいと思うので同じものを下に貼ります。ターミナルに打つときは↑のものをコピペしてくだい。

sudo cmake .. -DGMX_OPENMP=ON -DGMX_MPI=ON -DGMX_GPU=ON

-DBUILD_SHARED_LIBS=OFF -DGMX_PREFERS_STATIC_LIBS=ON

-DCMAKE_C_FRAG=mpiicc -DGMX_BUILD_OWN_FFTW=ON

-DREGRESSIONTEST_DOWNLOAD=ON -DGMX_QMMM_PROGRAM=NONE

-DGMXAPI=OFF -DGMX_EXTERNAL_BLAS=OFF

-DGMX_EXTERNAL_LAPACK=OFF

-DGMX_GPU=ONまたは-DGMX_GPU=CUDAとなるかはGROMACSのバージョン次第です。2020年のは-DGMX_GPU=ONです。多分2021〜22年が境界線で-DGMX_GPU=CUDAじゃないとエラーが起きます。エラー文に従ってください。

正常に完了したら次に進んでください。私の環境では完了までに時間がかかりました。 sudoを打たないとエラーになる可能性があります。

regressionファイルは自分でダウンロード、用意しても良いですが、面倒なので

-DREGRESSIONTEST_DOWNLOAD=ON としました

sudo cmake .. 以降のコマンドは実行環境に合わせてカスタマイズしてください。他のGROMACSのインストールサイトを色々見ましたがそのままコピぺしてうまくいかなかったら適宜コマンドを書き換えたり削除したりしてやり直してください。やり直すときはbuildファイルを削除し、作り直してcmakeを始めてください。

make check

いくつかエラーが起きるかもしれませんが次に進んで問題ありません。

sudo make install 

sudo を抜くとエラーになる時があるかも。 インストールが何度も途中で止まってしまうエラーが起きたら別のバージョンのGROMACSを再度ダウンロードするところから始めた方が良いかもしれません。自分の場合、2023バージョンのGROMACSは10%前後で止まり、全然make installできず…

source /usr/local/gromacs/bin/GMXRC

このあと、

gmx --version
gmx _mpi --version

gmxまたはgmx_mpiのどちらかのコマンドでバージョンを確認してください。 GPUのところにCUDAと表示されていたら成功です。 GPU のところがenabledになっていたらGPUが認識されていません。 面倒ですが、make installしたGROMACSのデータを消して別のGROMACSのzipをダウンロードし、最初からやり直してください。

GROMACSのダウンロードからやり直す場合

GROMACSのデータの消し方ですが、解凍したファイルを全削除するだけではダメです。

cd /usr/local
sudo mv -r gromacs

localディレクトリに存在するgromacsというフォルダごと消してください。手動ではできませんでしたのでコマンドで無理やりです… 実行環境によっては別のディレクトリにgromacsというフォルダができる可能性もあります。

ここまでやってください。そうしないと新しいGROMACSを入れたハズなのにgmx pdb2gmx --versionで見ると消したはずのバージョンが認識されてしまっている!なんて事態が起きます。 うまく消せていなかった場合はgmx pdb2gmx --versionでダウンロードしたものとは別のバージョンが表示されるので確認してください。

他のトラブルについて

もしここに書いていないトラブルが起きたら?

  • 詳しそうな 他の人に聞いてみましょう。

  • chatGPTに聞いてみましょう