Google CloudでGROMACSを実行しよう

Nobuhisa Mizue
google-cloud-jp
Published in
14 min readOct 29, 2021

背景

前回は、Google Cloud上で AlphaFold をコンテナとして動かす記事を公開しました。Google Cloud Life Sciences は高い柔軟性があり、大規模なデータと大きなコンピューティングパワーを必要とする処理を、オンデマンドで安価にかつ高速に実行するためのツールです。

前回の記事と同じアプローチで、今回は、GROMACSを実行するための方法を紹介します。

GROMACSは、分子動力学(MD)のためのオープンソースのソフトウェアです。主に研究機関や創薬などの分野で、原子や分子の動きをシミュレーションして分析することができるとても人気のあるツールです。ただ、GROMACSを動かすためにリッチなスペックのサーバを使い続けるのはコストがかかります。一度だけGROMACSのコンテナイメージを作成しておけば、あとは、必要な時に瞬時に実行できるようになり、MDの重い処理を高速化し、ムダなコストを削減することもできます。

なお、本記事は完全な操作手順の記録ではなく、一部の手順については省略しています。

Steps

作業は大きく分けると2つのステップからなります。

  1. GROMACS コンテナイメージ作成
  2. GROMACSを実行

それでは、順に見ていきましょう。

GROMACSコンテナイメージ作成

準備

まず、Google CloudのAPIを有効化しておきましょう。

  • Genomics API
  • Google Cloud Life Sciences API
  • Google Container Registry API
  • Compute Engine API

また、GROMACS の 設定ファイル(例えば TPRファイル)が必要です。今回は、GROMACS Benchmark Setのサイトから benchMEM.tpr をダウンロードしておきましょう。

作業用のVMを作成

コンテナイメージを作成するために作業用のGCE VM インスタンスを1つ作成します。64GBメモリを持つVM (e2-standard-16)を一時的に作成します。そのVMにSSHでログインしたら、Dockerをインストールします。

sudo apt-get updatesudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpgecho \
“deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get updatesudo apt-get install docker-ce docker-ce-cli containerd.io

一般ユーザ権限でdockerコマンドを使えるようにしておく

sudo gpasswd -a $(whoami) docker

上記コマンドを実行後、再度SSHログインしなおしましょう。

Dockerfileを作成

以下の内容でDockerfileを作成します。ちなみに、ここでは2021年10月現在のGROMACSの最新バージョンである 2021.3 を指定しています。

FROM ubuntu:18.04
# Copy the contents of the current directory into the container.
ADD . .
# Install Gromacs and its dependencies.
RUN apt -y update \
&& apt install -y wget g++ libxml2-dev openmpi-bin openmpi-doc libopenmpi-dev \
&& wget https://cmake.org/files/v3.21/cmake-3.21.2-linux-x86_64.sh \
&& sh cmake-3.21.2-linux-x86_64.sh --skip-license --prefix=/usr \
&& wget ftp://ftp.gromacs.org/pub/gromacs/gromacs-2021.3.tar.gz \
&& tar xvf gromacs-2021.3.tar.gz \
&& rm gromacs-2021.3.tar.gz \
&& mkdir gromacs-2021.3/build \
&& cd gromacs-2021.3/build \
&& cmake .. -DGMX_BUILD_OWN_FFTW=ON -DCMAKE_CXX_COMPILER=/usr/bin/g++ -DGMX_THREAD_MPI=on \
&& make -j \
&& make install

コンテナイメージを作成

docker build -t gromacs_2021.3 .

コマンドが終了したら、イメージが作成されたことを確認します。

docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE
gromacs_2021.3 latest 8a882c6ccdda 50 seconds ago 951MB
ubuntu 18.04 39a8cfeef173 4 weeks ago 63.1MB

ローカルでdocker コンテナを起動し、GROMACSが正常に動作することを確認します。これはオプショナルなステップなので省略可能です。
例えば、GROMACSのバージョンを確認する場合は、以下のように gmx -version コマンドを実行します。

docker run -it gromacs_2021.3 bashroot@1234567890:/# gromacs-2021.3/build/bin/gmx -version :-) GROMACS — gmx, 2021.3 (-:
GROMACS is written by:
Andrey Alekseenko Emile Apol Rossen Apostolov
Paul Bauer Herman J.C. Berendsen Par Bjelkmar
Christian Blau Viacheslav Bolnykh Kevin Boyd
Aldert van Buuren Rudi van Drunen Anton Feenstra
Gilles Gouaillardet Alan Gray Gerrit Groenhof
Anca Hamuraru Vincent Hindriksen M. Eric Irrgang
Aleksei Iupinov Christoph Junghans Joe Jordan
Dimitrios Karkoulis Peter Kasson Jiri Kraus
Carsten Kutzner Per Larsson Justin A. Lemkul
Viveca Lindahl Magnus Lundborg Erik Marklund
Pascal Merz Pieter Meulenhoff Teemu Murtola
Szilard Pall Sander Pronk Roland Schulz
Michael Shirts Alexey Shvetsov Alfons Sijbers
Peter Tieleman Jon Vincent Teemu Virolainen
Christian Wennberg Maarten Wolf Artem Zhmurov
and the project leaders:
Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel
Copyright © 1991–2000, University of Groningen, The Netherlands.
Copyright © 2001–2019, The GROMACS development team at
Uppsala University, Stockholm University and
the Royal Institute of Technology, Sweden.
check out http://www.gromacs.org for more information.
GROMACS is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation; either version 2.1
of the License, or (at your option) any later version.
GROMACS: gmx, version 2021.3

コンテナイメージにタグをつけて、コンテナレジストリにプッシュします

docker tag gromacs_2021.3 gcr.io/<PROJECT_ID>/gromacs_2021.3:v1gcloud docker --push gcr.io/<PROJECT_ID>/gromacs_2021.3:v1

ここまでで、作業用のVMインスタンスは不要になるので削除してください。
以降の手順は Cloud Shell 上で実行できます。

dsubをインストール

dsubについて詳しくない方は、こちらをご参照ください。dsubは、pipで容易にインストールできます。

pip install dsub

GCSバケットを作成

Google Cloud Storage (GCS)のバケットを作成しておきます。GROMACSの実行ログや入出力データは、このバケットを通して受け渡されます。

gsutil mb gs://<PROJECT_ID>-gromacs

dsubでHello worldを出力する(optional)

dsubが正常に機能することを確認するために、Hellwo Worldを出力してみましょう。これなオプショナルな手順なので省略可能です。

dsub \
--project <PROJECT_ID> \
--zones “us-central1-*” \
--logging gs://<PROJECT_ID>-gromacs/logs \
--command=’echo “Hello World” > “${OUTPUT}”’ \
--output OUTPUT=gs://<PROJECT_ID>-gromacs/hello_world.txt \
--subnetwork default \
--wait

先ほど作成したGCSバケットの下に、hello_world.txtと、logsフォルダーが作成されていることを確認します。

GROMACSを実行

先の手順でダウンロードしておいた benchMEM.tpr ファイルを、GCSバケットの下にアップロードしてください。
これでGROMACSを動かすための準備ができたので、以下のコマンドを実行しましょう。
ちなみに、このコマンドの中にある--commandパラメータを見ればわかると思いますが、cdとcpを実行したあと、gmx mdrunを実行しています。その実行結果をtarコマンドでアーカイブしているだけです。

dsub --project <PROJECT_ID> \
--zones “us-central1-*” \
--logging gs://<PROJECT_ID>-gromacs/logs \
--image=gcr.io/<PROJECT_ID>/gromacs_2021.3:v1 \
--command=’cd /; cp ${INPUT} /benchMEM.tpr; /gromacs-2021.3/build/bin/gmx mdrun -nsteps 50000 -deffnm /benchMEM; tar cvzf $OUTPUT benchMEM.*’ \
--input INPUT=gs://<PROJECT_ID>-gromacs/benchMEM.tpr \
--output OUTPUT=gs://<PROJECT_ID>-gromacs/benchMEM.tar.gz \
--subnetwork default \
--preemptible \
--min-cores=8

このコマンドはジョブIDが表示されてすぐに終わり、ジョブがバックグラウンドで実行されます。 このジョブが完了するまでには 15分程度かかります。
ジョブのステータスを確認するには以下のコマンドを実行してください。

dstat --provider google-v2 --project <PROJECT_ID> --jobs ‘<JOB_ID>’ --status ‘*’ --format json

ジョブのステータスは時間経過とともに以下のように変化します。

VM starting (awaiting worker checkin)

Pulling gcr.io/google.com/cloudsdktool/cloud-sdk:294.0.0-slim

Started running ”user-command”

Success

なお、バックグラウンドジョブはVMを1つ起動しますが、すべての処理が終わったらそのVMは自動的に削除されます。

自動起動されるGCE VMインスタンス
自動起動されるGCE VMインスタンス

ジョブが正常に終了すると、GCSバケットの下は以下のようになっています。

GCSバケットの下のファイル

logsフォルダーの下には、以下のログファイルが生成されているはずです。

gs://<PROJECT_ID>-gromacs/logs/<JOB_ID>-stderr.log
gs://<PROJECT_ID>-gromacs/logs/<JOB_ID>-stdout.log
gs://<PROJECT_ID>-gromacs/logs/<JOB_ID>.log

また、benchMEM.tar.gz ファイルを解凍すると、中には以下のように複数のファイルが含まれていることがわかります。それぞれのファイルのフォーマットについてはこちらを参照してください。

最後に

前回のAlphaFoldの記事と同様に、Google Cloud 上で dsub を使用してMDツールであるGROMACSを実行してみました。 手順は前回とほぼ同じです。一度コンテナイメージさえ作ってしまえば、あとは、GCSバケットの下にデータを置き、dsubでgmx mdrunコマンドを実行するだけです。
Google Cloudを使用すると、膨大なライフサイエンスデータを使った大量のコンピューティング処理を高速に実行し、即座に新たな洞察を得ることができるでしょう。ぜひ一度お試しください。

--

--

Nobuhisa Mizue
google-cloud-jp

Customer Engineer at Google Cloud. All views and opinions are my own.