WindowsのWSLCでAmberTools26をソースビルドする―condaを使わずAntechamberを実行

AmberToolsのAntechamberをWindowsから使いたいとき、condaで導入する以外に、公式ソースを自分でビルドする方法があります。本記事では、WSLCでUbuntuのコンテナイメージを作り、PowerShellからAntechamberを実行します。condaコマンド、conda系の配布リポジトリ、Docker Desktopは使いません。

ソースからのビルドにコンテナは必須ではありません。WSL上へ直接導入する方法は、姉妹記事で紹介します。

WSLのUbuntuでAmberTools26をソースビルドする―condaを使わずAntechamberを実行
WSLのUbuntu上でAmberToolsをソースビルドし、ホーム配下へ導入します。condaを使わず、依存パッケージの導入からAntechamberとparmchk2の使用例まで紹介します。
スポンサーリンク

この手順で使うものと利用条件

依存パッケージはUbuntuの公式パッケージから、AmberToolsは公式配布のソースから導入します。conda/Anacondaの配布リポジトリとDocker Desktopを使わず、それらの利用条件の確認対象を減らす構成です。

本記事の構成はAntechamber、電荷計算に使うSQM、パラメータファイルを作るparmchk2を中心にしたものです。

スポンサーリンク

作業フォルダーと公式ソースの準備

前提条件

WSLCの導入が済み、WindowsのPowerShellからwslcを実行できることを前提にします。以下のコマンドはPowerShellで実行してください。Dockerfile内の命令だけはコンテナ内のLinux向けです。

本手順の実行確認に使った環境はWindows 11、WSLC 3.0.5.0で、ベースイメージはUbuntu 26.04です。作成されるイメージは約5.74 GBあります。ビルドキャッシュやソースの保存領域も必要なので、それ以上の空き容量を確保してください。ビルドにはインターネット接続も必要です。

ホームフォルダーから作業を始める

最初にPowerShellの作業場所を、自分のホームフォルダーに移します。次の~はホームフォルダーを表します。その後は相対パスで作業します。

Set-Location ~
New-Item -ItemType Directory -Force -Path .\ambertools
Set-Location .\ambertools
New-Item -ItemType Directory -Force -Path .\sources, .\calculations

以降、ビルドが終わるまで、このambertoolsフォルダーで作業してください。

AmberTools26の公式ソースを入手する

Amberの公式配布ページを開き、「How to obtain AmberTools26」の「Option 2: Getting source code in tar format」からソースを取得します。フォームに氏名・所属などを入力してダウンロードしてください。

ここで使うのはAmberTools26のソースです。バイナリ配布のOption 1や、別製品のAmber26/pmemd26ではありません。

ダウンロードしたambertools26.tar.bz2を、先ほど作ったambertoolsフォルダー内のsourcesへ保存します。本記事では26を例にします。別バージョンを使う場合は、アーカイブ名・展開先名・イメージタグの26を取得した版に合わせて変更してください。ハッシュ確認は行いません。展開先名や必要な依存関係、ビルド設定が変わる場合は公式案内に合わせて調整します。

スポンサーリンク

Dockerfileを作成する

ambertoolsフォルダーの直下に、次の内容をDockerfileという名前で保存します。末尾に.txtが付かないようにしてください。

FROM ubuntu:26.04

ARG BUILD_JOBS=2
ENV DEBIAN_FRONTEND=noninteractive LANG=C.UTF-8

RUN apt-get update && apt-get install -y --no-install-recommends \
      build-essential gfortran cmake flex bison patch tcsh \
      python3 python-is-python3 perl bc ca-certificates \
      libopenblas-dev liblapack-dev libarpack2-dev \
      libnetcdf-dev libnetcdff-dev libfftw3-dev \
      zlib1g-dev libbz2-dev libreadline-dev \
    && mkdir -p /opt/amber-build-info \
    && dpkg-query -W > /opt/amber-build-info/packages.tsv \
    && rm -rf /var/lib/apt/lists/*

COPY sources/ambertools26.tar.bz2 /opt/sources/ambertools.tar.bz2
RUN tar -xjf /opt/sources/ambertools.tar.bz2 -C /opt

RUN cmake -S /opt/ambertools26_src -B /opt/amber-build \
      -DCMAKE_INSTALL_PREFIX=/opt/ambertools \
      -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
      -DCOMPILER=GNU \
      -DDOWNLOAD_MINICONDA=FALSE \
      -DPYTHON_EXECUTABLE=/usr/bin/python3 \
      -DBUILD_PYTHON=FALSE -DBUILD_PERL=FALSE -DBUILD_GUI=FALSE \
      -DBUILD_QUICK=FALSE \
      -DMPI=FALSE -DCUDA=FALSE -DOPENMP=FALSE \
      -DINSTALL_TESTS=FALSE -DCHECK_UPDATES=FALSE \
    && cmake --build /opt/amber-build --parallel "${BUILD_JOBS}" \
    && cmake --install /opt/amber-build \
    && cp /opt/amber-build/CMakeCache.txt /opt/amber-build-info/ \
    && test -x /opt/ambertools/bin/antechamber \
    && test -x /opt/ambertools/bin/sqm \
    && test -x /opt/ambertools/bin/parmchk2

ENV AMBERHOME=/opt/ambertools
ENV PATH="/opt/ambertools/bin:${PATH}"
ENV OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1
WORKDIR /work
CMD ["/bin/bash"]

インストール先は版に依存しない/opt/ambertoolsです。

condaを使わないための設定

配布ソース付属のbuild/run_cmakeはDOWNLOAD_MINICONDA=TRUEを指定するため、そのまま実行しません。このDockerfileはCMakeを直接呼び出し、DOWNLOAD_MINICONDA=FALSEを指定します。

Python自体はUbuntuのpython3を使います。BUILD_PYTHON=FALSEはAmberToolsのPythonプログラムをビルド対象から外す設定です。

CMAKE_POLICY_VERSION_MINIMUM=3.5は新しいCMakeで古いCMakeListsを処理するための互換性指定です。

.dockerignoreを作る

同じフォルダーに、次の内容で.dockerignoreを保存します。計算結果などをビルドコンテキストに含めず、Dockerfileとソースアーカイブだけを渡します。

*
!Dockerfile
!sources/
!sources/ambertools*.tar.bz2

この時点で、作業フォルダーは次の構成になります。

ambertools/
  Dockerfile
  .dockerignore
  sources/
    ambertools26.tar.bz2
  calculations/
スポンサーリンク

WSLCでイメージをビルドする

PowerShellで、ambertoolsフォルダーを作業場所にしたまま実行します。

wslc build --progress plain --build-arg BUILD_JOBS=2 -t ambertools:26 .
if ($LASTEXITCODE -ne 0) { throw 'AmberTools build failed' }

ambertools:26は作成するイメージの名前です。最後の.は現在のフォルダーをビルドコンテキストとして渡す指定です。

ビルドの並列数はBUILD_JOBS=2としています。メモリ不足になる場合は1へ減らしてください。並列数を増やす場合は、同じコマンドの値を変更します。

このDockerfileは単一ステージ構成です。ソースアーカイブ、展開したソース、コンパイラ、ビルド途中のファイルがイメージ内に残ります。イメージを小さくするためのマルチステージ化は扱いません。

スポンサーリンク

PowerShellからAntechamberを使う

メタンを例に、AM1-BCC法による部分電荷の計算と、GAFF2という力場の原子タイプの割り当てを行います。続けてparmchk2で、GAFF2本体で不足するパラメータを補うためのfrcmodファイルを作ります。

計算フォルダーと入力を用意する

ambertoolsフォルダーで、次を実行します。計算ごとに日時付きフォルダーを作り、Windowsのそのフォルダーをコンテナへ共有します。

$run = New-Item -ItemType Directory -Path ('.\calculations\methane-' + (Get-Date -Format 'yyyyMMdd-HHmmss-fff'))
$runPath = (Resolve-Path -LiteralPath $run.FullName).Path
@'
@<TRIPOS>MOLECULE
methane
5 4 1 0 0
SMALL
USER_CHARGES

@<TRIPOS>ATOM
1 C1 0.000000 0.000000 0.000000 C.3 1 MET 0.000000
2 H1 0.629312 0.629312 0.629312 H 1 MET 0.000000
3 H2 0.629312 -0.629312 -0.629312 H 1 MET 0.000000
4 H3 -0.629312 0.629312 -0.629312 H 1 MET 0.000000
5 H4 -0.629312 -0.629312 0.629312 H 1 MET 0.000000
@<TRIPOS>BOND
1 1 2 1
2 1 3 1
3 1 4 1
4 1 5 1
@<TRIPOS>SUBSTRUCTURE
1 MET 1
'@ | Set-Content -Encoding ascii -LiteralPath (Join-Path $runPath 'methane.mol2')

通常のファイル操作は相対パスで行い、コンテナへ共有するフォルダーだけ絶対パスを取得しています。

AM1-BCC電荷とGAFF2原子タイプを求める

同じPowerShellウィンドウで実行します。複数行に分けるためのバッククォート(行末の記号)の後ろに空白を入れないでください。

wslc run --rm --pull never --cpus 1 --memory 2G `
  --volume "${runPath}:/work" --workdir /work `
  ambertools:26 sh -c 'antechamber -i methane.mol2 -fi mol2 -o methane-gaff2.mol2 -fo mol2 -c bcc -nc 0 -m 1 -at gaff2 -pf n -s 2 > antechamber.log 2>&1'
if ($LASTEXITCODE -ne 0) { throw "Antechamber failed: $runPath" }

主なオプションは次のとおりです。

  • -i methane.mol2 -fi mol2:MOL2形式の入力を読み込みます。
  • -o methane-gaff2.mol2 -fo mol2:結果をMOL2形式で出力します。
  • -c bcc:AM1-BCC電荷を計算します。内部でSQMなどが呼ばれます。
  • -nc 0:分子の正味電荷を0と指定します。
  • -m 1:スピン多重度を1と指定します。
  • -at gaff2:GAFF2の原子タイプを割り当てます。
  • -pf n:中間ファイルを残します。

別の分子を扱う場合は、入力ファイルだけでなく正味電荷とスピン多重度も変更してください。

parmchk2でfrcmodファイルを作る

wslc run --rm --pull never --cpus 1 --memory 2G `
  --volume "${runPath}:/work" --workdir /work `
  ambertools:26 sh -c 'parmchk2 -i methane-gaff2.mol2 -f mol2 -o methane.frcmod -s gaff2 > parmchk2.log 2>&1'
if ($LASTEXITCODE -ne 0) { throw "parmchk2 failed: $runPath" }

出力先はWindows側のcalculations\methane-日時フォルダーです。主な出力はmethane-gaff2.mol2、methane.frcmod、antechamber.log、parmchk2.logです。SQMの出力であるsqm.outも同じフォルダーに残ります。

--volumeでWindowsの計算フォルダーをコンテナ内の/workへ共有しています。--rmで実行後のコンテナを削除しても、このフォルダーに書き込んだ入力や計算結果は残ります。Antechamberに渡すファイル名はコンテナ内から見たパスです。

ログのリダイレクトはLinux側のsh -c内で行います。Windows PowerShell 5.1のリダイレクトによって計算ファイルがUTF-16になることを避けるためです。自分で入力を準備する場合も、ASCIIまたはUTF-8 BOMなしで保存してください。

実際の分子に使うときの注意

実行確認時のメタンの計算では、-nc 0を指定しても、出力MOL2の電荷合計は-0.002 eになっています。これはSQMが出力する各原子の電荷の丸めに由来します。計算が終了することと、研究に使う電荷・パラメータが妥当であることは別です。実利用前に電荷合計を確認してください。

また、frcmodの各セクションが空でも、必要なパラメータがGAFF2本体にあれば異常ではありません。ATTNなどの警告が出た場合は、該当パラメータを検討する必要があります。

実行例の--memory 2Gは小分子向けの指定です。分子が大きくなる場合は必要なメモリを確保してください。Antechamberは中間ファイルを作るため、異なる計算を同じフォルダーで同時に実行しないようにします。

スポンサーリンク

参考資料

コメント

タイトルとURLをコピーしました