8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ゲーミングPCで始める量子化学計算

Posted at

結論

  1. ゲーミングPCでも量子化学計算は可能
  2. GPUを使うことで約6倍速で計算できる
  3. Dockerのおかげで環境構築も簡単にできる

環境

Machine1 Machine2
Ubuntu22.04 (WSL2) Ubuntu22.04 (WSL2)
GeForce RTX 2070 super GeForce RTX 4090
VRAM 8GB VRAM 24GB
Intel Core i5 12400F Intel Core i7 9700F
RAM 16GB RAM 16GB
SSD (M.2) SSD (SATA)

 これらにフリーの量子化学計算ソフトのGAMESSをインストールしてベンチマークを実行してみます。有機分子サイズの計算に必要なメモリはGAMESSのデフォルトの8メガワード = 64MBでたいてい事足りますし、ログファイルも<10MBくらいなので、計算速度さえ気にならなければ個人で量子化学計算に挑戦するのは十分可能です。

GAMESSのインストール手順

 GPUを使用するためにDockerコンテナとして配布されているものを使用します。コンパイル不要で下準備が少ないので楽ちんです。おおまかに次の手順で進みます。

  1. WindowsにUbuntuをインストール (WSL2)
  2. Windowsに最新のNVIDIAドライバをインストール
  3. WSL2にDockerをインストール
  4. WSL2にNVIDIA Container Toolkitをインストール
  5. WSL2にNVIDIA GPU Cloud (NGC)からGAMESSコンテナを引っ張ってくる

 NVIDIA Container Toolkitのインストールまではこちらの記事によくまとまってますが、私のような材料屋にはこれでも苦しかったので補足して説明します。

WindowsにUbuntuをインストール (WSL2)

 Docker Desktopを使ってしまえばもっと楽みたいなのですが、どうせ操作はコマンドラインからになるのでWindows Subsystem for Linux 2 (WSL2)を使っていきましょう。

  1. 管理者権限でコマンドプロンプトかPowerShellを起動します。
  2. wsl --list --onlineでインストール可能なLinuxのバージョンを確認します。(Ubuntu22.04とします)
  3. wsl --install -d Ubuntu22.04でUbuntuをインストールします。
  4. コマンドラインの指示に従ってユーザー名やパスワードを設定します。

 この手順はMicrosoftの公式手順を修正したものです。wsl --installでどのバージョンが入るか不明なのは、トラブルシューティングで困りそうなので指定するようにしました。

Windowsに最新のNVIDIAドライバをインストール

 これは簡単ですね。ゲーミングPCを想定しているのでGeForce ExperienceでGame Readyドライバを入れてしまえばいいです。

WSL2にDockerをインストール

 Docker公式に従うならWSL2で次のコマンドを実行します。

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

これをNVIDIAの方の記事では一行で書いてcurl https://get.docker.com | shとされています。「Docker Desktop for Windowsを使え」と警告されますが無視です。
 なお初めてWSL2を使われた方の中にはCould not resolve host: get.docker.comみたいなエラーが出るかもしれません。この場合はこちらの記事に解決策があるので修正して上記コマンドを再実行して下さい。

WSL2にNVIDIA Container Toolkitをインストール

 NVIDIA公式の手順に従います。まずレポジトリとGPG keyを設定するらしいです。

distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
      && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
      && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
            sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
            sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

をWSL2で実行して下さい。そのまま続いて

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

でインストールできます。さらにDockerにNVIDIA Container runtimeを認識されるため?に

sudo nvidia-ctk runtime configure --runtime=docker

を実行らしいです。最後にDockerを再起動します。

sudo service docker restart

 sudo systemctl restart dockerはたぶん使えないです。念のために正常にインストールできていることを確認します。

sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi

 もし

Failed to initialize NVML: GPU access blocked by the operating system
Failed to properly shut down NVML: GPU access blocked by the operating system

みたいなエラーが出てしまったら厄介です。修正されたことになっているバグですが私は出ました。私の場合は不要なはずのCUDA Toolkitをインストールしてみたら解決しましたが、その前に再起動した方が正解だったかもしれません。
 エラーが出ずにGPUの使用状況が出力されたらNVIDIA Container Toolkitのインストールは完了です。

インストール確認でエラーが出てCUDA Toolkitをインストールしてみる場合

 CUDAのバージョン管理が面倒でDockerコンテナを使ってる側面があるのでお勧めはしません。そもそもコンテナイメージ内にあるCUDAを使うはずなのに、なぜこの手順を行ってうまくいったのか分かってません。
 PyTorchやTensorFlowなどを使う見込みが一切なければガイドに従って最新版をインストールします。こちらはネットワーク版のコマンドです。

wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt-get updatesudo apt-get -y install cuda

 PyTorchやTensorFlowのために古いバージョンが必要な場合はアーカイブからバージョンを選択し、そのバージョン用のガイドに従って下さい。ネットワーク版だと最新版と同じコマンドが表示されて不安になるため、ローカル版を選択する方が安心できるでしょう。
 CUDA Toolkitをインストールしたらコマンドプロンプト(ホストのwindows側)から

wsl --shutdown
wsl

でWSL2を再起動し、さらにWSL2で

sudo service docker restart

としてDockerを再起動しておきましょう。
 ここまで試してsudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smiでエラーが出る場合は私にはお手上げなので、各人で頑張って下さい・・・。

WSL2にNVIDIA GPU Cloud (NGC)からGAMESSイメージを引っ張ってくる

 非常に簡単です。NVIDIAのGPU版GAMESS紹介ページを参考に

sudo docker run --gpus all -v $(pwd):/results --rm -it nvcr.io/hpc/gamess:17.09-r2-libcchem

でGPUを利用するGAMESSを実行できるコンテナが起動します。元はnvidia-docker runとなってますが古い方法で非推奨のため修正しました。

GAMESSコンテナ起動のエイリアスの設定

 毎度長いコマンド打つのは嫌だし、そもそも覚えられないのでエイリアス(ショートカットコマンド)を設定します。

echo alias gamess='sudo docker run --gpus all -v $(pwd):/results --rm -it nvcr.io/hpc/gamess:17.09-r2-libcchem' >> ~/.bash_aliases
source ~/.bashrc

 ~/.bash_aliasesに記述することでエイリアスが設定できます。今回はgamessと打てば長いコマンドを打ったのと同じになります。

ベンチマークの実行

結果

 先ほどのNVIDIAのGPU版GAMESS紹介の最下部でHPCサーバ向けCPUとGPUを比較してGPUの効果が示されているので、それらと比べてゲーミングPCの実力がどんなものかを見てみましょう。同じベンチマークを実行するにはWSL2で次のコマンドを実行します。

sudo docker run --gpus all -v $(pwd):/results --rm -it nvcr.io/hpc/gamess:17.09-r2-libcchem
cd /workspace/examples
rungms rimp2-valinomycin.spherical.energy.ccd_cct.inp

 さて紹介ページと私の結果を並べてみます。

Proceccor 2x Intel Xeon E5-2690 v4 1x Tesla P100 1x Tesla V100 1x RTX 2070 super 1x RTX 4090
Time/sec 5072 639 744 890 844
FP64/TFLOPS 4.71 72 0.283 1.294

CPUは2基並列みたいです。また私が試したRTXシリーズは1回ずつしか計算していません。計算時間は必ずしも倍精度の計算速度(FP64)に従うわけではありませんでした。VRAMの速度やCPUとの接続速度などの影響でしょうか?なんにせよCPUより断然速くなるのは確かでした。そもそもGAMESSが遅く、Intel CPUに最適化されたFireflyに変えると10倍速くなるらしいですが。

ベンチマークの中身

 今回計算した内容を簡単に説明しておきましょう。対象とした分子は分子量が約1100のバリノマイシンという抗生物質で、その全エネルギーを計算しています。結合距離や結合角などは予め与えられています。
 構造式だけ与えられた状態から同じように全エネルギーを計算してHOMOやLUMOの情報を得ようとすると、実際には構造最適化と振動解析を先に行う必要があります。構造最適化の手順についてはこちらのサイトによくまとまっています。

結言

 この記事では計算速度と必要な計算資源を確認することで、GAMESSは個人の環境でも実践できることを示したつもりです。全然量子化学計算をやったことがないけど興味はあるという人間にとって、数多あるフリーソフトからどれを選ぶかというのがまず問題です。同様にFireflyやPySCF、psi4などでどなたかが似たような比較記事を書いて下さることを密かに期待しております。

  1. https://www.nvidia.com/ja-jp/data-center/tesla-p100/

  2. https://www.nvidia.com/en-gb/data-center/tesla-v100/

  3. https://www.techpowerup.com/gpu-specs/geforce-rtx-2070-super.c3440

  4. https://www.techpowerup.com/gpu-specs/geforce-rtx-4090.c3889

8
5
0

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
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?